react-calendar-kit
Version:
React Calendar Kit is a powerful and flexible library for building accessible and highly customizable calendar and date/time picker components in your React applications. React Calendar Kit provides a solid foundation for creating inclusive user experienc
3 lines (2 loc) • 4.77 kB
JavaScript
'use client';
var ae=Object.create;var S=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var de=Object.getPrototypeOf,fe=Object.prototype.hasOwnProperty;var ce=(e,t)=>{for(var n in t)S(e,n,{get:t[n],enumerable:!0})},O=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ue(t))!fe.call(e,r)&&r!==n&&S(e,r,{get:()=>t[r],enumerable:!(a=le(t,r))||a.enumerable});return e};var g=(e,t,n)=>(n=e!=null?ae(de(e)):{},O(t||!e||!e.__esModule?S(n,"default",{value:e,enumerable:!0}):n,e)),me=e=>O(S({},"__esModule",{value:!0}),e);var Pe={};ce(Pe,{default:()=>Ce});module.exports=me(Pe);var i=g(require("react")),ee=g(require("lodash.debounce")),te=g(require("scroll-into-view-if-needed"));function F(e,t){let n=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left)),a=Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top));return n*a}var K=require("react"),pe=()=>{let e=(0,K.useRef)(new Map);function t(){return e.current||(e.current=new Map),e.current}function n(a,r){a?e.current.set(r,a):e.current.delete(r)}return[n,t]},j=pe;var ge=require("@internationalized/date"),G=require("clsx"),$=G.clsx,y=e=>e?"true":void 0;function U(...e){return e?.reduce((t,n)=>n?{...t,...n}:t,{})??{}}var h=g(require("react")),W=require("@react-aria/button"),q=require("@react-aria/focus"),z=require("@react-aria/interactions"),k=require("@react-aria/utils");var Y=require("react");function ye(e,t){typeof e=="function"?e(t):typeof e=="object"&&e!==null&&"current"in e&&(e.current=t)}function he(...e){return t=>{e.forEach(n=>ye(n,t))}}function _(...e){return(0,Y.useCallback)(he(...e),e)}var J=(0,h.forwardRef)((e,t)=>{let{children:n,autoFocus:a,isDisabled:r,onKeyDown:x,...m}=e,P=(0,h.useRef)(null),{buttonProps:E,isPressed:u}=(0,W.useButton)({elementType:"button",isDisabled:r,onKeyDown:x,...m},P),M=_(P,t),{isFocusVisible:T,isFocused:C,focusProps:w}=(0,q.useFocusRing)({autoFocus:a}),{isHovered:c,hoverProps:f}=(0,z.useHover)({isDisabled:r});return h.default.createElement("button",{ref:M,"data-disabled":y(r),"data-focus":y(C),"data-focus-visible":y(T),"data-hover":y(c),"data-pressed":y(u),className:e.className,...(0,k.mergeProps)(w,f,E,(0,k.filterDOMProps)(m))},n)});J.displayName="Button";var Q=J;var b=g(require("react"));function X(e){let t=(0,b.createContext)(null);return[({children:r,value:x})=>b.default.createElement(t.Provider,{value:x},r),()=>{let r=(0,b.useContext)(t);if(r===null)throw new Error(e);return r}]}var[Le,Z]=X("Calendar component was not found in tree");var R=g(require("react")),be=({className:e,total:t,...n})=>R.default.createElement(R.default.Fragment,null,Array.from({length:t},(a,r)=>R.default.createElement("div",{key:r,"aria-hidden":"true",className:e,role:"picker-item-empty",tabIndex:-1,...n},"\xA0"))),B=(0,R.memo)(be);var Re=200,xe=e=>{let{initialDate:t,options:n=[],className:a,style:r,listClassName:x,itemClassName:m,listStyle:P,itemStyle:E,listType:u="month",highlightRef:M,...T}=e,C=(0,i.useRef)(null),[w,c]=j(),{state:f,isPickerExpanded:v,headerRef:N,setPickerExpanded:D,pickerEmptyItem:I}=Z(),L=(0,i.useCallback)((s,o)=>{if(!(s.target instanceof HTMLElement))return;let l=c(),d=Array.from(l.values()).findLast(se=>{let ie=se.getBoundingClientRect(),V=o?.getBoundingClientRect();return V?F(ie,V)>50:!1}),H=Number(d?.getAttribute("data-value"));if(!H)return;let oe=f.focusedDate.set({[u]:H});f.setFocusedDate(oe)},[f,t,u,v]);(0,i.useEffect)(()=>{let s=C.current,o=M;if(!o)return;let l=(0,ee.default)(p=>L(p,o),Re);return s?.addEventListener("scroll",l),()=>{l&&s?.removeEventListener("scroll",l)}},[L]);let A=(0,i.useCallback)((s,o=!0)=>{let p=c().get(s);p&&(0,te.default)(p,{scrollMode:"always",behavior:o?"smooth":"instant",boundary:C.current})},[c]),ne=(0,i.useCallback)(s=>{let o=s.target,l=Number(o.getAttribute("data-value"));if(l===f.focusedDate[u]){D?.(!1);return}l&&A(l)},[f]),re=(0,i.useCallback)((s,o)=>{let l=c();if(!l.get(o))return;let d=o;switch(s.key){case"ArrowDown":d=o+1;break;case"ArrowUp":d=o-1;break;case"Home":d=0;break;case"End":d=n.length-1;break;case"PageUp":d=o-3;break;case"PageDown":d=o+3;break;case"Escape":case"Enter":case" ":D?.(!1),N?.current?.focus();return}l.get(d)?.focus()},[c,n.length,D,N]);return(0,i.useEffect)(()=>{v&&A(t,!1)},[v]),i.default.createElement("div",{ref:C,className:$(x,a),style:U({overflowY:"scroll"},r,P),role:`picker-${u}-list`,...T},i.default.createElement(B,{total:I,className:m,style:E}),n.map(s=>i.default.createElement(Q,{role:`picker-${u}-item`,key:`picker-${u}-${s.value}`,ref:o=>w(o,s.value),className:m,style:E,"data-value":s.value,tabIndex:!v||f.focusedDate?.[u]!==s.value?-1:0,onKeyDown:o=>re(o,s.value),onPress:o=>ne(o)},s.label)),i.default.createElement(B,{total:I,className:m}))},Ce=(0,i.memo)(xe);