react-hijri-calendar
Version:
A pluggable React calendar component supporting Hijri and Gregorian dates, theming, and custom rendering.
3 lines (2 loc) • 28 kB
JavaScript
import{jsx as e,jsxs as n}from"react/jsx-runtime";import a,{useRef as t,useState as r,useMemo as o,useCallback as i}from"react";import{getDay as l,startOfMonth as d,endOfMonth as s,subDays as u,getDaysInMonth as c,addDays as h,format as m,isSameDay as y,isToday as f,setDay as g,subMonths as b,addMonths as p,getYear as v}from"date-fns";import w from"moment-hijri";var C={calendarContainer:"Calendar-module_calendarContainer__rTPS0",header:"Calendar-module_header__yQ8Am",monthYearText:"Calendar-module_monthYearText__CJ3sp",chevronButton:"Calendar-module_chevronButton__GX61I",tableContainer:"Calendar-module_tableContainer__2XyhB",table:"Calendar-module_table__JXfM5",tableHeader:"Calendar-module_tableHeader__5no-M",tableCell:"Calendar-module_tableCell__-AYVb",selected:"Calendar-module_selected__GQis7",unavailable:"Calendar-module_unavailable__d7uzS",currentDay:"Calendar-module_currentDay__PfSpv",available:"Calendar-module_available__MyxUh",cellContent:"Calendar-module_cellContent__PqG7n",dayContainer:"Calendar-module_dayContainer__t1m7Z",notCurrentMonth:"Calendar-module_notCurrentMonth__6sY-p",iconsContainer:"Calendar-module_iconsContainer__1-FPs",actionsContainer:"Calendar-module_actionsContainer__MtSAR",toggleButton:"Calendar-module_toggleButton__fErWb",chevronContainer:"Calendar-module_chevronContainer__-hlub"};!function(e,n){void 0===n&&(n={});var a=n.insertAt;if(e&&"undefined"!=typeof document){var t=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===a&&t.firstChild?t.insertBefore(r,t.firstChild):t.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}(".Calendar-module_calendarContainer__rTPS0 {\n --calendar-primary: #1b8354;\n --calendar-unavailable: #6c737f;\n --border-color: #f3f3f3;\n width: 100%;\n background-color: white;\n border-radius: 8px;\n}\n\n.Calendar-module_header__yQ8Am {\n display: flex;\n height: 48px;\n align-items: center;\n justify-content: space-between;\n background-color: #f9fafb;\n color: #161616;\n padding: 0 24px;\n}\n\n.Calendar-module_monthYearText__CJ3sp span:first-child {\n font-size: 22px;\n padding: 0 8px;\n font-weight: bold;\n}\n\n@media (min-width: 768px) {\n .Calendar-module_calendarContainer__rTPS0 {\n max-width: 92vw;\n font-size: 14px;\n }\n .Calendar-module_header__yQ8Am {\n height: 48px;\n }\n .Calendar-module_monthYearText__CJ3sp span:last-child {\n font-size: 16px;\n }\n}\n\n.Calendar-module_chevronButton__GX61I {\n background-color: transparent;\n border: none;\n padding: 0;\n cursor: pointer;\n}\n\n.Calendar-module_tableContainer__2XyhB {\n overflow-x: auto;\n}\n\n.Calendar-module_table__JXfM5 {\n min-width: 100%;\n border: 3px solid var(--border-color);\n background-color: white;\n /* border-collapse: collapse; */\n /* table-layout: fixed; */\n border-collapse: collapse;\n border-spacing: 0;\n}\n\n.Calendar-module_tableHeader__5no-M {\n padding: 4px;\n font-size: 14px;\n}\n\n@media (min-width: 768px) {\n .Calendar-module_tableHeader__5no-M {\n font-size: 16px;\n }\n}\n\n.Calendar-module_tableCell__-AYVb {\n border: 1px solid var(--border-color);\n text-align: center;\n font-size: 14px;\n font-weight: 600;\n transition: background-color 1000ms;\n cursor: pointer;\n opacity: 1;\n background-color: white;\n color: inherit;\n vertical-align: top;\n padding: 0;\n}\n\n@media (min-width: 768px) {\n .Calendar-module_tableCell__-AYVb {\n border-width: 2px;\n font-size: 16px;\n }\n}\n\n.Calendar-module_selected__GQis7 {\n background-color: var(--calendar-primary) !important;\n color: white !important;\n}\n.Calendar-module_selected__GQis7:hover {\n background-color: var(--calendar-primary) !important;\n color: white !important;\n}\n\n.Calendar-module_unavailable__d7uzS {\n background-color: #e5e7eb !important;\n color: var(--calendar-unavailable) !important;\n cursor: not-allowed !important;\n}\n\n.Calendar-module_currentDay__PfSpv:not(.Calendar-module_selected__GQis7) {\n color: var(--calendar-primary) !important;\n}\n\n.Calendar-module_available__MyxUh:hover {\n background-color: #f3f4f6;\n}\n\n.Calendar-module_unavailable__d7uzS:hover {\n background-color: #e5e7eb !important;\n}\n\n.Calendar-module_cellContent__PqG7n {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 18px 4px;\n text-align: center;\n}\n\n@media (min-width: 768px) {\n .Calendar-module_cellContent__PqG7n {\n padding: 24px 4px;\n }\n}\n\n.Calendar-module_dayContainer__t1m7Z {\n font-weight: 600;\n opacity: 1;\n}\n\n.Calendar-module_notCurrentMonth__6sY-p .Calendar-module_dayContainer__t1m7Z {\n opacity: 0.7;\n}\n\n.Calendar-module_iconsContainer__1-FPs {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.Calendar-module_actionsContainer__MtSAR {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 16px;\n}\n\n.Calendar-module_toggleButton__fErWb {\n background-color: transparent;\n border: none;\n cursor: pointer;\n color: var(--calendar-primary);\n font-weight: bold;\n font-size: 16px;\n}\n\n.Calendar-module_actionsContainer__MtSAR {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 16px;\n}\n\n.Calendar-module_chevronContainer__-hlub {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n");const _=["محرم","صفر","ربيع الأول","ربيع الثاني","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],M=["Muharram","Safar","Rabi' al-awwal","Rabi' al-thani","Jumada al-awwal","Jumada al-thani","Rajab","Sha'ban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],x=11,D=e=>0===e.month,k=e=>e.month===x,T=e=>{try{return w(`${e.year}/${e.month+1}/${e.day}`,"iYYYY/iM/iD").toDate()}catch(e){return new Date}},P=e=>{const n=w(e).format("iYYYY/iM/iD"),[a,t,r]=n.split("/").map(Number);return{day:r,month:t-1,year:a}},W=(e,n)=>{try{const a=w(`${n===x?e+1:e}/${(n===x?0:n+1)+1}/1`,"iYYYY/iM/iD").clone().subtract(1,"day");return Number.parseInt(a.format("iD"),10)}catch(e){return n%2==0?30:29}},S=(e,n,a)=>e?(e=>{const n=[],a=W(e.year,e.month),t=T({day:1,month:e.month,year:e.year});for(let a=l(t);a>0;a--){const t=D(e),r=T({day:W(t?e.year-1:e.year,t?x:e.month-1)-a+1,month:t?x:e.month-1,year:t?e.year-1:e.year});n.push(r)}for(let t=1;t<=a;t++){const a=T({day:t,month:e.month,year:e.year});n.push(a)}const r=42-n.length;for(let a=1;a<=r;a++){const t=k(e),r=T({day:a,month:t?0:e.month+1,year:t?e.year+1:e.year});n.push(r)}return n})(a):(e=>{const n=d(e),a=s(e),t=[];for(let e=l(n);e>0;e--)t.push(u(n,e));for(let a=0;a<c(e);a++)t.push(h(n,a));const r=42-t.length;for(let e=1;e<=r;e++)t.push(h(a,e));return t})(n),j=({date:n,isSelected:a,isAvailable:t,isCurrentDay:r,isCurrentMonth:o,isHijri:i,dayCellClassName:l,dayCellStyle:d,onClick:s,renderDayCell:u,availableRowData:c})=>{var h;const y=P(n);return e("td",{"aria-disabled":!t,"aria-selected":a,className:[C.tableCell,r?C.currentDay:"",o?C.currentMonth:C.notCurrentMonth,l||""].join(" "),role:"gridcell",style:d,tabIndex:-1,onClick:()=>s(n),children:u?u({date:n,isSelected:a,isAvailable:t,isCurrentDay:r,isCurrentMonth:o,hijriDate:y,availableCellData:c}):e("div",{className:[C.cellContent,a?C.selected:"",t?C.available:C.unavailable].join(" "),children:e("div",{className:C.dayContainer,children:i?String(null!==(h=y.day)&&void 0!==h?h:""):m(n,"d")})})})},A=()=>e("svg",{fill:"none",height:"13",viewBox:"0 0 7 13",width:"7",xmlns:"http://www.w3.org/2000/svg",children:e("path",{d:"M6.31641 12.2109L6.86328 11.6914C6.97266 11.5547 6.97266 11.3359 6.86328 11.2266L1.91406 6.25L6.86328 1.30078C6.97266 1.19141 6.97266 0.972656 6.86328 0.835938L6.31641 0.316406C6.17969 0.179688 5.98828 0.179688 5.85156 0.316406L0.109375 6.03125C0 6.16797 0 6.35938 0.109375 6.49609L5.85156 12.2109C5.98828 12.3477 6.17969 12.3477 6.31641 12.2109Z",fill:"#161616"})}),N=()=>e("svg",{fill:"none",height:"25",viewBox:"0 0 24 25",width:"24",xmlns:"http://www.w3.org/2000/svg",children:e("path",{d:"M9.65625 6.31641L9.10938 6.83594C9 6.97266 9 7.19141 9.10938 7.30078L14.0586 12.25L9.10938 17.2266C9 17.3359 9 17.5547 9.10938 17.6914L9.65625 18.2109C9.79297 18.3477 9.98438 18.3477 10.1211 18.2109L15.8633 12.4961C15.9727 12.3594 15.9727 12.168 15.8633 12.0312L10.1211 6.31641C9.98438 6.17969 9.79297 6.17969 9.65625 6.31641Z",fill:"#161616"})}),Y=({month:a,year:t,isHijri:r,labels:o,onToggleHijri:i,onPrev:l,onNext:d,lang:s})=>{const u="ar"===s,c=n=>{const a="prev"===n?u?N:A:u?A:N,t="prev"===n?l:d;return e("button",{className:C.chevronButton,type:"button",onClick:t,children:e(a,{})})};return n("div",{className:C.header,children:[n("div",{className:C.monthYearText,children:[e("span",{children:a}),e("span",{children:t})]}),n("div",{className:C.actionsContainer,children:[e("button",{"aria-label":"Toggle calendar type",className:C.toggleButton,onClick:i,children:r?o.gregorian:o.hijri}),n("span",{className:C.chevronContainer,children:[c("prev"),c("next")]})]})]})},H=({weeks:r,selectedDate:o,availableDatesInfo:i,mode:l,isHijri:d,currentHijriDate:s,currentActiveViewDate:u,dayCellClassName:c,dayCellStyle:h,onDateClick:g,renderDayCell:b,weekDays:p})=>{const v=t(null),[w,_]=a.useState(null);a.useEffect(()=>{var e;if(!w&&r.length>0)for(const[n,a]of r.entries())for(const[t,r]of a.entries()){if("allAvailable"===l||!0===(null===(e=null==i?void 0:i.find(e=>e.date===m(r,"yyyyMMdd")))||void 0===e?void 0:e.isAvailable))return void _({row:n,col:t})}},[r,i,w,l]);return n("table",{ref:v,"aria-label":"Date picker grid",className:C.table,role:"grid",tabIndex:0,onKeyDown:e=>{var n;if(!w)return;const{row:a,col:t}=w;switch(e.key){case"ArrowDown":e.preventDefault(),a<r.length-1&&_({row:a+1,col:t});break;case"ArrowUp":e.preventDefault(),a>0&&_({row:a-1,col:t});break;case"ArrowRight":e.preventDefault(),t<r[a].length-1&&_({row:a,col:t+1});break;case"ArrowLeft":e.preventDefault(),t>0&&_({row:a,col:t-1});break;case"Enter":case" ":{e.preventDefault();const n=r[a][t];g(n);break}case"Escape":e.preventDefault(),null===(n=v.current)||void 0===n||n.blur()}},children:[e("thead",{children:e("tr",{children:p.map((n,a)=>e("th",{className:C.tableHeader,role:"columnheader",scope:"col",children:n},a))})}),e("tbody",{children:r.map((n,a)=>e("tr",{role:"row",children:n.map((n,a)=>{const t=!!o&&y(n,o),r=null==i?void 0:i.find(e=>e.date===m(n,"yyyyMMdd")),p="allAvailable"===l||!0===(null==r?void 0:r.isAvailable),v=f(n),w=P(n),C=d?w.month===s.month&&w.year===s.year:m(n,"yyyy-MM")===m(u,"yyyy-MM");return e(j,{availableRowData:r,currentActiveViewDate:u,currentHijriDate:s,date:n,dayCellClassName:c,dayCellStyle:h,isAvailable:p,isCurrentDay:v,isCurrentMonth:C,isHijri:d,isSelected:t,renderDayCell:b,onClick:g},a)})},a))})]})},z={en:{hijri:"Hijri",gregorian:"Gregorian",weekdays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},ar:{hijri:"هجري",gregorian:"ميلادي",weekdays:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"]}};function E(e){return(n={})=>{const a=n.width?String(n.width):e.defaultWidth;return e.formats[a]||e.formats[e.defaultWidth]}}function X(e){return(n,a)=>{let t;if("formatting"===(a?.context?String(a.context):"standalone")&&e.formattingValues){const n=e.defaultFormattingWidth||e.defaultWidth,r=a?.width?String(a.width):n;t=e.formattingValues[r]||e.formattingValues[n]}else{const n=e.defaultWidth,r=a?.width?String(a.width):e.defaultWidth;t=e.values[r]||e.values[n]}return t[e.argumentCallback?e.argumentCallback(n):n]}}function B(e){return(n,a={})=>{const t=a.width,r=t&&e.matchPatterns[t]||e.matchPatterns[e.defaultMatchWidth],o=n.match(r);if(!o)return null;const i=o[0],l=t&&e.parsePatterns[t]||e.parsePatterns[e.defaultParseWidth],d=Array.isArray(l)?function(e,n){for(let a=0;a<e.length;a++)if(n(e[a]))return a;return}(l,e=>e.test(i)):function(e,n){for(const a in e)if(Object.prototype.hasOwnProperty.call(e,a)&&n(e[a]))return a;return}(l,e=>e.test(i));let s;s=e.valueCallback?e.valueCallback(d):d,s=a.valueCallback?a.valueCallback(s):s;return{value:s,rest:n.slice(i.length)}}}function J(e){return(n,a={})=>{const t=n.match(e.matchPattern);if(!t)return null;const r=t[0],o=n.match(e.parsePattern);if(!o)return null;let i=e.valueCallback?e.valueCallback(o[0]):o[0];i=a.valueCallback?a.valueCallback(i):i;return{value:i,rest:n.slice(r.length)}}}const L={lessThanXSeconds:{one:"أقل من ثانية واحدة",two:"أقل من ثانتين",threeToTen:"أقل من {{count}} ثواني",other:"أقل من {{count}} ثانية"},xSeconds:{one:"ثانية واحدة",two:"ثانتين",threeToTen:"{{count}} ثواني",other:"{{count}} ثانية"},halfAMinute:"نصف دقيقة",lessThanXMinutes:{one:"أقل من دقيقة",two:"أقل من دقيقتين",threeToTen:"أقل من {{count}} دقائق",other:"أقل من {{count}} دقيقة"},xMinutes:{one:"دقيقة واحدة",two:"دقيقتين",threeToTen:"{{count}} دقائق",other:"{{count}} دقيقة"},aboutXHours:{one:"ساعة واحدة تقريباً",two:"ساعتين تقريباً",threeToTen:"{{count}} ساعات تقريباً",other:"{{count}} ساعة تقريباً"},xHours:{one:"ساعة واحدة",two:"ساعتين",threeToTen:"{{count}} ساعات",other:"{{count}} ساعة"},xDays:{one:"يوم واحد",two:"يومين",threeToTen:"{{count}} أيام",other:"{{count}} يوم"},aboutXWeeks:{one:"أسبوع واحد تقريباً",two:"أسبوعين تقريباً",threeToTen:"{{count}} أسابيع تقريباً",other:"{{count}} أسبوع تقريباً"},xWeeks:{one:"أسبوع واحد",two:"أسبوعين",threeToTen:"{{count}} أسابيع",other:"{{count}} أسبوع"},aboutXMonths:{one:"شهر واحد تقريباً",two:"شهرين تقريباً",threeToTen:"{{count}} أشهر تقريباً",other:"{{count}} شهر تقريباً"},xMonths:{one:"شهر واحد",two:"شهرين",threeToTen:"{{count}} أشهر",other:"{{count}} شهر"},aboutXYears:{one:"عام واحد تقريباً",two:"عامين تقريباً",threeToTen:"{{count}} أعوام تقريباً",other:"{{count}} عام تقريباً"},xYears:{one:"عام واحد",two:"عامين",threeToTen:"{{count}} أعوام",other:"{{count}} عام"},overXYears:{one:"أكثر من عام",two:"أكثر من عامين",threeToTen:"أكثر من {{count}} أعوام",other:"أكثر من {{count}} عام"},almostXYears:{one:"عام واحد تقريباً",two:"عامين تقريباً",threeToTen:"{{count}} أعوام تقريباً",other:"{{count}} عام تقريباً"}},O={date:E({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:E({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:E({formats:{full:"{{date}} 'عند' {{time}}",long:"{{date}} 'عند' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},V={lastWeek:"'أخر' eeee 'عند' p",yesterday:"'أمس عند' p",today:"'اليوم عند' p",tomorrow:"'غداً عند' p",nextWeek:"eeee 'عند' p",other:"P"},q={code:"ar-SA",formatDistance:(e,n,a)=>{let t;const r=L[e];return t="string"==typeof r?r:1===n?r.one:2===n?r.two:n<=10?r.threeToTen.replace("{{count}}",String(n)):r.other.replace("{{count}}",String(n)),a?.addSuffix?a.comparison&&a.comparison>0?"في خلال "+t:"منذ "+t:t},formatLong:O,formatRelative:(e,n,a,t)=>V[e],localize:{ordinalNumber:e=>String(e),era:X({values:{narrow:["ق","ب"],abbreviated:["ق.م.","ب.م."],wide:["قبل الميلاد","بعد الميلاد"]},defaultWidth:"wide"}),quarter:X({values:{narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},defaultWidth:"wide",argumentCallback:e=>e-1}),month:X({values:{narrow:["ي","ف","م","أ","م","ي","ي","أ","س","أ","ن","د"],abbreviated:["ينا","فبر","مارس","أبريل","مايو","يونـ","يولـ","أغسـ","سبتـ","أكتـ","نوفـ","ديسـ"],wide:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},defaultWidth:"wide"}),day:X({values:{narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنـ","ثلا","أربـ","خميـ","جمعة","سبت"],wide:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},defaultWidth:"wide"}),dayPeriod:X({values:{narrow:{am:"ص",pm:"م",midnight:"ن",noon:"ظ",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"},abbreviated:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"},wide:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"}},defaultWidth:"wide",formattingValues:{narrow:{am:"ص",pm:"م",midnight:"ن",noon:"ظ",morning:"في الصباح",afternoon:"بعد الظـهر",evening:"في المساء",night:"في الليل"},abbreviated:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"في الصباح",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل"},wide:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظـهر",evening:"في المساء",night:"في الليل"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:J({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:B({matchPatterns:{narrow:/^(ق|ب)/i,abbreviated:/^(ق\.?\s?م\.?|ق\.?\s?م\.?\s?|a\.?\s?d\.?|c\.?\s?)/i,wide:/^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^قبل/i,/^بعد/i]},defaultParseWidth:"any"}),quarter:B({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^ر[1234]/i,wide:/^الربع [1234]/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:e=>e+1}),month:B({matchPatterns:{narrow:/^[يفمأمسند]/i,abbreviated:/^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i,wide:/^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^ي/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ي/i,/^ي/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^ين/i,/^ف/i,/^مار/i,/^أب/i,/^ماي/i,/^يون/i,/^يول/i,/^أغ/i,/^س/i,/^أك/i,/^ن/i,/^د/i]},defaultParseWidth:"any"}),day:B({matchPatterns:{narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},defaultParseWidth:"any"}),dayPeriod:B({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}},F={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},I={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Q={ordinalNumber:(e,n)=>{const a=Number(e),t=a%100;if(t>20||t<10)switch(t%10){case 1:return a+"st";case 2:return a+"nd";case 3:return a+"rd"}return a+"th"},era:X({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:X({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:e=>e-1}),month:X({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:X({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:X({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},R={ordinalNumber:J({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:B({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:B({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:e=>e+1}),month:B({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:B({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:B({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},G={code:"en-US",formatDistance:(e,n,a)=>{let t;const r=F[e];return t="string"==typeof r?r:1===n?r.one:r.other.replace("{{count}}",n.toString()),a?.addSuffix?a.comparison&&a.comparison>0?"in "+t:t+" ago":t},formatLong:{date:E({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:E({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:E({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},formatRelative:(e,n,a,t)=>I[e],localize:Q,match:R,options:{weekStartsOn:0,firstWeekContainsDate:1}},$=({initialSelectedDate:a,setSelectedDate:t,availableDatesInfo:l,mode:d="allAvailable",lang:s="en",calendarType:u,renderDayCell:c,className:y,style:f,dayCellStyle:w,dayCellClassName:T,primaryColor:W="#1b8354",unavailableColor:j="#6c737f"})=>{const[A,N]=r(a||null);"customAvailable"!==d||Array.isArray(l)&&0!==l.length||"production"===process.env.NODE_ENV||console.warn("[Calendar] In customAvailable mode, availableDatesInfo should be a non-empty array. All days will be unavailable.");const E=z[s]||z.en,X="hijri"===u||"gregorian"!==u&&"ar"===s,{weeks:B,currentMonthYear:J,handleDateClick:L,goToPreviousMonth:O,goToNextMonth:V,toggleHijri:F,isHijri:I,currentHijriDate:Q,currentActiveViewDate:R}=((e,n,a,t,l)=>{const[d,s]=r(new Date),[u,c]=r(()=>P(new Date)),[y,f]=r(t),w=o(()=>"ar"===a?q:G,[a]),C=i(()=>{if(f(!y),!y){const e=P(d);c(e)}},[y,d]),T=[],W=S(y,d,u);for(let e=0;e<W.length;e+=7)T.push(W.slice(e,e+7));const j=new Date(1970,0,1),A=g(j,0),N=Array.from({length:7}).map((e,n)=>m(h(A,n),w===G?"EE":"EEEE",{locale:w})),Y=y?{month:("ar"===a?_:M)[u.month],year:u.year.toString()}:{month:m(d,"MMMM",{locale:w}),year:v(d).toString()};return{weekdayNames:N,weeks:T,handleDateClick:a=>{var t;if("allAvailable"===l)return void n(a);const r=m(a,"yyyyMMdd");!0===(null===(t=null==e?void 0:e.find(e=>e.date===r))||void 0===t?void 0:t.isAvailable)&&n(a)},goToPreviousMonth:()=>{if(y){const e=D(u),n=e?x:u.month-1,a=e?u.year-1:u.year;c(Object.assign(Object.assign({},u),{month:n,year:a}))}else s(b(d,1))},goToNextMonth:()=>{if(y){const e=k(u),n=e?0:u.month+1,a=e?u.year+1:u.year;c(Object.assign(Object.assign({},u),{month:n,year:a}))}else s(p(d,1))},toggleHijri:C,isHijri:y,currentHijriDate:u,currentActiveViewDate:d,currentMonthYear:Y}})(l||[],e=>{t&&(t(e),N(e))},s,X,d),$=E.weekdays,Z=Object.assign(Object.assign({"--calendar-primary":W,"--calendar-unavailable":j},f),{direction:"ar"===s?"rtl":"ltr"});return n("div",{"aria-label":"Calendar",className:`${C.calendarContainer} ${y||""}`,role:"region",style:Z,children:[e(Y,{isHijri:I,labels:E,lang:s,month:J.month,year:J.year,onNext:()=>{V()},onPrev:()=>{O()},onToggleHijri:F}),e("div",{className:C.tableContainer,children:e(H,{availableDatesInfo:l,currentActiveViewDate:R,currentHijriDate:Q,dayCellClassName:T,dayCellStyle:w,isHijri:I,mode:d,renderDayCell:c,selectedDate:A,weekDays:$,weeks:B,onDateClick:L})})]})};$.displayName="Calendar";export{$ as Calendar};
//# sourceMappingURL=index.esm.js.map