{"version":3,"file":"WeekComponent.DCN1etSA.mjs","names":["key"],"sources":["https:/framerusercontent.com/modules/pH1YXpCqKcogYIHYUFxa/M22vwGD29Gi0nTLyCSzj/DayComponent.js","https:/framerusercontent.com/modules/mkXCG9vyUDJX4hWqt92J/t7stlZMFQ8T3Gz5AFFWe/UnmuMembership.js","https:/framerusercontent.com/modules/jJ3DlGzy4thdVVHgfkA6/JVZ1xHozrTvuJE5yCyxo/WeekComponent.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{motion}from\"framer-motion\";export function DayComponent({index,variant,onClick,isToday=false,dayCategory}){const isActive=variant===\"Start\"||variant===\"Middle\"||variant===\"End\";const getBackgroundColor=()=>{if(variant===\"Invisible\")return\"transparent\";if(isActive)return\"#C2C2C2\";// if (variant === \"Disabled\") return \"transparent\"\nswitch(dayCategory){case\"Peak-Weekend\":return\"#DFDBD9\";case\"Peak-Weekday\":return\"#EFECEA\";case\"Weekend\":return\"#EFEFEF\";default:return\"transparent\";}};const getTextColor=()=>{if(variant===\"Invisible\")return\"transparent\";if(isToday)return\"#000000\";switch(variant){case\"Holiday\":return\"#DB4242\";case\"Disabled\":return\"#707070\";case\"Start\":case\"Middle\":case\"End\":return\"#F8F8F8\";default:return\"#707070\";}};const getSubText=()=>{if(variant===\"Invisible\")return null;if(variant===\"Start\")return\"입실\";if(variant===\"End\")return\"퇴실\";if(variant===\"Middle\")return\"\\xa0\";if(isToday)return\"오늘\";return null;};return /*#__PURE__*/_jsxs(motion.div,{layout:\"position\",onClick:onClick,style:{flex:1,height:\"100%\",display:\"flex\",flexDirection:\"column\",justifyContent:\"center\",alignItems:\"center\",fontFamily:\"Pretendard Light, sans-serif\",fontWeight:300,fontSize:16,lineHeight:\"1.2em\",boxSizing:\"border-box\",cursor:variant===\"Disabled\"||variant===\"Invisible\"?\"default\":\"pointer\",transition:\"background-color 0.3s ease-in-out\",backgroundColor:getBackgroundColor(),color:getTextColor()},children:[/*#__PURE__*/_jsx(\"div\",{style:{transform:isActive?\"translateY(-2px)\":\"translateY(0)\",transition:\"transform 0.3s ease-in-out\",backgroundColor:isToday?\"#D0E8FF\":\"transparent\",borderRadius:isToday?\"50%\":\"0\",width:isToday?24:\"auto\",height:isToday?24:\"auto\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",opacity:variant===\"Disabled\"?.3:1},children:variant===\"Invisible\"?null:index}),/*#__PURE__*/_jsx(motion.div,{layout:true,style:{fontSize:10,marginTop:4,fontFamily:\"Pretendard Light, sans-serif\",fontWeight:isToday?600:500,lineHeight:\"1.2em\",height:\"1em\",visibility:getSubText()?\"visible\":\"hidden\",color:getTextColor(),opacity:variant===\"Disabled\"?.3:1},children:getSubText()})]});}\nexport const __FramerMetadata__ = {\"exports\":{\"DayComponent\":{\"type\":\"reactComponent\",\"name\":\"DayComponent\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DayComponent.map","// UnmuMembership.tsx\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useStore}from\"https://framerusercontent.com/modules/pIGEMps6hXhOvo2SMFcy/tp3nWYy82sKTo2bHVS2f/MonthDisplay.js\";const membershipCycle=[\"Non-Member\",\"UNMU 6\",\"UNMU 9\",\"UNMU 12\",\"UNMU 24\",\"TERENE 6\",\"TERENE 9\",\"TERENE 12\",\"TERENE 24\"];export function displayMembership(Component){return props=>{const[store,setStore]=useStore();const handleTap=()=>{const currentIndex=membershipCycle.indexOf(store.membership);const nextIndex=(currentIndex+1)%membershipCycle.length;setStore({membership:membershipCycle[nextIndex]});};return /*#__PURE__*/_jsx(Component,{...props,text:store.membership,onTap:handleTap});};}export const membershipLimits={\"Non-Member\":2,\"UNMU 6\":3,\"UNMU 9\":6,\"UNMU 12\":8,\"UNMU 24\":12,\"TERENE 6\":3,\"TERENE 9\":6,\"TERENE 12\":8,\"TERENE 24\":12};export const membershipPrices={\"Non-Member\":{Weekday:15e5,Weekend:21e5,\"Peak-Weekday\":21e5,\"Peak-Weekend\":24e5}};export const unmuDayLimits={\"UNMU 6\":{Weekday:4,Weekend:1,Peak:1},\"UNMU 9\":{Weekday:5,Weekend:2,Peak:2},\"UNMU 12\":{Weekday:7,Weekend:3,Peak:2},\"UNMU 24\":{Weekday:13,Weekend:6,Peak:5},\"TERENE 6\":{Weekday:4,Weekend:1,Peak:1},\"TERENE 9\":{Weekday:5,Weekend:2,Peak:2},\"TERENE 12\":{Weekday:7,Weekend:3,Peak:2},\"TERENE 24\":{Weekday:13,Weekend:6,Peak:5}};\nexport const __FramerMetadata__ = {\"exports\":{\"displayMembership\":{\"type\":\"reactHoc\",\"name\":\"displayMembership\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"unmuDayLimits\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"membershipLimits\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"membershipPrices\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// WeekComponent.tsx\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{DayComponent}from\"https://framerusercontent.com/modules/pH1YXpCqKcogYIHYUFxa/M22vwGD29Gi0nTLyCSzj/DayComponent.js\";import{useStore,calculateDay}from\"https://framerusercontent.com/modules/pIGEMps6hXhOvo2SMFcy/tp3nWYy82sKTo2bHVS2f/MonthDisplay.js\";import{membershipLimits}from\"https://framerusercontent.com/modules/mkXCG9vyUDJX4hWqt92J/t7stlZMFQ8T3Gz5AFFWe/UnmuMembership.js\";import{addPropertyControls,ControlType}from\"framer\";function getKSTDate(baseDate=new Date){const utc=baseDate.getTime()+baseDate.getTimezoneOffset()*6e4;return new Date(utc+9*60*60*1e3);}function getLastAvailableDate(today,monthLimit){const year=today.getFullYear();const month=today.getMonth();const date=today.getDate();const targetMonth=month+monthLimit;const tempDate=new Date(year,targetMonth,date);// 2월 예외 처리: 날짜가 밀려 다음 달로 넘어간 경우\nif(tempDate.getMonth()!==targetMonth%12){// 해당 달의 마지막 날로 보정\nconst corrected=new Date(year,targetMonth+1,0)// 다음 달의 0일 → 해당 달의 마지막 날\n;corrected.setHours(23,59,59,999);return corrected;}// 일반적인 경우 (날짜가 유효하게 유지된 경우)\ntempDate.setHours(23,59,59,999);return new Date(tempDate.getTime()-24*60*60*1e3)// 전날까지 허용\n;}// export function isBeyondReservationLimit(\n//     today: Date,\n//     target: Date,\n//     membership: string,\n//     store?\n// ): boolean {\n//     if (store && store.membership === \"All-Free\") {\n//         return false\n//     }\n//     const monthLimit = membershipLimits[membership] ?? 0\n//     const lastAvailableDate = getLastAvailableDate(today, monthLimit)\n//     const now = getKSTDate()\n//     const tomorrow = new Date(today)\n//     tomorrow.setDate(today.getDate() + 1)\n//     tomorrow.setHours(0, 0, 0, 0)\n//     const deadlineForTomorrow = new Date(today)\n//     deadlineForTomorrow.setHours(14, 0, 0, 0)\n//     const isTryingToReserveTomorrow =\n//         target.getFullYear() === tomorrow.getFullYear() &&\n//         target.getMonth() === tomorrow.getMonth() &&\n//         target.getDate() === tomorrow.getDate()\n//     const isPastDeadlineForTomorrow =\n//         isTryingToReserveTomorrow &&\n//         now.getTime() >= deadlineForTomorrow.getTime()\n//     // ✅ [추가] 입실일 기준으로 3박까지는 허용 (퇴실만 예외)\n//     if (store?.firstDate && !store?.secondDate) {\n//         const checkinTime = dateToTime(store.firstDate)\n//         const maxCheckoutTime = checkinTime + 3 * 86400000 // 3일 후\n//         const targetTime = target.getTime()\n//         const checkinDate = new Date(checkinTime)\n//         const maxCheckoutDate = new Date(maxCheckoutTime)\n//         if (\n//             targetTime > lastAvailableDate.getTime() &&\n//             targetTime <= maxCheckoutDate.getTime()\n//         ) {\n//             // 입실일로부터 3박 이내이고, lastAvailableDate는 초과 → 퇴실 예외 허용\n//             return false\n//         }\n//     }\n//     return (\n//         target.getTime() > lastAvailableDate.getTime() ||\n//         isPastDeadlineForTomorrow\n//     )\n// }\nexport function isBeyondReservationLimit(today,target,membership,store){if(store&&store.membership===\"All-Free\"){return false;}const now=getKSTDate();const tomorrow=new Date(today);tomorrow.setDate(today.getDate()+1);tomorrow.setHours(0,0,0,0);const dayAfterTomorrow=new Date(today);dayAfterTomorrow.setDate(today.getDate()+2);dayAfterTomorrow.setHours(0,0,0,0);const deadlineForAfterTomorrow=new Date(today);deadlineForAfterTomorrow.setHours(15,0,0,0);const isTryingToReserveTomorrow=target.getFullYear()===tomorrow.getFullYear()&&target.getMonth()===tomorrow.getMonth()&&target.getDate()===tomorrow.getDate();const isTryingToReserveDayAfterTomorrow=target.getFullYear()===dayAfterTomorrow.getFullYear()&&target.getMonth()===dayAfterTomorrow.getMonth()&&target.getDate()===dayAfterTomorrow.getDate();// 내일은 항상 비활성화\nif(isTryingToReserveTomorrow){return true;}// 내일모레는 15시부터는 예약 불가\nif(isTryingToReserveDayAfterTomorrow&&now.getTime()>=deadlineForAfterTomorrow.getTime()){return true;}const monthLimit=membershipLimits[membership]??0;const lastAvailableDate=getLastAvailableDate(today,monthLimit);// ✅ [추가] 입실일 기준으로 3박까지는 허용 (퇴실만 예외)\nif(store?.firstDate&&!store?.secondDate){const checkinTime=dateToTime(store.firstDate);const maxCheckoutTime=checkinTime+3*864e5// 3박\n;const targetTime=target.getTime();if(targetTime>lastAvailableDate.getTime()&&targetTime<=maxCheckoutTime){return false;}}return target.getTime()>lastAvailableDate.getTime();}// reservation-3에서 first와 second 동시에 판별하기 위한 함수, reservation-2에선 영향 X\nexport function isReservationPairValid(today,first,second,membership,store){const monthLimit=membershipLimits[membership]??0;const lastAvailableDate=getLastAvailableDate(today,monthLimit);const checkinOK=!isBeyondReservationLimit(today,first,membership,store);const maxCheckoutTime=first.getTime()+3*864e5// 3박\n;const checkoutOK=second.getTime()<=maxCheckoutTime&&second.getTime()>first.getTime();return checkinOK&&checkoutOK;}function isSameDate(a,b){return a?.year===b?.year&&a?.month===b?.month&&a?.day===b?.day;}function dateToTime(date){return new Date(date.year,date.month,date.day).getTime();}function isExceeding4Nights(date1,date2){const time1=dateToTime(date1);const time2=dateToTime(date2);const diffDays=Math.abs((time2-time1)/(1e3*60*60*24));return diffDays>=4;}export function WeekComponent(props){const[store,setStore]=useStore();const{week,thisMonth,variant,dayInfoMap}=props;const monthIndex=thisMonth?store.monthIndex:(store.monthIndex+1)%12;const year=thisMonth||store.monthIndex<11?store.year:store.year+1;const width=props.variant===\"Mobile\"?300:350;const containerStyle={display:\"flex\",flexDirection:\"row\",justifyContent:\"center\",alignItems:\"center\",flexWrap:\"nowrap\",gap:0,width:width,height:50};const today=getKSTDate();today.setHours(0,0,0,0);return /*#__PURE__*/_jsx(\"div\",{style:containerStyle,children:Array.from({length:7},(_,i)=>{const{day,isCurrentMonth,actualMonth,actualYear}=calculateDay(year,monthIndex,week,i);const dateObj={year:actualYear,month:actualMonth,day};const isSelectedFirst=isSameDate(store.firstDate,dateObj);const isSelectedSecond=isSameDate(store.secondDate,dateObj);const isBetween=store.firstDate&&store.secondDate&&isCurrentMonth&&(()=>{const d=dateToTime(dateObj);const f=dateToTime(store.firstDate);const s=dateToTime(store.secondDate);return d>f&&d<s;})();const currentDate=new Date(year,monthIndex,day);currentDate.setHours(0,0,0,0);const isTodayDate=isCurrentMonth&&currentDate.getFullYear()===today.getFullYear()&&currentDate.getMonth()===today.getMonth()&&currentDate.getDate()===today.getDate();const isPast=currentDate<=today;const isBeyondLimit=isBeyondReservationLimit(today,currentDate,store.membership,store);const yyyy=dateObj.year.toString();const mm=String(dateObj.month+1).padStart(2,\"0\");const dd=String(dateObj.day).padStart(2,\"0\");const key=`${yyyy}-${mm}-${dd}`;const dayInfo=dayInfoMap?.get(key);const checkinOccupied=dayInfo?.checkin?.is_occupied??false;const checkoutOccupied=dayInfo?.checkout?.is_occupied??false;const isHoliday=dayInfo?.isHoliday??false;const category=dayInfo?.category??null;// 스타일 표현용: baseVariant는 \"회색 처리\"에만 사용\nlet baseVariant=\"Day\";// isPotentialCheckout: firstDate가 선택된 상태에서 이 날짜가 그 다음 날짜인 경우\nconst isPotentialCheckout=store.firstDate&&!store.secondDate&&dateToTime(dateObj)>dateToTime(store.firstDate);// 사이에 Disabled 날짜가 있는지 확인\nconst hasDisabledBetween=(()=>{if(!isPotentialCheckout)return false;const start=store.firstDate;const end=dateObj;for(let d=new Date(start.year,start.month,start.day+1);d<new Date(end.year,end.month,end.day);d.setDate(d.getDate()+1)){const key=`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,\"0\")}-${String(d.getDate()).padStart(2,\"0\")}`;const info=dayInfoMap?.get(key);const dayIsDisabled=!info||info.checkin?.is_occupied||info.checkout?.is_occupied;if(dayIsDisabled)return true;}return false;})();// 최종 Disabled 여부 결정\nconst shouldBeDisabled=!isCurrentMonth||isPast||isBeyondLimit||!dayInfoMap||checkinOccupied&&checkoutOccupied||checkinOccupied&&!checkoutOccupied&&(!isPotentialCheckout||hasDisabledBetween||isExceeding4Nights(store.firstDate,dateObj));if(shouldBeDisabled){baseVariant=\"Disabled\";}else if(i===0||isHoliday){// 일요일 및 공휴일 로직\nbaseVariant=\"Holiday\";}// isBeyondLimit이거나, 체크인 체크아웃 둘 다 점유된 경우, 선택 불가\nconst isSelectable=!(isPast||isBeyondLimit||checkinOccupied&&checkoutOccupied||!isCurrentMonth);const effectiveVariant=!isCurrentMonth?\"Invisible\":isSelectedFirst?\"Start\":isSelectedSecond?\"End\":isBetween?\"Middle\":baseVariant;const handleClick=()=>{if(!dayInfoMap||!isSelectable)return;const clickedTime=dateToTime(dateObj);const first=store.firstDate;const second=store.secondDate;const checkOccupiedBetween=(start,end)=>{const startDate=new Date(start.year,start.month,start.day);const endDate=new Date(end.year,end.month,end.day);for(let d=new Date(startDate.getTime()+864e5);d<endDate;d.setDate(d.getDate()+1)){const key=`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,\"0\")}-${String(d.getDate()).padStart(2,\"0\")}`;const info=dayInfoMap?.get(key);const checkinOcc=info?.checkin?.is_occupied??false;const checkoutOcc=info?.checkout?.is_occupied??false;if(checkinOcc||checkoutOcc)return true;}return false;};// 0. 아무것도 없는 상태에서 선택 -> 입실\nif(!first&&!second){if(checkinOccupied)return;// 입실이 이미 점유된 경우\nsetStore({...store,firstDate:dateObj});return;}// 1. 입실만 선택된 상태에서 동일한 날짜 클릭 -> 입실 해제\nif(first&&!second&&clickedTime===dateToTime(first)){setStore({...store,firstDate:null});return;}// 2. 입실만 선택된 상태에서 과거 클릭 -> 입실 변경\nif(first&&!second&&clickedTime<dateToTime(first)){if(checkinOccupied)return;// 입실이 이미 점유된 경우\nsetStore({...store,firstDate:dateObj});return;}// 3. 입실만 선택된 상태에서 미래 클릭 -> 퇴실 설정\nif(first&&!second&&clickedTime>dateToTime(first)){const start=first;const end=dateObj;if(isExceeding4Nights(start,end)){alert(\"4박 이상 예약은 별도로 문의해주시기 바랍니다.\\n[문의처] 카카오톡 채널(ID: TERENE)\");return;}if(checkOccupiedBetween(start,end))return;setStore({...store,firstDate:start,secondDate:end});return;}// 4. 입실/퇴실 모두 선택된 상태에서 클릭 -> 입실 재설정, 퇴실 해제\nif(first&&second){if(checkinOccupied)return;// 입실이 이미 점유된 경우\nsetStore({...store,firstDate:dateObj,secondDate:null});return;}};return /*#__PURE__*/_jsx(DayComponent,{index:day,variant:effectiveVariant,onClick:isSelectable?handleClick:undefined,isToday:isTodayDate,dayCategory:category},`${week}-${i}`);})});}addPropertyControls(WeekComponent,{week:{type:ControlType.Number,defaultValue:0,min:0,max:5,step:1,title:\"Week\",displayStepper:true},thisMonth:{type:ControlType.Boolean,defaultValue:true,title:\"Left Calendar?\",description:\"Yes = 왼쪽 달력, No = 오른쪽 달력\"},variant:{type:ControlType.Enum,options:[\"Default\",\"Mobile\"],optionTitles:[\"Default (350px)\",\"Mobile (300px)\"],defaultValue:\"Default\",title:\"Variant\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"WeekComponent\":{\"type\":\"reactComponent\",\"name\":\"WeekComponent\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"isReservationPairValid\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isBeyondReservationLimit\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}