react-modular-datepicker 0.0.2-canary.4 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,201 @@
1
+ import { addMonth as e, composeEventHandlers as t, getCalendars as n, isBackDisabled as r, isForwardDisabled as i, subtractMonth as a } from "./utils.mjs";
2
+ import { useCallback as o, useState as s } from "react";
3
+ import c from "dayjs";
4
+ import l from "dayjs/plugin/isBetween";
5
+ import u from "dayjs/plugin/customParseFormat";
6
+ import d from "dayjs/plugin/localeData";
7
+ c.extend(l), c.extend(u), c.extend(d);
8
+ var f = class {
9
+ date(e) {
10
+ return c(e);
11
+ }
12
+ add(e, t, n) {
13
+ return e.add(t, n);
14
+ }
15
+ subtract(e, t, n) {
16
+ return e.subtract(t, n);
17
+ }
18
+ startOf(e, t) {
19
+ return e.startOf(t);
20
+ }
21
+ endOf(e, t) {
22
+ return e.endOf(t);
23
+ }
24
+ isBefore(e, t, n) {
25
+ return e.isBefore(t, n);
26
+ }
27
+ isAfter(e, t, n) {
28
+ return e.isAfter(t, n);
29
+ }
30
+ isSame(e, t, n) {
31
+ return e.isSame(t, n);
32
+ }
33
+ set(e, t, n) {
34
+ return t === "day" ? e.date(n) : e.set(t, n);
35
+ }
36
+ get(e, t) {
37
+ return t === "day" ? e.date() : e.get(t);
38
+ }
39
+ format(e, t, n) {
40
+ return n ? e.locale(n).format(t) : e.format(t);
41
+ }
42
+ getDaysInMonth(e) {
43
+ return e.daysInMonth();
44
+ }
45
+ toDate(e) {
46
+ return e.toDate();
47
+ }
48
+ diff(e, t, n) {
49
+ return e.diff(t, n);
50
+ }
51
+ getMonths(e) {
52
+ return e ? c().locale(e).localeData().months() : c.localeData().months();
53
+ }
54
+ getWeekdays(e) {
55
+ return e ? c().locale(e).localeData().weekdaysShort().map((e) => e.toUpperCase()) : c.localeData().weekdaysShort().map((e) => e.toUpperCase());
56
+ }
57
+ }, p = new f();
58
+ //#endregion
59
+ //#region src/useDates.tsx
60
+ function m(e) {
61
+ return e !== void 0;
62
+ }
63
+ function h(e, t = 0) {
64
+ return m(e) ? e : t;
65
+ }
66
+ function g(e, { onClick: n, dateObj: r, ...i }) {
67
+ return {
68
+ onClick: t(n, (t) => {
69
+ e(r, t);
70
+ }),
71
+ disabled: !r.selectable,
72
+ "aria-label": r.date.toDateString(),
73
+ "aria-pressed": r.selected,
74
+ role: "button",
75
+ ...i
76
+ };
77
+ }
78
+ function _({ minDate: e, offsetMonth: n, handleOffsetChanged: i, adapter: o }, { onClick: s, offset: c = 1, calendars: l, ...u }) {
79
+ return {
80
+ onClick: t(s, () => {
81
+ i(n - a({
82
+ calendars: l,
83
+ offset: c,
84
+ minDate: e,
85
+ adapter: o
86
+ }));
87
+ }),
88
+ disabled: r({
89
+ calendars: l,
90
+ minDate: e,
91
+ adapter: o
92
+ }),
93
+ "aria-label": `Go back ${c} month${c === 1 ? "" : "s"}`,
94
+ ...u
95
+ };
96
+ }
97
+ function v({ maxDate: n, offsetMonth: r, handleOffsetChanged: a, adapter: o }, { onClick: s, offset: c = 1, calendars: l, ...u }) {
98
+ return {
99
+ onClick: t(s, () => {
100
+ a(r + e({
101
+ calendars: l,
102
+ offset: c,
103
+ maxDate: n,
104
+ adapter: o
105
+ }));
106
+ }),
107
+ disabled: i({
108
+ calendars: l,
109
+ maxDate: n,
110
+ adapter: o
111
+ }),
112
+ "aria-label": `Go forward ${c} month${c === 1 ? "" : "s"}`,
113
+ ...u
114
+ };
115
+ }
116
+ function y({ date: e = /* @__PURE__ */ new Date(), maxDate: r, minDate: i, disabledDates: a, monthsToDisplay: c = 1, firstDayOfWeek: l = 0, showOutsideDays: u = !1, offset: d, onDateSelected: f, onOffsetChanged: y = () => {}, selected: b, modifiers: x, selectionMode: S = "single", adapter: C = p, onChange: w, onMonthChange: T, onYearChange: E }) {
117
+ let [D, O] = s(0), [k, A] = s(void 0), j = h(d, D), M = o((t) => {
118
+ m(d) || O(t), y(t);
119
+ let n = C.toDate(C.add(C.startOf(C.date(e), "month"), t, "month"));
120
+ T?.(n), E?.(n);
121
+ }, [
122
+ d,
123
+ y,
124
+ e,
125
+ C,
126
+ T,
127
+ E
128
+ ]), N = o((e, t) => {
129
+ if (f?.(e, t), w) {
130
+ if (S === "single") w(e.date);
131
+ else if (S === "multiple") {
132
+ let t = Array.isArray(b) ? b : b ? [b] : [];
133
+ t.some((t) => C.isSame(C.date(t), C.date(e.date), "day")) ? w(t.filter((t) => !C.isSame(C.date(t), C.date(e.date), "day"))) : w([...t, e.date]);
134
+ } else if (S === "range") {
135
+ let t = b && typeof b == "object" && !(b instanceof Date) && !Array.isArray(b) ? b : {
136
+ start: void 0,
137
+ end: void 0
138
+ };
139
+ !t.start || t.start && t.end ? w({
140
+ start: e.date,
141
+ end: void 0
142
+ }) : C.isBefore(C.date(e.date), C.date(t.start), "day") ? w({
143
+ start: e.date,
144
+ end: t.start
145
+ }) : w({
146
+ start: t.start,
147
+ end: e.date
148
+ });
149
+ }
150
+ }
151
+ }, [
152
+ f,
153
+ w,
154
+ S,
155
+ b,
156
+ C
157
+ ]);
158
+ return {
159
+ calendars: n({
160
+ date: e,
161
+ selected: b,
162
+ disabledDates: a,
163
+ modifiers: x,
164
+ monthsToDisplay: c,
165
+ minDate: i,
166
+ maxDate: r,
167
+ offset: j,
168
+ firstDayOfWeek: l,
169
+ showOutsideDays: u,
170
+ adapter: C,
171
+ selectionMode: S,
172
+ hoveredDate: k
173
+ }),
174
+ getDateProps: (e) => ({
175
+ ...g(N, e),
176
+ onMouseEnter: t(e.onMouseEnter, () => {
177
+ A(e.dateObj.date);
178
+ }),
179
+ onMouseLeave: t(e.onMouseLeave, () => {
180
+ A(void 0);
181
+ })
182
+ }),
183
+ getBackProps: _.bind(null, {
184
+ minDate: i,
185
+ offsetMonth: j,
186
+ handleOffsetChanged: M,
187
+ adapter: C
188
+ }),
189
+ getForwardProps: v.bind(null, {
190
+ maxDate: r,
191
+ offsetMonth: j,
192
+ handleOffsetChanged: M,
193
+ adapter: C
194
+ }),
195
+ setOffset: M
196
+ };
197
+ }
198
+ //#endregion
199
+ export { f as n, p as r, y as t };
200
+
201
+ //# sourceMappingURL=useDates-DQabq6Ux.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDates-DQabq6Ux.mjs","names":[],"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} 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, month: number, year: number) => 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' && !(selected instanceof Date) && !Array.isArray(selected)) ? (selected as { start?: Date, end?: Date }) : { 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"],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { DateAdapter, DateObj, SelectionMode, Calendar } from './types';
2
+ export interface UseDatesProps {
3
+ date?: Date;
4
+ maxDate?: Date;
5
+ minDate?: Date;
6
+ disabledDates?: Date[];
7
+ monthsToDisplay?: number;
8
+ firstDayOfWeek?: number;
9
+ showOutsideDays?: boolean;
10
+ offset?: number;
11
+ onDateSelected?: (dateObj: DateObj, event: any) => void;
12
+ onOffsetChanged?: (newOffset: number) => void;
13
+ selected?: Date | Date[] | {
14
+ start?: Date;
15
+ end?: Date;
16
+ };
17
+ modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>;
18
+ selectionMode?: SelectionMode;
19
+ adapter?: DateAdapter;
20
+ onChange?: (selected: Date | Date[] | {
21
+ start?: Date;
22
+ end?: Date;
23
+ } | null) => void;
24
+ onMonthChange?: (date: Date) => void;
25
+ onYearChange?: (date: Date) => void;
26
+ }
27
+ export declare function useDates({ date, maxDate, minDate, disabledDates, monthsToDisplay, firstDayOfWeek, showOutsideDays, offset, onDateSelected, onOffsetChanged, selected, modifiers, selectionMode, adapter, onChange, onMonthChange, onYearChange }: UseDatesProps): {
28
+ calendars: Calendar[];
29
+ getDateProps: (args: {
30
+ onClick?: (event: any) => void;
31
+ dateObj: DateObj;
32
+ [key: string]: any;
33
+ }) => {
34
+ onMouseEnter: (event: any, ...args: any[]) => boolean;
35
+ onMouseLeave: (event: any, ...args: any[]) => boolean;
36
+ onClick: (event: any, ...args: any[]) => boolean;
37
+ disabled: boolean;
38
+ 'aria-label': string;
39
+ 'aria-pressed': boolean;
40
+ role: string;
41
+ };
42
+ getBackProps: (args_0: {
43
+ [key: string]: any;
44
+ onClick?: (event: any) => void;
45
+ offset?: number;
46
+ calendars: Calendar[];
47
+ }) => {
48
+ onClick: (event: any, ...args: any[]) => boolean;
49
+ disabled: boolean;
50
+ 'aria-label': string;
51
+ };
52
+ getForwardProps: (args_0: {
53
+ [key: string]: any;
54
+ onClick?: (event: any) => void;
55
+ offset?: number;
56
+ calendars: Calendar[];
57
+ }) => {
58
+ onClick: (event: any, ...args: any[]) => boolean;
59
+ disabled: boolean;
60
+ 'aria-label': string;
61
+ };
62
+ setOffset: (newOffset: number) => void;
63
+ };
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useDates-D9EvVlhK.js");require("./utils.js"),exports.useDates=e.t;
@@ -0,0 +1,3 @@
1
+ import { t as e } from "./useDates-DQabq6Ux.mjs";
2
+ import "./utils.mjs";
3
+ export { e as useDates };
@@ -0,0 +1,42 @@
1
+ import { DateAdapter, SelectionMode, Calendar } from './types';
2
+ export declare function composeEventHandlers(...fns: any[]): (event: any, ...args: any[]) => boolean;
3
+ export declare function subtractMonth({ calendars, offset, minDate, adapter }: {
4
+ calendars: Calendar[];
5
+ offset: number;
6
+ minDate?: Date;
7
+ adapter: DateAdapter;
8
+ }): number;
9
+ export declare function addMonth({ calendars, offset, maxDate, adapter }: {
10
+ calendars: Calendar[];
11
+ offset: number;
12
+ maxDate?: Date;
13
+ adapter: DateAdapter;
14
+ }): number;
15
+ export declare function getCalendars({ date, selected, disabledDates, modifiers, monthsToDisplay, minDate, maxDate, offset, firstDayOfWeek, showOutsideDays, adapter, selectionMode, hoveredDate }: {
16
+ date: Date;
17
+ selected?: Date | Date[] | {
18
+ start?: Date;
19
+ end?: Date;
20
+ };
21
+ disabledDates?: Date[];
22
+ modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>;
23
+ monthsToDisplay: number;
24
+ minDate?: Date;
25
+ maxDate?: Date;
26
+ offset: number;
27
+ firstDayOfWeek: number;
28
+ showOutsideDays: boolean;
29
+ adapter: DateAdapter;
30
+ selectionMode: SelectionMode;
31
+ hoveredDate?: Date;
32
+ }): Calendar[];
33
+ export declare function isBackDisabled({ calendars, minDate, adapter }: {
34
+ calendars: Calendar[];
35
+ minDate?: Date;
36
+ adapter: DateAdapter;
37
+ }): boolean;
38
+ export declare function isForwardDisabled({ calendars, maxDate, adapter }: {
39
+ calendars: Calendar[];
40
+ maxDate?: Date;
41
+ adapter: DateAdapter;
42
+ }): boolean;
package/dist/utils.js ADDED
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(...e){return(t,...n)=>e.some(e=>(e&&e(t,...n),t&&t.defaultPrevented))}function t({calendars:e,offset:t,minDate:n,adapter:r}){let i=e[0].firstDayOfMonth,a=r.subtract(r.date(i),t,`month`);return n&&r.isBefore(a,r.startOf(r.date(n),`month`))?r.diff(r.startOf(r.date(i),`month`),r.startOf(r.date(n),`month`),`month`):t}function n({calendars:e,offset:t,maxDate:n,adapter:r}){let i=e[e.length-1].firstDayOfMonth,a=r.add(r.date(i),t,`month`);return n&&r.isAfter(a,r.startOf(r.date(n),`month`))?r.diff(r.startOf(r.date(n),`month`),r.startOf(r.date(i),`month`),`month`):t}function r({date:e,selected:t,disabledDates:n,modifiers:r,monthsToDisplay:a,minDate:o,maxDate:s,offset:c,firstDayOfWeek:l,showOutsideDays:u,adapter:d,selectionMode:f,hoveredDate:p}){let m=[],h=d.add(d.startOf(d.date(e),`month`),c,`month`);for(let e=0;e<a;e++){let a=d.add(h,e,`month`);m.push(i({month:d.get(a,`month`),year:d.get(a,`year`),selectedDates:t,disabledDates:n,modifiers:r,minDate:o,maxDate:s,firstDayOfWeek:l,showOutsideDays:u,adapter:d,selectionMode:f,hoveredDate:p}))}return m}function i({month:e,year:t,selectedDates:n,disabledDates:r,modifiers:i,minDate:l,maxDate:u,firstDayOfWeek:d,showOutsideDays:f,adapter:p,selectionMode:m,hoveredDate:h}){let g=p.set(p.set(p.date(),`year`,t),`month`,e);e=p.get(g,`month`),t=p.get(g,`year`);let _=p.getDaysInMonth(g),v=[];for(let o=1;o<=_;o++){let s=a(p.toDate(p.set(g,`day`,o)),n,r,i,l,u,p,m,!1,h,e,t);v.push(s)}let y=p.toDate(p.startOf(g,`month`)),b=p.toDate(p.endOf(g,`month`)),x=o({firstDayOfMonth:y,minDate:l,maxDate:u,selectedDates:n,disabledDates:r,modifiers:i,firstDayOfWeek:d,showOutsideDays:f,adapter:p,selectionMode:m,hoveredDate:h,month:e,year:t}),S=s({lastDayOfMonth:b,minDate:l,maxDate:u,selectedDates:n,disabledDates:r,modifiers:i,firstDayOfWeek:d,showOutsideDays:f,adapter:p,selectionMode:m,hoveredDate:h,month:e,year:t});v.unshift(...x),v.push(...S);let C=c(v);return{firstDayOfMonth:y,lastDayOfMonth:b,month:e,year:t,weeks:C}}function a(e,t,n,r,i,a,o,s,c=!1,d,f,p){let{selected:m,isRangeStart:h,isRangeEnd:g,isRangeBetween:_,isRangeHovering:v,isRangeActive:y}=l(t,e,o,s,d),b=o.isSame(o.date(e),o.date(),`day`),x=c&&o.isBefore(o.date(e),o.startOf(o.date(e),`month`)),S=c&&o.isAfter(o.date(e),o.endOf(o.date(e),`month`)),C={"text-brand-gold border border-brand-gold":e=>o.isSame(o.date(e),o.date(),`day`),"text-gray-400 opacity-50":(e,t)=>o.get(o.date(e),`month`)!==t,...r},w=Object.keys(C).filter(t=>C[t](e,f??o.get(o.date(e),`month`),p??o.get(o.date(e),`year`)));return b&&w.push(`today`),c&&w.push(`outside`),x&&w.push(`prev-month`),S&&w.push(`next-month`),{date:e,selected:m,modifiers:w,selectable:u(i,a,n,e,o),today:b,prevMonth:x,nextMonth:S,isRangeStart:h,isRangeEnd:g,isRangeBetween:_,isRangeHovering:v,isRangeActive:y}}function o({firstDayOfMonth:e,minDate:t,maxDate:n,selectedDates:r,disabledDates:i,modifiers:o,firstDayOfWeek:s,showOutsideDays:c,adapter:l,selectionMode:u,hoveredDate:d,month:f,year:p}){let m=[],h=(l.toDate(l.date(e)).getDay()+7-s)%7,g=l.subtract(l.date(e),1,`day`);for(let e=0;e<h;e++){let e=a(l.toDate(g),r,i,o,t,n,l,u,!0,d,f,p);e.prevMonth=!0,c||(e.selectable=!1),m.unshift(e),g=l.subtract(g,1,`day`)}return m}function s({lastDayOfMonth:e,minDate:t,maxDate:n,selectedDates:r,disabledDates:i,modifiers:o,firstDayOfWeek:s,showOutsideDays:c,adapter:l,selectionMode:u,hoveredDate:d,month:f,year:p}){let m=[],h=(l.toDate(l.date(e)).getDay()+7-s)%7,g=l.add(l.date(e),1,`day`);for(let e=0;e<6-h;e++){let e=a(l.toDate(g),r,i,o,t,n,l,u,!0,d,f,p);e.nextMonth=!0,c||(e.selectable=!1),m.push(e),g=l.add(g,1,`day`)}return m}function c(e){let t=Math.ceil(e.length/7),n=[];for(let r=0;r<t;r++){n[r]=[];for(let t=0;t<7;t++)n[r].push(e[r*7+t])}return n}function l(e,t,n,r,i){if(!e&&!i)return{selected:!1};let a=n.date(t);if(r===`single`&&e instanceof Date)return{selected:n.isSame(a,n.date(e),`day`)};if(r===`multiple`&&Array.isArray(e))return{selected:e.some(e=>n.isSame(a,n.date(e),`day`))};if(r===`range`){let{start:t,end:r}=e&&typeof e==`object`&&!(e instanceof Date)&&!Array.isArray(e)?e:{start:void 0,end:void 0},o=t?n.isSame(a,n.date(t),`day`):!1,s=r?n.isSame(a,n.date(r),`day`):!1,c=t&&r?n.isAfter(a,n.date(t),`day`)&&n.isBefore(a,n.date(r),`day`):!1,l=!1;if(t&&!r&&i){let e=n.date(i),r=n.date(t);n.isAfter(e,r,`day`)?(l=n.isAfter(a,r,`day`)&&n.isBefore(a,e,`day`)||n.isSame(a,e,`day`),n.isSame(a,e,`day`)&&(s=!0)):n.isBefore(e,r,`day`)&&(l=n.isAfter(a,e,`day`)&&n.isBefore(a,r,`day`)||n.isSame(a,e,`day`),n.isSame(a,e,`day`)&&(o=!0),n.isSame(a,r,`day`)&&(o=!1,s=!0))}let u=!!(t&&r&&!n.isSame(n.date(t),n.date(r),`day`)||t&&!r&&i&&!n.isSame(n.date(t),n.date(i),`day`));return{selected:o||s||c,isRangeStart:o,isRangeEnd:s,isRangeBetween:c,isRangeHovering:l,isRangeActive:u}}return Array.isArray(e)&&e.length===1&&r===`single`?{selected:n.isSame(a,n.date(e[0]),`day`)}:{selected:!1}}function u(e,t,n,r,i){let a=i.date(r),o=e&&i.isBefore(a,i.date(e),`day`),s=t&&i.isAfter(a,i.date(t),`day`),c=n?.some(e=>i.isSame(a,i.date(e),`day`));return!o&&!s&&!c}function d({calendars:e,minDate:t,adapter:n}){if(!t)return!1;let r=e[0].firstDayOfMonth;return n.isSame(n.startOf(n.date(r),`month`),n.startOf(n.date(t),`month`),`month`)||n.isBefore(n.date(r),n.date(t),`month`)}function f({calendars:e,maxDate:t,adapter:n}){if(!t)return!1;let r=e[e.length-1].firstDayOfMonth;return n.isSame(n.startOf(n.date(r),`month`),n.startOf(n.date(t),`month`),`month`)||n.isAfter(n.date(r),n.date(t),`month`)}exports.addMonth=n,exports.composeEventHandlers=e,exports.getCalendars=r,exports.isBackDisabled=d,exports.isForwardDisabled=f,exports.subtractMonth=t;
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { DateAdapter, DateObj, SelectionMode, Calendar } from './types';\n\nexport function composeEventHandlers(...fns: any[]) {\n return (event: any, ...args: any[]) =>\n fns.some(fn => {\n if (fn) {\n fn(event, ...args);\n }\n return event && event.defaultPrevented;\n });\n}\n\n\nexport function subtractMonth({\n calendars,\n offset,\n minDate,\n adapter\n}: {\n calendars: Calendar[],\n offset: number,\n minDate?: Date,\n adapter: DateAdapter\n}): number {\n const firstDay = calendars[0].firstDayOfMonth;\n const newDate = adapter.subtract(adapter.date(firstDay), offset, 'month');\n\n if (minDate && adapter.isBefore(newDate, adapter.startOf(adapter.date(minDate), 'month'))) {\n return adapter.diff(adapter.startOf(adapter.date(firstDay), 'month'), adapter.startOf(adapter.date(minDate), 'month'), 'month');\n }\n return offset;\n}\n\nexport function addMonth({\n calendars,\n offset,\n maxDate,\n adapter\n}: {\n calendars: Calendar[],\n offset: number,\n maxDate?: Date,\n adapter: DateAdapter\n}): number {\n const lastDay = calendars[calendars.length - 1].firstDayOfMonth;\n const newDate = adapter.add(adapter.date(lastDay), offset, 'month');\n\n if (maxDate && adapter.isAfter(newDate, adapter.startOf(adapter.date(maxDate), 'month'))) {\n return adapter.diff(adapter.startOf(adapter.date(maxDate), 'month'), adapter.startOf(adapter.date(lastDay), 'month'), 'month');\n }\n return offset;\n}\n\nexport function getCalendars({\n date,\n selected,\n disabledDates,\n modifiers,\n monthsToDisplay,\n minDate,\n maxDate,\n offset,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate\n}: {\n date: Date,\n selected?: Date | Date[] | { start?: Date, end?: Date },\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n monthsToDisplay: number,\n minDate?: Date,\n maxDate?: Date,\n offset: number,\n firstDayOfWeek: number,\n showOutsideDays: boolean,\n adapter: DateAdapter,\n selectionMode: SelectionMode,\n hoveredDate?: Date\n}): Calendar[] {\n const calendars: Calendar[] = [];\n const startDate = adapter.add(adapter.startOf(adapter.date(date), 'month'), offset, 'month');\n\n for (let i = 0; i < monthsToDisplay; i++) {\n const currentMonth = adapter.add(startDate, i, 'month');\n calendars.push(getMonthData({\n month: adapter.get(currentMonth, 'month'),\n year: adapter.get(currentMonth, 'year'),\n selectedDates: selected,\n disabledDates,\n modifiers,\n minDate,\n maxDate,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate\n }));\n }\n\n return calendars;\n}\n\nfunction getMonthData({\n month,\n year,\n selectedDates,\n disabledDates,\n modifiers,\n minDate,\n maxDate,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate\n}: {\n month: number,\n year: number,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date },\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n minDate?: Date,\n maxDate?: Date,\n firstDayOfWeek: number,\n showOutsideDays: boolean,\n adapter: DateAdapter,\n selectionMode: 'single' | 'range' | 'multiple',\n hoveredDate?: Date\n}): Calendar {\n let currentMonth = adapter.set(adapter.set(adapter.date(), 'year', year), 'month', month);\n month = adapter.get(currentMonth, 'month');\n year = adapter.get(currentMonth, 'year');\n\n const daysInMonth = adapter.getDaysInMonth(currentMonth);\n const dates: (DateObj | null)[] = [];\n\n for (let day = 1; day <= daysInMonth; day++) {\n const date = adapter.toDate(adapter.set(currentMonth, 'day', day));\n const dateObj = createDateObj(date, selectedDates, disabledDates, modifiers, minDate, maxDate, adapter, selectionMode, false, hoveredDate, month, year);\n dates.push(dateObj);\n }\n\n const firstDayOfMonth = adapter.toDate(adapter.startOf(currentMonth, 'month'));\n const lastDayOfMonth = adapter.toDate(adapter.endOf(currentMonth, 'month'));\n\n const frontWeekBuffer = fillFrontWeek({\n firstDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n disabledDates,\n modifiers,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n });\n\n const backWeekBuffer = fillBackWeek({\n lastDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n disabledDates,\n modifiers,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n });\n\n dates.unshift(...frontWeekBuffer);\n dates.push(...backWeekBuffer);\n\n const weeks = getWeeks(dates);\n\n return {\n firstDayOfMonth,\n lastDayOfMonth,\n month,\n year,\n weeks\n };\n}\n\nfunction createDateObj(\n date: Date,\n selectedDates: Date | Date[] | { start?: Date, end?: Date } | undefined,\n disabledDates: Date[] | undefined,\n modifiers: Record<string, (date: Date, month: number, year: number) => boolean> | undefined,\n minDate: Date | undefined,\n maxDate: Date | undefined,\n adapter: DateAdapter,\n selectionMode: 'single' | 'range' | 'multiple',\n isOutside = false,\n hoveredDate?: Date,\n month?: number,\n year?: number\n): DateObj {\n const { selected, isRangeStart, isRangeEnd, isRangeBetween, isRangeHovering, isRangeActive } = isSelected(selectedDates, date, adapter, selectionMode, hoveredDate);\n const isToday = adapter.isSame(adapter.date(date), adapter.date(), \"day\");\n const isPrevMonth = isOutside && adapter.isBefore(adapter.date(date), adapter.startOf(adapter.date(date), 'month'));\n const isNextMonth = isOutside && adapter.isAfter(adapter.date(date), adapter.endOf(adapter.date(date), 'month'));\n\n const defaultModifiers: Record<string, (d: Date, m: number, y: number) => boolean> = {\n 'text-brand-gold border border-brand-gold': (d: Date) =>\n adapter.isSame(adapter.date(d), adapter.date(), 'day'),\n 'text-gray-400 opacity-50': (d: Date, m: number) =>\n adapter.get(adapter.date(d), 'month') !== m\n };\n const mergedModifiers: Record<string, (d: Date, m: number, y: number) => boolean> = { ...defaultModifiers, ...modifiers };\n\n const activeModifiers = Object.keys(mergedModifiers).filter(key =>\n mergedModifiers[key](date, month ?? adapter.get(adapter.date(date), 'month'), year ?? adapter.get(adapter.date(date), 'year'))\n );\n\n if (isToday) activeModifiers.push('today');\n if (isOutside) activeModifiers.push('outside');\n if (isPrevMonth) activeModifiers.push('prev-month');\n if (isNextMonth) activeModifiers.push('next-month');\n\n return {\n date,\n selected,\n modifiers: activeModifiers,\n selectable: isSelectable(minDate, maxDate, disabledDates, date, adapter),\n today: isToday,\n prevMonth: isPrevMonth,\n nextMonth: isNextMonth,\n isRangeStart,\n isRangeEnd,\n isRangeBetween,\n isRangeHovering,\n isRangeActive\n };\n}\n\nfunction fillFrontWeek({\n firstDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n disabledDates,\n modifiers,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n firstDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: any,\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n showOutsideDays: boolean,\n adapter: DateAdapter,\n selectionMode: any,\n hoveredDate?: Date,\n month: number,\n year: number\n}): (DateObj | null)[] {\n const dates: (DateObj | null)[] = [];\n let firstDay = (adapter.toDate(adapter.date(firstDayOfMonth)).getDay() + 7 - firstDayOfWeek) % 7;\n\n let current = adapter.subtract(adapter.date(firstDayOfMonth), 1, \"day\");\n for (let i = 0; i < firstDay; i++) {\n const date = adapter.toDate(current);\n const dateObj = createDateObj(date, selectedDates, disabledDates, modifiers, minDate, maxDate, adapter, selectionMode, true, hoveredDate, month, year);\n dateObj.prevMonth = true;\n if (!showOutsideDays) {\n dateObj.selectable = false;\n }\n dates.unshift(dateObj);\n current = adapter.subtract(current, 1, \"day\");\n }\n\n return dates;\n}\n\nfunction fillBackWeek({\n lastDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n disabledDates,\n modifiers,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n lastDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: any,\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n showOutsideDays: boolean,\n adapter: DateAdapter,\n selectionMode: any,\n hoveredDate?: Date,\n month: number,\n year: number\n}): (DateObj | null)[] {\n const dates: (DateObj | null)[] = [];\n let lastDay = (adapter.toDate(adapter.date(lastDayOfMonth)).getDay() + 7 - firstDayOfWeek) % 7;\n\n let current = adapter.add(adapter.date(lastDayOfMonth), 1, \"day\");\n for (let i = 0; i < 6 - lastDay; i++) {\n const date = adapter.toDate(current);\n const dateObj = createDateObj(date, selectedDates, disabledDates, modifiers, minDate, maxDate, adapter, selectionMode, true, hoveredDate, month, year);\n dateObj.nextMonth = true;\n if (!showOutsideDays) {\n dateObj.selectable = false;\n }\n dates.push(dateObj);\n current = adapter.add(current, 1, \"day\");\n }\n\n return dates;\n}\n\nfunction getWeeks(dates: (DateObj | null)[]): (DateObj | null)[][] {\n const weeksLength = Math.ceil(dates.length / 7);\n const weeks: (DateObj | null)[][] = [];\n for (let i = 0; i < weeksLength; i++) {\n weeks[i] = [];\n for (let x = 0; x < 7; x++) {\n weeks[i].push(dates[i * 7 + x]);\n }\n }\n return weeks;\n}\n\nfunction isSelected(\n selectedDates: Date | Date[] | { start?: Date, end?: Date } | undefined,\n date: Date,\n adapter: DateAdapter,\n selectionMode: 'single' | 'range' | 'multiple',\n hoveredDate?: Date\n): { selected: boolean, isRangeStart?: boolean, isRangeEnd?: boolean, isRangeBetween?: boolean, isRangeHovering?: boolean, isRangeActive?: boolean } {\n if (!selectedDates && !hoveredDate) return { selected: false };\n\n const d = adapter.date(date);\n\n if (selectionMode === 'single' && selectedDates instanceof Date) {\n return { selected: adapter.isSame(d, adapter.date(selectedDates), 'day') };\n }\n\n if (selectionMode === 'multiple' && Array.isArray(selectedDates)) {\n return { selected: selectedDates.some(sd => adapter.isSame(d, adapter.date(sd), 'day')) };\n }\n\n if (selectionMode === 'range') {\n const range = (selectedDates && typeof selectedDates === 'object' && !(selectedDates instanceof Date) && !Array.isArray(selectedDates)) ? (selectedDates as { start?: Date, end?: Date }) : { start: undefined, end: undefined };\n const { start, end } = range;\n\n let isStart = start ? adapter.isSame(d, adapter.date(start), 'day') : false;\n let isEnd = end ? adapter.isSame(d, adapter.date(end), 'day') : false;\n const isBetween = (start && end) ? (adapter.isAfter(d, adapter.date(start), 'day') && adapter.isBefore(d, adapter.date(end), 'day')) : false;\n\n let isHovering = false;\n if (start && !end && hoveredDate) {\n const h = adapter.date(hoveredDate);\n const s = adapter.date(start);\n if (adapter.isAfter(h, s, 'day')) {\n isHovering = (adapter.isAfter(d, s, 'day') && adapter.isBefore(d, h, 'day')) || adapter.isSame(d, h, 'day');\n if (adapter.isSame(d, h, 'day')) isEnd = true;\n } else if (adapter.isBefore(h, s, 'day')) {\n isHovering = (adapter.isAfter(d, h, 'day') && adapter.isBefore(d, s, 'day')) || adapter.isSame(d, h, 'day');\n if (adapter.isSame(d, h, 'day')) {\n isStart = true;\n }\n if (adapter.isSame(d, s, 'day')) {\n isStart = false;\n isEnd = true;\n }\n }\n }\n\n const isRangeActive = !!(\n (start && end && !adapter.isSame(adapter.date(start), adapter.date(end), 'day')) ||\n (start && !end && hoveredDate && !adapter.isSame(adapter.date(start), adapter.date(hoveredDate), 'day'))\n );\n\n return {\n selected: isStart || isEnd || isBetween,\n isRangeStart: isStart,\n isRangeEnd: isEnd,\n isRangeBetween: isBetween,\n isRangeHovering: isHovering,\n isRangeActive\n };\n }\n\n if (Array.isArray(selectedDates) && selectedDates.length === 1 && selectionMode === 'single') {\n return { selected: adapter.isSame(d, adapter.date(selectedDates[0]), 'day') };\n }\n\n return { selected: false };\n}\n\nfunction isSelectable(minDate: Date | undefined, maxDate: Date | undefined, disabledDates: Date[] | undefined, date: Date, adapter: DateAdapter): boolean {\n const d = adapter.date(date);\n const isMinDateInvalid = minDate && adapter.isBefore(d, adapter.date(minDate), 'day');\n const isMaxDateInvalid = maxDate && adapter.isAfter(d, adapter.date(maxDate), 'day');\n const isDisabled = disabledDates?.some(disabledDate => adapter.isSame(d, adapter.date(disabledDate), 'day'));\n return !isMinDateInvalid && !isMaxDateInvalid && !isDisabled;\n}\n\nexport function isBackDisabled({\n calendars,\n minDate,\n adapter\n}: {\n calendars: Calendar[],\n minDate?: Date,\n adapter: DateAdapter\n}): boolean {\n if (!minDate) {\n return false;\n }\n const firstDay = calendars[0].firstDayOfMonth;\n return adapter.isSame(adapter.startOf(adapter.date(firstDay), 'month'), adapter.startOf(adapter.date(minDate), 'month'), 'month') || adapter.isBefore(adapter.date(firstDay), adapter.date(minDate), 'month');\n}\n\nexport function isForwardDisabled({\n calendars,\n maxDate,\n adapter\n}: {\n calendars: Calendar[],\n maxDate?: Date,\n adapter: DateAdapter\n}): boolean {\n if (!maxDate) {\n return false;\n }\n const lastDay = calendars[calendars.length - 1].firstDayOfMonth;\n return adapter.isSame(adapter.startOf(adapter.date(lastDay), 'month'), adapter.startOf(adapter.date(maxDate), 'month'), 'month') || adapter.isAfter(adapter.date(lastDay), adapter.date(maxDate), 'month');\n}\n"],"mappings":"mEAEA,SAAgB,EAAqB,GAAG,EAAY,CAChD,OAAQ,EAAY,GAAG,IACnB,EAAI,KAAK,IACD,GACA,EAAG,EAAO,GAAG,CAAI,EAEd,GAAS,EAAM,iBACzB,CACT,CAGA,SAAgB,EAAc,CAC1B,YACA,SACA,UACA,WAMO,CACP,IAAM,EAAW,EAAU,EAAE,CAAC,gBACxB,EAAU,EAAQ,SAAS,EAAQ,KAAK,CAAQ,EAAG,EAAQ,OAAO,EAKxE,OAHI,GAAW,EAAQ,SAAS,EAAS,EAAQ,QAAQ,EAAQ,KAAK,CAAO,EAAG,OAAO,CAAC,EAC7E,EAAQ,KAAK,EAAQ,QAAQ,EAAQ,KAAK,CAAQ,EAAG,OAAO,EAAG,EAAQ,QAAQ,EAAQ,KAAK,CAAO,EAAG,OAAO,EAAG,OAAO,EAE3H,CACX,CAEA,SAAgB,EAAS,CACrB,YACA,SACA,UACA,WAMO,CACP,IAAM,EAAU,EAAU,EAAU,OAAS,EAAE,CAAC,gBAC1C,EAAU,EAAQ,IAAI,EAAQ,KAAK,CAAO,EAAG,EAAQ,OAAO,EAKlE,OAHI,GAAW,EAAQ,QAAQ,EAAS,EAAQ,QAAQ,EAAQ,KAAK,CAAO,EAAG,OAAO,CAAC,EAC5E,EAAQ,KAAK,EAAQ,QAAQ,EAAQ,KAAK,CAAO,EAAG,OAAO,EAAG,EAAQ,QAAQ,EAAQ,KAAK,CAAO,EAAG,OAAO,EAAG,OAAO,EAE1H,CACX,CAEA,SAAgB,EAAa,CACzB,OACA,WACA,gBACA,YACA,kBACA,UACA,UACA,SACA,iBACA,kBACA,UACA,gBACA,eAeW,CACX,IAAM,EAAwB,CAAC,EACzB,EAAY,EAAQ,IAAI,EAAQ,QAAQ,EAAQ,KAAK,CAAI,EAAG,OAAO,EAAG,EAAQ,OAAO,EAE3F,IAAK,IAAI,EAAI,EAAG,EAAI,EAAiB,IAAK,CACtC,IAAM,EAAe,EAAQ,IAAI,EAAW,EAAG,OAAO,EACtD,EAAU,KAAK,EAAa,CACxB,MAAO,EAAQ,IAAI,EAAc,OAAO,EACxC,KAAM,EAAQ,IAAI,EAAc,MAAM,EACtC,cAAe,EACf,gBACA,YACA,UACA,UACA,iBACA,kBACA,UACA,gBACA,aACJ,CAAC,CAAC,CACN,CAEA,OAAO,CACX,CAEA,SAAS,EAAa,CAClB,QACA,OACA,gBACA,gBACA,YACA,UACA,UACA,iBACA,kBACA,UACA,gBACA,eAcS,CACT,IAAI,EAAe,EAAQ,IAAI,EAAQ,IAAI,EAAQ,KAAK,EAAG,OAAQ,CAAI,EAAG,QAAS,CAAK,EACxF,EAAQ,EAAQ,IAAI,EAAc,OAAO,EACzC,EAAO,EAAQ,IAAI,EAAc,MAAM,EAEvC,IAAM,EAAc,EAAQ,eAAe,CAAY,EACjD,EAA4B,CAAC,EAEnC,IAAK,IAAI,EAAM,EAAG,GAAO,EAAa,IAAO,CAEzC,IAAM,EAAU,EADH,EAAQ,OAAO,EAAQ,IAAI,EAAc,MAAO,CAAG,CAClC,EAAM,EAAe,EAAe,EAAW,EAAS,EAAS,EAAS,EAAe,GAAO,EAAa,EAAO,CAAI,EACtJ,EAAM,KAAK,CAAO,CACtB,CAEA,IAAM,EAAkB,EAAQ,OAAO,EAAQ,QAAQ,EAAc,OAAO,CAAC,EACvE,EAAiB,EAAQ,OAAO,EAAQ,MAAM,EAAc,OAAO,CAAC,EAEpE,EAAkB,EAAc,CAClC,kBACA,UACA,UACA,gBACA,gBACA,YACA,iBACA,kBACA,UACA,gBACA,cACA,QACA,MACJ,CAAC,EAEK,EAAiB,EAAa,CAChC,iBACA,UACA,UACA,gBACA,gBACA,YACA,iBACA,kBACA,UACA,gBACA,cACA,QACA,MACJ,CAAC,EAED,EAAM,QAAQ,GAAG,CAAe,EAChC,EAAM,KAAK,GAAG,CAAc,EAE5B,IAAM,EAAQ,EAAS,CAAK,EAE5B,MAAO,CACH,kBACA,iBACA,QACA,OACA,OACJ,CACJ,CAEA,SAAS,EACL,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAY,GACZ,EACA,EACA,EACO,CACP,GAAM,CAAE,WAAU,eAAc,aAAY,iBAAgB,kBAAiB,iBAAkB,EAAW,EAAe,EAAM,EAAS,EAAe,CAAW,EAC5J,EAAU,EAAQ,OAAO,EAAQ,KAAK,CAAI,EAAG,EAAQ,KAAK,EAAG,KAAK,EAClE,EAAc,GAAa,EAAQ,SAAS,EAAQ,KAAK,CAAI,EAAG,EAAQ,QAAQ,EAAQ,KAAK,CAAI,EAAG,OAAO,CAAC,EAC5G,EAAc,GAAa,EAAQ,QAAQ,EAAQ,KAAK,CAAI,EAAG,EAAQ,MAAM,EAAQ,KAAK,CAAI,EAAG,OAAO,CAAC,EAQzG,EAA8E,CALhF,2CAA6C,GACzC,EAAQ,OAAO,EAAQ,KAAK,CAAC,EAAG,EAAQ,KAAK,EAAG,KAAK,EACzD,4BAA6B,EAAS,IAClC,EAAQ,IAAI,EAAQ,KAAK,CAAC,EAAG,OAAO,IAAM,EAEyD,GAAG,CAAU,EAElH,EAAkB,OAAO,KAAK,CAAe,CAAC,CAAC,OAAO,GACxD,EAAgB,EAAI,CAAC,EAAM,GAAS,EAAQ,IAAI,EAAQ,KAAK,CAAI,EAAG,OAAO,EAAG,GAAQ,EAAQ,IAAI,EAAQ,KAAK,CAAI,EAAG,MAAM,CAAC,CACjI,EAOA,OALI,GAAS,EAAgB,KAAK,OAAO,EACrC,GAAW,EAAgB,KAAK,SAAS,EACzC,GAAa,EAAgB,KAAK,YAAY,EAC9C,GAAa,EAAgB,KAAK,YAAY,EAE3C,CACH,OACA,WACA,UAAW,EACX,WAAY,EAAa,EAAS,EAAS,EAAe,EAAM,CAAO,EACvE,MAAO,EACP,UAAW,EACX,UAAW,EACX,eACA,aACA,iBACA,kBACA,eACJ,CACJ,CAEA,SAAS,EAAc,CACnB,kBACA,UACA,UACA,gBACA,gBACA,YACA,iBACA,kBACA,UACA,gBACA,cACA,QACA,QAemB,CACnB,IAAM,EAA4B,CAAC,EAC/B,GAAY,EAAQ,OAAO,EAAQ,KAAK,CAAe,CAAC,CAAC,CAAC,OAAO,EAAI,EAAI,GAAkB,EAE3F,EAAU,EAAQ,SAAS,EAAQ,KAAK,CAAe,EAAG,EAAG,KAAK,EACtE,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,IAAK,CAE/B,IAAM,EAAU,EADH,EAAQ,OAAO,CACE,EAAM,EAAe,EAAe,EAAW,EAAS,EAAS,EAAS,EAAe,GAAM,EAAa,EAAO,CAAI,EACrJ,EAAQ,UAAY,GACf,IACD,EAAQ,WAAa,IAEzB,EAAM,QAAQ,CAAO,EACrB,EAAU,EAAQ,SAAS,EAAS,EAAG,KAAK,CAChD,CAEA,OAAO,CACX,CAEA,SAAS,EAAa,CAClB,iBACA,UACA,UACA,gBACA,gBACA,YACA,iBACA,kBACA,UACA,gBACA,cACA,QACA,QAemB,CACnB,IAAM,EAA4B,CAAC,EAC/B,GAAW,EAAQ,OAAO,EAAQ,KAAK,CAAc,CAAC,CAAC,CAAC,OAAO,EAAI,EAAI,GAAkB,EAEzF,EAAU,EAAQ,IAAI,EAAQ,KAAK,CAAc,EAAG,EAAG,KAAK,EAChE,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,EAAS,IAAK,CAElC,IAAM,EAAU,EADH,EAAQ,OAAO,CACE,EAAM,EAAe,EAAe,EAAW,EAAS,EAAS,EAAS,EAAe,GAAM,EAAa,EAAO,CAAI,EACrJ,EAAQ,UAAY,GACf,IACD,EAAQ,WAAa,IAEzB,EAAM,KAAK,CAAO,EAClB,EAAU,EAAQ,IAAI,EAAS,EAAG,KAAK,CAC3C,CAEA,OAAO,CACX,CAEA,SAAS,EAAS,EAAiD,CAC/D,IAAM,EAAc,KAAK,KAAK,EAAM,OAAS,CAAC,EACxC,EAA8B,CAAC,EACrC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAa,IAAK,CAClC,EAAM,GAAK,CAAC,EACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IACnB,EAAM,EAAE,CAAC,KAAK,EAAM,EAAI,EAAI,EAAE,CAEtC,CACA,OAAO,CACX,CAEA,SAAS,EACL,EACA,EACA,EACA,EACA,EACiJ,CACjJ,GAAI,CAAC,GAAiB,CAAC,EAAa,MAAO,CAAE,SAAU,EAAM,EAE7D,IAAM,EAAI,EAAQ,KAAK,CAAI,EAE3B,GAAI,IAAkB,UAAY,aAAyB,KACvD,MAAO,CAAE,SAAU,EAAQ,OAAO,EAAG,EAAQ,KAAK,CAAa,EAAG,KAAK,CAAE,EAG7E,GAAI,IAAkB,YAAc,MAAM,QAAQ,CAAa,EAC3D,MAAO,CAAE,SAAU,EAAc,KAAK,GAAM,EAAQ,OAAO,EAAG,EAAQ,KAAK,CAAE,EAAG,KAAK,CAAC,CAAE,EAG5F,GAAI,IAAkB,QAAS,CAE3B,GAAM,CAAE,QAAO,OADA,GAAiB,OAAO,GAAkB,UAAY,EAAE,aAAyB,OAAS,CAAC,MAAM,QAAQ,CAAa,EAAM,EAAiD,CAAE,MAAO,IAAA,GAAW,IAAK,IAAA,EAAU,EAG3N,EAAU,EAAQ,EAAQ,OAAO,EAAG,EAAQ,KAAK,CAAK,EAAG,KAAK,EAAI,GAClE,EAAQ,EAAM,EAAQ,OAAO,EAAG,EAAQ,KAAK,CAAG,EAAG,KAAK,EAAI,GAC1D,EAAa,GAAS,EAAQ,EAAQ,QAAQ,EAAG,EAAQ,KAAK,CAAK,EAAG,KAAK,GAAK,EAAQ,SAAS,EAAG,EAAQ,KAAK,CAAG,EAAG,KAAK,EAAK,GAEnI,EAAa,GACjB,GAAI,GAAS,CAAC,GAAO,EAAa,CAC9B,IAAM,EAAI,EAAQ,KAAK,CAAW,EAC5B,EAAI,EAAQ,KAAK,CAAK,EACxB,EAAQ,QAAQ,EAAG,EAAG,KAAK,GAC3B,EAAc,EAAQ,QAAQ,EAAG,EAAG,KAAK,GAAK,EAAQ,SAAS,EAAG,EAAG,KAAK,GAAM,EAAQ,OAAO,EAAG,EAAG,KAAK,EACtG,EAAQ,OAAO,EAAG,EAAG,KAAK,IAAG,EAAQ,KAClC,EAAQ,SAAS,EAAG,EAAG,KAAK,IACnC,EAAc,EAAQ,QAAQ,EAAG,EAAG,KAAK,GAAK,EAAQ,SAAS,EAAG,EAAG,KAAK,GAAM,EAAQ,OAAO,EAAG,EAAG,KAAK,EACtG,EAAQ,OAAO,EAAG,EAAG,KAAK,IAC1B,EAAU,IAEV,EAAQ,OAAO,EAAG,EAAG,KAAK,IAC1B,EAAU,GACV,EAAQ,IAGpB,CAEQ,IAAM,EAAgB,CAAC,EAC1B,GAAS,GAAO,CAAC,EAAQ,OAAO,EAAQ,KAAK,CAAK,EAAG,EAAQ,KAAK,CAAG,EAAG,KAAK,GAC7E,GAAS,CAAC,GAAO,GAAe,CAAC,EAAQ,OAAO,EAAQ,KAAK,CAAK,EAAG,EAAQ,KAAK,CAAW,EAAG,KAAK,GAG1G,MAAO,CACH,SAAU,GAAW,GAAS,EAC9B,aAAc,EACd,WAAY,EACZ,eAAgB,EAChB,gBAAiB,EACjB,eACJ,CACJ,CAMA,OAJI,MAAM,QAAQ,CAAa,GAAK,EAAc,SAAW,GAAK,IAAkB,SACxE,CAAE,SAAU,EAAQ,OAAO,EAAG,EAAQ,KAAK,EAAc,EAAE,EAAG,KAAK,CAAE,EAG1E,CAAE,SAAU,EAAM,CAC7B,CAEA,SAAS,EAAa,EAA2B,EAA2B,EAAmC,EAAY,EAA+B,CACtJ,IAAM,EAAI,EAAQ,KAAK,CAAI,EACrB,EAAmB,GAAW,EAAQ,SAAS,EAAG,EAAQ,KAAK,CAAO,EAAG,KAAK,EAC9E,EAAmB,GAAW,EAAQ,QAAQ,EAAG,EAAQ,KAAK,CAAO,EAAG,KAAK,EAC7E,EAAa,GAAe,KAAK,GAAgB,EAAQ,OAAO,EAAG,EAAQ,KAAK,CAAY,EAAG,KAAK,CAAC,EAC3G,MAAO,CAAC,GAAoB,CAAC,GAAoB,CAAC,CACtD,CAEA,SAAgB,EAAe,CAC3B,YACA,UACA,WAKQ,CACR,GAAI,CAAC,EACD,MAAO,GAEX,IAAM,EAAW,EAAU,EAAE,CAAC,gBAC9B,OAAO,EAAQ,OAAO,EAAQ,QAAQ,EAAQ,KAAK,CAAQ,EAAG,OAAO,EAAG,EAAQ,QAAQ,EAAQ,KAAK,CAAO,EAAG,OAAO,EAAG,OAAO,GAAK,EAAQ,SAAS,EAAQ,KAAK,CAAQ,EAAG,EAAQ,KAAK,CAAO,EAAG,OAAO,CAChN,CAEA,SAAgB,EAAkB,CAC9B,YACA,UACA,WAKQ,CACR,GAAI,CAAC,EACD,MAAO,GAEX,IAAM,EAAU,EAAU,EAAU,OAAS,EAAE,CAAC,gBAChD,OAAO,EAAQ,OAAO,EAAQ,QAAQ,EAAQ,KAAK,CAAO,EAAG,OAAO,EAAG,EAAQ,QAAQ,EAAQ,KAAK,CAAO,EAAG,OAAO,EAAG,OAAO,GAAK,EAAQ,QAAQ,EAAQ,KAAK,CAAO,EAAG,EAAQ,KAAK,CAAO,EAAG,OAAO,CAC7M"}
package/dist/utils.mjs ADDED
@@ -0,0 +1,169 @@
1
+ //#region src/utils.ts
2
+ function e(...e) {
3
+ return (t, ...n) => e.some((e) => (e && e(t, ...n), t && t.defaultPrevented));
4
+ }
5
+ function t({ calendars: e, offset: t, minDate: n, adapter: r }) {
6
+ let i = e[0].firstDayOfMonth, a = r.subtract(r.date(i), t, "month");
7
+ return n && r.isBefore(a, r.startOf(r.date(n), "month")) ? r.diff(r.startOf(r.date(i), "month"), r.startOf(r.date(n), "month"), "month") : t;
8
+ }
9
+ function n({ calendars: e, offset: t, maxDate: n, adapter: r }) {
10
+ let i = e[e.length - 1].firstDayOfMonth, a = r.add(r.date(i), t, "month");
11
+ return n && r.isAfter(a, r.startOf(r.date(n), "month")) ? r.diff(r.startOf(r.date(n), "month"), r.startOf(r.date(i), "month"), "month") : t;
12
+ }
13
+ function r({ date: e, selected: t, disabledDates: n, modifiers: r, monthsToDisplay: a, minDate: o, maxDate: s, offset: c, firstDayOfWeek: l, showOutsideDays: u, adapter: d, selectionMode: f, hoveredDate: p }) {
14
+ let m = [], h = d.add(d.startOf(d.date(e), "month"), c, "month");
15
+ for (let e = 0; e < a; e++) {
16
+ let a = d.add(h, e, "month");
17
+ m.push(i({
18
+ month: d.get(a, "month"),
19
+ year: d.get(a, "year"),
20
+ selectedDates: t,
21
+ disabledDates: n,
22
+ modifiers: r,
23
+ minDate: o,
24
+ maxDate: s,
25
+ firstDayOfWeek: l,
26
+ showOutsideDays: u,
27
+ adapter: d,
28
+ selectionMode: f,
29
+ hoveredDate: p
30
+ }));
31
+ }
32
+ return m;
33
+ }
34
+ function i({ month: e, year: t, selectedDates: n, disabledDates: r, modifiers: i, minDate: l, maxDate: u, firstDayOfWeek: d, showOutsideDays: f, adapter: p, selectionMode: m, hoveredDate: h }) {
35
+ let g = p.set(p.set(p.date(), "year", t), "month", e);
36
+ e = p.get(g, "month"), t = p.get(g, "year");
37
+ let _ = p.getDaysInMonth(g), v = [];
38
+ for (let o = 1; o <= _; o++) {
39
+ let s = a(p.toDate(p.set(g, "day", o)), n, r, i, l, u, p, m, !1, h, e, t);
40
+ v.push(s);
41
+ }
42
+ let y = p.toDate(p.startOf(g, "month")), b = p.toDate(p.endOf(g, "month")), x = o({
43
+ firstDayOfMonth: y,
44
+ minDate: l,
45
+ maxDate: u,
46
+ selectedDates: n,
47
+ disabledDates: r,
48
+ modifiers: i,
49
+ firstDayOfWeek: d,
50
+ showOutsideDays: f,
51
+ adapter: p,
52
+ selectionMode: m,
53
+ hoveredDate: h,
54
+ month: e,
55
+ year: t
56
+ }), S = s({
57
+ lastDayOfMonth: b,
58
+ minDate: l,
59
+ maxDate: u,
60
+ selectedDates: n,
61
+ disabledDates: r,
62
+ modifiers: i,
63
+ firstDayOfWeek: d,
64
+ showOutsideDays: f,
65
+ adapter: p,
66
+ selectionMode: m,
67
+ hoveredDate: h,
68
+ month: e,
69
+ year: t
70
+ });
71
+ v.unshift(...x), v.push(...S);
72
+ let C = c(v);
73
+ return {
74
+ firstDayOfMonth: y,
75
+ lastDayOfMonth: b,
76
+ month: e,
77
+ year: t,
78
+ weeks: C
79
+ };
80
+ }
81
+ function a(e, t, n, r, i, a, o, s, c = !1, d, f, p) {
82
+ let { selected: m, isRangeStart: h, isRangeEnd: g, isRangeBetween: _, isRangeHovering: v, isRangeActive: y } = l(t, e, o, s, d), b = o.isSame(o.date(e), o.date(), "day"), x = c && o.isBefore(o.date(e), o.startOf(o.date(e), "month")), S = c && o.isAfter(o.date(e), o.endOf(o.date(e), "month")), C = {
83
+ "text-brand-gold border border-brand-gold": (e) => o.isSame(o.date(e), o.date(), "day"),
84
+ "text-gray-400 opacity-50": (e, t) => o.get(o.date(e), "month") !== t,
85
+ ...r
86
+ }, w = Object.keys(C).filter((t) => C[t](e, f ?? o.get(o.date(e), "month"), p ?? o.get(o.date(e), "year")));
87
+ return b && w.push("today"), c && w.push("outside"), x && w.push("prev-month"), S && w.push("next-month"), {
88
+ date: e,
89
+ selected: m,
90
+ modifiers: w,
91
+ selectable: u(i, a, n, e, o),
92
+ today: b,
93
+ prevMonth: x,
94
+ nextMonth: S,
95
+ isRangeStart: h,
96
+ isRangeEnd: g,
97
+ isRangeBetween: _,
98
+ isRangeHovering: v,
99
+ isRangeActive: y
100
+ };
101
+ }
102
+ function o({ firstDayOfMonth: e, minDate: t, maxDate: n, selectedDates: r, disabledDates: i, modifiers: o, firstDayOfWeek: s, showOutsideDays: c, adapter: l, selectionMode: u, hoveredDate: d, month: f, year: p }) {
103
+ let m = [], h = (l.toDate(l.date(e)).getDay() + 7 - s) % 7, g = l.subtract(l.date(e), 1, "day");
104
+ for (let e = 0; e < h; e++) {
105
+ let e = a(l.toDate(g), r, i, o, t, n, l, u, !0, d, f, p);
106
+ e.prevMonth = !0, c || (e.selectable = !1), m.unshift(e), g = l.subtract(g, 1, "day");
107
+ }
108
+ return m;
109
+ }
110
+ function s({ lastDayOfMonth: e, minDate: t, maxDate: n, selectedDates: r, disabledDates: i, modifiers: o, firstDayOfWeek: s, showOutsideDays: c, adapter: l, selectionMode: u, hoveredDate: d, month: f, year: p }) {
111
+ let m = [], h = (l.toDate(l.date(e)).getDay() + 7 - s) % 7, g = l.add(l.date(e), 1, "day");
112
+ for (let e = 0; e < 6 - h; e++) {
113
+ let e = a(l.toDate(g), r, i, o, t, n, l, u, !0, d, f, p);
114
+ e.nextMonth = !0, c || (e.selectable = !1), m.push(e), g = l.add(g, 1, "day");
115
+ }
116
+ return m;
117
+ }
118
+ function c(e) {
119
+ let t = Math.ceil(e.length / 7), n = [];
120
+ for (let r = 0; r < t; r++) {
121
+ n[r] = [];
122
+ for (let t = 0; t < 7; t++) n[r].push(e[r * 7 + t]);
123
+ }
124
+ return n;
125
+ }
126
+ function l(e, t, n, r, i) {
127
+ if (!e && !i) return { selected: !1 };
128
+ let a = n.date(t);
129
+ if (r === "single" && e instanceof Date) return { selected: n.isSame(a, n.date(e), "day") };
130
+ if (r === "multiple" && Array.isArray(e)) return { selected: e.some((e) => n.isSame(a, n.date(e), "day")) };
131
+ if (r === "range") {
132
+ let { start: t, end: r } = e && typeof e == "object" && !(e instanceof Date) && !Array.isArray(e) ? e : {
133
+ start: void 0,
134
+ end: void 0
135
+ }, o = t ? n.isSame(a, n.date(t), "day") : !1, s = r ? n.isSame(a, n.date(r), "day") : !1, c = t && r ? n.isAfter(a, n.date(t), "day") && n.isBefore(a, n.date(r), "day") : !1, l = !1;
136
+ if (t && !r && i) {
137
+ let e = n.date(i), r = n.date(t);
138
+ n.isAfter(e, r, "day") ? (l = n.isAfter(a, r, "day") && n.isBefore(a, e, "day") || n.isSame(a, e, "day"), n.isSame(a, e, "day") && (s = !0)) : n.isBefore(e, r, "day") && (l = n.isAfter(a, e, "day") && n.isBefore(a, r, "day") || n.isSame(a, e, "day"), n.isSame(a, e, "day") && (o = !0), n.isSame(a, r, "day") && (o = !1, s = !0));
139
+ }
140
+ let u = !!(t && r && !n.isSame(n.date(t), n.date(r), "day") || t && !r && i && !n.isSame(n.date(t), n.date(i), "day"));
141
+ return {
142
+ selected: o || s || c,
143
+ isRangeStart: o,
144
+ isRangeEnd: s,
145
+ isRangeBetween: c,
146
+ isRangeHovering: l,
147
+ isRangeActive: u
148
+ };
149
+ }
150
+ return Array.isArray(e) && e.length === 1 && r === "single" ? { selected: n.isSame(a, n.date(e[0]), "day") } : { selected: !1 };
151
+ }
152
+ function u(e, t, n, r, i) {
153
+ let a = i.date(r), o = e && i.isBefore(a, i.date(e), "day"), s = t && i.isAfter(a, i.date(t), "day"), c = n?.some((e) => i.isSame(a, i.date(e), "day"));
154
+ return !o && !s && !c;
155
+ }
156
+ function d({ calendars: e, minDate: t, adapter: n }) {
157
+ if (!t) return !1;
158
+ let r = e[0].firstDayOfMonth;
159
+ return n.isSame(n.startOf(n.date(r), "month"), n.startOf(n.date(t), "month"), "month") || n.isBefore(n.date(r), n.date(t), "month");
160
+ }
161
+ function f({ calendars: e, maxDate: t, adapter: n }) {
162
+ if (!t) return !1;
163
+ let r = e[e.length - 1].firstDayOfMonth;
164
+ return n.isSame(n.startOf(n.date(r), "month"), n.startOf(n.date(t), "month"), "month") || n.isAfter(n.date(r), n.date(t), "month");
165
+ }
166
+ //#endregion
167
+ export { n as addMonth, e as composeEventHandlers, r as getCalendars, d as isBackDisabled, f as isForwardDisabled, t as subtractMonth };
168
+
169
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { DateAdapter, DateObj, SelectionMode, Calendar } from './types';\n\nexport function composeEventHandlers(...fns: any[]) {\n return (event: any, ...args: any[]) =>\n fns.some(fn => {\n if (fn) {\n fn(event, ...args);\n }\n return event && event.defaultPrevented;\n });\n}\n\n\nexport function subtractMonth({\n calendars,\n offset,\n minDate,\n adapter\n}: {\n calendars: Calendar[],\n offset: number,\n minDate?: Date,\n adapter: DateAdapter\n}): number {\n const firstDay = calendars[0].firstDayOfMonth;\n const newDate = adapter.subtract(adapter.date(firstDay), offset, 'month');\n\n if (minDate && adapter.isBefore(newDate, adapter.startOf(adapter.date(minDate), 'month'))) {\n return adapter.diff(adapter.startOf(adapter.date(firstDay), 'month'), adapter.startOf(adapter.date(minDate), 'month'), 'month');\n }\n return offset;\n}\n\nexport function addMonth({\n calendars,\n offset,\n maxDate,\n adapter\n}: {\n calendars: Calendar[],\n offset: number,\n maxDate?: Date,\n adapter: DateAdapter\n}): number {\n const lastDay = calendars[calendars.length - 1].firstDayOfMonth;\n const newDate = adapter.add(adapter.date(lastDay), offset, 'month');\n\n if (maxDate && adapter.isAfter(newDate, adapter.startOf(adapter.date(maxDate), 'month'))) {\n return adapter.diff(adapter.startOf(adapter.date(maxDate), 'month'), adapter.startOf(adapter.date(lastDay), 'month'), 'month');\n }\n return offset;\n}\n\nexport function getCalendars({\n date,\n selected,\n disabledDates,\n modifiers,\n monthsToDisplay,\n minDate,\n maxDate,\n offset,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate\n}: {\n date: Date,\n selected?: Date | Date[] | { start?: Date, end?: Date },\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n monthsToDisplay: number,\n minDate?: Date,\n maxDate?: Date,\n offset: number,\n firstDayOfWeek: number,\n showOutsideDays: boolean,\n adapter: DateAdapter,\n selectionMode: SelectionMode,\n hoveredDate?: Date\n}): Calendar[] {\n const calendars: Calendar[] = [];\n const startDate = adapter.add(adapter.startOf(adapter.date(date), 'month'), offset, 'month');\n\n for (let i = 0; i < monthsToDisplay; i++) {\n const currentMonth = adapter.add(startDate, i, 'month');\n calendars.push(getMonthData({\n month: adapter.get(currentMonth, 'month'),\n year: adapter.get(currentMonth, 'year'),\n selectedDates: selected,\n disabledDates,\n modifiers,\n minDate,\n maxDate,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate\n }));\n }\n\n return calendars;\n}\n\nfunction getMonthData({\n month,\n year,\n selectedDates,\n disabledDates,\n modifiers,\n minDate,\n maxDate,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate\n}: {\n month: number,\n year: number,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date },\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n minDate?: Date,\n maxDate?: Date,\n firstDayOfWeek: number,\n showOutsideDays: boolean,\n adapter: DateAdapter,\n selectionMode: 'single' | 'range' | 'multiple',\n hoveredDate?: Date\n}): Calendar {\n let currentMonth = adapter.set(adapter.set(adapter.date(), 'year', year), 'month', month);\n month = adapter.get(currentMonth, 'month');\n year = adapter.get(currentMonth, 'year');\n\n const daysInMonth = adapter.getDaysInMonth(currentMonth);\n const dates: (DateObj | null)[] = [];\n\n for (let day = 1; day <= daysInMonth; day++) {\n const date = adapter.toDate(adapter.set(currentMonth, 'day', day));\n const dateObj = createDateObj(date, selectedDates, disabledDates, modifiers, minDate, maxDate, adapter, selectionMode, false, hoveredDate, month, year);\n dates.push(dateObj);\n }\n\n const firstDayOfMonth = adapter.toDate(adapter.startOf(currentMonth, 'month'));\n const lastDayOfMonth = adapter.toDate(adapter.endOf(currentMonth, 'month'));\n\n const frontWeekBuffer = fillFrontWeek({\n firstDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n disabledDates,\n modifiers,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n });\n\n const backWeekBuffer = fillBackWeek({\n lastDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n disabledDates,\n modifiers,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n });\n\n dates.unshift(...frontWeekBuffer);\n dates.push(...backWeekBuffer);\n\n const weeks = getWeeks(dates);\n\n return {\n firstDayOfMonth,\n lastDayOfMonth,\n month,\n year,\n weeks\n };\n}\n\nfunction createDateObj(\n date: Date,\n selectedDates: Date | Date[] | { start?: Date, end?: Date } | undefined,\n disabledDates: Date[] | undefined,\n modifiers: Record<string, (date: Date, month: number, year: number) => boolean> | undefined,\n minDate: Date | undefined,\n maxDate: Date | undefined,\n adapter: DateAdapter,\n selectionMode: 'single' | 'range' | 'multiple',\n isOutside = false,\n hoveredDate?: Date,\n month?: number,\n year?: number\n): DateObj {\n const { selected, isRangeStart, isRangeEnd, isRangeBetween, isRangeHovering, isRangeActive } = isSelected(selectedDates, date, adapter, selectionMode, hoveredDate);\n const isToday = adapter.isSame(adapter.date(date), adapter.date(), \"day\");\n const isPrevMonth = isOutside && adapter.isBefore(adapter.date(date), adapter.startOf(adapter.date(date), 'month'));\n const isNextMonth = isOutside && adapter.isAfter(adapter.date(date), adapter.endOf(adapter.date(date), 'month'));\n\n const defaultModifiers: Record<string, (d: Date, m: number, y: number) => boolean> = {\n 'text-brand-gold border border-brand-gold': (d: Date) =>\n adapter.isSame(adapter.date(d), adapter.date(), 'day'),\n 'text-gray-400 opacity-50': (d: Date, m: number) =>\n adapter.get(adapter.date(d), 'month') !== m\n };\n const mergedModifiers: Record<string, (d: Date, m: number, y: number) => boolean> = { ...defaultModifiers, ...modifiers };\n\n const activeModifiers = Object.keys(mergedModifiers).filter(key =>\n mergedModifiers[key](date, month ?? adapter.get(adapter.date(date), 'month'), year ?? adapter.get(adapter.date(date), 'year'))\n );\n\n if (isToday) activeModifiers.push('today');\n if (isOutside) activeModifiers.push('outside');\n if (isPrevMonth) activeModifiers.push('prev-month');\n if (isNextMonth) activeModifiers.push('next-month');\n\n return {\n date,\n selected,\n modifiers: activeModifiers,\n selectable: isSelectable(minDate, maxDate, disabledDates, date, adapter),\n today: isToday,\n prevMonth: isPrevMonth,\n nextMonth: isNextMonth,\n isRangeStart,\n isRangeEnd,\n isRangeBetween,\n isRangeHovering,\n isRangeActive\n };\n}\n\nfunction fillFrontWeek({\n firstDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n disabledDates,\n modifiers,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n firstDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: any,\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n showOutsideDays: boolean,\n adapter: DateAdapter,\n selectionMode: any,\n hoveredDate?: Date,\n month: number,\n year: number\n}): (DateObj | null)[] {\n const dates: (DateObj | null)[] = [];\n let firstDay = (adapter.toDate(adapter.date(firstDayOfMonth)).getDay() + 7 - firstDayOfWeek) % 7;\n\n let current = adapter.subtract(adapter.date(firstDayOfMonth), 1, \"day\");\n for (let i = 0; i < firstDay; i++) {\n const date = adapter.toDate(current);\n const dateObj = createDateObj(date, selectedDates, disabledDates, modifiers, minDate, maxDate, adapter, selectionMode, true, hoveredDate, month, year);\n dateObj.prevMonth = true;\n if (!showOutsideDays) {\n dateObj.selectable = false;\n }\n dates.unshift(dateObj);\n current = adapter.subtract(current, 1, \"day\");\n }\n\n return dates;\n}\n\nfunction fillBackWeek({\n lastDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n disabledDates,\n modifiers,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n lastDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: any,\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n showOutsideDays: boolean,\n adapter: DateAdapter,\n selectionMode: any,\n hoveredDate?: Date,\n month: number,\n year: number\n}): (DateObj | null)[] {\n const dates: (DateObj | null)[] = [];\n let lastDay = (adapter.toDate(adapter.date(lastDayOfMonth)).getDay() + 7 - firstDayOfWeek) % 7;\n\n let current = adapter.add(adapter.date(lastDayOfMonth), 1, \"day\");\n for (let i = 0; i < 6 - lastDay; i++) {\n const date = adapter.toDate(current);\n const dateObj = createDateObj(date, selectedDates, disabledDates, modifiers, minDate, maxDate, adapter, selectionMode, true, hoveredDate, month, year);\n dateObj.nextMonth = true;\n if (!showOutsideDays) {\n dateObj.selectable = false;\n }\n dates.push(dateObj);\n current = adapter.add(current, 1, \"day\");\n }\n\n return dates;\n}\n\nfunction getWeeks(dates: (DateObj | null)[]): (DateObj | null)[][] {\n const weeksLength = Math.ceil(dates.length / 7);\n const weeks: (DateObj | null)[][] = [];\n for (let i = 0; i < weeksLength; i++) {\n weeks[i] = [];\n for (let x = 0; x < 7; x++) {\n weeks[i].push(dates[i * 7 + x]);\n }\n }\n return weeks;\n}\n\nfunction isSelected(\n selectedDates: Date | Date[] | { start?: Date, end?: Date } | undefined,\n date: Date,\n adapter: DateAdapter,\n selectionMode: 'single' | 'range' | 'multiple',\n hoveredDate?: Date\n): { selected: boolean, isRangeStart?: boolean, isRangeEnd?: boolean, isRangeBetween?: boolean, isRangeHovering?: boolean, isRangeActive?: boolean } {\n if (!selectedDates && !hoveredDate) return { selected: false };\n\n const d = adapter.date(date);\n\n if (selectionMode === 'single' && selectedDates instanceof Date) {\n return { selected: adapter.isSame(d, adapter.date(selectedDates), 'day') };\n }\n\n if (selectionMode === 'multiple' && Array.isArray(selectedDates)) {\n return { selected: selectedDates.some(sd => adapter.isSame(d, adapter.date(sd), 'day')) };\n }\n\n if (selectionMode === 'range') {\n const range = (selectedDates && typeof selectedDates === 'object' && !(selectedDates instanceof Date) && !Array.isArray(selectedDates)) ? (selectedDates as { start?: Date, end?: Date }) : { start: undefined, end: undefined };\n const { start, end } = range;\n\n let isStart = start ? adapter.isSame(d, adapter.date(start), 'day') : false;\n let isEnd = end ? adapter.isSame(d, adapter.date(end), 'day') : false;\n const isBetween = (start && end) ? (adapter.isAfter(d, adapter.date(start), 'day') && adapter.isBefore(d, adapter.date(end), 'day')) : false;\n\n let isHovering = false;\n if (start && !end && hoveredDate) {\n const h = adapter.date(hoveredDate);\n const s = adapter.date(start);\n if (adapter.isAfter(h, s, 'day')) {\n isHovering = (adapter.isAfter(d, s, 'day') && adapter.isBefore(d, h, 'day')) || adapter.isSame(d, h, 'day');\n if (adapter.isSame(d, h, 'day')) isEnd = true;\n } else if (adapter.isBefore(h, s, 'day')) {\n isHovering = (adapter.isAfter(d, h, 'day') && adapter.isBefore(d, s, 'day')) || adapter.isSame(d, h, 'day');\n if (adapter.isSame(d, h, 'day')) {\n isStart = true;\n }\n if (adapter.isSame(d, s, 'day')) {\n isStart = false;\n isEnd = true;\n }\n }\n }\n\n const isRangeActive = !!(\n (start && end && !adapter.isSame(adapter.date(start), adapter.date(end), 'day')) ||\n (start && !end && hoveredDate && !adapter.isSame(adapter.date(start), adapter.date(hoveredDate), 'day'))\n );\n\n return {\n selected: isStart || isEnd || isBetween,\n isRangeStart: isStart,\n isRangeEnd: isEnd,\n isRangeBetween: isBetween,\n isRangeHovering: isHovering,\n isRangeActive\n };\n }\n\n if (Array.isArray(selectedDates) && selectedDates.length === 1 && selectionMode === 'single') {\n return { selected: adapter.isSame(d, adapter.date(selectedDates[0]), 'day') };\n }\n\n return { selected: false };\n}\n\nfunction isSelectable(minDate: Date | undefined, maxDate: Date | undefined, disabledDates: Date[] | undefined, date: Date, adapter: DateAdapter): boolean {\n const d = adapter.date(date);\n const isMinDateInvalid = minDate && adapter.isBefore(d, adapter.date(minDate), 'day');\n const isMaxDateInvalid = maxDate && adapter.isAfter(d, adapter.date(maxDate), 'day');\n const isDisabled = disabledDates?.some(disabledDate => adapter.isSame(d, adapter.date(disabledDate), 'day'));\n return !isMinDateInvalid && !isMaxDateInvalid && !isDisabled;\n}\n\nexport function isBackDisabled({\n calendars,\n minDate,\n adapter\n}: {\n calendars: Calendar[],\n minDate?: Date,\n adapter: DateAdapter\n}): boolean {\n if (!minDate) {\n return false;\n }\n const firstDay = calendars[0].firstDayOfMonth;\n return adapter.isSame(adapter.startOf(adapter.date(firstDay), 'month'), adapter.startOf(adapter.date(minDate), 'month'), 'month') || adapter.isBefore(adapter.date(firstDay), adapter.date(minDate), 'month');\n}\n\nexport function isForwardDisabled({\n calendars,\n maxDate,\n adapter\n}: {\n calendars: Calendar[],\n maxDate?: Date,\n adapter: DateAdapter\n}): boolean {\n if (!maxDate) {\n return false;\n }\n const lastDay = calendars[calendars.length - 1].firstDayOfMonth;\n return adapter.isSame(adapter.startOf(adapter.date(lastDay), 'month'), adapter.startOf(adapter.date(maxDate), 'month'), 'month') || adapter.isAfter(adapter.date(lastDay), adapter.date(maxDate), 'month');\n}\n"],"mappings":"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"}