UNPKG

rc-calendar-picker

Version:

<div align="center"> <a href="https://github.com/noxxxxxxxx/calendar" target="_blank"> <img alt="Calendar Logo" width="150" src="https://github.com/noxxxxxxxx/calendar/blob/main/assets/calendar.svg"/> </a> </div>

2 lines (1 loc) 12.3 kB
(function(A,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("react/jsx-runtime"),require("dayjs"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","dayjs","react"],n):(A=typeof globalThis<"u"?globalThis:A||self,n(A["rc-calendar-picker"]={},A.JSX,A.dayjs,A.React))})(this,function(A,n,E,L){"use strict";var O=(e=>(e.Year="year",e.Month="month",e.Day="day",e.Time="time",e))(O||{}),T=(e=>(e.Hour="hour",e.Minute="minute",e.Second="second",e.Millisecond="millisecond",e.Ampm="ampm",e))(T||{});const oe={day:"date",month:"month",year:"year"},ce={day:"time",month:"day",year:"month"},X={hour:{min:0,max:23,step:1},minute:{min:0,max:59,step:1},second:{min:0,max:59,step:1},millisecond:{min:0,max:999,step:1}},Z="L",R="LTS",$=(e,t)=>{const r={month:2,day:2,hour:2,minute:2,second:2,millisecond:3};let l=t+"";for(;l.length<r[e];)l="0"+l;return l},se=e=>{if(!e)return{hour:"00",minute:"00",second:"00",millisecond:"00",ampm:"am"};const t=e.hour();return{hour:$("hour",t),minute:$("minute",e.minute()),second:$("second",e.second()),millisecond:$("millisecond",e.millisecond()),ampm:t<12?"am":"pm"}},ae=e=>{const t=X;return Object.keys(X).forEach(r=>{t[r]={...X[r],...(e==null?void 0:e[r])||{}}}),t},ie=e=>e.charAt(0).toUpperCase()+e.slice(1),j=e=>typeof e=="boolean"?e?Z:"":e??Z,W=e=>typeof e=="boolean"?e===!0?R:"":e??R,ee=(e,t,r,l)=>{if(!e)return;const a=j(r),N=W(l),h=`${a||""} ${N||""}`.trim();return t!==void 0?e.clone().utcOffset(t).format(h):e.clone().format(h)},le=e=>e!==void 0?E().utcOffset(e).startOf("day"):E().startOf("day"),de=e=>{if(!e)return;const t=e.firstDayOfWeek(),r=[];let l=0;return e.weekdaysMin().forEach(function(a){r[(7+l++-t)%7]=a}),r},z=(e,t)=>e?e(t)!==!1:!0,ue=(e,t)=>t<4?e[0]:t<8?e[1]:e[2],te=(e,t)=>{if(!e)return!1;const r=E(e).format(W(t)).toLowerCase();return r.indexOf("am")!==-1||r.indexOf("pm")!==-1},fe=(e,t)=>e?E(e).format(W(t)):"",ne=(e,t)=>t!==void 0?E(e).utcOffset(t):E(e),he=(e,t)=>{L.useEffect(()=>{const r=l=>{e.current&&!e.current.contains(l.target)&&t()};return document.addEventListener("click",r),()=>{document.removeEventListener("click",r)}},[e,t])},me=e=>{const{value:t,showInput:r,timezoneOffset:l,dateFormat:a,timeFormat:N,inputProps:h,onInputChange:p,openCalendar:D,closeCalendar:b}=e,[C,x]=L.useState("");if(L.useEffect(()=>{x(ee(t,l,a,N)??"")},[t,l,a,N]),!r)return;const m={...h,type:"text",value:C,onFocus:o=>{z(h==null?void 0:h.onFocus,o)&&(D==null||D())},onChange:o=>{if(!z(h==null?void 0:h.onChange,o))return;const y=o.target.value,c=E(y).isValid()?ee(E(y),l,a):y;x(y),p==null||p(c??"")},onKeyDown:o=>{z(h==null?void 0:h.onKeyDown,o)&&o.key==="Tab"&&b()},onClick:o=>{z(h==null?void 0:h.onClick,o)&&(D==null||D())}};return n.jsx("input",{...m})},G=({onClickPrev:e,onClickSwitch:t,onClickNext:r,switchContent:l,switchColSpan:a,switchProps:N})=>n.jsxs("tr",{className:"nc-switch-head",children:[n.jsx("th",{className:"nc-prev",onClick:e,children:n.jsx("span",{children:"‹"})}),n.jsx("th",{className:"nc-switch",colSpan:a,onClick:t,...N,children:l}),n.jsx("th",{className:"nc-next",onClick:r,children:n.jsx("span",{children:"›"})})]}),ye=e=>{const{viewDate:t,selectedDate:r,isValidDate:l=()=>!0,updateDate:a,renderDay:N,navigate:h,showView:p,timeFormat:D,siblingDate:b,timezoneOffset:C,showTime:x}=e,I=()=>{const o=t==null?void 0:t.localeData();return n.jsx(G,{onClickPrev:()=>h(-1,O.Month),onClickSwitch:()=>p(O.Month),onClickNext:()=>h(1,O.Month),switchContent:`${o==null?void 0:o.months(t)} ${t==null?void 0:t.year()}`,switchColSpan:5,switchProps:{"data-value":t==null?void 0:t.month()}})},w=()=>{var c;const o=t==null?void 0:t.localeData(),y=(c=de(o))==null?void 0:c.map((u,i)=>n.jsx("th",{className:"dow",children:u},u+i));return n.jsx("tr",{children:y})},s=(o,y,c,u)=>{const i=o.date(),k=o.month(),P=o.year(),V=H=>{a(H)},Y={key:o.format("M_D"),"data-value":i,"data-month":k,"data-year":P,onClick:()=>{},className:""};let S="nc-day";if(o.isBefore(y)?S+=" nc-before":o.isAfter(c)&&(S+=" nc-after"),r&&b){const[H,J]=r.isBefore(b,"day")?[r,b]:[b,r];(o.isSame(H,"day")||o.isSame(J,"day")||o.isAfter(H,"day")&&o.isBefore(J,"day"))&&(S+=" in-range")}return b!=null&&b.isSame(o,"day")&&(S+=" nc-sibling"),r!=null&&r.isSame(o,"day")&&(S+=" nc-active"),o.isSame(u,"day")&&(S+=" nc-today"),l(o.clone().year(P).month(k).date(i).startOf("day"))?Y.onClick=V:S+=" nc-disabled",Y.className=S,N?N(Y,o.clone().date(),r==null?void 0:r.clone()):L.createElement("td",{...Y,key:Y.key},o.clone().date())},f=()=>{const o=le(C),y=t,c=y==null?void 0:y.clone().startOf("month"),u=y==null?void 0:y.clone().endOf("month"),i=[[],[],[],[],[],[]];let k=y==null?void 0:y.clone().subtract(1,"month").endOf("month").startOf("week").startOf("day");const P=k==null?void 0:k.clone().add(42,"day");let V=0;for(;k!=null&&k.isBefore(P);){const Y=Math.floor(V/7),S=i[Y>5?5:Y],H=s(k,c,u,o);S.push(H),k=k.add(1,"d"),V+=1}return i.map((Y,S)=>n.jsx("tr",{children:Y},`${P==null?void 0:P.month()}_${S}`))},m=()=>{if(!(!x||!D))return n.jsx("tfoot",{children:n.jsx("tr",{children:n.jsx("td",{onClick:()=>p("time"),colSpan:7,className:"nc-time-toggle",children:t==null?void 0:t.format(D)})})})};return n.jsx("div",{className:"nc-days",children:n.jsxs("table",{children:[n.jsxs("thead",{children:[I(),w()]}),n.jsx("tbody",{children:f()}),m()]})})},pe=e=>{const{viewDate:t,updateDate:r,renderMonth:l,isValidDate:a,navigate:N,showView:h,selectedDate:p}=e,D=()=>{const w=t==null?void 0:t.year();return n.jsx(G,{onClickPrev:()=>N(-1,O.Year),onClickSwitch:()=>h(O.Year),onClickNext:()=>N(1,O.Year),switchContent:w,switchColSpan:"5"})},b=w=>{if(!a||!t)return!1;const s=t==null?void 0:t.clone().set("month",w);let f=s.endOf("month").date()+1;for(;f-- >1;)if(a(s.date(f)))return!1;return!0},C=w=>{const s=t==null?void 0:t.localeData().monthsShort(t.month(w));return ie(s)},x=w=>{let s="nc-month",f=()=>{};b(w)?s+=" nc-disabled":f=o=>{r(o)},p&&p.year()===(t==null?void 0:t.year())&&p.month()===w&&(s+=" nc-active");const m={key:w,className:s,"data-value":w,onClick:f};return l?l(m,w,p==null?void 0:p.year(),p==null?void 0:p.clone()):L.createElement("td",{...m,key:m.key},C(w))},I=()=>{const w=[[],[],[]];for(let s=0;s<12;s++)ue(w,s).push(x(s));return w.map((s,f)=>n.jsx("tr",{children:s},f))};return n.jsxs("div",{className:"nc-months",children:[n.jsx("table",{children:n.jsx("thead",{children:D()})}),n.jsx("table",{children:n.jsx("tbody",{children:I()})})]})},we=e=>{const{selectedDate:t,viewDate:r,setTime:l,timeFormat:a,dateFormat:N,timeLimit:h,showView:p,timeConstraints:D}=e,b=ae(D),[C,x]=L.useState(se(r)),I=()=>{const c=[],u=h;return u.toLowerCase().indexOf("h")!==-1&&(c.push(T.Hour),u.indexOf("m")!==-1&&(c.push(T.Minute),u.indexOf("s")!==-1&&(c.push(T.Second),u.indexOf("S")!==-1&&c.push(T.Millisecond)))),te(r,a)&&c.push(T.Ampm),c},w=()=>{if(!N)return;const c=t||r;return n.jsx("thead",{children:n.jsx("tr",{children:n.jsx("th",{className:"nc-switch",colSpan:4,onClick:()=>p(O.Day),children:c==null?void 0:c.format(j(N))})})})},s=()=>{let c=parseInt(C.hour,10);c>=12?c-=12:c+=12,x({...C,hour:$("hour",c),ampm:C.ampm==="am"?"pm":"am"}),l==null||l("hour",parseInt(String(c),10))},f=c=>{const u=b[c];if(u){let i=parseInt(C[c],10)+u.step;return i>u.max&&(i=u.min+(i-(u.max+1))),$(c,i)}throw new Error("Invalid tc value")},m=c=>{const u=b[c];if(u){let i=parseInt(C[c],10)-u.step;return i<u.min&&(i=u.max+1-(u.min-i)),$(c,i)}throw new Error("Invalid tc value")},o=(c,u,i)=>{if(c.button&&c.button!==0)return;if(i==="ampm")return s();const k=u==="increase"?f(i):m(i);x({...C,[i]:k}),l==null||l(i,parseInt(k,10))},y=(c,u)=>{let i=u;return c==="hour"&&te(r,a)&&(i=$("hour",(Number(i)-1)%12+1),Number(i)===0&&(i=12)),c==="ampm"&&(fe(r,a).indexOf("M")!==-1?i=r==null?void 0:r.format("A"):i=r==null?void 0:r.format("a")),n.jsxs("div",{className:"nc-counter",children:[n.jsx("span",{className:"nc-btn",onMouseDown:k=>o(k,"increase",c),children:"▲"}),n.jsx("div",{className:"nc-count",children:i}),n.jsx("span",{className:"nc-btn",onMouseDown:k=>o(k,"decrease",c),children:"▼"})]})};return n.jsx("div",{className:"nc-time",children:n.jsxs("table",{children:[w(),n.jsx("tbody",{children:n.jsx("tr",{children:n.jsx("td",{children:n.jsx("div",{className:"nc-counters",children:I().map((c,u)=>n.jsx(L.Fragment,{children:y(c,C[c])},`sep${u}`))})})})})]})})},ke=e=>{const{renderYear:t,navigate:r,showView:l,viewDate:a,selectedDate:N,updateDate:h,isValidDate:p}=e,D=s=>{const f={};if(f[s]!==void 0)return f[s];if(!p)return!1;const m=a==null?void 0:a.clone().set("year",s);if(!m)return!1;let o=m.endOf("year").dayOfYear()+1;for(;o-- >1;)if(p(m.dayOfYear(o)))return f[s]=!1,!1;return f[s]=!0,!0},b=s=>{const f=a==null?void 0:a.year();let m="nc-year",o=()=>{};D(s)?m+=" nc-disabled":o=c=>{h(c)},f===s&&(m+=" nc-active");const y={key:s,className:m,"data-value":s,onClick:o};return t?t(y,s,N==null?void 0:N.clone()):L.createElement("td",{...y,key:y.key},s)},C=()=>a&&typeof a.year=="function"?Math.floor(a.year()/10)*10:0,x=()=>{const s=C();return n.jsx(G,{onClickPrev:()=>r(-10,O.Year),onClickSwitch:()=>l(O.Year),onClickNext:()=>r(10,O.Year),switchContent:`${s}-${s+9}`,switchColSpan:"5"})},I=(s,f)=>f<3?s[0]:f<7?s[1]:s[2],w=()=>{const s=C(),f=[[],[],[]];if(s)for(let m=s-1;m<s+11;m++)I(f,m-s).push(b(m));return f.map((m,o)=>n.jsx("tr",{children:m},o))};return n.jsxs("div",{className:"nc-years",children:[n.jsx("table",{children:n.jsx("thead",{children:x()})}),n.jsx("table",{children:n.jsx("tbody",{children:w()})})]})},ve=e=>{const{value:t,initialValue:r,initialViewMode:l=O.Day,timezoneOffset:a,closeOnSelect:N=!0,className:h,showInput:p=!0,open:D,inputProps:b,dateFormat:C=!0,timeFormat:x=!0,viewMode:I,closeOnClickOutside:w=!0,timeLimit:s="HH:mm:ss",showTime:f=!1,isEndDate:m,siblingDate:o,isValidDate:y,renderYear:c,renderMonth:u,renderDay:i,onOpen:k,onClose:P,onChange:V,onBeforeNavigate:Y,onNavigate:S,onNavigateForward:H,onNavigateBack:J,timeConstraints:Ne}=e,[v,_]=L.useState({open:D??!1,selectedDate:t??r??ne(E(),a),inputValue:void 0,currentView:I||l,viewDate:t??r??ne(E(),a),ready:!1}),re=L.useRef(null),K=()=>v.open||D===!1,Ce=()=>{let d="rdt";const M=h;return Array.isArray(M)?d+=" "+M.join(" "):M&&(d+=" "+M),p||(d+=" nc-static"),K()&&(d+=" nc-open"),d},De=()=>{K()||(_({...v,open:!0}),k==null||k())},Q=d=>{if(!K())return;const M={...v,...d??{},open:!N};_(M),N&&(P==null||P(M.selectedDate))},Me=(d,M)=>{const g=(M||v.viewDate).clone(),q=(Y==null?void 0:Y(d,v.currentView,g))??d;S==null||S(q),_({...v,currentView:q})},Oe=d=>{const M=d.target;if(M){const g=v.currentView;let F;const q=Number(M.dataset.value),xe=Number(M.dataset.year),Ve=Number(M.dataset.month),B={};if(g===O.Day)F=v.viewDate.clone().year(xe).month(Ve).date(q).hour(v.viewDate.hour()),B.selectedDate=F.clone();else{const U=oe[g];F=v.viewDate[U](q)}if(B.viewDate=F.clone(),V==null||V(B.viewDate),g===I||!I&&g===O.Day){B.selectedDate=F.clone();const U={...v,...B};_(U),Q(U);return}B.currentView=ce[g],_({...v,...B})}},be=(d,M)=>{let g=v.viewDate.clone();g=g.add(d,M);const F=d>0?H:J;F==null||F(d,M),_({...v,viewDate:g})},ge=(d,M)=>{var F;let g=(F=v.viewDate)==null?void 0:F.clone();g&&(g=g.set(d,M),_({...v,selectedDate:g,viewDate:g.clone()}),V==null||V(g))},Se=()=>{const d={selectedDate:v.selectedDate,viewDate:v.viewDate,updateDate:Oe,navigate:be,showView:Me,timezoneOffset:a,isEndDate:m,siblingDate:o,isValidDate:y,renderYear:c,renderMonth:u,renderDay:i,setTime:ge,dateFormat:j(C),timeFormat:W(x),timeConstraints:Ne,timeLimit:s,showTime:f};switch(v.currentView){case O.Year:return n.jsx(ke,{...d});case O.Month:return n.jsx(pe,{...d});case O.Time:return n.jsx(we,{...d});default:return n.jsx(ye,{...d})}};return he(re,()=>{w&&Q()}),L.useEffect(()=>{if(t){const d=t;_({...v,selectedDate:d,viewDate:d.clone(),ready:!0})}else _({...v,ready:!0})},[t,a,C,x]),v.ready?n.jsxs("div",{className:Ce(),ref:re,children:[n.jsx(me,{showInput:p,value:v.selectedDate,dateFormat:C,timeFormat:x,inputProps:b,openCalendar:De,closeCalendar:Q,timezoneOffset:a,onInputChange:d=>V==null?void 0:V(E(d).isValid()?E(d):d)}),n.jsx("div",{className:"nc-picker",onClick:d=>d.stopPropagation(),children:D===!1?null:v.open?Se():null})]}):null};A.TimeConstraintsKeys=T,A.ViewMode=O,A.default=ve,Object.defineProperties(A,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});