react-modular-datepicker 0.0.6 → 0.0.8

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.
@@ -3,6 +3,7 @@ export interface DayClassNames {
3
3
  selected?: string;
4
4
  unselected?: string;
5
5
  disabled?: string;
6
+ empty?: string;
6
7
  rangeStart?: string;
7
8
  rangeEnd?: string;
8
9
  rangeBetween?: string;
@@ -12,13 +13,18 @@ export interface DayClassNames {
12
13
  export declare const defaultClassNames: {
13
14
  root: string;
14
15
  header: string;
16
+ headerMultiMonth: string;
15
17
  calendarsContainer: string;
16
18
  calendarContainer: string;
19
+ navButtonSlotStart: string;
20
+ navButtonSlotEnd: string;
21
+ headerTitleContainer: string;
17
22
  weekdayGrid: string;
18
23
  weekday: string;
19
24
  daysGrid: string;
20
25
  footer: string;
21
26
  navButton: string;
27
+ navButtonHidden: string;
22
28
  monthYearContainer: string;
23
29
  monthYearLabel: string;
24
30
  monthYearButton: string;
@@ -27,6 +33,7 @@ export declare const defaultClassNames: {
27
33
  selected: string;
28
34
  unselected: string;
29
35
  disabled: string;
36
+ empty: string;
30
37
  rangeStart: string;
31
38
  rangeEnd: string;
32
39
  rangeBetween: string;
@@ -44,13 +51,18 @@ export declare const defaultClassNames: {
44
51
  export interface CalendarClassNames {
45
52
  root?: string;
46
53
  header?: string;
54
+ headerMultiMonth?: string;
47
55
  calendarsContainer?: string;
48
56
  calendarContainer?: string;
57
+ navButtonSlotStart?: string;
58
+ navButtonSlotEnd?: string;
59
+ headerTitleContainer?: string;
49
60
  weekdayGrid?: string;
50
61
  weekday?: string;
51
62
  daysGrid?: string;
52
63
  footer?: string;
53
64
  navButton?: string;
65
+ navButtonHidden?: string;
54
66
  monthYearContainer?: string;
55
67
  monthYearLabel?: string;
56
68
  monthYearButton?: string;
@@ -1,14 +1,14 @@
1
1
  import { default as React } from 'react';
2
- import { UseDatesProps } from '../useDates';
3
2
  import { Translations } from '../i18n';
4
- import { DateObj, CalendarClassNames } from '../types';
3
+ import { CalendarClassNames, DateObj } from '../types';
4
+ import { UseDatesProps } from '../useDates';
5
5
  interface CalendarProps extends UseDatesProps {
6
6
  classNames?: CalendarClassNames;
7
7
  locale?: string;
8
8
  translations?: Partial<Translations>;
9
9
  header?: React.ReactNode | ((props: any) => React.ReactNode);
10
10
  footer?: React.ReactNode;
11
- renderDayTooltip?: (dateObj: DateObj) => React.ReactNode;
11
+ getDayProps?: (dateObj: DateObj) => Record<string, any>;
12
12
  }
13
13
  export declare const Calendar: React.FC<CalendarProps>;
14
14
  export {};
@@ -6,7 +6,7 @@ interface DayProps {
6
6
  dateObj: DateObj;
7
7
  [key: string]: any;
8
8
  }) => any;
9
- tooltip?: React.ReactNode;
9
+ dayProps?: Record<string, any>;
10
10
  classNames: Required<CalendarClassNames>;
11
11
  }
12
12
  export declare const Day: React.FC<DayProps>;
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useDates-c17u4Qfs.cjs"),t=require("./utils.cjs");let n=require("react");n=e.i(n,1);let r=require("react/jsx-runtime");var i=({dateObj:e,getDateProps:t,classNames:i,tooltip:a})=>{let[o,s]=(0,n.useState)(!1);if(!e)return(0,r.jsx)(`div`,{className:`aspect-square bg-white`});let{date:c,selected:l,selectable:u,isRangeStart:d,isRangeEnd:f,isRangeBetween:p,isRangeHovering:m,isRangeActive:h}=e,g=i.day,_=`rounded-full`;_=d&&f?`${g.selected} rounded-full`:d?`${g.rangeStart} ${h?`rounded-l-full rounded-r-none`:`rounded-full`}`:f?`${g.rangeEnd} ${h?`rounded-r-full rounded-l-none`:`rounded-full`}`:p?g.rangeBetween||``:m?g.rangeHovering||``:l?g.selected||``:u?g.unselected||``:g.disabled||``;let v=[g.day,_,...(e.modifiers||[]).map(e=>g[e]||e)].filter(Boolean).join(` `);return(0,r.jsxs)(`button`,{...t({dateObj:e,onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1)}),className:v,children:[c.getDate(),a&&o&&(0,r.jsx)(`div`,{className:`absolute bottom-full left-1/2 -translate-x-1/2 mb-2 hidden group-hover:block z-10`,children:(0,r.jsxs)(`div`,{className:`bg-gray-800 text-white text-xs py-1 px-2 rounded whitespace-nowrap shadow-lg`,children:[a,(0,r.jsx)(`div`,{className:`absolute top-full left-1/2 -translate-x-1/2 border-8 border-transparent border-t-gray-800`})]})})]})};function a(t=e.r,n){return{months:t.getMonths(n),weekdays:t.getWeekdays(n),back:`Previous month`,forward:`Next month`}}function o(t=e.r,n,r){return{...a(t,n),...r}}var s=()=>(0,r.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,r.jsx)(`polyline`,{points:`15 18 9 12 15 6`})}),c=()=>(0,r.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,r.jsx)(`polyline`,{points:`9 18 15 12 9 6`})}),l=({calendars:e,getBackProps:t,getForwardProps:n,setView:i,monthNames:a,t:o,classNames:l,slideDirection:u,currentView:d})=>(0,r.jsxs)(`div`,{className:l.header,children:[(0,r.jsx)(`button`,{...t({calendars:e}),onMouseDown:e=>e.preventDefault(),className:`${l.navButton} ${d&&d!==`days`?`invisible pointer-events-none`:``}`,"aria-label":o.back,children:(0,r.jsx)(s,{})}),(0,r.jsx)(`div`,{className:l.monthYearContainer,children:e.length===1?(0,r.jsxs)(`div`,{className:`${l.monthYearLabel} ${u===`left`?`animate-slide-in-left`:u===`right`?`animate-slide-in-right`:``}`,children:[(0,r.jsx)(`button`,{onMouseDown:e=>e.preventDefault(),onClick:()=>i(d===`months`?`days`:`months`),className:l.monthYearButton,children:a[e[0].month]}),(0,r.jsx)(`button`,{onMouseDown:e=>e.preventDefault(),onClick:()=>i(d===`years`?`days`:`years`),className:l.monthYearButton,children:e[0].year})]},`${e[0].month}-${e[0].year}`):(0,r.jsx)(`div`,{className:`${l.monthYearLabel} ${u===`left`?`animate-slide-in-left`:u===`right`?`animate-slide-in-right`:``}`,children:(()=>{let t=e[0],n=e[e.length-1];return e.length===12&&t.month===0&&n.month===11&&t.year===n.year?(0,r.jsx)(`span`,{children:t.year}):t.year===n.year?(0,r.jsxs)(`span`,{children:[a[t.month],` - `,a[n.month],` `,t.year]}):(0,r.jsxs)(`span`,{children:[a[t.month],` `,t.year,` - `,a[n.month],` `,n.year]})})()})}),(0,r.jsx)(`button`,{...n({calendars:e}),onMouseDown:e=>e.preventDefault(),className:`${l.navButton} ${d&&d!==`days`?`invisible pointer-events-none`:``}`,"aria-label":o.forward,children:(0,r.jsx)(c,{})})]}),u={root:`w-fit flex flex-col p-4 bg-white rounded-lg shadow-lg`,header:`flex items-center justify-between border-b-2 border-brand-gray-light/40 pb-2`,calendarsContainer:`flex flex-wrap gap-4 mt-3`,calendarContainer:`flex-1 min-w-[280px] max-w-full`,weekdayGrid:`grid grid-cols-7 gap-1 mb-1 border-b border-brand-gray-light/40`,weekday:`text-center text-xs text-gray-400 py-2`,daysGrid:`grid grid-cols-7 gap-px bg-brand-gray-light/20`,footer:`mt-4`,navButton:`p-2 text-brand-text hover:bg-gray-100 rounded-full transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none`,monthYearContainer:`flex gap-8`,monthYearLabel:`flex gap-1 items-center font-semibold text-brand-text`,monthYearButton:`hover:bg-gray-100 px-2 py-1 rounded cursor-pointer`,day:{day:`aspect-square flex items-center justify-center text-sm font-medium transition-all relative group cursor-pointer p-px`,selected:`bg-brand-gold text-white rounded-full`,unselected:`bg-white hover:bg-brand-gray-light text-brand-text`,disabled:`bg-white text-gray-300 cursor-not-allowed`,rangeStart:`bg-brand-gold text-white`,rangeEnd:`bg-brand-gold text-white`,rangeBetween:`bg-brand-gold/25 text-brand-text`,rangeHovering:`bg-brand-gold/25 text-brand-text`},monthsGrid:`grid grid-cols-3 gap-2 animate-slide-in-top`,monthButton:`py-3 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none`,monthButtonSelected:`bg-brand-gold text-white`,monthButtonUnselected:`text-brand-text`,yearsGrid:`grid grid-cols-3 gap-2 max-h-[300px] overflow-y-auto pr-2 animate-slide-in-top`,yearButton:`py-3 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none`,yearButtonSelected:`bg-brand-gold text-white`,yearButtonUnselected:`text-brand-text`},d=e=>{let t={...u};if(!e)return t;for(let n in e){let r=n;r===`day`&&e.day?t.day={...u.day,...e.day}:e[r]&&(t[r]=e[r])}return t},f=({year:e,month:t,monthNames:n,minDate:i,maxDate:a,onMonthSelect:o,classNames:s})=>{let c=t=>!!(i&&e===i.getFullYear()&&t<i.getMonth()||a&&e===a.getFullYear()&&t>a.getMonth());return(0,r.jsx)(`div`,{className:s.monthsGrid,children:n.map((e,n)=>{let i=c(n);return(0,r.jsx)(`button`,{onMouseDown:e=>e.preventDefault(),onClick:()=>!i&&o(n),className:`${s.monthButton} ${n===t?s.monthButtonSelected:s.monthButtonUnselected}`,disabled:i,children:e},e)})})},p=({year:e,minDate:t,maxDate:i,adapter:a,onYearSelect:o,classNames:s})=>{let c=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(c.current){let e=c.current.querySelector(`[data-selected="true"]`);e&&e.scrollIntoView({block:`center`})}},[]);let l=t?a.get(a.date(t),`year`):e-50,u=i?a.get(a.date(i),`year`):e+50,d=[];for(let e=l;e<=u;e++)d.push(e);return(0,r.jsx)(`div`,{ref:c,className:s.yearsGrid,children:d.map(t=>(0,r.jsx)(`button`,{"data-selected":t===e,onMouseDown:e=>e.preventDefault(),onClick:()=>o(t),className:`${s.yearButton} ${t===e?s.yearButtonSelected:s.yearButtonUnselected}`,children:t},t))})},m=t=>{let{classNames:a,locale:s,translations:c,adapter:u=e.r,firstDayOfWeek:m=0,header:h,footer:g,renderDayTooltip:_,...v}=t,y=d(a),[b,x]=(0,n.useState)(`days`),[S,C]=(0,n.useState)(null),w=o(u,s,c),T=w.weekdays,E=w.months,{calendars:D,getBackProps:O,getForwardProps:k,getDateProps:A,setOffset:j}=e.t({...v,adapter:u,firstDayOfWeek:m}),M=[...T.slice(m),...T.slice(0,m)],{month:N,year:P}=D[0],F=e=>{let n=u.set(u.set(u.date(t.date||new Date),`year`,P),`month`,N),r=u.set(n,`month`,e),i=u.startOf(u.date(t.date||new Date),`month`),a=u.diff(r,i,`month`);C(null),j(a),x(`days`)},I=e=>{let n=u.set(u.set(u.date(t.date||new Date),`year`,P),`month`,N),r=u.set(n,`year`,e),i=u.startOf(u.date(t.date||new Date),`month`),a=u.diff(r,i,`month`);C(null),j(a),x(`days`)},L=e=>{let t=O(e);return{...t,onClick:e=>{C(`left`),t.onClick?.(e)}}},R=e=>{let t=k(e);return{...t,onClick:e=>{C(`right`),t.onClick?.(e)}}};return(0,r.jsxs)(`div`,{className:`rmdp ${y.root}`,children:[typeof h==`function`?h({calendars:D,getBackProps:L,getForwardProps:R,setView:x,monthNames:E,t:w,slideDirection:S,currentView:b}):h||(0,r.jsx)(l,{calendars:D,getBackProps:L,getForwardProps:R,setView:x,monthNames:E,t:w,classNames:y,slideDirection:S,currentView:b}),(0,r.jsxs)(`div`,{className:y.calendarsContainer,children:[b===`months`&&D.map(e=>(0,r.jsx)(`div`,{className:y.calendarContainer,children:(0,r.jsx)(f,{year:e.year,month:e.month,monthNames:E,minDate:t.minDate,maxDate:t.maxDate,onMonthSelect:F,classNames:y})},`months-${e.year}`)),b===`years`&&D.map(e=>(0,r.jsx)(`div`,{className:y.calendarContainer,children:(0,r.jsx)(p,{year:e.year,minDate:t.minDate,maxDate:t.maxDate,adapter:u,onYearSelect:I,classNames:y})},`years-${e.year}`)),b===`days`&&D.map(e=>(0,r.jsxs)(`div`,{className:y.calendarContainer,children:[D.length>1&&(0,r.jsxs)(`button`,{type:`button`,"aria-label":E[e.month],className:`block w-full text-center font-semibold mb-2 text-brand-text`,children:[E[e.month],` `,D[0].year===D[D.length-1].year?``:e.year]}),(0,r.jsx)(`div`,{className:y.weekdayGrid,children:M.map(e=>(0,r.jsx)(`div`,{className:y.weekday,children:e},e))}),(0,r.jsx)(`div`,{className:`${y.daysGrid} ${S===`left`?`animate-slide-in-left`:S===`right`?`animate-slide-in-right`:``}`,children:e.weeks.map((e,t)=>e.map((e,n)=>(0,r.jsx)(i,{dateObj:e,getDateProps:A,classNames:y,tooltip:e&&_?.(e)},`${t}-${n}`)))})]},`${e.month}-${e.year}`))]}),g&&(0,r.jsx)(`div`,{className:y.footer,children:g})]})};exports.Calendar=m,exports.CalendarHeader=l,exports.ChevronLeftIcon=s,exports.ChevronRightIcon=c,exports.Day=i,exports.DayjsAdapter=e.n,exports.MonthSelection=f,exports.YearSelection=p,exports.addMonth=t.addMonth,exports.composeEventHandlers=t.composeEventHandlers,exports.defaultAdapter=e.r,exports.defaultClassNames=u,exports.getCalendars=t.getCalendars,exports.getDefaults=a,exports.getTranslations=o,exports.isBackDisabled=t.isBackDisabled,exports.isForwardDisabled=t.isForwardDisabled,exports.mergeClassNames=d,exports.subtractMonth=t.subtractMonth,exports.useDates=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useDates-c17u4Qfs.cjs"),t=require("./utils.cjs");let n=require("react");n=e.i(n,1);let r=require("react/jsx-runtime");var i={root:`w-fit flex flex-col p-4 bg-white rounded-lg shadow-lg`,header:`flex items-center justify-between border-b-2 border-brand-gray-light/40 pb-2`,headerMultiMonth:`border-b-0 pb-0`,calendarsContainer:`flex flex-wrap gap-4`,calendarContainer:`flex-1 min-w-[280px] max-w-full`,navButtonSlotStart:`w-9 flex justify-start`,navButtonSlotEnd:`w-9 flex justify-end`,headerTitleContainer:`font-semibold text-brand-text text-center flex-1`,weekdayGrid:`grid grid-cols-7 gap-1 mb-1 border-b border-brand-gray-light/40`,weekday:`text-center text-xs text-gray-400 py-2`,daysGrid:`grid grid-cols-7 gap-px bg-brand-gray-light/20`,footer:`mt-4`,navButton:`p-2 text-brand-text hover:bg-gray-100 rounded-full transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none`,navButtonHidden:`invisible pointer-events-none`,monthYearContainer:`flex gap-8`,monthYearLabel:`flex gap-1 items-center font-semibold text-brand-text`,monthYearButton:`hover:bg-gray-100 px-2 py-1 rounded cursor-pointer`,day:{day:`rmdp-day group`,selected:`rmdp-day-selected`,unselected:`rmdp-day-unselected`,disabled:`rmdp-day-disabled`,empty:`rmdp-day-empty`,rangeStart:`rmdp-day-range-start`,rangeEnd:`rmdp-day-range-end`,rangeBetween:`rmdp-day-range-between`,rangeHovering:`rmdp-day-range-hovering`},monthsGrid:`grid grid-cols-3 gap-2 animate-slide-in-top`,monthButton:`py-3 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none`,monthButtonSelected:`bg-brand-gold text-white`,monthButtonUnselected:`text-brand-text`,yearsGrid:`grid grid-cols-3 gap-2 max-h-[210px] overflow-y-auto pr-2 animate-slide-in-top rmdp-scrollbar`,yearButton:`py-3 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none`,yearButtonSelected:`bg-brand-gold text-white`,yearButtonUnselected:`text-brand-text`},a=e=>{let t={...i};if(!e)return t;for(let n in e){let r=n;r===`day`&&e.day?t.day={...i.day,...e.day}:e[r]&&(t[r]=e[r])}return t};function o(t=e.r,n){return{months:t.getMonths(n),weekdays:t.getWeekdays(n),back:`Previous month`,forward:`Next month`}}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:a,t:o,classNames:s,slideDirection:u,currentView:d})=>{if(e.length>1&&e.length<12)return null;let f=e[0],p=e[e.length-1],m=[s.header,e.length>1?s.headerMultiMonth:``].filter(Boolean).join(` `),h=e=>[s.navButton,e?s.navButtonHidden:``].filter(Boolean).join(` `),g=!!(d&&d!==`days`);return(0,r.jsxs)(`div`,{className:m,children:[(0,r.jsx)(`button`,{...t({calendars:e}),onMouseDown:e=>e.preventDefault(),className:h(g),"aria-label":o.back,children:(0,r.jsx)(c,{})}),(0,r.jsx)(`div`,{className:s.monthYearContainer,children:e.length===1?(0,r.jsxs)(`div`,{className:`${s.monthYearLabel} ${u===`left`?`animate-slide-in-left`:u===`right`?`animate-slide-in-right`:``}`,children:[(0,r.jsx)(`button`,{onMouseDown:e=>e.preventDefault(),onClick:()=>i(d===`months`?`days`:`months`),className:s.monthYearButton,children:a[e[0].month]}),(0,r.jsx)(`button`,{onMouseDown:e=>e.preventDefault(),onClick:()=>i(d===`years`?`days`:`years`),className:s.monthYearButton,children:e[0].year})]},`${e[0].month}-${e[0].year}`):(0,r.jsx)(`div`,{className:`${s.monthYearLabel} ${u===`left`?`animate-slide-in-left`:u===`right`?`animate-slide-in-right`:``}`,children:(0,r.jsx)(`span`,{children:f.year===p.year?f.year:`${f.year} - ${p.year}`})})}),(0,r.jsx)(`button`,{...n({calendars:e}),onMouseDown:e=>e.preventDefault(),className:h(g),"aria-label":o.forward,children:(0,r.jsx)(l,{})})]})},d=({dateObj:e,getDateProps:t,dayProps:n,classNames:i})=>{if(!e)return(0,r.jsx)(`div`,{className:i.day.empty});let{date:a,selected:o,selectable:s,isRangeStart:c,isRangeEnd:l,isRangeBetween:u,isRangeHovering:d,isRangeActive:f}=e,p=i.day,m=`rounded-full`;m=c&&l?`${p.selected} rounded-full`:c?`${p.rangeStart} ${f?`rounded-l-full rounded-r-none`:`rounded-full`}`:l?`${p.rangeEnd} ${f?`rounded-r-full rounded-l-none`:`rounded-full`}`:u?p.rangeBetween||``:d?p.rangeHovering||``:o?p.selected||``:s?p.unselected||``:p.disabled||``;let h=(e.modifiers||[]).map(e=>p[e]||e).filter(Boolean).join(` `),g=[p.day,m,h].filter(Boolean).join(` `);return(0,r.jsx)(`button`,{...t({dateObj:e,...n}),className:g,children:a.getDate()})},f=({year:e,month:t,monthNames:n,minDate:i,maxDate:a,onMonthSelect:o,classNames:s})=>{let c=t=>!!(i&&e===i.getFullYear()&&t<i.getMonth()||a&&e===a.getFullYear()&&t>a.getMonth());return(0,r.jsx)(`div`,{className:s.monthsGrid,children:n.map((e,n)=>{let i=c(n);return(0,r.jsx)(`button`,{onMouseDown:e=>e.preventDefault(),onClick:()=>!i&&o(n),className:`${s.monthButton} ${n===t?s.monthButtonSelected:s.monthButtonUnselected}`,disabled:i,children:e},e)})})},p=({year:e,minDate:t,maxDate:i,adapter:a,onYearSelect:o,classNames:s})=>{let c=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(c.current){let e=c.current.querySelector(`[data-selected="true"]`);e&&e.scrollIntoView({block:`center`})}},[]);let l=t?a.get(a.date(t),`year`):e-50,u=i?a.get(a.date(i),`year`):e+50,d=[];for(let e=l;e<=u;e++)d.push(e);return(0,r.jsx)(`div`,{ref:c,className:s.yearsGrid,children:d.map(t=>(0,r.jsx)(`button`,{"data-selected":t===e,onMouseDown:e=>e.preventDefault(),onClick:()=>o(t),className:`${s.yearButton} ${t===e?s.yearButtonSelected:s.yearButtonUnselected}`,children:t},t))})},m=t=>{let{classNames:i,locale:o,translations:m,adapter:h=e.r,firstDayOfWeek:g=0,header:_,footer:v,getDayProps:y,...b}=t,x=a(i),[S,C]=(0,n.useState)(`days`),[w,T]=(0,n.useState)(null),E=s(h,o,m),D=E.weekdays,O=E.months,{calendars:k,getBackProps:A,getForwardProps:j,getDateProps:M,setOffset:N}=e.t({...b,adapter:h,firstDayOfWeek:g}),P=[...D.slice(g),...D.slice(0,g)],{month:F,year:I}=k[0],L=e=>{let n=h.set(h.set(h.date(t.date||new Date),`year`,I),`month`,F),r=h.set(n,`month`,e),i=h.startOf(h.date(t.date||new Date),`month`),a=h.diff(r,i,`month`);T(null),N(a),C(`days`)},R=e=>{let n=h.set(h.set(h.date(t.date||new Date),`year`,I),`month`,F),r=h.set(n,`year`,e),i=h.startOf(h.date(t.date||new Date),`month`),a=h.diff(r,i,`month`);T(null),N(a),C(`days`)},z=b.monthsToDisplay||1,B=e=>{let t=A({offset:z,...e});return{...t,onClick:e=>{T(`left`),t.onClick?.(e)}}},V=e=>{let t=j({offset:z,...e});return{...t,onClick:e=>{T(`right`),t.onClick?.(e)}}};return(0,r.jsxs)(`div`,{className:`rmdp ${x.root}`,children:[typeof _==`function`?_({calendars:k,getBackProps:B,getForwardProps:V,setView:C,monthNames:O,t:E,slideDirection:w,currentView:S}):_||(0,r.jsx)(u,{calendars:k,getBackProps:B,getForwardProps:V,setView:C,monthNames:O,t:E,classNames:x,slideDirection:w,currentView:S}),(0,r.jsxs)(`div`,{className:x.calendarsContainer,children:[S===`months`&&k.map(e=>(0,r.jsx)(`div`,{className:x.calendarContainer,children:(0,r.jsx)(f,{year:e.year,month:e.month,monthNames:O,minDate:t.minDate,maxDate:t.maxDate,onMonthSelect:L,classNames:x})},`months-${e.year}`)),S===`years`&&k.map(e=>(0,r.jsx)(`div`,{className:x.calendarContainer,children:(0,r.jsx)(p,{year:e.year,minDate:t.minDate,maxDate:t.maxDate,adapter:h,onYearSelect:R,classNames:x})},`years-${e.year}`)),S===`days`&&k.map((e,t)=>(0,r.jsxs)(`div`,{className:x.calendarContainer,children:[k.length>1&&(0,r.jsxs)(`div`,{className:x.header,children:[(0,r.jsx)(`div`,{className:x.navButtonSlotStart,children:t===0&&k.length<12&&(0,r.jsx)(`button`,{...B({calendars:k}),onMouseDown:e=>e.preventDefault(),className:x.navButton,"aria-label":E.back,children:(0,r.jsx)(c,{})})}),(0,r.jsxs)(`span`,{className:x.headerTitleContainer,children:[O[e.month],k.length<12?` ${e.year}`:``]}),(0,r.jsx)(`div`,{className:x.navButtonSlotEnd,children:t===k.length-1&&k.length<12&&(0,r.jsx)(`button`,{...V({calendars:k}),onMouseDown:e=>e.preventDefault(),className:x.navButton,"aria-label":E.forward,children:(0,r.jsx)(l,{})})})]}),(0,r.jsx)(`div`,{className:x.weekdayGrid,children:P.map(e=>(0,r.jsx)(`div`,{className:x.weekday,children:e},e))}),(0,r.jsx)(`div`,{className:`${x.daysGrid} ${w===`left`?`animate-slide-in-left`:w===`right`?`animate-slide-in-right`:``}`,children:e.weeks.map((e,t)=>e.map((e,n)=>(0,r.jsx)(d,{dateObj:e,getDateProps:M,dayProps:e?y?.(e):void 0,classNames:x},`${t}-${n}`)))},`daysGrid-${e.month}-${e.year}`)]},`${e.month}-${e.year}`))]}),v&&(0,r.jsx)(`div`,{className:x.footer,children:v})]})};exports.Calendar=m,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.defaultClassNames=i,exports.getCalendars=t.getCalendars,exports.getDefaults=o,exports.getTranslations=s,exports.isBackDisabled=t.isBackDisabled,exports.isForwardDisabled=t.isForwardDisabled,exports.mergeClassNames=a,exports.subtractMonth=t.subtractMonth,exports.useDates=e.t;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../src/components/Day.tsx","../src/i18n.ts","../src/components/CalendarHeader.tsx","../src/classNames.ts","../src/components/MonthSelection.tsx","../src/components/YearSelection.tsx","../src/components/Calendar.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport type { CalendarClassNames, DateObj } from '../types';\n\ninterface DayProps {\n dateObj: DateObj | null;\n getDateProps: (args: { dateObj: DateObj, [key: string]: any }) => any;\n tooltip?: React.ReactNode;\n classNames: Required<CalendarClassNames>;\n}\n\nexport const Day: React.FC<DayProps> = ({ dateObj, getDateProps, classNames, tooltip }) => {\n const [isHovered, setIsHovered] = useState(false);\n\n if (!dateObj) {\n return <div className=\"aspect-square bg-white\" />;\n }\n\n const { date, selected, selectable, isRangeStart, isRangeEnd, isRangeBetween, isRangeHovering, isRangeActive } = dateObj;\n const dayClasses = classNames.day;\n\n let stateClasses = \"rounded-full\";\n if (isRangeStart && isRangeEnd) {\n stateClasses = `${dayClasses.selected} rounded-full`;\n } else if (isRangeStart) {\n stateClasses = `${dayClasses.rangeStart} ${isRangeActive ? 'rounded-l-full rounded-r-none' : 'rounded-full'}`;\n } else if (isRangeEnd) {\n stateClasses = `${dayClasses.rangeEnd} ${isRangeActive ? 'rounded-r-full rounded-l-none' : 'rounded-full'}`;\n } else if (isRangeBetween) {\n stateClasses = dayClasses.rangeBetween || '';\n } else if (isRangeHovering) {\n stateClasses = dayClasses.rangeHovering || '';\n } else if (selected) {\n stateClasses = dayClasses.selected || '';\n } else if (!selectable) {\n stateClasses = dayClasses.disabled || '';\n } else {\n stateClasses = dayClasses.unselected || '';\n }\n\n const className = [\n dayClasses.day,\n stateClasses,\n ...(dateObj.modifiers || []).map(m => (dayClasses as any)[m] || m)\n ].filter(Boolean).join(' ');\n\n return (\n <button\n {...getDateProps({\n dateObj,\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false)\n })}\n className={className}\n >\n {date.getDate()}\n {tooltip && isHovered && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 hidden group-hover:block z-10\">\n <div className=\"bg-gray-800 text-white text-xs py-1 px-2 rounded whitespace-nowrap shadow-lg\">\n {tooltip}\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 border-8 border-transparent border-t-gray-800\" />\n </div>\n </div>\n )}\n </button>\n );\n};\n","import { DateAdapter } from \"./types\";\nimport { defaultAdapter } from \"./adapters/dayjs\";\n\nexport interface Translations {\n months: string[];\n weekdays: string[];\n back: string;\n forward: string;\n}\n\nexport function getDefaults(adapter: DateAdapter = defaultAdapter, locale?: string): Translations {\n return {\n months: adapter.getMonths(locale),\n weekdays: adapter.getWeekdays(locale),\n back: 'Previous month',\n forward: 'Next month'\n };\n}\n\nexport function getTranslations(\n adapter: DateAdapter = defaultAdapter,\n locale?: string,\n custom?: Partial<Translations>\n): Translations {\n const base = getDefaults(adapter, locale);\n return { ...base, ...custom };\n}\n","import React from 'react';\nimport { Calendar, CalendarClassNames } from '../types';\n\nexport interface HeaderProps {\n calendars: Calendar[];\n getBackProps: (args: any) => any;\n getForwardProps: (args: any) => any;\n setView: (view: 'days' | 'months' | 'years') => void;\n monthNames: string[];\n t: { back: string; forward: string };\n classNames: Required<CalendarClassNames>;\n slideDirection?: 'left' | 'right' | null;\n currentView?: 'days' | 'months' | 'years';\n}\n\nexport const ChevronLeftIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n);\n\nexport const ChevronRightIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n);\n\nexport const CalendarHeader: React.FC<HeaderProps> = ({\n calendars,\n getBackProps,\n getForwardProps,\n setView,\n monthNames,\n t,\n classNames,\n slideDirection,\n currentView\n}) => {\n return (\n <div className={classNames.header}>\n <button\n {...getBackProps({ calendars })}\n onMouseDown={(e) => e.preventDefault()}\n className={`${classNames.navButton} ${currentView && currentView !== 'days' ? 'invisible pointer-events-none' : ''}`}\n aria-label={t.back}\n >\n <ChevronLeftIcon />\n </button>\n\n <div className={classNames.monthYearContainer}>\n {calendars.length === 1 ? (\n <div key={`${calendars[0].month}-${calendars[0].year}`} className={`${classNames.monthYearLabel} ${slideDirection === 'left' ? 'animate-slide-in-left' : slideDirection === 'right' ? 'animate-slide-in-right' : ''}`}>\n <button\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setView(currentView === 'months' ? 'days' : 'months')}\n className={classNames.monthYearButton}\n >\n {monthNames[calendars[0].month]}\n </button>\n <button\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setView(currentView === 'years' ? 'days' : 'years')}\n className={classNames.monthYearButton}\n >\n {calendars[0].year}\n </button>\n </div>\n ) : (\n <div className={`${classNames.monthYearLabel} ${slideDirection === 'left' ? 'animate-slide-in-left' : slideDirection === 'right' ? 'animate-slide-in-right' : ''}`}>\n {(() => {\n const first = calendars[0];\n const last = calendars[calendars.length - 1];\n const isFullYear = calendars.length === 12 && first.month === 0 && last.month === 11 && first.year === last.year;\n\n if (isFullYear) {\n return <span>{first.year}</span>;\n } else if (first.year === last.year) {\n return <span>{monthNames[first.month]} - {monthNames[last.month]} {first.year}</span>;\n } else {\n return <span>{monthNames[first.month]} {first.year} - {monthNames[last.month]} {last.year}</span>;\n }\n })()}\n </div>\n )}\n </div>\n\n <button\n {...getForwardProps({ calendars })}\n onMouseDown={(e) => e.preventDefault()}\n className={`${classNames.navButton} ${currentView && currentView !== 'days' ? 'invisible pointer-events-none' : ''}`}\n aria-label={t.forward}\n >\n <ChevronRightIcon />\n </button>\n </div>\n );\n};\n","export interface DayClassNames {\n day?: string;\n selected?: string;\n unselected?: string;\n disabled?: string;\n rangeStart?: string;\n rangeEnd?: string;\n rangeBetween?: string;\n rangeHovering?: string;\n [key: string]: string | undefined;\n}\n\nexport const defaultClassNames = {\n root: \"w-fit flex flex-col p-4 bg-white rounded-lg shadow-lg\",\n header: \"flex items-center justify-between border-b-2 border-brand-gray-light/40 pb-2\",\n calendarsContainer: \"flex flex-wrap gap-4 mt-3\",\n calendarContainer: \"flex-1 min-w-[280px] max-w-full\",\n weekdayGrid: \"grid grid-cols-7 gap-1 mb-1 border-b border-brand-gray-light/40\",\n weekday: \"text-center text-xs text-gray-400 py-2\",\n daysGrid: \"grid grid-cols-7 gap-px bg-brand-gray-light/20\",\n footer: \"mt-4\",\n\n navButton: \"p-2 text-brand-text hover:bg-gray-100 rounded-full transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none\",\n monthYearContainer: \"flex gap-8\",\n monthYearLabel: \"flex gap-1 items-center font-semibold text-brand-text\",\n monthYearButton: \"hover:bg-gray-100 px-2 py-1 rounded cursor-pointer\",\n\n day: {\n day: \"aspect-square flex items-center justify-center text-sm font-medium transition-all relative group cursor-pointer p-px\",\n selected: \"bg-brand-gold text-white rounded-full\",\n unselected: \"bg-white hover:bg-brand-gray-light text-brand-text\",\n disabled: \"bg-white text-gray-300 cursor-not-allowed\",\n rangeStart: \"bg-brand-gold text-white\",\n rangeEnd: \"bg-brand-gold text-white\",\n rangeBetween: \"bg-brand-gold/25 text-brand-text\",\n rangeHovering: \"bg-brand-gold/25 text-brand-text\",\n },\n\n monthsGrid: \"grid grid-cols-3 gap-2 animate-slide-in-top\",\n monthButton: \"py-3 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none\",\n monthButtonSelected: \"bg-brand-gold text-white\",\n monthButtonUnselected: \"text-brand-text\",\n\n yearsGrid: \"grid grid-cols-3 gap-2 max-h-[300px] overflow-y-auto pr-2 animate-slide-in-top\",\n yearButton: \"py-3 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none\",\n yearButtonSelected: \"bg-brand-gold text-white\",\n yearButtonUnselected: \"text-brand-text\",\n}\n\nexport interface CalendarClassNames {\n root?: string;\n header?: string;\n calendarsContainer?: string;\n calendarContainer?: string;\n weekdayGrid?: string;\n weekday?: string;\n daysGrid?: string;\n footer?: string;\n\n navButton?: string;\n monthYearContainer?: string;\n monthYearLabel?: string;\n monthYearButton?: string;\n\n day?: DayClassNames;\n\n monthsGrid?: string;\n monthButton?: string;\n monthButtonSelected?: string;\n monthButtonUnselected?: string;\n\n yearsGrid?: string;\n yearButton?: string;\n yearButtonSelected?: string;\n yearButtonUnselected?: string;\n}\n\nexport const mergeClassNames = (custom?: CalendarClassNames): Required<CalendarClassNames> => {\n const result = { ...defaultClassNames };\n if (!custom) return result;\n\n for (const key in custom) {\n const k = key as keyof CalendarClassNames;\n if (k === 'day' && custom.day) {\n result.day = { ...defaultClassNames.day, ...custom.day };\n } else if (custom[k]) {\n (result as any)[k] = custom[k];\n }\n }\n return result;\n};\n","import React from 'react';\nimport { CalendarClassNames } from '../types';\n\ninterface MonthSelectionProps {\n year: number;\n month: number;\n monthNames: string[];\n minDate?: Date | null;\n maxDate?: Date | null;\n onMonthSelect: (month: number) => void;\n classNames: Required<CalendarClassNames>;\n}\n\nexport const MonthSelection: React.FC<MonthSelectionProps> = ({\n year,\n month,\n monthNames,\n minDate,\n maxDate,\n onMonthSelect,\n classNames,\n}) => {\n const isMonthDisabled = (monthIdx: number) => {\n if (minDate && year === minDate.getFullYear() && monthIdx < minDate.getMonth()) {\n return true;\n }\n if (maxDate && year === maxDate.getFullYear() && monthIdx > maxDate.getMonth()) {\n return true;\n }\n return false;\n };\n\n return (\n <div className={classNames.monthsGrid}>\n {monthNames.map((name, idx) => {\n const disabled = isMonthDisabled(idx);\n return (\n <button\n key={name}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => !disabled && onMonthSelect(idx)}\n className={`${classNames.monthButton} ${idx === month ? classNames.monthButtonSelected : classNames.monthButtonUnselected}`}\n disabled={disabled}\n >\n {name}\n </button>\n );\n })}\n </div>\n );\n};\n","import React, { useEffect, useRef } from 'react';\nimport { CalendarClassNames, DateAdapter } from '../types';\n\ninterface YearSelectionProps {\n year: number;\n minDate?: Date | null;\n maxDate?: Date | null;\n adapter: DateAdapter;\n onYearSelect: (year: number) => void;\n classNames: Required<CalendarClassNames>;\n}\n\nexport const YearSelection: React.FC<YearSelectionProps> = ({\n year,\n minDate,\n maxDate,\n adapter,\n onYearSelect,\n classNames,\n}) => {\n const yearListRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (yearListRef.current) {\n const selectedYearBtn = yearListRef.current.querySelector('[data-selected=\"true\"]');\n if (selectedYearBtn) {\n selectedYearBtn.scrollIntoView({ block: 'center' });\n }\n }\n }, []);\n\n const startYear = minDate ? adapter.get(adapter.date(minDate), 'year') : year - 50;\n const endYear = maxDate ? adapter.get(adapter.date(maxDate), 'year') : year + 50;\n const years = [];\n for (let y = startYear; y <= endYear; y++) {\n years.push(y);\n }\n\n return (\n <div ref={yearListRef} className={classNames.yearsGrid}>\n {years.map((y) => (\n <button\n key={y}\n data-selected={y === year}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => onYearSelect(y)}\n className={`${classNames.yearButton} ${y === year ? classNames.yearButtonSelected : classNames.yearButtonUnselected}`}\n >\n {y}\n </button>\n ))}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useDates, UseDatesProps } from '../useDates';\nimport { Day } from './Day';\nimport { defaultAdapter } from '../adapters/dayjs';\nimport { getTranslations, Translations } from '../i18n';\nimport { CalendarHeader } from './CalendarHeader';\nimport { DateObj, CalendarClassNames } from '../types';\nimport { mergeClassNames } from '../classNames';\nimport { MonthSelection } from './MonthSelection';\nimport { YearSelection } from './YearSelection';\n\ninterface CalendarProps extends UseDatesProps {\n classNames?: CalendarClassNames;\n locale?: string;\n translations?: Partial<Translations>;\n header?: React.ReactNode | ((props: any) => React.ReactNode);\n footer?: React.ReactNode;\n renderDayTooltip?: (dateObj: DateObj) => React.ReactNode;\n}\n\ntype CalendarView = 'days' | 'months' | 'years';\n\nexport const Calendar: React.FC<CalendarProps> = (props) => {\n const {\n classNames: customClassNames,\n locale,\n translations: customTranslations,\n adapter = defaultAdapter,\n firstDayOfWeek = 0,\n header,\n footer,\n renderDayTooltip,\n ...useDatesProps\n } = props;\n\n const classNames = mergeClassNames(customClassNames);\n\n const [view, setView] = useState<CalendarView>('days');\n const [slideDirection, setSlideDirection] = useState<'left' | 'right' | null>(null);\n\n const t = getTranslations(adapter, locale, customTranslations);\n const weekdayNames = t.weekdays;\n const monthNames = t.months;\n\n const {\n calendars,\n getBackProps,\n getForwardProps,\n getDateProps,\n setOffset\n } = useDates({ ...useDatesProps, adapter, firstDayOfWeek });\n\n // Adjust weekday names based on firstDayOfWeek\n const sortedWeekdays = [...weekdayNames.slice(firstDayOfWeek), ...weekdayNames.slice(0, firstDayOfWeek)];\n\n const currentCalendar = calendars[0];\n const { month, year } = currentCalendar;\n\n const handleMonthSelect = (newMonth: number) => {\n const currentMonth = adapter.set(adapter.set(adapter.date(props.date || new Date()), 'year', year), 'month', month);\n const targetMonth = adapter.set(currentMonth, 'month', newMonth);\n const baseMonth = adapter.startOf(adapter.date(props.date || new Date()), 'month');\n const newOffset = adapter.diff(targetMonth, baseMonth, 'month');\n setSlideDirection(null);\n setOffset(newOffset);\n setView('days');\n };\n\n const handleYearSelect = (newYear: number) => {\n const currentMonth = adapter.set(adapter.set(adapter.date(props.date || new Date()), 'year', year), 'month', month);\n const targetMonth = adapter.set(currentMonth, 'year', newYear);\n const baseMonth = adapter.startOf(adapter.date(props.date || new Date()), 'month');\n const newOffset = adapter.diff(targetMonth, baseMonth, 'month');\n setSlideDirection(null);\n setOffset(newOffset);\n setView('days');\n };\n\n const wrappedGetBackProps = (args: any) => {\n const props = getBackProps(args);\n return {\n ...props,\n onClick: (e: any) => {\n setSlideDirection('left');\n props.onClick?.(e);\n }\n };\n };\n\n const wrappedGetForwardProps = (args: any) => {\n const props = getForwardProps(args);\n return {\n ...props,\n onClick: (e: any) => {\n setSlideDirection('right');\n props.onClick?.(e);\n }\n };\n };\n\n const renderDefaultHeader = () => (\n <CalendarHeader\n calendars={calendars}\n getBackProps={wrappedGetBackProps}\n getForwardProps={wrappedGetForwardProps}\n setView={setView}\n monthNames={monthNames}\n t={t}\n classNames={classNames}\n slideDirection={slideDirection}\n currentView={view}\n />\n );\n\n return (\n <div className={`rmdp ${classNames.root}`}>\n {typeof header === 'function' ? header({\n calendars,\n getBackProps: wrappedGetBackProps,\n getForwardProps: wrappedGetForwardProps,\n setView,\n monthNames,\n t,\n slideDirection,\n currentView: view\n }) : (header || renderDefaultHeader())}\n\n <div className={classNames.calendarsContainer}>\n {view === 'months' && calendars.map((calendar) => (\n <div key={`months-${calendar.year}`} className={classNames.calendarContainer}>\n <MonthSelection\n year={calendar.year}\n month={calendar.month}\n monthNames={monthNames}\n minDate={props.minDate}\n maxDate={props.maxDate}\n onMonthSelect={handleMonthSelect}\n classNames={classNames}\n />\n </div>\n ))}\n {view === 'years' && calendars.map((calendar) => (\n <div key={`years-${calendar.year}`} className={classNames.calendarContainer}>\n <YearSelection\n year={calendar.year}\n minDate={props.minDate}\n maxDate={props.maxDate}\n adapter={adapter}\n onYearSelect={handleYearSelect}\n classNames={classNames}\n />\n </div>\n ))}\n {view === 'days' && calendars.map((calendar) => (\n <div key={`${calendar.month}-${calendar.year}`} className={classNames.calendarContainer}>\n {calendars.length > 1 && (\n <button\n type=\"button\"\n aria-label={monthNames[calendar.month]}\n className=\"block w-full text-center font-semibold mb-2 text-brand-text\"\n >\n {monthNames[calendar.month]} {calendars[0].year !== calendars[calendars.length - 1].year ? calendar.year : ''}\n </button>\n )}\n <div className={classNames.weekdayGrid}>\n {sortedWeekdays.map((day) => (\n <div key={day} className={classNames.weekday}>{day}</div>\n ))}\n </div>\n <div className={`${classNames.daysGrid} ${slideDirection === 'left' ? 'animate-slide-in-left' : slideDirection === 'right' ? 'animate-slide-in-right' : ''}`}>\n {calendar.weeks.map((week, wi) =>\n week.map((dateObj, di) => (\n <Day\n key={`${wi}-${di}`}\n dateObj={dateObj}\n getDateProps={getDateProps}\n classNames={classNames}\n tooltip={dateObj && renderDayTooltip?.(dateObj)}\n />\n ))\n )}\n </div>\n </div>\n ))}\n </div>\n {footer && <div className={classNames.footer}>{footer}</div>}\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../src/classNames.ts","../src/i18n.ts","../src/components/CalendarHeader.tsx","../src/components/Day.tsx","../src/components/MonthSelection.tsx","../src/components/YearSelection.tsx","../src/components/Calendar.tsx"],"sourcesContent":["export interface DayClassNames {\n day?: string;\n selected?: string;\n unselected?: string;\n disabled?: string;\n empty?: string;\n rangeStart?: string;\n rangeEnd?: string;\n rangeBetween?: string;\n rangeHovering?: string;\n [key: string]: string | undefined;\n}\n\nexport const defaultClassNames = {\n root: \"w-fit flex flex-col p-4 bg-white rounded-lg shadow-lg\",\n header: \"flex items-center justify-between border-b-2 border-brand-gray-light/40 pb-2\",\n headerMultiMonth: \"border-b-0 pb-0\",\n calendarsContainer: \"flex flex-wrap gap-4\",\n calendarContainer: \"flex-1 min-w-[280px] max-w-full\",\n navButtonSlotStart: \"w-9 flex justify-start\",\n navButtonSlotEnd: \"w-9 flex justify-end\",\n headerTitleContainer: \"font-semibold text-brand-text text-center flex-1\",\n weekdayGrid: \"grid grid-cols-7 gap-1 mb-1 border-b border-brand-gray-light/40\",\n weekday: \"text-center text-xs text-gray-400 py-2\",\n daysGrid: \"grid grid-cols-7 gap-px bg-brand-gray-light/20\",\n footer: \"mt-4\",\n\n navButton: \"p-2 text-brand-text hover:bg-gray-100 rounded-full transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none\",\n navButtonHidden: \"invisible pointer-events-none\",\n monthYearContainer: \"flex gap-8\",\n monthYearLabel: \"flex gap-1 items-center font-semibold text-brand-text\",\n monthYearButton: \"hover:bg-gray-100 px-2 py-1 rounded cursor-pointer\",\n\n day: {\n day: \"rmdp-day group\",\n selected: \"rmdp-day-selected\",\n unselected: \"rmdp-day-unselected\",\n disabled: \"rmdp-day-disabled\",\n empty: \"rmdp-day-empty\",\n rangeStart: \"rmdp-day-range-start\",\n rangeEnd: \"rmdp-day-range-end\",\n rangeBetween: \"rmdp-day-range-between\",\n rangeHovering: \"rmdp-day-range-hovering\",\n },\n\n monthsGrid: \"grid grid-cols-3 gap-2 animate-slide-in-top\",\n monthButton: \"py-3 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none\",\n monthButtonSelected: \"bg-brand-gold text-white\",\n monthButtonUnselected: \"text-brand-text\",\n\n yearsGrid: \"grid grid-cols-3 gap-2 max-h-[210px] overflow-y-auto pr-2 animate-slide-in-top rmdp-scrollbar\",\n yearButton: \"py-3 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none\",\n yearButtonSelected: \"bg-brand-gold text-white\",\n yearButtonUnselected: \"text-brand-text\",\n}\n\nexport interface CalendarClassNames {\n root?: string;\n header?: string;\n headerMultiMonth?: string;\n calendarsContainer?: string;\n calendarContainer?: string;\n navButtonSlotStart?: string;\n navButtonSlotEnd?: string;\n headerTitleContainer?: string;\n weekdayGrid?: string;\n weekday?: string;\n daysGrid?: string;\n footer?: string;\n\n navButton?: string;\n navButtonHidden?: string;\n monthYearContainer?: string;\n monthYearLabel?: string;\n monthYearButton?: string;\n\n day?: DayClassNames;\n\n monthsGrid?: string;\n monthButton?: string;\n monthButtonSelected?: string;\n monthButtonUnselected?: string;\n\n yearsGrid?: string;\n yearButton?: string;\n yearButtonSelected?: string;\n yearButtonUnselected?: string;\n}\n\nexport const mergeClassNames = (custom?: CalendarClassNames): Required<CalendarClassNames> => {\n const result = { ...defaultClassNames };\n if (!custom) return result;\n\n for (const key in custom) {\n const k = key as keyof CalendarClassNames;\n if (k === 'day' && custom.day) {\n result.day = { ...defaultClassNames.day, ...custom.day };\n } else if (custom[k]) {\n (result as any)[k] = custom[k];\n }\n }\n return result;\n};\n","import { DateAdapter } from \"./types\";\nimport { defaultAdapter } from \"./adapters/dayjs\";\n\nexport interface Translations {\n months: string[];\n weekdays: string[];\n back: string;\n forward: string;\n}\n\nexport function getDefaults(adapter: DateAdapter = defaultAdapter, locale?: string): Translations {\n return {\n months: adapter.getMonths(locale),\n weekdays: adapter.getWeekdays(locale),\n back: 'Previous month',\n forward: 'Next month'\n };\n}\n\nexport function getTranslations(\n adapter: DateAdapter = defaultAdapter,\n locale?: string,\n custom?: Partial<Translations>\n): Translations {\n const base = getDefaults(adapter, locale);\n return { ...base, ...custom };\n}\n","import React from 'react';\nimport { Calendar, CalendarClassNames } from '../types';\n\nexport interface HeaderProps {\n calendars: Calendar[];\n getBackProps: (args: any) => any;\n getForwardProps: (args: any) => any;\n setView: (view: 'days' | 'months' | 'years') => void;\n monthNames: string[];\n t: { back: string; forward: string };\n classNames: Required<CalendarClassNames>;\n slideDirection?: 'left' | 'right' | null;\n currentView?: 'days' | 'months' | 'years';\n}\n\nexport const ChevronLeftIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n);\n\nexport const ChevronRightIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n);\n\nexport const CalendarHeader: React.FC<HeaderProps> = ({\n calendars,\n getBackProps,\n getForwardProps,\n setView,\n monthNames,\n t,\n classNames,\n slideDirection,\n currentView\n}) => {\n if (calendars.length > 1 && calendars.length < 12) {\n return null;\n }\n\n const first = calendars[0];\n const last = calendars[calendars.length - 1];\n\n const headerClassName = [\n classNames.header,\n calendars.length > 1 ? classNames.headerMultiMonth : ''\n ].filter(Boolean).join(' ');\n\n const navButtonClassName = (isHidden: boolean) => [\n classNames.navButton,\n isHidden ? classNames.navButtonHidden : ''\n ].filter(Boolean).join(' ');\n\n const isNavHidden = !!(currentView && currentView !== 'days');\n\n return (\n <div className={headerClassName}>\n <button\n {...getBackProps({ calendars })}\n onMouseDown={(e) => e.preventDefault()}\n className={navButtonClassName(isNavHidden)}\n aria-label={t.back}\n >\n <ChevronLeftIcon />\n </button>\n\n <div className={classNames.monthYearContainer}>\n {calendars.length === 1 ? (\n <div key={`${calendars[0].month}-${calendars[0].year}`} className={`${classNames.monthYearLabel} ${slideDirection === 'left' ? 'animate-slide-in-left' : slideDirection === 'right' ? 'animate-slide-in-right' : ''}`}>\n <button\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setView(currentView === 'months' ? 'days' : 'months')}\n className={classNames.monthYearButton}\n >\n {monthNames[calendars[0].month]}\n </button>\n <button\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setView(currentView === 'years' ? 'days' : 'years')}\n className={classNames.monthYearButton}\n >\n {calendars[0].year}\n </button>\n </div>\n ) : (\n <div className={`${classNames.monthYearLabel} ${slideDirection === 'left' ? 'animate-slide-in-left' : slideDirection === 'right' ? 'animate-slide-in-right' : ''}`}>\n <span>\n {first.year === last.year ? first.year : `${first.year} - ${last.year}`}\n </span>\n </div>\n )}\n </div>\n\n <button\n {...getForwardProps({ calendars })}\n onMouseDown={(e) => e.preventDefault()}\n className={navButtonClassName(isNavHidden)}\n aria-label={t.forward}\n >\n <ChevronRightIcon />\n </button>\n </div>\n );\n};\n","import React from 'react';\nimport type { CalendarClassNames, DateObj } from '../types';\n\ninterface DayProps {\n dateObj: DateObj | null;\n getDateProps: (args: { dateObj: DateObj, [key: string]: any }) => any;\n dayProps?: Record<string, any>;\n classNames: Required<CalendarClassNames>;\n}\n\nexport const Day: React.FC<DayProps> = ({ dateObj, getDateProps, dayProps, classNames }) => {\n if (!dateObj) {\n return <div className={classNames.day.empty} />;\n }\n\n const { date, selected, selectable, isRangeStart, isRangeEnd, isRangeBetween, isRangeHovering, isRangeActive } = dateObj;\n const dayClasses = classNames.day;\n\n let stateClasses = \"rounded-full\";\n if (isRangeStart && isRangeEnd) {\n stateClasses = `${dayClasses.selected} rounded-full`;\n } else if (isRangeStart) {\n stateClasses = `${dayClasses.rangeStart} ${isRangeActive ? 'rounded-l-full rounded-r-none' : 'rounded-full'}`;\n } else if (isRangeEnd) {\n stateClasses = `${dayClasses.rangeEnd} ${isRangeActive ? 'rounded-r-full rounded-l-none' : 'rounded-full'}`;\n } else if (isRangeBetween) {\n stateClasses = dayClasses.rangeBetween || '';\n } else if (isRangeHovering) {\n stateClasses = dayClasses.rangeHovering || '';\n } else if (selected) {\n stateClasses = dayClasses.selected || '';\n } else if (!selectable) {\n stateClasses = dayClasses.disabled || '';\n } else {\n stateClasses = dayClasses.unselected || '';\n }\n\n const modifierClasses = (dateObj.modifiers || [])\n .map(m => (dayClasses as any)[m] || m)\n .filter(Boolean)\n .join(' ');\n\n const className = [dayClasses.day, stateClasses, modifierClasses]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n {...getDateProps({ dateObj, ...dayProps })}\n className={className}\n >\n {date.getDate()}\n </button>\n );\n};\n","import React from 'react';\nimport { CalendarClassNames } from '../types';\n\ninterface MonthSelectionProps {\n year: number;\n month: number;\n monthNames: string[];\n minDate?: Date | null;\n maxDate?: Date | null;\n onMonthSelect: (month: number) => void;\n classNames: Required<CalendarClassNames>;\n}\n\nexport const MonthSelection: React.FC<MonthSelectionProps> = ({\n year,\n month,\n monthNames,\n minDate,\n maxDate,\n onMonthSelect,\n classNames,\n}) => {\n const isMonthDisabled = (monthIdx: number) => {\n if (minDate && year === minDate.getFullYear() && monthIdx < minDate.getMonth()) {\n return true;\n }\n if (maxDate && year === maxDate.getFullYear() && monthIdx > maxDate.getMonth()) {\n return true;\n }\n return false;\n };\n\n return (\n <div className={classNames.monthsGrid}>\n {monthNames.map((name, idx) => {\n const disabled = isMonthDisabled(idx);\n return (\n <button\n key={name}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => !disabled && onMonthSelect(idx)}\n className={`${classNames.monthButton} ${idx === month ? classNames.monthButtonSelected : classNames.monthButtonUnselected}`}\n disabled={disabled}\n >\n {name}\n </button>\n );\n })}\n </div>\n );\n};\n","import React, { useEffect, useRef } from 'react';\nimport { CalendarClassNames, DateAdapter } from '../types';\n\ninterface YearSelectionProps {\n year: number;\n minDate?: Date | null;\n maxDate?: Date | null;\n adapter: DateAdapter;\n onYearSelect: (year: number) => void;\n classNames: Required<CalendarClassNames>;\n}\n\nexport const YearSelection: React.FC<YearSelectionProps> = ({\n year,\n minDate,\n maxDate,\n adapter,\n onYearSelect,\n classNames,\n}) => {\n const yearListRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (yearListRef.current) {\n const selectedYearBtn = yearListRef.current.querySelector('[data-selected=\"true\"]');\n if (selectedYearBtn) {\n selectedYearBtn.scrollIntoView({ block: 'center' });\n }\n }\n }, []);\n\n const startYear = minDate ? adapter.get(adapter.date(minDate), 'year') : year - 50;\n const endYear = maxDate ? adapter.get(adapter.date(maxDate), 'year') : year + 50;\n const years = [];\n for (let y = startYear; y <= endYear; y++) {\n years.push(y);\n }\n\n return (\n <div ref={yearListRef} className={classNames.yearsGrid}>\n {years.map((y) => (\n <button\n key={y}\n data-selected={y === year}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => onYearSelect(y)}\n className={`${classNames.yearButton} ${y === year ? classNames.yearButtonSelected : classNames.yearButtonUnselected}`}\n >\n {y}\n </button>\n ))}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { defaultAdapter } from '../adapters/dayjs';\nimport { mergeClassNames } from '../classNames';\nimport { getTranslations, Translations } from '../i18n';\nimport { CalendarClassNames, DateObj } from '../types';\nimport { useDates, UseDatesProps } from '../useDates';\nimport { CalendarHeader, ChevronLeftIcon, ChevronRightIcon } from './CalendarHeader';\nimport { Day } from './Day';\nimport { MonthSelection } from './MonthSelection';\nimport { YearSelection } from './YearSelection';\n\ninterface CalendarProps extends UseDatesProps {\n classNames?: CalendarClassNames;\n locale?: string;\n translations?: Partial<Translations>;\n header?: React.ReactNode | ((props: any) => React.ReactNode);\n footer?: React.ReactNode;\n getDayProps?: (dateObj: DateObj) => Record<string, any>;\n}\n\ntype CalendarView = 'days' | 'months' | 'years';\n\nexport const Calendar: React.FC<CalendarProps> = (props) => {\n const {\n classNames: customClassNames,\n locale,\n translations: customTranslations,\n adapter = defaultAdapter,\n firstDayOfWeek = 0,\n header,\n footer,\n getDayProps,\n ...useDatesProps\n } = props;\n\n const classNames = mergeClassNames(customClassNames);\n\n const [view, setView] = useState<CalendarView>('days');\n const [slideDirection, setSlideDirection] = useState<'left' | 'right' | null>(null);\n\n const t = getTranslations(adapter, locale, customTranslations);\n const weekdayNames = t.weekdays;\n const monthNames = t.months;\n\n const {\n calendars,\n getBackProps,\n getForwardProps,\n getDateProps,\n setOffset\n } = useDates({ ...useDatesProps, adapter, firstDayOfWeek });\n\n // Adjust weekday names based on firstDayOfWeek\n const sortedWeekdays = [...weekdayNames.slice(firstDayOfWeek), ...weekdayNames.slice(0, firstDayOfWeek)];\n\n const currentCalendar = calendars[0];\n const { month, year } = currentCalendar;\n\n const handleMonthSelect = (newMonth: number) => {\n const currentMonth = adapter.set(adapter.set(adapter.date(props.date || new Date()), 'year', year), 'month', month);\n const targetMonth = adapter.set(currentMonth, 'month', newMonth);\n const baseMonth = adapter.startOf(adapter.date(props.date || new Date()), 'month');\n const newOffset = adapter.diff(targetMonth, baseMonth, 'month');\n setSlideDirection(null);\n setOffset(newOffset);\n setView('days');\n };\n\n const handleYearSelect = (newYear: number) => {\n const currentMonth = adapter.set(adapter.set(adapter.date(props.date || new Date()), 'year', year), 'month', month);\n const targetMonth = adapter.set(currentMonth, 'year', newYear);\n const baseMonth = adapter.startOf(adapter.date(props.date || new Date()), 'month');\n const newOffset = adapter.diff(targetMonth, baseMonth, 'month');\n setSlideDirection(null);\n setOffset(newOffset);\n setView('days');\n };\n\n const stepOffset = useDatesProps.monthsToDisplay || 1;\n\n const wrappedGetBackProps = (args: any) => {\n const props = getBackProps({ offset: stepOffset, ...args });\n return {\n ...props,\n onClick: (e: any) => {\n setSlideDirection('left');\n props.onClick?.(e);\n }\n };\n };\n\n const wrappedGetForwardProps = (args: any) => {\n const props = getForwardProps({ offset: stepOffset, ...args });\n return {\n ...props,\n onClick: (e: any) => {\n setSlideDirection('right');\n props.onClick?.(e);\n }\n };\n };\n\n const renderDefaultHeader = () => (\n <CalendarHeader\n calendars={calendars}\n getBackProps={wrappedGetBackProps}\n getForwardProps={wrappedGetForwardProps}\n setView={setView}\n monthNames={monthNames}\n t={t}\n classNames={classNames}\n slideDirection={slideDirection}\n currentView={view}\n />\n );\n\n return (\n <div className={`rmdp ${classNames.root}`}>\n {typeof header === 'function' ? header({\n calendars,\n getBackProps: wrappedGetBackProps,\n getForwardProps: wrappedGetForwardProps,\n setView,\n monthNames,\n t,\n slideDirection,\n currentView: view\n }) : (header || renderDefaultHeader())}\n\n <div className={classNames.calendarsContainer}>\n {view === 'months' && calendars.map((calendar) => (\n <div key={`months-${calendar.year}`} className={classNames.calendarContainer}>\n <MonthSelection\n year={calendar.year}\n month={calendar.month}\n monthNames={monthNames}\n minDate={props.minDate}\n maxDate={props.maxDate}\n onMonthSelect={handleMonthSelect}\n classNames={classNames}\n />\n </div>\n ))}\n {view === 'years' && calendars.map((calendar) => (\n <div key={`years-${calendar.year}`} className={classNames.calendarContainer}>\n <YearSelection\n year={calendar.year}\n minDate={props.minDate}\n maxDate={props.maxDate}\n adapter={adapter}\n onYearSelect={handleYearSelect}\n classNames={classNames}\n />\n </div>\n ))}\n {view === 'days' && calendars.map((calendar, index) => (\n <div key={`${calendar.month}-${calendar.year}`} className={classNames.calendarContainer}>\n {calendars.length > 1 && (\n <div className={classNames.header}>\n <div className={classNames.navButtonSlotStart}>\n {index === 0 && calendars.length < 12 && (\n <button\n {...wrappedGetBackProps({ calendars })}\n onMouseDown={(e) => e.preventDefault()}\n className={classNames.navButton}\n aria-label={t.back}\n >\n <ChevronLeftIcon />\n </button>\n )}\n </div>\n <span className={classNames.headerTitleContainer}>\n {monthNames[calendar.month]}\n {calendars.length < 12 ? ` ${calendar.year}` : ''}\n </span>\n <div className={classNames.navButtonSlotEnd}>\n {index === calendars.length - 1 && calendars.length < 12 && (\n <button\n {...wrappedGetForwardProps({ calendars })}\n onMouseDown={(e) => e.preventDefault()}\n className={classNames.navButton}\n aria-label={t.forward}\n >\n <ChevronRightIcon />\n </button>\n )}\n </div>\n </div>\n )}\n <div className={classNames.weekdayGrid}>\n {sortedWeekdays.map((day) => (\n <div key={day} className={classNames.weekday}>{day}</div>\n ))}\n </div>\n <div key={`daysGrid-${calendar.month}-${calendar.year}`} className={`${classNames.daysGrid} ${slideDirection === 'left' ? 'animate-slide-in-left' : slideDirection === 'right' ? 'animate-slide-in-right' : ''}`}>\n {calendar.weeks.map((week, wi) =>\n week.map((dateObj, di) => (\n <Day\n key={`${wi}-${di}`}\n dateObj={dateObj}\n getDateProps={getDateProps}\n dayProps={dateObj ? getDayProps?.(dateObj) : undefined}\n classNames={classNames}\n />\n ))\n )}\n </div>\n </div>\n ))}\n </div>\n {footer && <div className={classNames.footer}>{footer}</div>}\n </div>\n );\n};\n"],"mappings":"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"}
package/dist/index.css CHANGED
@@ -4,22 +4,18 @@
4
4
  @layer theme {
5
5
  :root, :host {
6
6
  --color-gray-100: oklch(96.7% 0.003 264.542);
7
- --color-gray-300: oklch(87.2% 0.01 258.338);
8
7
  --color-gray-400: oklch(70.7% 0.022 261.325);
9
- --color-gray-800: oklch(27.8% 0.033 256.848);
10
8
  --color-white: #fff;
11
9
  --spacing: 0.25rem;
12
10
  --text-xs: 0.75rem;
13
11
  --text-xs--line-height: calc(1 / 0.75);
14
- --text-sm: 0.875rem;
15
- --text-sm--line-height: calc(1.25 / 0.875);
16
- --font-weight-medium: 500;
17
12
  --font-weight-semibold: 600;
18
13
  --radius-lg: 0.5rem;
19
14
  --default-transition-duration: 150ms;
20
15
  --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
21
16
  --color-brand-gold: #c5a059;
22
17
  --color-brand-gray-light: #b5bec6;
18
+ --color-brand-gray-dark: #4a5660;
23
19
  --color-brand-text: #343a40;
24
20
  }
25
21
  }
