react-modular-datepicker 0.0.3 → 0.0.5-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,17 @@
1
1
  {
2
2
  "name": "react-modular-datepicker",
3
- "version": "0.0.3",
4
- "description": "Another react datepicker",
3
+ "version": "0.0.5-canary.0",
4
+ "description": "A modular, lightweight, and type-safe React datepicker and calendar component with headless hooks for single, multiple, and range selection.",
5
+ "author": "",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/Dragate/react-modular-datepicker#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/Dragate/react-modular-datepicker.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/Dragate/react-modular-datepicker/issues"
14
+ },
5
15
  "keywords": [
6
16
  "react",
7
17
  "react-component",
@@ -26,8 +36,12 @@
26
36
  "i18n",
27
37
  "localization"
28
38
  ],
29
- "author": "",
30
- "license": "MIT",
39
+ "files": [
40
+ "dist"
41
+ ],
42
+ "main": "./dist/index.js",
43
+ "module": "./dist/index.mjs",
44
+ "types": "./dist/index.d.ts",
31
45
  "peerDependencies": {
32
46
  "dayjs": "^1.11.20",
33
47
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
@@ -39,67 +53,17 @@
39
53
  }
40
54
  },
41
55
  "devDependencies": {
42
- "@playwright/test": "^1.60.0",
43
- "@tailwindcss/cli": "^4.3.0",
56
+ "@playwright/test": "^1.63.0",
57
+ "@tailwindcss/cli": "^4.3.3",
44
58
  "@tailwindcss/vite": "^4.3.3",
45
- "@types/react": "^19.2.15",
46
- "@types/react-dom": "^19.2.3",
59
+ "@types/react": "^19.3.0",
60
+ "@types/react-dom": "^19.3.0",
47
61
  "@vitejs/plugin-react": "^6.1.1",
48
- "dayjs": "^1.11.20",
49
- "react": "^19.2.6",
50
- "react-dom": "^19.2.6",
51
- "semver": "^7.8.1",
52
- "tailwindcss": "^4.3.0",
62
+ "semver": "^7.8.5",
63
+ "tailwindcss": "^4.3.3",
53
64
  "typescript": "^6.0.3",
54
- "vite": "^8.3.0",
55
- "vite-plugin-dts": "^5.1.0"
56
- },
57
- "repository": {
58
- "type": "git",
59
- "url": "git+https://github.com/Dragate/react-modular-datepicker.git"
60
- },
61
- "homepage": "https://github.com/Dragate/react-modular-datepicker#readme",
62
- "bugs": {
63
- "url": "https://github.com/Dragate/react-modular-datepicker/issues"
64
- },
65
- "files": [
66
- "dist"
67
- ],
68
- "main": "./dist/index.js",
69
- "module": "./dist/index.mjs",
70
- "types": "./dist/index.d.ts",
71
- "exports": {
72
- ".": {
73
- "import": {
74
- "types": "./dist/index.d.ts",
75
- "default": "./dist/index.mjs"
76
- },
77
- "require": {
78
- "types": "./dist/index.d.ts",
79
- "default": "./dist/index.js"
80
- }
81
- },
82
- "./useDates": {
83
- "import": {
84
- "types": "./dist/useDates.d.ts",
85
- "default": "./dist/useDates.mjs"
86
- },
87
- "require": {
88
- "types": "./dist/useDates.d.ts",
89
- "default": "./dist/useDates.js"
90
- }
91
- },
92
- "./utils": {
93
- "import": {
94
- "types": "./dist/utils.d.ts",
95
- "default": "./dist/utils.mjs"
96
- },
97
- "require": {
98
- "types": "./dist/utils.d.ts",
99
- "default": "./dist/utils.js"
100
- }
101
- },
102
- "./dist/index.css": "./dist/index.css"
65
+ "unplugin-dts": "^1.1.0",
66
+ "vite": "^8.3.0"
103
67
  },
104
68
  "scripts": {
105
69
  "dev": "pnpm run -p \"/^dev:.*/\"",
@@ -109,6 +73,8 @@
109
73
  "build": "pnpm run build:js && pnpm run build:css",
110
74
  "build:js": "vite build",
111
75
  "build:css": "tailwindcss -i src/index.css -o dist/index.css",
112
- "test:e2e": "playwright test"
76
+ "test": "playwright test",
77
+ "test:unit": "playwright test --project=unit",
78
+ "test:e2e": "playwright test --project=e2e"
113
79
  }
114
80
  }
