react-modular-datepicker 0.0.10-canary.0 → 0.0.10-canary.1

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/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useDates-XnHKc0Cv.cjs"),t=require("./utils.cjs");let n=require("react");n=e.i(n,1);let r=require("react/jsx-runtime");function i(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=i(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n)}return r}function a(){for(var e,t,n=0,r=``,a=arguments.length;n<a;n++)(e=arguments[n])&&(t=i(e))&&(r&&(r+=` `),r+=t);return r}function o(t=e.r,n){return{months:t.getMonths(n),weekdays:t.getWeekdays(n),back:`Previous month`,forward:`Next month`,selectMonth:`Select month`,selectYear:`Select year`}}function s(t=e.r,n,r){return{...o(t,n),...r}}var c=()=>(0,r.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,r.jsx)(`polyline`,{points:`15 18 9 12 15 6`})}),l=()=>(0,r.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,r.jsx)(`polyline`,{points:`9 18 15 12 9 6`})}),u=({calendars:e,getBackProps:t,getForwardProps:n,setView:i,monthNames:o,t:s,classNames:u,slideDirection:d,currentView:f})=>{if(e.length>1&&e.length<12)return null;let p=e[0],m=e[e.length-1],h=!!(f&&f!==`days`),g=a(`rmd-nav-button`,h&&`rmd-nav-button-hidden`,u?.navButton,h&&u?.navButtonHidden),_=a(`rmd-month-year-label`,d===`left`&&`rmd-slide-left`,d===`right`&&`rmd-slide-right`,u?.monthYearLabel);return(0,r.jsxs)(`div`,{className:a(`rmd-header`,e.length>1&&`rmd-header-multi-month`,u?.header,e.length>1&&u?.headerMultiMonth),children:[(0,r.jsx)(`button`,{...t({calendars:e}),className:g,"aria-label":s.back,children:(0,r.jsx)(c,{})}),(0,r.jsx)(`div`,{className:a(`rmd-month-year-container`,u?.monthYearContainer),children:e.length===1?(0,r.jsxs)(`div`,{className:_,children:[(0,r.jsx)(`button`,{onClick:()=>i(f===`months`?`days`:`months`),className:a(`rmd-month-year-button`,u?.monthYearButton),"aria-label":`${o[e[0].month]}, ${s.selectMonth||`Select month`}`,"aria-expanded":f===`months`,children:o[e[0].month]}),(0,r.jsx)(`button`,{onClick:()=>i(f===`years`?`days`:`years`),className:a(`rmd-month-year-button`,u?.monthYearButton),"aria-label":`${e[0].year}, ${s.selectYear||`Select year`}`,"aria-expanded":f===`years`,children:e[0].year})]},`${e[0].month}-${e[0].year}`):(0,r.jsx)(`div`,{className:_,children:(0,r.jsx)(`span`,{children:p.year===m.year?p.year:`${p.year} - ${m.year}`})})}),(0,r.jsx)(`button`,{...n({calendars:e}),className:g,"aria-label":s.forward,children:(0,r.jsx)(l,{})})]})},d=({dateObj:e,getDateProps:t,dayProps:n,classNames:i,tabIndex:o=-1,adapter:s,locale:c,onKeyDown:l,onFocus:u,buttonRef:d})=>{if(!e)return(0,r.jsx)(`div`,{role:`gridcell`,"aria-hidden":`true`,className:a(`rmd-day-empty`,i?.day?.empty)});let{date:f,selected:p,selectable:m,isRangeStart:h,isRangeEnd:g,isRangeBetween:_,isRangeHovering:v,isRangeActive:y}=e,b=i?.day,x=``,S=``;h&&g?(x=`rmd-day-selected`,S=b?.selected||``):h?(x=a(`rmd-day-range-start`,y&&`rmd-day-range-active`),S=b?.rangeStart||``):g?(x=a(`rmd-day-range-end`,y&&`rmd-day-range-active`),S=b?.rangeEnd||``):_?(x=`rmd-day-range-between`,S=b?.rangeBetween||``):v?(x=`rmd-day-range-hovering`,S=b?.rangeHovering||``):p?(x=`rmd-day-selected`,S=b?.selected||``):m?(x=`rmd-day-unselected`,S=b?.unselected||``):(x=`rmd-day-disabled`,S=b?.disabled||``);let C=(e.modifiers||[]).map(e=>b?.[e]||e).filter(Boolean),w=s?s.format(s.date(f),`dddd, MMMM D, YYYY`,c):f.toDateString(),T=!!(p||h||g),E=t({dateObj:e,...n});return(0,r.jsx)(`button`,{role:`gridcell`,"aria-selected":T,"aria-disabled":!m,"aria-label":w,tabIndex:o,...E,ref:d,onKeyDown:t=>{E.onKeyDown?.(t),l?.(t,e)},onFocus:t=>{E.onFocus?.(t),u?.(e)},className:a(`rmd-day`,b?.day,x,S,C),children:f.getDate()})},f=({year:e,month:t,monthNames:i,minDate:o,maxDate:s,onMonthSelect:c,classNames:l})=>{let[u,d]=(0,n.useState)(t),f=(0,n.useRef)([]);(0,n.useEffect)(()=>{f.current[u]?.focus()},[u]);let p=t=>!!(o&&e===o.getFullYear()&&t<o.getMonth()||s&&e===s.getFullYear()&&t>s.getMonth()),m=(e,t)=>{let n=u;switch(e.key){case`ArrowLeft`:e.preventDefault(),n=(t-1+12)%12;break;case`ArrowRight`:e.preventDefault(),n=(t+1)%12;break;case`ArrowUp`:e.preventDefault(),n=(t-3+12)%12;break;case`ArrowDown`:e.preventDefault(),n=(t+3)%12;break;case`Home`:e.preventDefault(),n=0;break;case`End`:e.preventDefault(),n=11;break;case`Enter`:case` `:e.preventDefault(),p(t)||c(t);return;default:return}d(n)},h=a(`rmd-months-grid`,l?.monthsGrid);return(0,r.jsx)(`div`,{role:`grid`,"aria-label":`Select month`,className:h,children:i.map((e,n)=>{let i=p(n),o=n===t,s=n===u,h=a(`rmd-month-button`,o?`rmd-month-button-selected`:`rmd-month-button-unselected`,l?.monthButton,o?l?.monthButtonSelected:l?.monthButtonUnselected);return(0,r.jsx)(`button`,{ref:e=>{f.current[n]=e},role:`gridcell`,"aria-selected":o,"aria-disabled":i,tabIndex:s?0:-1,onClick:()=>!i&&c(n),onKeyDown:e=>m(e,n),onFocus:()=>d(n),className:h,disabled:i,children:e},e)})})},p=({year:e,minDate:t,maxDate:i,adapter:o,onYearSelect:s,classNames:c})=>{let l=(0,n.useRef)(null),[u,d]=(0,n.useState)(e),f=(0,n.useRef)(new Map),p=t?o.get(o.date(t),`year`):e-50,m=i?o.get(o.date(i),`year`):e+50,h=[];for(let e=p;e<=m;e++)h.push(e);(0,n.useEffect)(()=>{if(l.current){let e=l.current,t=e.querySelector(`[data-selected="true"]`);if(t){let n=t.offsetTop-e.clientHeight/2+t.clientHeight/2;e.scrollTop=Math.max(0,n)}}},[]),(0,n.useEffect)(()=>{let e=f.current.get(u);e&&e.focus()},[u]);let g=(e,t)=>{let n=u;switch(e.key){case`ArrowLeft`:e.preventDefault(),n=Math.max(p,t-1);break;case`ArrowRight`:e.preventDefault(),n=Math.min(m,t+1);break;case`ArrowUp`:e.preventDefault(),n=Math.max(p,t-3);break;case`ArrowDown`:e.preventDefault(),n=Math.min(m,t+3);break;case`PageUp`:e.preventDefault(),n=Math.max(p,t-10);break;case`PageDown`:e.preventDefault(),n=Math.min(m,t+10);break;case`Home`:e.preventDefault(),n=p;break;case`End`:e.preventDefault(),n=m;break;case`Enter`:case` `:e.preventDefault(),s(t);return;default:return}d(n)};return(0,r.jsx)(`div`,{ref:l,role:`grid`,"aria-label":`Select year`,className:a(`rmd-years-grid`,c?.yearsGrid),children:h.map(t=>{let n=t===e,i=t===u,o=a(`rmd-year-button`,n?`rmd-year-button-selected`:`rmd-year-button-unselected`,c?.yearButton,n?c?.yearButtonSelected:c?.yearButtonUnselected);return(0,r.jsx)(`button`,{ref:e=>{e?f.current.set(t,e):f.current.delete(t)},"data-selected":n,role:`gridcell`,"aria-selected":n,tabIndex:i?0:-1,onClick:()=>s(t),onKeyDown:e=>g(e,t),onFocus:()=>d(t),className:o,children:t},t)})})},m=e=>`${e.getFullYear()}-${e.getMonth()}-${e.getDate()}`,h=t=>{let{classNames:i,locale:o,translations:h,adapter:g=e.r,firstDayOfWeek:_=0,header:v,footer:y,getDayProps:b,...x}=t,[S,C]=(0,n.useState)(`days`),[w,T]=(0,n.useState)(null),[E,D]=(0,n.useState)(null),[O,k]=(0,n.useState)(null),[A,j]=(0,n.useState)(``),M=(0,n.useRef)(null),N=(0,n.useRef)(null),P=(0,n.useRef)(new Map),F=(0,n.useRef)(!1),I=s(g,o,h),L=I.weekdays,R=I.months,{calendars:z,getBackProps:B,getForwardProps:V,getDateProps:H,setOffset:U}=e.t({...x,adapter:g,firstDayOfWeek:_});(0,n.useEffect)(()=>{if(S===`days`&&M.current){let e=M.current,t=()=>{e.offsetHeight>0&&D(e.offsetHeight)};if(t(),typeof ResizeObserver<`u`){let n=new ResizeObserver(()=>{t()});return n.observe(e),()=>n.disconnect()}}},[S,z]),(0,n.useEffect)(()=>{S===`days`&&z.length>0?z.length===1?j(`${R[z[0].month]} ${z[0].year}`):j(`${R[z[0].month]} ${z[0].year} to ${R[z[z.length-1].month]} ${z[z.length-1].year}`):S===`months`?j(`Month selection view`):S===`years`&&j(`Year selection view`)},[S,z,R]);let W=(0,n.useMemo)(()=>{for(let e of z)for(let t of e.weeks)for(let e of t)if(e?.selectable&&e.selected)return e.date;for(let e of z)for(let t of e.weeks)for(let e of t)if(e?.selectable&&e.today)return e.date;for(let e of z)for(let t of e.weeks)for(let e of t)if(e?.selectable&&!e.prevMonth&&!e.nextMonth)return e.date;return z[0]?.weeks[0]?.find(e=>e?.selectable)?.date||new Date},[z]),G=O||W;(0,n.useEffect)(()=>{if(S===`days`&&G&&F.current){let e=m(G),t=P.current.get(e);t&&t.focus()}},[G,z,S]);let K=[...L.slice(_),...L.slice(0,_)],{month:q,year:J}=z[0],Y=e=>{let n=g.set(g.set(g.date(t.date||new Date),`year`,J),`month`,q),r=g.set(n,`month`,e),i=g.startOf(g.date(t.date||new Date),`month`),a=g.diff(r,i,`month`);T(null),U(a),C(`days`)},X=e=>{let n=g.set(g.set(g.date(t.date||new Date),`year`,J),`month`,q),r=g.set(n,`year`,e),i=g.startOf(g.date(t.date||new Date),`month`),a=g.diff(r,i,`month`);T(null),U(a),C(`days`)},Z=x.monthsToDisplay||1,Q=e=>{let t=B({offset:Z,...e});return{...t,onClick:e=>{T(`left`),t.onClick?.(e)}}},$=e=>{let t=V({offset:Z,...e});return{...t,onClick:e=>{T(`right`),t.onClick?.(e)}}},ee=(e,n)=>{let r=!!(N.current?.closest(`[dir="rtl"]`)||typeof document<`u`&&document.documentElement.dir===`rtl`),i=null,a=g.date(n.date);switch(e.key){case`ArrowLeft`:e.preventDefault(),i=g.toDate(g.add(a,r?1:-1,`day`));break;case`ArrowRight`:e.preventDefault(),i=g.toDate(g.add(a,r?-1:1,`day`));break;case`ArrowUp`:e.preventDefault(),i=g.toDate(g.subtract(a,7,`day`));break;case`ArrowDown`:e.preventDefault(),i=g.toDate(g.add(a,7,`day`));break;case`Home`:{e.preventDefault();let t=(g.toDate(a).getDay()-_+7)%7;i=g.toDate(g.subtract(a,t,`day`));break}case`End`:{e.preventDefault();let t=6-(g.toDate(a).getDay()-_+7)%7;i=g.toDate(g.add(a,t,`day`));break}case`PageUp`:{e.preventDefault();let t=e.shiftKey?`year`:`month`;i=g.toDate(g.subtract(a,1,t));break}case`PageDown`:{e.preventDefault();let t=e.shiftKey?`year`:`month`;i=g.toDate(g.add(a,1,t));break}case`Enter`:case` `:return;default:return}if(i){F.current=!0,k(i);let e=g.startOf(g.date(t.date||new Date),`month`),n=g.startOf(g.date(i),`month`),r=g.diff(n,e,`month`);U(r)}};return(0,r.jsxs)(`div`,{ref:N,className:a(`rmd`,`rmd-root`,i?.root),children:[(0,r.jsx)(`div`,{className:`rmd-sr-only`,"aria-live":`polite`,"aria-atomic":`true`,children:A}),typeof v==`function`?v({calendars:z,getBackProps:Q,getForwardProps:$,setView:C,monthNames:R,t:I,slideDirection:w,currentView:S}):v||(0,r.jsx)(u,{calendars:z,getBackProps:Q,getForwardProps:$,setView:C,monthNames:R,t:I,classNames:i,slideDirection:w,currentView:S}),(0,r.jsxs)(`div`,{className:a(`rmd-calendars-container`,i?.calendarsContainer),children:[S===`months`&&z.map(e=>(0,r.jsx)(`div`,{className:a(`rmd-calendar-container`,i?.calendarContainer),style:E?{height:`${E}px`}:void 0,children:(0,r.jsx)(f,{year:e.year,month:e.month,monthNames:R,minDate:t.minDate,maxDate:t.maxDate,onMonthSelect:Y,classNames:i})},`months-${e.year}`)),S===`years`&&z.map(e=>(0,r.jsx)(`div`,{className:a(`rmd-calendar-container`,i?.calendarContainer),style:E?{height:`${E}px`}:void 0,children:(0,r.jsx)(p,{year:e.year,minDate:t.minDate,maxDate:t.maxDate,adapter:g,onYearSelect:X,classNames:i})},`years-${e.year}`)),S===`days`&&z.map((e,t)=>(0,r.jsxs)(`div`,{ref:t===0?M:void 0,role:`grid`,"aria-label":`${R[e.month]} ${e.year}`,className:a(`rmd-calendar-container`,i?.calendarContainer),children:[z.length>1&&(0,r.jsxs)(`div`,{className:a(`rmd-header`,i?.header),children:[(0,r.jsx)(`div`,{className:a(`rmd-nav-button-slot-start`,i?.navButtonSlotStart),children:t===0&&z.length<12&&(0,r.jsx)(`button`,{...Q({calendars:z}),className:a(`rmd-nav-button`,i?.navButton),"aria-label":I.back,children:(0,r.jsx)(c,{})})}),(0,r.jsxs)(`span`,{className:a(`rmd-header-title-container`,i?.headerTitleContainer),children:[R[e.month],z.length<12?` ${e.year}`:``]}),(0,r.jsx)(`div`,{className:a(`rmd-nav-button-slot-end`,i?.navButtonSlotEnd),children:t===z.length-1&&z.length<12&&(0,r.jsx)(`button`,{...$({calendars:z}),className:a(`rmd-nav-button`,i?.navButton),"aria-label":I.forward,children:(0,r.jsx)(l,{})})})]}),(0,r.jsx)(`div`,{role:`row`,className:a(`rmd-weekday-grid`,i?.weekdayGrid),children:K.map(e=>(0,r.jsx)(`div`,{role:`columnheader`,"aria-label":e,className:a(`rmd-weekday`,i?.weekday),children:e},e))}),(0,r.jsx)(`div`,{role:`row`,className:a(`rmd-days-grid`,w===`left`&&`rmd-slide-left`,w===`right`&&`rmd-slide-right`,i?.daysGrid),children:e.weeks.map((e,t)=>e.map((e,n)=>{if(!e)return(0,r.jsx)(d,{dateObj:null,getDateProps:H,classNames:i},`${t}-${n}`);let a=m(e.date),s=g.isSame(g.date(e.date),g.date(G),`day`);return(0,r.jsx)(d,{dateObj:e,getDateProps:H,dayProps:b?.(e),classNames:i,tabIndex:s?0:-1,adapter:g,locale:o,onKeyDown:ee,onFocus:e=>{k(e.date)},buttonRef:e=>{e?P.current.set(a,e):P.current.delete(a)}},`${t}-${n}`)}))},`daysGrid-${e.month}-${e.year}`)]},`${e.month}-${e.year}`))]}),y&&(0,r.jsx)(`div`,{className:a(`rmd-footer`,i?.footer),children:y})]})};exports.Calendar=h,exports.CalendarHeader=u,exports.ChevronLeftIcon=c,exports.ChevronRightIcon=l,exports.Day=d,exports.DayjsAdapter=e.n,exports.MonthSelection=f,exports.YearSelection=p,exports.addMonth=t.addMonth,exports.composeEventHandlers=t.composeEventHandlers,exports.defaultAdapter=e.r,exports.getCalendars=t.getCalendars,exports.getDefaults=o,exports.getTranslations=s,exports.isBackDisabled=t.isBackDisabled,exports.isForwardDisabled=t.isForwardDisabled,exports.subtractMonth=t.subtractMonth,exports.useDates=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useDates-bLtR7Prk.cjs"),t=require("./utils.cjs");let n=require("react");n=e.i(n,1);let r=require("react/jsx-runtime");function i(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=i(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n)}return r}function a(){for(var e,t,n=0,r=``,a=arguments.length;n<a;n++)(e=arguments[n])&&(t=i(e))&&(r&&(r+=` `),r+=t);return r}function o(t=e.r,n){return{months:t.getMonths(n),weekdays:t.getWeekdays(n),back:`Previous month`,forward:`Next month`,selectMonth:`Select month`,selectYear:`Select year`}}function s(t=e.r,n,r){return{...o(t,n),...r}}var c=()=>(0,r.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,r.jsx)(`polyline`,{points:`15 18 9 12 15 6`})}),l=()=>(0,r.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,r.jsx)(`polyline`,{points:`9 18 15 12 9 6`})}),u=({calendars:e,getBackProps:t,getForwardProps:n,setView:i,monthNames:o,t:s,classNames:u,slideDirection:d,currentView:f})=>{if(e.length>1&&e.length<12)return null;let p=e[0],m=e[e.length-1],h=!!(f&&f!==`days`),g=a(`rmd-nav-button`,h&&`rmd-nav-button-hidden`,u?.navButton,h&&u?.navButtonHidden),_=a(`rmd-month-year-label`,d===`left`&&`rmd-slide-left`,d===`right`&&`rmd-slide-right`,u?.monthYearLabel);return(0,r.jsxs)(`div`,{className:a(`rmd-header`,e.length>1&&`rmd-header-multi-month`,u?.header,e.length>1&&u?.headerMultiMonth),children:[(0,r.jsx)(`button`,{...t({calendars:e}),className:g,"aria-label":s.back,children:(0,r.jsx)(c,{})}),(0,r.jsx)(`div`,{className:a(`rmd-month-year-container`,u?.monthYearContainer),children:e.length===1?(0,r.jsxs)(`div`,{className:_,children:[(0,r.jsx)(`button`,{onClick:()=>i(f===`months`?`days`:`months`),className:a(`rmd-month-year-button`,u?.monthYearButton),"aria-label":`${o[e[0].month]}, ${s.selectMonth||`Select month`}`,"aria-expanded":f===`months`,children:o[e[0].month]}),(0,r.jsx)(`button`,{onClick:()=>i(f===`years`?`days`:`years`),className:a(`rmd-month-year-button`,u?.monthYearButton),"aria-label":`${e[0].year}, ${s.selectYear||`Select year`}`,"aria-expanded":f===`years`,children:e[0].year})]},`${e[0].month}-${e[0].year}`):(0,r.jsx)(`div`,{className:_,children:(0,r.jsx)(`span`,{children:p.year===m.year?p.year:`${p.year} - ${m.year}`})})}),(0,r.jsx)(`button`,{...n({calendars:e}),className:g,"aria-label":s.forward,children:(0,r.jsx)(l,{})})]})},d=({dateObj:e,getDateProps:t,dayProps:n,classNames:i,tabIndex:o=-1,adapter:s,locale:c,onKeyDown:l,onFocus:u,buttonRef:d})=>{if(!e)return(0,r.jsx)(`div`,{role:`gridcell`,"aria-hidden":`true`,className:a(`rmd-day-empty`,i?.day?.empty)});let{date:f,selected:p,selectable:m,isRangeStart:h,isRangeEnd:g,isRangeBetween:_,isRangeHovering:v,isRangeActive:y}=e,b=i?.day,x=``,S=``;h&&g?(x=`rmd-day-selected`,S=b?.selected||``):h?(x=a(`rmd-day-range-start`,y&&`rmd-day-range-active`),S=b?.rangeStart||``):g?(x=a(`rmd-day-range-end`,y&&`rmd-day-range-active`),S=b?.rangeEnd||``):_?(x=`rmd-day-range-between`,S=b?.rangeBetween||``):v?(x=`rmd-day-range-hovering`,S=b?.rangeHovering||``):p?(x=`rmd-day-selected`,S=b?.selected||``):m?(x=`rmd-day-unselected`,S=b?.unselected||``):(x=`rmd-day-disabled`,S=b?.disabled||``);let C=(e.modifiers||[]).map(e=>b?.[e]||e).filter(Boolean),w=s?s.format(s.date(f),`dddd, MMMM D, YYYY`,c):f.toDateString(),T=!!(p||h||g),E=t({dateObj:e,...n});return(0,r.jsx)(`button`,{role:`gridcell`,"aria-selected":T,"aria-disabled":!m,"aria-label":w,tabIndex:o,...E,ref:d,onKeyDown:t=>{E.onKeyDown?.(t),l?.(t,e)},onFocus:t=>{E.onFocus?.(t),u?.(e)},className:a(`rmd-day`,b?.day,x,S,C),children:f.getDate()})},f=({year:e,month:t,monthNames:i,minDate:o,maxDate:s,onMonthSelect:c,classNames:l})=>{let[u,d]=(0,n.useState)(t),f=(0,n.useRef)([]);(0,n.useEffect)(()=>{f.current[u]?.focus()},[u]);let p=t=>!!(o&&e===o.getFullYear()&&t<o.getMonth()||s&&e===s.getFullYear()&&t>s.getMonth()),m=(e,t)=>{let n=u;switch(e.key){case`ArrowLeft`:e.preventDefault(),n=(t-1+12)%12;break;case`ArrowRight`:e.preventDefault(),n=(t+1)%12;break;case`ArrowUp`:e.preventDefault(),n=(t-3+12)%12;break;case`ArrowDown`:e.preventDefault(),n=(t+3)%12;break;case`Home`:e.preventDefault(),n=0;break;case`End`:e.preventDefault(),n=11;break;case`Enter`:case` `:e.preventDefault(),p(t)||c(t);return;default:return}d(n)},h=a(`rmd-months-grid`,l?.monthsGrid);return(0,r.jsx)(`div`,{role:`grid`,"aria-label":`Select month`,className:h,children:i.map((e,n)=>{let i=p(n),o=n===t,s=n===u,h=a(`rmd-month-button`,o?`rmd-month-button-selected`:`rmd-month-button-unselected`,l?.monthButton,o?l?.monthButtonSelected:l?.monthButtonUnselected);return(0,r.jsx)(`button`,{ref:e=>{f.current[n]=e},role:`gridcell`,"aria-selected":o,"aria-disabled":i,tabIndex:s?0:-1,onClick:()=>!i&&c(n),onKeyDown:e=>m(e,n),onFocus:()=>d(n),className:h,disabled:i,children:e},e)})})},p=({year:e,minDate:t,maxDate:i,adapter:o,onYearSelect:s,classNames:c})=>{let l=(0,n.useRef)(null),[u,d]=(0,n.useState)(e),f=(0,n.useRef)(new Map),p=t?o.get(o.date(t),`year`):e-50,m=i?o.get(o.date(i),`year`):e+50,h=[];for(let e=p;e<=m;e++)h.push(e);(0,n.useEffect)(()=>{if(l.current){let e=l.current,t=e.querySelector(`[data-selected="true"]`);if(t){let n=t.offsetTop-e.clientHeight/2+t.clientHeight/2;e.scrollTop=Math.max(0,n)}}},[]),(0,n.useEffect)(()=>{let e=f.current.get(u);e&&e.focus()},[u]);let g=(e,t)=>{let n=u;switch(e.key){case`ArrowLeft`:e.preventDefault(),n=Math.max(p,t-1);break;case`ArrowRight`:e.preventDefault(),n=Math.min(m,t+1);break;case`ArrowUp`:e.preventDefault(),n=Math.max(p,t-3);break;case`ArrowDown`:e.preventDefault(),n=Math.min(m,t+3);break;case`PageUp`:e.preventDefault(),n=Math.max(p,t-10);break;case`PageDown`:e.preventDefault(),n=Math.min(m,t+10);break;case`Home`:e.preventDefault(),n=p;break;case`End`:e.preventDefault(),n=m;break;case`Enter`:case` `:e.preventDefault(),s(t);return;default:return}d(n)};return(0,r.jsx)(`div`,{ref:l,role:`grid`,"aria-label":`Select year`,className:a(`rmd-years-grid`,c?.yearsGrid),children:h.map(t=>{let n=t===e,i=t===u,o=a(`rmd-year-button`,n?`rmd-year-button-selected`:`rmd-year-button-unselected`,c?.yearButton,n?c?.yearButtonSelected:c?.yearButtonUnselected);return(0,r.jsx)(`button`,{ref:e=>{e?f.current.set(t,e):f.current.delete(t)},"data-selected":n,role:`gridcell`,"aria-selected":n,tabIndex:i?0:-1,onClick:()=>s(t),onKeyDown:e=>g(e,t),onFocus:()=>d(t),className:o,children:t},t)})})},m=e=>`${e.getFullYear()}-${e.getMonth()}-${e.getDate()}`,h=t=>{let{classNames:i,locale:o,translations:h,adapter:g=e.r,firstDayOfWeek:_=0,header:v,footer:y,getDayProps:b,...x}=t,[S,C]=(0,n.useState)(`days`),[w,T]=(0,n.useState)(null),[E,D]=(0,n.useState)(null),[O,k]=(0,n.useState)(null),[A,j]=(0,n.useState)(``),M=(0,n.useRef)(null),N=(0,n.useRef)(null),P=(0,n.useRef)(new Map),F=(0,n.useRef)(!1),I=s(g,o,h),L=I.weekdays,R=I.months,{calendars:z,getBackProps:B,getForwardProps:V,getDateProps:H,setOffset:U}=e.t({...x,adapter:g,firstDayOfWeek:_});(0,n.useEffect)(()=>{if(S===`days`&&M.current){let e=M.current,t=()=>{e.offsetHeight>0&&D(e.offsetHeight)};if(t(),typeof ResizeObserver<`u`){let n=new ResizeObserver(()=>{t()});return n.observe(e),()=>n.disconnect()}}},[S,z]),(0,n.useEffect)(()=>{S===`days`&&z.length>0?z.length===1?j(`${R[z[0].month]} ${z[0].year}`):j(`${R[z[0].month]} ${z[0].year} to ${R[z[z.length-1].month]} ${z[z.length-1].year}`):S===`months`?j(`Month selection view`):S===`years`&&j(`Year selection view`)},[S,z,R]);let W=(0,n.useMemo)(()=>{for(let e of z)for(let t of e.weeks)for(let e of t)if(e?.selectable&&e.selected)return e.date;for(let e of z)for(let t of e.weeks)for(let e of t)if(e?.selectable&&e.today)return e.date;for(let e of z)for(let t of e.weeks)for(let e of t)if(e?.selectable&&!e.prevMonth&&!e.nextMonth)return e.date;return z[0]?.weeks[0]?.find(e=>e?.selectable)?.date||new Date},[z]),G=O||W;(0,n.useEffect)(()=>{if(S===`days`&&G&&F.current){let e=m(G),t=P.current.get(e);t&&t.focus()}},[G,z,S]);let K=[...L.slice(_),...L.slice(0,_)],{month:q,year:J}=z[0],Y=e=>{let n=g.set(g.set(g.date(t.date||new Date),`year`,J),`month`,q),r=g.set(n,`month`,e),i=g.startOf(g.date(t.date||new Date),`month`),a=g.diff(r,i,`month`);T(null),U(a),C(`days`)},X=e=>{let n=g.set(g.set(g.date(t.date||new Date),`year`,J),`month`,q),r=g.set(n,`year`,e),i=g.startOf(g.date(t.date||new Date),`month`),a=g.diff(r,i,`month`);T(null),U(a),C(`days`)},Z=x.monthsToDisplay||1,Q=e=>{let t=B({offset:Z,...e});return{...t,onClick:e=>{T(`left`),t.onClick?.(e)}}},$=e=>{let t=V({offset:Z,...e});return{...t,onClick:e=>{T(`right`),t.onClick?.(e)}}},ee=(e,n)=>{let r=!!(N.current?.closest(`[dir="rtl"]`)||typeof document<`u`&&document.documentElement.dir===`rtl`),i=null,a=g.date(n.date);switch(e.key){case`ArrowLeft`:e.preventDefault(),i=g.toDate(g.add(a,r?1:-1,`day`));break;case`ArrowRight`:e.preventDefault(),i=g.toDate(g.add(a,r?-1:1,`day`));break;case`ArrowUp`:e.preventDefault(),i=g.toDate(g.subtract(a,7,`day`));break;case`ArrowDown`:e.preventDefault(),i=g.toDate(g.add(a,7,`day`));break;case`Home`:{e.preventDefault();let t=(g.toDate(a).getDay()-_+7)%7;i=g.toDate(g.subtract(a,t,`day`));break}case`End`:{e.preventDefault();let t=6-(g.toDate(a).getDay()-_+7)%7;i=g.toDate(g.add(a,t,`day`));break}case`PageUp`:{e.preventDefault();let t=e.shiftKey?`year`:`month`;i=g.toDate(g.subtract(a,1,t));break}case`PageDown`:{e.preventDefault();let t=e.shiftKey?`year`:`month`;i=g.toDate(g.add(a,1,t));break}case`Enter`:case` `:return;default:return}if(i){F.current=!0,k(i);let e=g.startOf(g.date(t.date||new Date),`month`),n=g.startOf(g.date(i),`month`),r=g.diff(n,e,`month`);U(r)}};return(0,r.jsxs)(`div`,{ref:N,className:a(`rmd`,`rmd-root`,i?.root),children:[(0,r.jsx)(`div`,{className:`rmd-sr-only`,"aria-live":`polite`,"aria-atomic":`true`,children:A}),typeof v==`function`?v({calendars:z,getBackProps:Q,getForwardProps:$,setView:C,monthNames:R,t:I,slideDirection:w,currentView:S}):v||(0,r.jsx)(u,{calendars:z,getBackProps:Q,getForwardProps:$,setView:C,monthNames:R,t:I,classNames:i,slideDirection:w,currentView:S}),(0,r.jsxs)(`div`,{className:a(`rmd-calendars-container`,i?.calendarsContainer),children:[S===`months`&&z.map(e=>(0,r.jsx)(`div`,{className:a(`rmd-calendar-container`,i?.calendarContainer),style:E?{height:`${E}px`}:void 0,children:(0,r.jsx)(f,{year:e.year,month:e.month,monthNames:R,minDate:t.minDate,maxDate:t.maxDate,onMonthSelect:Y,classNames:i})},`months-${e.year}`)),S===`years`&&z.map(e=>(0,r.jsx)(`div`,{className:a(`rmd-calendar-container`,i?.calendarContainer),style:E?{height:`${E}px`}:void 0,children:(0,r.jsx)(p,{year:e.year,minDate:t.minDate,maxDate:t.maxDate,adapter:g,onYearSelect:X,classNames:i})},`years-${e.year}`)),S===`days`&&z.map((e,t)=>(0,r.jsxs)(`div`,{ref:t===0?M:void 0,role:`grid`,"aria-label":`${R[e.month]} ${e.year}`,className:a(`rmd-calendar-container`,i?.calendarContainer),children:[z.length>1&&(0,r.jsxs)(`div`,{className:a(`rmd-header`,i?.header),children:[(0,r.jsx)(`div`,{className:a(`rmd-nav-button-slot-start`,i?.navButtonSlotStart),children:t===0&&z.length<12&&(0,r.jsx)(`button`,{...Q({calendars:z}),className:a(`rmd-nav-button`,i?.navButton),"aria-label":I.back,children:(0,r.jsx)(c,{})})}),(0,r.jsxs)(`span`,{className:a(`rmd-header-title-container`,i?.headerTitleContainer),children:[R[e.month],z.length<12?` ${e.year}`:``]}),(0,r.jsx)(`div`,{className:a(`rmd-nav-button-slot-end`,i?.navButtonSlotEnd),children:t===z.length-1&&z.length<12&&(0,r.jsx)(`button`,{...$({calendars:z}),className:a(`rmd-nav-button`,i?.navButton),"aria-label":I.forward,children:(0,r.jsx)(l,{})})})]}),(0,r.jsx)(`div`,{role:`row`,className:a(`rmd-weekday-grid`,i?.weekdayGrid),children:K.map(e=>(0,r.jsx)(`div`,{role:`columnheader`,"aria-label":e,className:a(`rmd-weekday`,i?.weekday),children:e},e))}),(0,r.jsx)(`div`,{role:`row`,className:a(`rmd-days-grid`,w===`left`&&`rmd-slide-left`,w===`right`&&`rmd-slide-right`,i?.daysGrid),children:e.weeks.map((e,t)=>e.map((e,n)=>{if(!e)return(0,r.jsx)(d,{dateObj:null,getDateProps:H,classNames:i},`${t}-${n}`);let a=m(e.date),s=g.isSame(g.date(e.date),g.date(G),`day`);return(0,r.jsx)(d,{dateObj:e,getDateProps:H,dayProps:b?.(e),classNames:i,tabIndex:s?0:-1,adapter:g,locale:o,onKeyDown:ee,onFocus:e=>{k(e.date)},buttonRef:e=>{e?P.current.set(a,e):P.current.delete(a)}},`${t}-${n}`)}))},`daysGrid-${e.month}-${e.year}`)]},`${e.month}-${e.year}`))]}),y&&(0,r.jsx)(`div`,{className:a(`rmd-footer`,i?.footer),children:y})]})};exports.Calendar=h,exports.CalendarHeader=u,exports.ChevronLeftIcon=c,exports.ChevronRightIcon=l,exports.Day=d,exports.DayjsAdapter=e.n,exports.MonthSelection=f,exports.YearSelection=p,exports.addMonth=t.addMonth,exports.composeEventHandlers=t.composeEventHandlers,exports.defaultAdapter=e.r,exports.getCalendars=t.getCalendars,exports.getDefaults=o,exports.getTranslations=s,exports.isBackDisabled=t.isBackDisabled,exports.isForwardDisabled=t.isForwardDisabled,exports.subtractMonth=t.subtractMonth,exports.useDates=e.t;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as e, r as t, t as n } from "./useDates-Fd8zg58E.js";
1
+ import { n as e, r as t, t as n } from "./useDates-BvwdhdUS.js";
2
2
  import { addMonth as r, composeEventHandlers as i, getCalendars as a, isBackDisabled as o, isForwardDisabled as s, subtractMonth as c } from "./utils.js";