@@ -30,36 +26,12 @@
30
26
  .invisible {
31
27
  visibility: hidden;
32
28
  }
33
- .absolute {
34
- position: absolute;
35
- }
36
- .relative {
37
- position: relative;
38
- }
39
- .top-full {
40
- top: 100%;
41
- }
42
- .bottom-full {
43
- bottom: 100%;
44
- }
45
- .left-1\/2 {
46
- left: calc(1 / 2 * 100%);
47
- }
48
- .z-10 {
49
- z-index: 10;
50
- }
51
- .mt-3 {
52
- margin-top: calc(var(--spacing) * 3);
53
- }
54
29
  .mt-4 {
55
30
  margin-top: calc(var(--spacing) * 4);
56
31
  }
57
32
  .mb-1 {
58
33
  margin-bottom: var(--spacing);
59
34
  }
60
- .mb-2 {
61
- margin-bottom: calc(var(--spacing) * 2);
62
- }
63
35
  .block {
64
36
  display: block;
65
37
  }
@@ -69,21 +41,15 @@
69
41
  .grid {
70
42
  display: grid;
71
43
  }
72
- .hidden {
73
- display: none;
74
- }
75
- .aspect-square {
76
- aspect-ratio: 1 / 1;
44
+ .max-h-\[210px\] {
45
+ max-height: 210px;
77
46
  }
78
- .max-h-\[300px\] {
79
- max-height: 300px;
47
+ .w-9 {
48
+ width: calc(var(--spacing) * 9);
80
49
  }
81
50
  .w-fit {
82
51
  width: fit-content;
83
52
  }
84
- .w-full {
85
- width: 100%;
86
- }
87
53
  .max-w-full {
88
54
  max-width: 100%;
89
55
  }
@@ -93,12 +59,8 @@
93
59
  .flex-1 {
94
60
  flex: 1;
95
61
  }
96
- .-translate-x-1\/2 {
97
- --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
98
- translate: var(--tw-translate-x) var(--tw-translate-y);
99
- }
100
- .cursor-not-allowed {
101
- cursor: not-allowed;
62
+ .cursor-default\! {
63
+ cursor: default !important;
102
64
  }
103
65
  .cursor-pointer {
104
66
  cursor: pointer;
@@ -121,8 +83,11 @@
121
83
  .justify-between {
122
84
  justify-content: space-between;
123
85
  }
124
- .justify-center {
125
- justify-content: center;
86
+ .justify-end {
87
+ justify-content: flex-end;
88
+ }
89
+ .justify-start {
90
+ justify-content: flex-start;
126
91
  }
127
92
  .gap-1 {
128
93
  gap: var(--spacing);
@@ -171,14 +136,14 @@
171
136
  border-style: var(--tw-border-style);
172
137
  border-width: 1px;
173
138
  }
174
- .border-8 {
175
- border-style: var(--tw-border-style);
176
- border-width: 8px;
177
- }
178
139
  .border-b {
179
140
  border-bottom-style: var(--tw-border-style);
180
141
  border-bottom-width: 1px;
181
142
  }
143
+ .border-b-0 {
144
+ border-bottom-style: var(--tw-border-style);
145
+ border-bottom-width: 0px;
146
+ }
182
147
  .border-b-2 {
183
148
  border-bottom-style: var(--tw-border-style);
184
149
  border-bottom-width: 2px;
@@ -192,30 +157,15 @@
192
157
  border-color: color-mix(in oklab, var(--color-brand-gray-light) 40%, transparent);
193
158
  }
194
159
  }
195
- .border-transparent {
196
- border-color: transparent;
197
- }
198
- .border-t-gray-800 {
199
- border-top-color: var(--color-gray-800);
200
- }
201
160
  .bg-brand-gold {
202
161
  background-color: var(--color-brand-gold);
203
162
  }
204
- .bg-brand-gold\/25 {
205
- background-color: color-mix(in srgb, #c5a059 25%, transparent);
206
- @supports (color: color-mix(in lab, red, red)) {
207
- background-color: color-mix(in oklab, var(--color-brand-gold) 25%, transparent);
208
- }
209
- }
210
163
  .bg-brand-gray-light\/20 {
211
164
  background-color: color-mix(in srgb, #b5bec6 20%, transparent);
212
165
  @supports (color: color-mix(in lab, red, red)) {
213
166
  background-color: color-mix(in oklab, var(--color-brand-gray-light) 20%, transparent);
214
167
  }
215
168
  }
216
- .bg-gray-800 {
217
- background-color: var(--color-gray-800);
218
- }
219
169
  .bg-white {
220
170
  background-color: var(--color-white);
221
171
  }
@@ -225,9 +175,6 @@
225
175
  .p-4 {
226
176
  padding: calc(var(--spacing) * 4);
227
177
  }
228
- .p-px {
229
- padding: 1px;
230
- }
231
178
  .px-2 {
232
179
  padding-inline: calc(var(--spacing) * 2);
233
180
  }
@@ -243,67 +190,45 @@
243
190
  .pr-2 {
244
191
  padding-right: calc(var(--spacing) * 2);
245
192
  }
193
+ .pb-0 {
194
+ padding-bottom: 0px;
195
+ }
246
196
  .pb-2 {
247
197
  padding-bottom: calc(var(--spacing) * 2);
248
198
  }
249
199
  .text-center {
250
200
  text-align: center;
251
201
  }
252
- .text-sm {
253
- font-size: var(--text-sm);
254
- line-height: var(--tw-leading, var(--text-sm--line-height));
255
- }
256
202
  .text-xs {
257
203
  font-size: var(--text-xs);
258
204
  line-height: var(--tw-leading, var(--text-xs--line-height));
259
205
  }
260
- .font-medium {
261
- --tw-font-weight: var(--font-weight-medium);
262
- font-weight: var(--font-weight-medium);
263
- }
264
206
  .font-semibold {
265
207
  --tw-font-weight: var(--font-weight-semibold);
266
208
  font-weight: var(--font-weight-semibold);
267
209
  }
268
- .whitespace-nowrap {
269
- white-space: nowrap;
270
- }
271
210
  .text-brand-gold {
272
211
  color: var(--color-brand-gold);
273
212
  }
274
213
  .text-brand-text {
275
214
  color: var(--color-brand-text);
276
215
  }
277
- .text-gray-300 {
278
- color: var(--color-gray-300);
279
- }
280
216
  .text-gray-400 {
281
217
  color: var(--color-gray-400);
282
218
  }
283
219
  .text-white {
284
220
  color: var(--color-white);
285
221
  }
286
- .opacity-50 {
287
- opacity: 50%;
288
- }
289
222
  .shadow-lg {
290
223
  --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
291
224
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
292
225
  }
293
- .transition-all {
294
- transition-property: all;
295
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
296
- transition-duration: var(--tw-duration, var(--default-transition-duration));
297
- }
298
226
  .transition-colors {
299
227
  transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
300
228
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
301
229
  transition-duration: var(--tw-duration, var(--default-transition-duration));
302
230
  }
303
231
  @media (hover: hover) {
304
- .group-hover\:block:is(:where(.group):hover *) {
305
- display: block;
306
- }
307
232
  .hover\:bg-brand-gray-light:hover {
308
233
  background-color: var(--color-brand-gray-light);
309
234
  }
@@ -344,6 +269,57 @@
344
269
  height: auto;
345
270
  }
346
271
  }
272
+ @layer components {
273
+ .rmdp .rmdp-day, .rmdp .rmdp-day-empty {
274
+ aspect-ratio: 1;
275
+ }
276
+ .rmdp .rmdp-day {
277
+ display: flex;
278
+ align-items: center;
279
+ justify-content: center;
280
+ padding: 1px;
281
+ position: relative;
282
+ font-size: 0.875rem;
283
+ line-height: 1.25rem;
284
+ font-weight: 500;
285
+ transition-property: all;
286
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
287
+ transition-duration: 0.15s;
288
+ }
289
+ .rmdp .rmdp-day:not(:disabled) {
290
+ cursor: pointer;
291
+ }
292
+ .rmdp .rmdp-day-empty, .rmdp .rmdp-day-disabled {
293
+ background-color: #fff;
294
+ }
295
+ .rmdp .rmdp-day-disabled {
296
+ cursor: not-allowed;
297
+ }
298
+ .rmdp .rmdp-day-selected, .rmdp .rmdp-day-range-start, .rmdp .rmdp-day-range-end {
299
+ background-color: var(--color-brand-gold);
300
+ color: #fff;
301
+ }
302
+ .rmdp .rmdp-day-selected {
303
+ border-radius: 9999px;
304
+ }
305
+ .rmdp .rmdp-day-unselected {
306
+ background-color: #fff;
307
+ color: var(--color-brand-text);
308
+ }
309
+ .rmdp .rmdp-day-unselected:hover {
310
+ background-color: color-mix(in srgb, #c5a059 25%, transparent);
311
+ @supports (color: color-mix(in lab, red, red)) {
312
+ background-color: color-mix(in oklab, var(--color-brand-gold) 25%, transparent);
313
+ }
314
+ }
315
+ .rmdp .rmdp-day-range-between, .rmdp .rmdp-day-range-hovering {
316
+ background-color: color-mix(in srgb, #c5a059 25%, transparent);
317
+ @supports (color: color-mix(in lab, red, red)) {
318
+ background-color: color-mix(in oklab, var(--color-brand-gold) 25%, transparent);
319
+ }
320
+ color: var(--color-brand-text);
321
+ }
322
+ }
347
323
  @keyframes slideInFromTop {
348
324
  from {
349
325
  opacity: 0;
@@ -383,20 +359,22 @@
383
359
  .rmdp .animate-slide-in-left {
384
360
  animation: slideInLeft 0.2s ease-out forwards;
385
361
  }
386
- @property --tw-translate-x {
387
- syntax: "*";
388
- inherits: false;
389
- initial-value: 0;
362
+ .rmdp .rmdp-scrollbar {
363
+ scrollbar-width: thin;
364
+ scrollbar-color: var(--color-brand-gray-light) transparent;
390
365
  }
391
- @property --tw-translate-y {
392
- syntax: "*";
393
- inherits: false;
394
- initial-value: 0;
366
+ .rmdp .rmdp-scrollbar::-webkit-scrollbar {
367
+ width: 6px;
395
368
  }
396
- @property --tw-translate-z {
397
- syntax: "*";
398
- inherits: false;
399
- initial-value: 0;
369
+ .rmdp .rmdp-scrollbar::-webkit-scrollbar-track {
370
+ background: transparent;
371
+ }
372
+ .rmdp .rmdp-scrollbar::-webkit-scrollbar-thumb {
373
+ background-color: var(--color-brand-gray-light);
374
+ border-radius: 9999px;
375
+ }
376
+ .rmdp .rmdp-scrollbar::-webkit-scrollbar-thumb:hover {
377
+ background-color: var(--color-brand-gray-dark);
400
378
  }
401
379
  @property --tw-border-style {
402
380
  syntax: "*";
@@ -475,9 +453,6 @@
475
453
  @layer properties {
476
454
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
477
455
  *, ::before, ::after, ::backdrop {
478
- --tw-translate-x: 0;
479
- --tw-translate-y: 0;
480
- --tw-translate-z: 0;
481
456
  --tw-border-style: solid;
482
457
  --tw-font-weight: initial;
483
458
  --tw-shadow: 0 0 #0000;