UNPKG

@ebay/ui-core-react

Version:

Skin components build off React

2 lines (1 loc) 5.38 kB
"use strict";const a=require("react"),ue=require("./icon-button-AJ6dtyvc.js"),de=require("classnames"),ve=require("./icons/ebay-icon-chevron-left-24/index.js"),Ue=require("./icons/ebay-icon-chevron-right-24/index.js");function Ae(n){const c=new Intl.Locale(n);return c.weekInfo?c.weekInfo.firstDay:0}function Fe(n){const c=Ae(n),i=new Intl.DateTimeFormat(n,{weekday:"short"}),d=new Date(2022,9,2+c),A=[...Array(7)].map(()=>{const h=i.format(d);return d.setDate(d.getDate()+1),h});return{firstDayOfWeek:c,weekdayLabels:A}}function Re(n){if(n)return/^\d\d\d\d-\d\d-\d\d$/g.test(n)?n:u(new Date(n))}function u(n){if(!isNaN(n.getTime()))return n.toISOString().slice(0,10)}function U(n){return new Date(n)}function H(n,c){const i=U(n);return i.setUTCDate(i.getUTCDate()+c),u(i)}function fe(n){return n||navigator.language}const Le={ArrowRight:1,ArrowLeft:-1,ArrowDown:7,ArrowUp:-7},Ne=({selected:n,numMonths:c=1,navigable:i,interactive:d,range:A,locale:h,disableBefore:I,disableAfter:g,disableWeekdays:B,disableList:G,a11ySelectedText:me="selected",a11yRangeStartText:ye="start of range",a11yInRangeText:Ie="in range",a11yRangeEndText:ge="end of range",a11ySeparator:J="-",a11yTodayText:De="today",a11yDisabledText:Ee="inactive",getA11yShowMonthText:Q=T=>`Show ${T}`,linkBuilder:X,onMonthChange:Z=()=>{},onFocus:Se=()=>{},onSelect:we=()=>{}})=>{const T=u(new Date),{firstDayOfWeek:Oe,weekdayLabels:Te}=Fe(fe(h)),ee=a.useRef(null),[m,F]=a.useState(0),[te,ne]=a.useState(null),[D,_]=a.useState(T),R=a.useRef(T),E=e=>{const t=U(R.current);return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth()+e))},S=()=>u(E(m)),w=()=>{const e=U(R.current);return u(new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+m+(c||1),0)))};a.useEffect(()=>{if(n){const e=Array.isArray(n)?n:[n],t=S(),r=w();e.find(f=>f>=t&&f<=r)===void 0&&(R.current=e[0],F(0))}},[n]);const be=()=>{if(n&&A){let e,t;if(Array.isArray(n)?[e,t]=n:te&&(e=n,t=te),e&&t){const[r,s]=[e,t].sort();return{rangeStart:r,rangeEnd:s}}}return{rangeStart:null,rangeEnd:null}},k=e=>new Intl.DateTimeFormat(fe(h),{month:"long",year:"numeric"}).format(new Date(e.getUTCFullYear(),e.getUTCMonth())),p=e=>I&&e<I||g&&e>g||B&&B.includes(U(e).getUTCDay())||G&&G.includes(e),ae=()=>{let e=S();const t=w();for(;e<=t&&p(e);)e=H(e,1);return e>t?null:e},re=()=>{let e=w();const t=S();for(;e>=t&&p(e);)e=H(e,-1);return e<t?null:e},b=e=>{_(e),setTimeout(()=>{var t;const r=(t=ee.current)===null||t===void 0?void 0:t.querySelector(`[data-iso="${e}"]`);r?.focus()})},L=e=>{if(I&&S()<=I)return!1;F(s=>s-1);let t=D;const r=re();return r&&r<D&&(t=r,_(r)),e&&b(t),Z({iso:u(E(m))}),!0},N=e=>{if(g&&w()>=g)return!1;F(s=>s+1);let t=D;const r=ae();r&&r>D&&(t=r,_(r)),e&&b(t),Z({iso:u(E(m+(c||1)))})},he=e=>{const t=Le[e.key];if(t){e.preventDefault();let r=7,s=D;do s=H(s,t);while(r-- >0&&p(s));if(r>0){const f=S(),O=w();s<f?i?L():s=f:s>O&&(i?N():s=O),b(s)}}else switch(e.key){case"PageUp":L(!0);break;case"PageDown":N(!0);break;case"Home":b(ae());break;case"End":b(re());break}},_e=(e,t)=>{we(e,{iso:t})},se=(e,t)=>{ne(t),_(t),Se(e,{iso:t})},oe=()=>{ne(null)},{rangeStart:V,rangeEnd:x}=be(),ke=e=>!(!V||!x||e<V||e>x),ce=[...Array(c)].map((e,t)=>E(m+t));return a.createElement("div",{className:"calendar",ref:ee},i&&a.createElement("div",{className:"calendar__header"},a.createElement("div",{className:"calendar__header--inner"},a.createElement(ue.EbayIconButton,{transparent:!0,size:"small",icon:a.createElement(ve.EbayIconChevronLeft24,null),disabled:I&&S()<=I,"aria-label":Q(k(E(m-1))),onClick:()=>L()}),ce.map((e,t)=>a.createElement("h3",{key:t},k(e))),a.createElement(ue.EbayIconButton,{transparent:!0,size:"small",icon:a.createElement(Ue.EbayIconChevronRight24,null),disabled:g&&w()>=g,"aria-label":Q(k(E(m+c))),onClick:()=>N()}))),a.createElement("div",{className:"calendar__body"},ce.map((e,t)=>{const r=(e.getUTCDay()-Oe+7)%7,s=e.getUTCFullYear(),f=e.getUTCMonth(),O=new Date(s,f+1,0).getDate(),pe=[...Array(Math.ceil((r+O)/7))];return a.createElement("div",{key:t,className:"calendar__month"},a.createElement("table",{onKeyDown:he},a.createElement("caption",null,k(e)),a.createElement("thead",null,a.createElement("tr",null,Te.map(M=>a.createElement("th",{key:M,scope:"col"},M)))),a.createElement("tbody",null,pe.map((M,q)=>{let Y=q*7-r+1,$=Y+6;const P=[];q===0&&r!==0?(Y=1,P.push(a.createElement("td",{key:"pre-column",colSpan:r}))):$>O&&($=O);for(let y=Y;y<=$;y++){const o=u(new Date(Date.UTC(s,f,y))),W=o===T,j=Array.isArray(n)?n.some(l=>l===o):n===o,z=o===V,le=ke(o),K=o===x,C=p(o),v=["",j&&me,z&&ye,!z&&!K&&le&&Ie,K&&ge,!d&&W&&De,!d&&C&&Ee].filter(l=>typeof l!="boolean"||l!==!1),ie=!d&&!C&&X&&X(o),Ce=ie?"a":"span";P.push(a.createElement("td",{key:y,className:de({"calendar__cell--selected":j,"calendar__range--start":z,calendar__range:le,"calendar__range--end":K})},d?a.createElement("button",{disabled:C,"aria-label":v.length>1?`${y}${v.join(J)}`:void 0,tabIndex:D!==o?-1:void 0,"aria-current":W?"date":void 0,"aria-pressed":j?"true":void 0,onClick:l=>_e(l,o),onFocus:l=>se(l,o),onMouseOver:l=>se(l,o),onMouseOut:()=>oe(),onBlur:()=>oe(),"data-iso":o},y):a.createElement(Ce,{className:de({"calendar__cell--disabled":C,"calendar__cell--current":W}),href:ie},y,v.length>1&&a.createElement("span",{className:"clipped"},v.join(J)))))}return a.createElement("tr",{key:q},P)}))))})))};exports.EbayCalendar=Ne;exports.dateArgToISO=Re;exports.toISO=u;