3
3
  import { useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
4
4
  import { jsx as p, jsxs as m } from "react/jsx-runtime";
@@ -110,91 +110,93 @@ function v({ maxDate: n, offsetMonth: r, handleOffsetChanged: a, adapter: o }, {
110
110
  ...u
111
111
  };
112
112
  }
113
- function y({ date: e = /* @__PURE__ */ new Date(), maxDate: r, minDate: i, disabledDates: a, monthsToDisplay: c = 1, firstDayOfWeek: l = 0, offset: u, onDateSelected: d, onOffsetChanged: f = () => {}, selected: y, modifiers: b, selectionMode: x = "single", adapter: S = p, onChange: C, onMonthChange: w, onYearChange: T } = {}) {
114
- let [E, D] = s(0), [O, k] = s(void 0), A = h(u, E), j = o((t) => {
115
- m(u) || D(t), f(t);
116
- let n = S.add(S.startOf(S.date(e), "month"), t, "month"), r = Array.from({ length: c }, (e, t) => S.toDate(S.startOf(S.add(n, t, "month"), "month")));
117
- w?.(r);
118
- let i = S.toDate(n);
119
- T?.(i);
113
+ function y({ date: e = /* @__PURE__ */ new Date(), maxDate: r, minDate: i, disabledDates: a, monthsToDisplay: c = 1, firstDayOfWeek: l = 0, offset: u, onDateSelected: d, onOffsetChanged: f = () => {}, selected: y, defaultSelected: b, modifiers: x, selectionMode: S = "single", adapter: C = p, onChange: w, onMonthChange: T, onYearChange: E } = {}) {
114
+ let [D, O] = s(0), [k, A] = s(void 0), [j, M] = s(b ?? null), N = y !== void 0, P = N ? y : j, F = h(u, D), I = o((t) => {
115
+ m(u) || O(t), f(t);
116
+ let n = C.add(C.startOf(C.date(e), "month"), t, "month"), r = Array.from({ length: c }, (e, t) => C.toDate(C.startOf(C.add(n, t, "month"), "month")));
117
+ T?.(r);
118
+ let i = C.toDate(n);
119
+ E?.(i);
120
120
  }, [
121
121
  u,
122
122
  f,
123
123
  e,
124
- S,
124
+ C,
125
125
  c,
126
- w,
127
- T
128
- ]), M = o((e, t) => {
129
- if (d?.(e, t), C) {
130
- if (x === "single") C(e.date);
131
- else if (x === "multiple") {
132
- let t = Array.isArray(y) ? y : y ? [y] : [];
133
- t.some((t) => S.isSame(S.date(t), S.date(e.date), "day")) ? C(t.filter((t) => !S.isSame(S.date(t), S.date(e.date), "day"))) : C([...t, e.date]);
134
- } else if (x === "range") {
135
- let t = y && typeof y == "object" && !(y instanceof Date) && !Array.isArray(y) ? y : {
136
- start: void 0,
137
- end: void 0
138
- };
139
- !t.start || t.start && t.end ? C({
140
- start: e.date,
141
- end: void 0
142
- }) : S.isBefore(S.date(e.date), S.date(t.start), "day") ? C({
143
- start: e.date,
144
- end: t.start
145
- }) : C({
146
- start: t.start,
147
- end: e.date
148
- });
149
- }
126
+ T,
127
+ E
128
+ ]), L = o((e, t) => {
129
+ d?.(e, t);
130
+ let n = null;
131
+ if (S === "single") n = e.date;
132
+ else if (S === "multiple") {
133
+ let t = Array.isArray(P) ? P : P instanceof Date ? [P] : [];
134
+ n = t.some((t) => C.isSame(C.date(t), C.date(e.date), "day")) ? t.filter((t) => !C.isSame(C.date(t), C.date(e.date), "day")) : [...t, e.date];
135
+ } else if (S === "range") {
136
+ let t = P && typeof P == "object" && !(P instanceof Date) && !Array.isArray(P) ? P : {
137
+ start: void 0,
138
+ end: void 0
139
+ };
140
+ n = !t.start || t.start && t.end ? {
141
+ start: e.date,
142
+ end: void 0
143
+ } : C.isBefore(C.date(e.date), C.date(t.start), "day") ? {
144
+ start: e.date,
145
+ end: t.start
146
+ } : {
147
+ start: t.start,
148
+ end: e.date
149
+ };
150
150
  }
151
+ N || M(n), w?.(n);
151
152
  }, [
152
153
  d,
153
- C,
154
- x,
155
- y,
156
- S
154
+ w,
155
+ S,
156
+ P,
157
+ N,
158
+ C
157
159
  ]);
158
160
  return {
159
161
  calendars: n({
160
162
  date: e,
161
- selected: y,
163
+ selected: P,
162
164
  disabledDates: a,
163
- modifiers: b,
165
+ modifiers: x,
164
166
  monthsToDisplay: c,
165
167
  minDate: i,
166
168
  maxDate: r,
167
- offset: A,
169
+ offset: F,
168
170
  firstDayOfWeek: l,
169
- adapter: S,
170
- selectionMode: x,
171
- hoveredDate: O
171
+ adapter: C,
172
+ selectionMode: S,
173
+ hoveredDate: k
172
174
  }),
173
175
  getDateProps: (e) => ({
174
- ...g(M, e),
176
+ ...g(L, e),
175
177
  onMouseEnter: t(e.onMouseEnter, () => {
176
- k(e.dateObj.date);
178
+ A(e.dateObj.date);
177
179
  }),
178
180
  onMouseLeave: t(e.onMouseLeave, () => {
179
- k(void 0);
181
+ A(void 0);
180
182
  })
181
183
  }),
182
184
  getBackProps: _.bind(null, {
183
185
  minDate: i,
184
- offsetMonth: A,
185
- handleOffsetChanged: j,
186
- adapter: S
186
+ offsetMonth: F,
187
+ handleOffsetChanged: I,
188
+ adapter: C
187
189
  }),
188
190
  getForwardProps: v.bind(null, {
189
191
  maxDate: r,
190
- offsetMonth: A,
191
- handleOffsetChanged: j,
192
- adapter: S
192
+ offsetMonth: F,
193
+ handleOffsetChanged: I,
194
+ adapter: C
193
195
  }),
194
- setOffset: j
196
+ setOffset: I
195
197
  };
196
198
  }
197
199
  //#endregion
198
200
  export { f as n, p as r, y as t };
199
201
 
200
- //# sourceMappingURL=useDates-Fd8zg58E.js.map
202
+ //# sourceMappingURL=useDates-BvwdhdUS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDates-BvwdhdUS.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?: unknown): Dayjs {\n return dayjs(value as dayjs.ConfigType);\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 React, { 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<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\n onDateSelected: (dateObj: DateObj, event: E) => void,\n { onClick, dateObj, ...rest }: { onClick?: (event: E) => void, dateObj: DateObj, [key: string]: unknown }\n) {\n return {\n onClick: composeEventHandlers(onClick, (event: E) => {\n onDateSelected(dateObj, event);\n }),\n disabled: !dateObj.selectable,\n 'aria-pressed': dateObj.selected,\n role: 'button',\n ...rest\n };\n}\n\nfunction getBackProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\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: E) => void, offset?: number, calendars?: Calendar[], [key: string]: unknown } = {}\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 ...rest\n };\n}\n\nfunction getForwardProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\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: E) => void, offset?: number, calendars?: Calendar[], [key: string]: unknown } = {}\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 ...rest\n };\n}\n\nexport interface UseDatesProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent> {\n date?: Date;\n maxDate?: Date;\n minDate?: Date;\n disabledDates?: Date[];\n monthsToDisplay?: number;\n firstDayOfWeek?: number;\n offset?: number;\n onDateSelected?: (dateObj: DateObj, event: E) => void;\n onOffsetChanged?: (newOffset: number) => void;\n selected?: Date | Date[] | { start?: Date, end?: Date } | null;\n defaultSelected?: Date | Date[] | { start?: Date, end?: Date } | null;\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?: (dates: Date[]) => void;\n onYearChange?: (date: Date) => void;\n}\n\nexport function useDates<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>({\n date = new Date(),\n maxDate,\n minDate,\n disabledDates,\n monthsToDisplay = 1,\n firstDayOfWeek = 0,\n offset,\n onDateSelected,\n onOffsetChanged = () => { },\n selected,\n defaultSelected,\n modifiers,\n selectionMode = 'single',\n adapter = defaultAdapter,\n onChange,\n onMonthChange,\n onYearChange\n}: UseDatesProps<E> = {}) {\n const [stateOffset, setStateOffset] = useState(0);\n const [hoveredDate, setHoveredDate] = useState<Date | undefined>(undefined);\n const [uncontrolledSelected, setUncontrolledSelected] = useState<\n Date | Date[] | { start?: Date; end?: Date } | null | undefined\n >(defaultSelected ?? null);\n\n const isControlled = selected !== undefined;\n const effectiveSelected = isControlled ? selected : uncontrolledSelected;\n\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 startDate = adapter.add(adapter.startOf(adapter.date(date), 'month'), newOffset, 'month');\n const firstDays = Array.from({ length: monthsToDisplay }, (_, i) =>\n adapter.toDate(adapter.startOf(adapter.add(startDate, i, 'month'), 'month'))\n );\n onMonthChange?.(firstDays);\n\n const newDate = adapter.toDate(startDate);\n onYearChange?.(newDate);\n }, [offset, onOffsetChanged, date, adapter, monthsToDisplay, onMonthChange, onYearChange]);\n\n const handleDateSelected = useCallback((dateObj: DateObj, event: E) => {\n onDateSelected?.(dateObj, event);\n\n let nextSelected: Date | Date[] | { start?: Date; end?: Date } | null = null;\n\n if (selectionMode === 'single') {\n nextSelected = dateObj.date;\n } else if (selectionMode === 'multiple') {\n const currentSelected = Array.isArray(effectiveSelected)\n ? effectiveSelected\n : (effectiveSelected instanceof Date ? [effectiveSelected] : []);\n const isAlreadySelected = currentSelected.some(d =>\n adapter.isSame(adapter.date(d), adapter.date(dateObj.date), 'day')\n );\n if (isAlreadySelected) {\n nextSelected = currentSelected.filter(d =>\n !adapter.isSame(adapter.date(d), adapter.date(dateObj.date), 'day')\n );\n } else {\n nextSelected = [...currentSelected, dateObj.date];\n }\n } else if (selectionMode === 'range') {\n const range = (effectiveSelected && typeof effectiveSelected === 'object' && !(effectiveSelected instanceof Date) && !Array.isArray(effectiveSelected))\n ? (effectiveSelected as { start?: Date; end?: Date })\n : { start: undefined, end: undefined };\n if (!range.start || (range.start && range.end)) {\n nextSelected = { start: dateObj.date, end: undefined };\n } else {\n if (adapter.isBefore(adapter.date(dateObj.date), adapter.date(range.start), 'day')) {\n nextSelected = { start: dateObj.date, end: range.start };\n } else {\n nextSelected = { start: range.start, end: dateObj.date };\n }\n }\n }\n\n if (!isControlled) {\n setUncontrolledSelected(nextSelected);\n }\n\n onChange?.(nextSelected);\n }, [onDateSelected, onChange, selectionMode, effectiveSelected, isControlled, adapter]);\n\n const calendars = getCalendars({\n date,\n selected: effectiveSelected,\n disabledDates,\n modifiers,\n monthsToDisplay,\n minDate,\n maxDate,\n offset: offsetMonth,\n firstDayOfWeek,\n adapter,\n selectionMode,\n hoveredDate\n });\n\n return {\n calendars,\n getDateProps: <EventE extends { defaultPrevented?: boolean } = E>(\n args: { onClick?: (event: EventE) => void, onMouseEnter?: (event: EventE) => void, onMouseLeave?: (event: EventE) => void, dateObj: DateObj, [key: string]: unknown }\n ) => {\n const props = getDateProps<EventE>(handleDateSelected as unknown as (dateObj: DateObj, event: EventE) => void, 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,2 +1,2 @@
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.cjs");let l=require("react"),u=require("dayjs");u=s(u,1);let d=require("dayjs/plugin/isBetween");d=s(d,1);let f=require("dayjs/plugin/customParseFormat");f=s(f,1);let p=require("dayjs/plugin/localeData");p=s(p,1),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-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}),...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}),...s}}function x({date:e=new Date,maxDate:t,minDate:n,disabledDates:r,monthsToDisplay:i=1,firstDayOfWeek:a=0,offset:o,onDateSelected:s,onOffsetChanged:u=()=>{},selected:d,modifiers:f,selectionMode:p=`single`,adapter:m=h,onChange:x,onMonthChange:S,onYearChange:C}={}){let[w,T]=(0,l.useState)(0),[E,D]=(0,l.useState)(void 0),O=_(o,w),k=(0,l.useCallback)(t=>{g(o)||T(t),u(t);let n=m.add(m.startOf(m.date(e),`month`),t,`month`),r=Array.from({length:i},(e,t)=>m.toDate(m.startOf(m.add(n,t,`month`),`month`)));S?.(r);let a=m.toDate(n);C?.(a)},[o,u,e,m,i,S,C]),A=(0,l.useCallback)((e,t)=>{if(s?.(e,t),x){if(p===`single`)x(e.date);else if(p===`multiple`){let t=Array.isArray(d)?d:d?[d]:[];t.some(t=>m.isSame(m.date(t),m.date(e.date),`day`))?x(t.filter(t=>!m.isSame(m.date(t),m.date(e.date),`day`))):x([...t,e.date])}else if(p===`range`){let t=d&&typeof d==`object`&&!(d instanceof Date)&&!Array.isArray(d)?d:{start:void 0,end:void 0};!t.start||t.start&&t.end?x({start:e.date,end:void 0}):m.isBefore(m.date(e.date),m.date(t.start),`day`)?x({start:e.date,end:t.start}):x({start:t.start,end:e.date})}}},[s,x,p,d,m]);return{calendars:c.getCalendars({date:e,selected:d,disabledDates:r,modifiers:f,monthsToDisplay:i,minDate:n,maxDate:t,offset:O,firstDayOfWeek:a,adapter:m,selectionMode:p,hoveredDate:E}),getDateProps:e=>({...v(A,e),onMouseEnter:c.composeEventHandlers(e.onMouseEnter,()=>{D(e.dateObj.date)}),onMouseLeave:c.composeEventHandlers(e.onMouseLeave,()=>{D(void 0)})}),getBackProps:y.bind(null,{minDate:n,offsetMonth:O,handleOffsetChanged:k,adapter:m}),getForwardProps:b.bind(null,{maxDate:t,offsetMonth:O,handleOffsetChanged:k,adapter:m}),setOffset:k}}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-XnHKc0Cv.cjs.map
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.cjs");let l=require("react"),u=require("dayjs");u=s(u,1);let d=require("dayjs/plugin/isBetween");d=s(d,1);let f=require("dayjs/plugin/customParseFormat");f=s(f,1);let p=require("dayjs/plugin/localeData");p=s(p,1),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-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}),...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}),...s}}function x({date:e=new Date,maxDate:t,minDate:n,disabledDates:r,monthsToDisplay:i=1,firstDayOfWeek:a=0,offset:o,onDateSelected:s,onOffsetChanged:u=()=>{},selected:d,defaultSelected: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,A]=(0,l.useState)(f??null),j=d!==void 0,M=j?d:k,N=_(o,T),P=(0,l.useCallback)(t=>{g(o)||E(t),u(t);let n=x.add(x.startOf(x.date(e),`month`),t,`month`),r=Array.from({length:i},(e,t)=>x.toDate(x.startOf(x.add(n,t,`month`),`month`)));C?.(r);let a=x.toDate(n);w?.(a)},[o,u,e,x,i,C,w]),F=(0,l.useCallback)((e,t)=>{s?.(e,t);let n=null;if(m===`single`)n=e.date;else if(m===`multiple`){let t=Array.isArray(M)?M:M instanceof Date?[M]:[];n=t.some(t=>x.isSame(x.date(t),x.date(e.date),`day`))?t.filter(t=>!x.isSame(x.date(t),x.date(e.date),`day`)):[...t,e.date]}else if(m===`range`){let t=M&&typeof M==`object`&&!(M instanceof Date)&&!Array.isArray(M)?M:{start:void 0,end:void 0};n=!t.start||t.start&&t.end?{start:e.date,end:void 0}:x.isBefore(x.date(e.date),x.date(t.start),`day`)?{start:e.date,end:t.start}:{start:t.start,end:e.date}}j||A(n),S?.(n)},[s,S,m,M,j,x]);return{calendars:c.getCalendars({date:e,selected:M,disabledDates:r,modifiers:p,monthsToDisplay:i,minDate:n,maxDate:t,offset:N,firstDayOfWeek:a,adapter:x,selectionMode:m,hoveredDate:D}),getDateProps:e=>({...v(F,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:N,handleOffsetChanged:P,adapter:x}),getForwardProps:b.bind(null,{maxDate:t,offsetMonth:N,handleOffsetChanged:P,adapter:x}),setOffset:P}}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-bLtR7Prk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDates-bLtR7Prk.cjs","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?: unknown): Dayjs {\n return dayjs(value as dayjs.ConfigType);\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 React, { 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<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\n onDateSelected: (dateObj: DateObj, event: E) => void,\n { onClick, dateObj, ...rest }: { onClick?: (event: E) => void, dateObj: DateObj, [key: string]: unknown }\n) {\n return {\n onClick: composeEventHandlers(onClick, (event: E) => {\n onDateSelected(dateObj, event);\n }),\n disabled: !dateObj.selectable,\n 'aria-pressed': dateObj.selected,\n role: 'button',\n ...rest\n };\n}\n\nfunction getBackProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\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: E) => void, offset?: number, calendars?: Calendar[], [key: string]: unknown } = {}\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 ...rest\n };\n}\n\nfunction getForwardProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\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: E) => void, offset?: number, calendars?: Calendar[], [key: string]: unknown } = {}\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 ...rest\n };\n}\n\nexport interface UseDatesProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent> {\n date?: Date;\n maxDate?: Date;\n minDate?: Date;\n disabledDates?: Date[];\n monthsToDisplay?: number;\n firstDayOfWeek?: number;\n offset?: number;\n onDateSelected?: (dateObj: DateObj, event: E) => void;\n onOffsetChanged?: (newOffset: number) => void;\n selected?: Date | Date[] | { start?: Date, end?: Date } | null;\n defaultSelected?: Date | Date[] | { start?: Date, end?: Date } | null;\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?: (dates: Date[]) => void;\n onYearChange?: (date: Date) => void;\n}\n\nexport function useDates<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>({\n date = new Date(),\n maxDate,\n minDate,\n disabledDates,\n monthsToDisplay = 1,\n firstDayOfWeek = 0,\n offset,\n onDateSelected,\n onOffsetChanged = () => { },\n selected,\n defaultSelected,\n modifiers,\n selectionMode = 'single',\n adapter = defaultAdapter,\n onChange,\n onMonthChange,\n onYearChange\n}: UseDatesProps<E> = {}) {\n const [stateOffset, setStateOffset] = useState(0);\n const [hoveredDate, setHoveredDate] = useState<Date | undefined>(undefined);\n const [uncontrolledSelected, setUncontrolledSelected] = useState<\n Date | Date[] | { start?: Date; end?: Date } | null | undefined\n >(defaultSelected ?? null);\n\n const isControlled = selected !== undefined;\n const effectiveSelected = isControlled ? selected : uncontrolledSelected;\n\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 startDate = adapter.add(adapter.startOf(adapter.date(date), 'month'), newOffset, 'month');\n const firstDays = Array.from({ length: monthsToDisplay }, (_, i) =>\n adapter.toDate(adapter.startOf(adapter.add(startDate, i, 'month'), 'month'))\n );\n onMonthChange?.(firstDays);\n\n const newDate = adapter.toDate(startDate);\n onYearChange?.(newDate);\n }, [offset, onOffsetChanged, date, adapter, monthsToDisplay, onMonthChange, onYearChange]);\n\n const handleDateSelected = useCallback((dateObj: DateObj, event: E) => {\n onDateSelected?.(dateObj, event);\n\n let nextSelected: Date | Date[] | { start?: Date; end?: Date } | null = null;\n\n if (selectionMode === 'single') {\n nextSelected = dateObj.date;\n } else if (selectionMode === 'multiple') {\n const currentSelected = Array.isArray(effectiveSelected)\n ? effectiveSelected\n : (effectiveSelected instanceof Date ? [effectiveSelected] : []);\n const isAlreadySelected = currentSelected.some(d =>\n adapter.isSame(adapter.date(d), adapter.date(dateObj.date), 'day')\n );\n if (isAlreadySelected) {\n nextSelected = currentSelected.filter(d =>\n !adapter.isSame(adapter.date(d), adapter.date(dateObj.date), 'day')\n );\n } else {\n nextSelected = [...currentSelected, dateObj.date];\n }\n } else if (selectionMode === 'range') {\n const range = (effectiveSelected && typeof effectiveSelected === 'object' && !(effectiveSelected instanceof Date) && !Array.isArray(effectiveSelected))\n ? (effectiveSelected as { start?: Date; end?: Date })\n : { start: undefined, end: undefined };\n if (!range.start || (range.start && range.end)) {\n nextSelected = { start: dateObj.date, end: undefined };\n } else {\n if (adapter.isBefore(adapter.date(dateObj.date), adapter.date(range.start), 'day')) {\n nextSelected = { start: dateObj.date, end: range.start };\n } else {\n nextSelected = { start: range.start, end: dateObj.date };\n }\n }\n }\n\n if (!isControlled) {\n setUncontrolledSelected(nextSelected);\n }\n\n onChange?.(nextSelected);\n }, [onDateSelected, onChange, selectionMode, effectiveSelected, isControlled, adapter]);\n\n const calendars = getCalendars({\n date,\n selected: effectiveSelected,\n disabledDates,\n modifiers,\n monthsToDisplay,\n minDate,\n maxDate,\n offset: offsetMonth,\n firstDayOfWeek,\n adapter,\n selectionMode,\n hoveredDate\n });\n\n return {\n calendars,\n getDateProps: <EventE extends { defaultPrevented?: boolean } = E>(\n args: { onClick?: (event: EventE) => void, onMouseEnter?: (event: EventE) => void, onMouseLeave?: (event: EventE) => void, dateObj: DateObj, [key: string]: unknown }\n ) => {\n const props = getDateProps<EventE>(handleDateSelected as unknown as (dateObj: DateObj, event: EventE) => void, 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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"}
package/dist/useDates.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useDates-XnHKc0Cv.cjs");require("./utils.cjs"),exports.useDates=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useDates-bLtR7Prk.cjs");require("./utils.cjs"),exports.useDates=e.t;
@@ -15,7 +15,11 @@ export interface UseDatesProps<E extends {
15
15
  selected?: Date | Date[] | {
16
16
  start?: Date;
17
17
  end?: Date;
18
- };
18
+ } | null;
19
+ defaultSelected?: Date | Date[] | {
20
+ start?: Date;
21
+ end?: Date;
22
+ } | null;
19
23
  modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>;
20
24
  selectionMode?: SelectionMode;
21
25
  adapter?: DateAdapter;
@@ -28,7 +32,7 @@ export interface UseDatesProps<E extends {
28
32
  }
29
33
  export declare function useDates<E extends {
30
34
  defaultPrevented?: boolean;
31
- } = React.SyntheticEvent>({ date, maxDate, minDate, disabledDates, monthsToDisplay, firstDayOfWeek, offset, onDateSelected, onOffsetChanged, selected, modifiers, selectionMode, adapter, onChange, onMonthChange, onYearChange }?: UseDatesProps<E>): {
35
+ } = React.SyntheticEvent>({ date, maxDate, minDate, disabledDates, monthsToDisplay, firstDayOfWeek, offset, onDateSelected, onOffsetChanged, selected, defaultSelected, modifiers, selectionMode, adapter, onChange, onMonthChange, onYearChange }?: UseDatesProps<E>): {
32
36
  calendars: Calendar[];
33
37
  getDateProps: <EventE extends {
34
38
  defaultPrevented?: boolean;
package/dist/useDates.js CHANGED
@@ -1,3 +1,3 @@
1
- import { t as e } from "./useDates-Fd8zg58E.js";
1
+ import { t as e } from "./useDates-BvwdhdUS.js";
2
2
  import "./utils.js";
3
3
  export { e as useDates };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { Calendar, DateAdapter, DateObj, SelectionMode } from './types';\n\nexport function composeEventHandlers<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\n ...fns: (((event: E, ...args: unknown[]) => void) | undefined)[]\n) {\n return (event: E, ...args: unknown[]) =>\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 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 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 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 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 adapter: DateAdapter,\n selectionMode: 'single' | 'range' | 'multiple',\n hoveredDate?: Date\n}): Calendar {\n let currentMonth = adapter.set(adapter.set(adapter.startOf(adapter.date(), 'year'), '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 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 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 } = isOutside\n ? { selected: false, isRangeStart: false, isRangeEnd: false, isRangeBetween: false, isRangeHovering: false, isRangeActive: false }\n : 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 'rmd-day-today': (d: Date) =>\n adapter.isSame(adapter.date(d), adapter.date(), 'day'),\n 'rmd-day-outside': (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 adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n firstDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date },\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n adapter: DateAdapter,\n selectionMode: SelectionMode,\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 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 adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n lastDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date },\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n adapter: DateAdapter,\n selectionMode: SelectionMode,\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 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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"}
1
+ {"version":3,"file":"utils.cjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { Calendar, DateAdapter, DateObj, SelectionMode } from './types';\n\nexport function composeEventHandlers<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\n ...fns: (((event: E, ...args: unknown[]) => void) | undefined)[]\n) {\n return (event: E, ...args: unknown[]) =>\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 adapter,\n selectionMode,\n hoveredDate\n}: {\n date: Date,\n selected?: Date | Date[] | { start?: Date, end?: Date } | null,\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 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 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 adapter,\n selectionMode,\n hoveredDate\n}: {\n month: number,\n year: number,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date } | null,\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n minDate?: Date,\n maxDate?: Date,\n firstDayOfWeek: number,\n adapter: DateAdapter,\n selectionMode: 'single' | 'range' | 'multiple',\n hoveredDate?: Date\n}): Calendar {\n let currentMonth = adapter.set(adapter.set(adapter.startOf(adapter.date(), 'year'), '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 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 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 } | null | 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 } = isOutside\n ? { selected: false, isRangeStart: false, isRangeEnd: false, isRangeBetween: false, isRangeHovering: false, isRangeActive: false }\n : 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 'rmd-day-today': (d: Date) =>\n adapter.isSame(adapter.date(d), adapter.date(), 'day'),\n 'rmd-day-outside': (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 adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n firstDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date } | null,\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n adapter: DateAdapter,\n selectionMode: SelectionMode,\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 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 adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n lastDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date } | null,\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n adapter: DateAdapter,\n selectionMode: SelectionMode,\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 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 } | null | 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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"}
package/dist/utils.d.ts CHANGED
@@ -19,7 +19,7 @@ export declare function getCalendars({ date, selected, disabledDates, modifiers,
19
19
  selected?: Date | Date[] | {
20
20
  start?: Date;
21
21
  end?: Date;
22
- };
22
+ } | null;
23
23
  disabledDates?: Date[];
24
24
  modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>;
25
25
  monthsToDisplay: number;
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { Calendar, DateAdapter, DateObj, SelectionMode } from './types';\n\nexport function composeEventHandlers<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\n ...fns: (((event: E, ...args: unknown[]) => void) | undefined)[]\n) {\n return (event: E, ...args: unknown[]) =>\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 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 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 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 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 adapter: DateAdapter,\n selectionMode: 'single' | 'range' | 'multiple',\n hoveredDate?: Date\n}): Calendar {\n let currentMonth = adapter.set(adapter.set(adapter.startOf(adapter.date(), 'year'), '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 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 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 } = isOutside\n ? { selected: false, isRangeStart: false, isRangeEnd: false, isRangeBetween: false, isRangeHovering: false, isRangeActive: false }\n : 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 'rmd-day-today': (d: Date) =>\n adapter.isSame(adapter.date(d), adapter.date(), 'day'),\n 'rmd-day-outside': (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 adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n firstDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date },\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n adapter: DateAdapter,\n selectionMode: SelectionMode,\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 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 adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n lastDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date },\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n adapter: DateAdapter,\n selectionMode: SelectionMode,\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 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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"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { Calendar, DateAdapter, DateObj, SelectionMode } from './types';\n\nexport function composeEventHandlers<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\n ...fns: (((event: E, ...args: unknown[]) => void) | undefined)[]\n) {\n return (event: E, ...args: unknown[]) =>\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 adapter,\n selectionMode,\n hoveredDate\n}: {\n date: Date,\n selected?: Date | Date[] | { start?: Date, end?: Date } | null,\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 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 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 adapter,\n selectionMode,\n hoveredDate\n}: {\n month: number,\n year: number,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date } | null,\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n minDate?: Date,\n maxDate?: Date,\n firstDayOfWeek: number,\n adapter: DateAdapter,\n selectionMode: 'single' | 'range' | 'multiple',\n hoveredDate?: Date\n}): Calendar {\n let currentMonth = adapter.set(adapter.set(adapter.startOf(adapter.date(), 'year'), '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 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 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 } | null | 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 } = isOutside\n ? { selected: false, isRangeStart: false, isRangeEnd: false, isRangeBetween: false, isRangeHovering: false, isRangeActive: false }\n : 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 'rmd-day-today': (d: Date) =>\n adapter.isSame(adapter.date(d), adapter.date(), 'day'),\n 'rmd-day-outside': (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 adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n firstDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date } | null,\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n adapter: DateAdapter,\n selectionMode: SelectionMode,\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 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 adapter,\n selectionMode,\n hoveredDate,\n month,\n year\n}: {\n lastDayOfMonth: Date,\n minDate?: Date,\n maxDate?: Date,\n selectedDates?: Date | Date[] | { start?: Date, end?: Date } | null,\n disabledDates?: Date[],\n modifiers?: Record<string, (date: Date, month: number, year: number) => boolean>,\n firstDayOfWeek: number,\n adapter: DateAdapter,\n selectionMode: SelectionMode,\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 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 } | null | 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-modular-datepicker",
3
- "version": "0.0.10-canary.0",
3
+ "version": "0.0.10-canary.1",
4
4
  "description": "A modular, lightweight, and type-safe React datepicker and calendar component with headless hooks for single, multiple, and range selection.",
5
5
  "author": "",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDates-Fd8zg58E.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?: unknown): Dayjs {\n return dayjs(value as dayjs.ConfigType);\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 React, { 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<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\n onDateSelected: (dateObj: DateObj, event: E) => void,\n { onClick, dateObj, ...rest }: { onClick?: (event: E) => void, dateObj: DateObj, [key: string]: unknown }\n) {\n return {\n onClick: composeEventHandlers(onClick, (event: E) => {\n onDateSelected(dateObj, event);\n }),\n disabled: !dateObj.selectable,\n 'aria-pressed': dateObj.selected,\n role: 'button',\n ...rest\n };\n}\n\nfunction getBackProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\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: E) => void, offset?: number, calendars?: Calendar[], [key: string]: unknown } = {}\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 ...rest\n };\n}\n\nfunction getForwardProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\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: E) => void, offset?: number, calendars?: Calendar[], [key: string]: unknown } = {}\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 ...rest\n };\n}\n\nexport interface UseDatesProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent> {\n date?: Date;\n maxDate?: Date;\n minDate?: Date;\n disabledDates?: Date[];\n monthsToDisplay?: number;\n firstDayOfWeek?: number;\n offset?: number;\n onDateSelected?: (dateObj: DateObj, event: E) => 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?: (dates: Date[]) => void;\n onYearChange?: (date: Date) => void;\n}\n\nexport function useDates<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>({\n date = new Date(),\n maxDate,\n minDate,\n disabledDates,\n monthsToDisplay = 1,\n firstDayOfWeek = 0,\n offset,\n onDateSelected,\n onOffsetChanged = () => { },\n selected,\n modifiers,\n selectionMode = 'single',\n adapter = defaultAdapter,\n onChange,\n onMonthChange,\n onYearChange\n}: UseDatesProps<E> = {}) {\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 startDate = adapter.add(adapter.startOf(adapter.date(date), 'month'), newOffset, 'month');\n const firstDays = Array.from({ length: monthsToDisplay }, (_, i) =>\n adapter.toDate(adapter.startOf(adapter.add(startDate, i, 'month'), 'month'))\n );\n onMonthChange?.(firstDays);\n\n const newDate = adapter.toDate(startDate);\n onYearChange?.(newDate);\n }, [offset, onOffsetChanged, date, adapter, monthsToDisplay, onMonthChange, onYearChange]);\n\n const handleDateSelected = useCallback((dateObj: DateObj, event: E) => {\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 adapter,\n selectionMode,\n hoveredDate\n });\n\n return {\n calendars,\n getDateProps: <EventE extends { defaultPrevented?: boolean } = E>(\n args: { onClick?: (event: EventE) => void, onMouseEnter?: (event: EventE) => void, onMouseLeave?: (event: EventE) => void, dateObj: DateObj, [key: string]: unknown }\n ) => {\n const props = getDateProps<EventE>(handleDateSelected as unknown as (dateObj: DateObj, event: EventE) => void, 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":";;;;;;AAOA,EAAM,OAAO,CAAS,GACtB,EAAM,OAAO,CAAiB,GAC9B,EAAM,OAAO,CAAU;AAEvB,IAAa,IAAb,MAAwD;CACtD,KAAK,GAAwB;EAC3B,OAAO,EAAM,CAAyB;CACxC;CAEA,IAAI,GAAa,GAAgB,GAAuC;EACtE,OAAO,EAAK,IAAI,GAAQ,CAAI;CAC9B;CAEA,SAAS,GAAa,GAAgB,GAAuC;EAC3E,OAAO,EAAK,SAAS,GAAQ,CAAI;CACnC;CAEA,QAAQ,GAAa,GAAuC;EAC1D,OAAO,EAAK,QAAQ,CAAI;CAC1B;CAEA,MAAM,GAAa,GAAuC;EACxD,OAAO,EAAK,MAAM,CAAI;CACxB;CAEA,SAAS,GAAa,GAAmB,GAA0C;EACjF,OAAO,EAAK,SAAS,GAAY,CAAI;CACvC;CAEA,QAAQ,GAAa,GAAmB,GAA0C;EAChF,OAAO,EAAK,QAAQ,GAAY,CAAI;CACtC;CAEA,OAAO,GAAa,GAAmB,GAA0C;EAC/E,OAAO,EAAK,OAAO,GAAY,CAAI;CACrC;CAEA,IAAI,GAAa,GAAgC,GAAsB;EAErE,OADI,MAAS,QAAc,EAAK,KAAK,CAAK,IACnC,EAAK,IAAI,GAAM,CAAK;CAC7B;CAEA,IAAI,GAAa,GAAwC;EAEvD,OADI,MAAS,QAAc,EAAK,KAAK,IAC9B,EAAK,IAAI,CAAI;CACtB;CAEA,OAAO,GAAa,GAAmB,GAAyB;EAI9D,OAHI,IACK,EAAK,OAAO,CAAM,CAAC,CAAC,OAAO,CAAS,IAEtC,EAAK,OAAO,CAAS;CAC9B;CAEA,eAAe,GAAqB;EAClC,OAAO,EAAK,YAAY;CAC1B;CAEA,OAAO,GAAmB;EACxB,OAAO,EAAK,OAAO;CACrB;CAEA,KAAK,GAAa,GAAmB,GAAgC;EACnE,OAAO,EAAK,KAAK,GAAY,CAAI;CACnC;CAEA,UAAU,GAA2B;EACnC,OAAO,IAAS,EAAM,CAAC,CAAC,OAAO,CAAM,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,IAAI,EAAM,WAAW,CAAC,CAAC,OAAO;CAC3F;CAEA,YAAY,GAA2B;EACrC,OAAO,IAAS,EAAM,CAAC,CAAC,OAAO,CAAM,CAAC,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,CAAC,KAAI,MAAK,EAAE,YAAY,CAAC,IAAI,EAAM,WAAW,CAAC,CAAC,cAAc,CAAC,CAAC,KAAI,MAAK,EAAE,YAAY,CAAC;CAC7J;AACF,GAEa,IAAiB,IAAI,EAAa;;;ACtE/C,SAAS,EAAmB,GAAqB;CAC7C,OAAO,MAAe,KAAA;AAC1B;AAEA,SAAS,EAAU,GAAe,IAAgB,GAAW;CACzD,OAAO,EAAmB,CAAI,IAAI,IAAQ;AAC9C;AAEA,SAAS,EACL,GACA,EAAE,YAAS,YAAS,GAAG,KACzB;CACE,OAAO;EACH,SAAS,EAAqB,IAAU,MAAa;GACjD,EAAe,GAAS,CAAK;EACjC,CAAC;EACD,UAAU,CAAC,EAAQ;EACnB,gBAAgB,EAAQ;EACxB,MAAM;EACN,GAAG;CACP;AACJ;AAEA,SAAS,EACL,EAAE,YAAS,gBAAa,wBAAqB,cAC7C,EACI,YACA,YAAS,GACT,eAAY,CAAC,GACb,GAAG,MACgG,CAAC,GAC1G;CACE,OAAO;EACH,SAAS,EAAqB,SAAe;GACzC,EACI,IAAc,EAAc;IAAE;IAAW;IAAQ;IAAS;GAAQ,CAAC,CACvE;EACJ,CAAC;EACD,UAAU,EAAe;GAAE;GAAW;GAAS;EAAQ,CAAC;EACxD,GAAG;CACP;AACJ;AAEA,SAAS,EACL,EAAE,YAAS,gBAAa,wBAAqB,cAC7C,EACI,YACA,YAAS,GACT,eAAY,CAAC,GACb,GAAG,MACgG,CAAC,GAC1G;CACE,OAAO;EACH,SAAS,EAAqB,SAAe;GACzC,EACI,IAAc,EAAS;IAAE;IAAW;IAAQ;IAAS;GAAQ,CAAC,CAClE;EACJ,CAAC;EACD,UAAU,EAAkB;GAAE;GAAW;GAAS;EAAQ,CAAC;EAC3D,GAAG;CACP;AACJ;AAqBA,SAAgB,EAA0E,EACtF,0BAAO,IAAI,KAAK,GAChB,YACA,YACA,kBACA,qBAAkB,GAClB,oBAAiB,GACjB,WACA,mBACA,2BAAwB,CAAE,GAC1B,aACA,cACA,mBAAgB,UAChB,aAAU,GACV,aACA,kBACA,oBACkB,CAAC,GAAG;CACtB,IAAM,CAAC,GAAa,KAAkB,EAAS,CAAC,GAC1C,CAAC,GAAa,KAAkB,EAA2B,KAAA,CAAS,GACpE,IAAc,EAAU,GAAQ,CAAW,GAE3C,IAAsB,GAAa,MAAsB;EAI3D,AAHK,EAAmB,CAAM,KAC1B,EAAe,CAAS,GAE5B,EAAgB,CAAS;EAEzB,IAAM,IAAY,EAAQ,IAAI,EAAQ,QAAQ,EAAQ,KAAK,CAAI,GAAG,OAAO,GAAG,GAAW,OAAO,GACxF,IAAY,MAAM,KAAK,EAAE,QAAQ,EAAgB,IAAI,GAAG,MAC1D,EAAQ,OAAO,EAAQ,QAAQ,EAAQ,IAAI,GAAW,GAAG,OAAO,GAAG,OAAO,CAAC,CAC/E;EACA,IAAgB,CAAS;EAEzB,IAAM,IAAU,EAAQ,OAAO,CAAS;EACxC,IAAe,CAAO;CAC1B,GAAG;EAAC;EAAQ;EAAiB;EAAM;EAAS;EAAiB;EAAe;CAAY,CAAC,GAEnF,IAAqB,GAAa,GAAkB,MAAa;EACnE,QAAiB,GAAS,CAAK,GAE1B,GAEL;OAAI,MAAkB,UAClB,EAAS,EAAQ,IAAI;QAClB,IAAI,MAAkB,YAAY;IACrC,IAAM,IAAkB,MAAM,QAAQ,CAAQ,IAAI,IAAY,IAAW,CAAC,CAAgB,IAAI,CAAC;IAE/F,AAD0B,EAAgB,MAAK,MAAK,EAAQ,OAAO,EAAQ,KAAK,CAAC,GAAG,EAAQ,KAAK,EAAQ,IAAI,GAAG,KAAK,CACjH,IACA,EAAS,EAAgB,QAAO,MAAK,CAAC,EAAQ,OAAO,EAAQ,KAAK,CAAC,GAAG,EAAQ,KAAK,EAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,IAEzG,EAAS,CAAC,GAAG,GAAiB,EAAQ,IAAI,CAAC;GAEnD,OAAO,IAAI,MAAkB,SAAS;IAClC,IAAM,IAAS,KAAY,OAAO,KAAa,YAAY,EAAE,aAAoB,SAAS,CAAC,MAAM,QAAQ,CAAQ,IAAM,IAA4C;KAAE,OAAO,KAAA;KAAW,KAAK,KAAA;IAAU;IACtM,AAAI,CAAC,EAAM,SAAU,EAAM,SAAS,EAAM,MACtC,EAAS;KAAE,OAAO,EAAQ;KAAM,KAAK,KAAA;IAAU,CAAC,IAE5C,EAAQ,SAAS,EAAQ,KAAK,EAAQ,IAAI,GAAG,EAAQ,KAAK,EAAM,KAAK,GAAG,KAAK,IAC7E,EAAS;KAAE,OAAO,EAAQ;KAAM,KAAK,EAAM;IAAM,CAAC,IAElD,EAAS;KAAE,OAAO,EAAM;KAAO,KAAK,EAAQ;IAAK,CAAC;GAG9D;;CACJ,GAAG;EAAC;EAAgB;EAAU;EAAe;EAAU;CAAO,CAAC;CAiB/D,OAAO;EACH,WAhBc,EAAa;GAC3B;GACA;GACA;GACA;GACA;GACA;GACA;GACA,QAAQ;GACR;GACA;GACA;GACA;EACJ,CAGI;EACA,eACI,OAGO;GACH,GAFU,EAAqB,GAA4E,CAExG;GACH,cAAc,EAAqB,EAAK,oBAAoB;IACxD,EAAe,EAAK,QAAQ,IAAI;GACpC,CAAC;GACD,cAAc,EAAqB,EAAK,oBAAoB;IACxD,EAAe,KAAA,CAAS;GAC5B,CAAC;EACL;EAEJ,cAAc,EAAa,KAAK,MAAM;GAClC;GACA;GACA;GACA;EACJ,CAAC;EACD,iBAAiB,EAAgB,KAAK,MAAM;GACxC;GACA;GACA;GACA;EACJ,CAAC;EACD,WAAW;CACf;AACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDates-XnHKc0Cv.cjs","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?: unknown): Dayjs {\n return dayjs(value as dayjs.ConfigType);\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 React, { 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<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\n onDateSelected: (dateObj: DateObj, event: E) => void,\n { onClick, dateObj, ...rest }: { onClick?: (event: E) => void, dateObj: DateObj, [key: string]: unknown }\n) {\n return {\n onClick: composeEventHandlers(onClick, (event: E) => {\n onDateSelected(dateObj, event);\n }),\n disabled: !dateObj.selectable,\n 'aria-pressed': dateObj.selected,\n role: 'button',\n ...rest\n };\n}\n\nfunction getBackProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\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: E) => void, offset?: number, calendars?: Calendar[], [key: string]: unknown } = {}\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 ...rest\n };\n}\n\nfunction getForwardProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>(\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: E) => void, offset?: number, calendars?: Calendar[], [key: string]: unknown } = {}\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 ...rest\n };\n}\n\nexport interface UseDatesProps<E extends { defaultPrevented?: boolean } = React.SyntheticEvent> {\n date?: Date;\n maxDate?: Date;\n minDate?: Date;\n disabledDates?: Date[];\n monthsToDisplay?: number;\n firstDayOfWeek?: number;\n offset?: number;\n onDateSelected?: (dateObj: DateObj, event: E) => 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?: (dates: Date[]) => void;\n onYearChange?: (date: Date) => void;\n}\n\nexport function useDates<E extends { defaultPrevented?: boolean } = React.SyntheticEvent>({\n date = new Date(),\n maxDate,\n minDate,\n disabledDates,\n monthsToDisplay = 1,\n firstDayOfWeek = 0,\n offset,\n onDateSelected,\n onOffsetChanged = () => { },\n selected,\n modifiers,\n selectionMode = 'single',\n adapter = defaultAdapter,\n onChange,\n onMonthChange,\n onYearChange\n}: UseDatesProps<E> = {}) {\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 startDate = adapter.add(adapter.startOf(adapter.date(date), 'month'), newOffset, 'month');\n const firstDays = Array.from({ length: monthsToDisplay }, (_, i) =>\n adapter.toDate(adapter.startOf(adapter.add(startDate, i, 'month'), 'month'))\n );\n onMonthChange?.(firstDays);\n\n const newDate = adapter.toDate(startDate);\n onYearChange?.(newDate);\n }, [offset, onOffsetChanged, date, adapter, monthsToDisplay, onMonthChange, onYearChange]);\n\n const handleDateSelected = useCallback((dateObj: DateObj, event: E) => {\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 adapter,\n selectionMode,\n hoveredDate\n });\n\n return {\n calendars,\n getDateProps: <EventE extends { defaultPrevented?: boolean } = E>(\n args: { onClick?: (event: EventE) => void, onMouseEnter?: (event: EventE) => void, onMouseLeave?: (event: EventE) => void, dateObj: DateObj, [key: string]: unknown }\n ) => {\n const props = getDateProps<EventE>(handleDateSelected as unknown as (dateObj: DateObj, event: EventE) => void, 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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"}