@@ -1,2 +0,0 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));const c=require("./utils.js");let l=require("react"),u=require("dayjs");u=s(u);let d=require("dayjs/plugin/isBetween");d=s(d);let f=require("dayjs/plugin/customParseFormat");f=s(f);let p=require("dayjs/plugin/localeData");p=s(p),u.default.extend(d.default),u.default.extend(f.default),u.default.extend(p.default);var m=class{date(e){return(0,u.default)(e)}add(e,t,n){return e.add(t,n)}subtract(e,t,n){return e.subtract(t,n)}startOf(e,t){return e.startOf(t)}endOf(e,t){return e.endOf(t)}isBefore(e,t,n){return e.isBefore(t,n)}isAfter(e,t,n){return e.isAfter(t,n)}isSame(e,t,n){return e.isSame(t,n)}set(e,t,n){return t===`day`?e.date(n):e.set(t,n)}get(e,t){return t===`day`?e.date():e.get(t)}format(e,t,n){return n?e.locale(n).format(t):e.format(t)}getDaysInMonth(e){return e.daysInMonth()}toDate(e){return e.toDate()}diff(e,t,n){return e.diff(t,n)}getMonths(e){return e?(0,u.default)().locale(e).localeData().months():u.default.localeData().months()}getWeekdays(e){return e?(0,u.default)().locale(e).localeData().weekdaysShort().map(e=>e.toUpperCase()):u.default.localeData().weekdaysShort().map(e=>e.toUpperCase())}},h=new m;function g(e){return e!==void 0}function _(e,t=0){return g(e)?e:t}function v(e,{onClick:t,dateObj:n,...r}){return{onClick:c.composeEventHandlers(t,t=>{e(n,t)}),disabled:!n.selectable,"aria-label":n.date.toDateString(),"aria-pressed":n.selected,role:`button`,...r}}function y({minDate:e,offsetMonth:t,handleOffsetChanged:n,adapter:r},{onClick:i,offset:a=1,calendars:o,...s}){return{onClick:c.composeEventHandlers(i,()=>{n(t-c.subtractMonth({calendars:o,offset:a,minDate:e,adapter:r}))}),disabled:c.isBackDisabled({calendars:o,minDate:e,adapter:r}),"aria-label":`Go back ${a} month${a===1?``:`s`}`,...s}}function b({maxDate:e,offsetMonth:t,handleOffsetChanged:n,adapter:r},{onClick:i,offset:a=1,calendars:o,...s}){return{onClick:c.composeEventHandlers(i,()=>{n(t+c.addMonth({calendars:o,offset:a,maxDate:e,adapter:r}))}),disabled:c.isForwardDisabled({calendars:o,maxDate:e,adapter:r}),"aria-label":`Go forward ${a} month${a===1?``:`s`}`,...s}}function x({date:e=new Date,maxDate:t,minDate:n,disabledDates:r,monthsToDisplay:i=1,firstDayOfWeek:a=0,showOutsideDays:o=!1,offset:s,onDateSelected:u,onOffsetChanged:d=()=>{},selected:f,modifiers:p,selectionMode:m=`single`,adapter:x=h,onChange:S,onMonthChange:C,onYearChange:w}){let[T,E]=(0,l.useState)(0),[D,O]=(0,l.useState)(void 0),k=_(s,T),A=(0,l.useCallback)(t=>{g(s)||E(t),d(t);let n=x.toDate(x.add(x.startOf(x.date(e),`month`),t,`month`));C?.(n),w?.(n)},[s,d,e,x,C,w]),j=(0,l.useCallback)((e,t)=>{if(u?.(e,t),S){if(m===`single`)S(e.date);else if(m===`multiple`){let t=Array.isArray(f)?f:f?[f]:[];t.some(t=>x.isSame(x.date(t),x.date(e.date),`day`))?S(t.filter(t=>!x.isSame(x.date(t),x.date(e.date),`day`))):S([...t,e.date])}else if(m===`range`){let t=f&&typeof f==`object`&&!(f instanceof Date)&&!Array.isArray(f)?f:{start:void 0,end:void 0};!t.start||t.start&&t.end?S({start:e.date,end:void 0}):x.isBefore(x.date(e.date),x.date(t.start),`day`)?S({start:e.date,end:t.start}):S({start:t.start,end:e.date})}}},[u,S,m,f,x]);return{calendars:c.getCalendars({date:e,selected:f,disabledDates:r,modifiers:p,monthsToDisplay:i,minDate:n,maxDate:t,offset:k,firstDayOfWeek:a,showOutsideDays:o,adapter:x,selectionMode:m,hoveredDate:D}),getDateProps:e=>({...v(j,e),onMouseEnter:c.composeEventHandlers(e.onMouseEnter,()=>{O(e.dateObj.date)}),onMouseLeave:c.composeEventHandlers(e.onMouseLeave,()=>{O(void 0)})}),getBackProps:y.bind(null,{minDate:n,offsetMonth:k,handleOffsetChanged:A,adapter:x}),getForwardProps:b.bind(null,{maxDate:t,offsetMonth:k,handleOffsetChanged:A,adapter:x}),setOffset:A}}Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return x}});
2
- //# sourceMappingURL=useDates-D9EvVlhK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDates-D9EvVlhK.js","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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"}
@@ -1 +0,0 @@
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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"}