@spacesync/client 0.1.10 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -13
- package/dist/analog-clock-picker.js +3 -11
- package/dist/analog-clock-picker.js.map +1 -1
- package/dist/booking-schedule-calendars.js +82 -19
- package/dist/booking-schedule-calendars.js.map +1 -1
- package/dist/booking-schedule.js +1 -1
- package/dist/booking-space-layout-picker.d.ts +1 -1
- package/dist/booking-space-layout-picker.js +8 -11
- package/dist/booking-space-layout-picker.js.map +1 -1
- package/dist/button-Iem7kbk0.d.ts +16 -0
- package/dist/chat-stick-to-bottom.js +0 -10
- package/dist/chat-stick-to-bottom.js.map +1 -1
- package/dist/chunk-2IZODKTR.js +116 -0
- package/dist/chunk-2IZODKTR.js.map +1 -0
- package/dist/chunk-2TT2ZGMT.js +21 -0
- package/dist/chunk-2TT2ZGMT.js.map +1 -0
- package/dist/chunk-3MAGTCCN.js +192 -0
- package/dist/chunk-3MAGTCCN.js.map +1 -0
- package/dist/chunk-56H7UFAW.js +237 -0
- package/dist/chunk-56H7UFAW.js.map +1 -0
- package/dist/{chunk-OTSA5ROL.js → chunk-5CUJZNUC.js} +16 -5
- package/dist/chunk-5CUJZNUC.js.map +1 -0
- package/dist/chunk-5HOK5JHR.js +60 -0
- package/dist/chunk-5HOK5JHR.js.map +1 -0
- package/dist/chunk-6VJQIBC3.js +715 -0
- package/dist/chunk-6VJQIBC3.js.map +1 -0
- package/dist/{chunk-H7EX6B6N.js → chunk-AHFRK6KP.js} +25 -7
- package/dist/chunk-AHFRK6KP.js.map +1 -0
- package/dist/chunk-BQVMO33N.js +133 -0
- package/dist/chunk-BQVMO33N.js.map +1 -0
- package/dist/chunk-CXXOKCLJ.js +37 -0
- package/dist/chunk-CXXOKCLJ.js.map +1 -0
- package/dist/chunk-EQLKSX4E.js +241 -0
- package/dist/chunk-EQLKSX4E.js.map +1 -0
- package/dist/chunk-FN4BWFDX.js +43 -0
- package/dist/chunk-FN4BWFDX.js.map +1 -0
- package/dist/chunk-HRHDOLWU.js +62 -0
- package/dist/chunk-HRHDOLWU.js.map +1 -0
- package/dist/chunk-HZB2EHEH.js +216 -0
- package/dist/chunk-HZB2EHEH.js.map +1 -0
- package/dist/chunk-IBGGQXTH.js +21 -0
- package/dist/chunk-IBGGQXTH.js.map +1 -0
- package/dist/chunk-JCEOU7BU.js +128 -0
- package/dist/chunk-JCEOU7BU.js.map +1 -0
- package/dist/{chunk-CKCXQBHQ.js → chunk-KXTYPZDK.js} +91 -19
- package/dist/chunk-KXTYPZDK.js.map +1 -0
- package/dist/{chunk-RV5PMZYZ.js → chunk-MBZAYH5D.js} +4 -18
- package/dist/chunk-MBZAYH5D.js.map +1 -0
- package/dist/chunk-NWVNYKND.js +153 -0
- package/dist/chunk-NWVNYKND.js.map +1 -0
- package/dist/chunk-PPMJZVR4.js +37 -0
- package/dist/chunk-PPMJZVR4.js.map +1 -0
- package/dist/chunk-SHMKDGFF.js +75 -0
- package/dist/chunk-SHMKDGFF.js.map +1 -0
- package/dist/chunk-T3SOBIYA.js +61 -0
- package/dist/chunk-T3SOBIYA.js.map +1 -0
- package/dist/chunk-TH5RASJS.js +97 -0
- package/dist/chunk-TH5RASJS.js.map +1 -0
- package/dist/{chunk-LUB7QWGU.js → chunk-VIJ2HWPZ.js} +5 -159
- package/dist/chunk-VIJ2HWPZ.js.map +1 -0
- package/dist/chunk-VQ63T7CJ.js +22 -0
- package/dist/chunk-VQ63T7CJ.js.map +1 -0
- package/dist/chunk-XDVGFHK4.js +50 -0
- package/dist/chunk-XDVGFHK4.js.map +1 -0
- package/dist/chunk-XI4BQY5T.js +188 -0
- package/dist/chunk-XI4BQY5T.js.map +1 -0
- package/dist/chunk-ZVWUPYSV.js +170 -0
- package/dist/chunk-ZVWUPYSV.js.map +1 -0
- package/dist/detail-page-header.js +1 -1
- package/dist/file-viewer-dialog.js +3 -9
- package/dist/file-viewer-dialog.js.map +1 -1
- package/dist/floor-switcher.js +5 -9
- package/dist/floor-switcher.js.map +1 -1
- package/dist/{layout-canvas-view-DOjyUNJH.d.ts → layout-canvas-view-C3u96xu4.d.ts} +5 -1
- package/dist/layout-canvas-view.d.ts +1 -1
- package/dist/layout-canvas-view.js +8 -11
- package/dist/lib/dateDisplay.d.ts +16 -1
- package/dist/lib/dateDisplay.js +1 -1
- package/dist/notification-sidebar-preview.js +1 -1
- package/dist/page-list-chrome.d.ts +3 -1
- package/dist/page-list-chrome.js +5 -3
- package/dist/page-list-loading.js +5 -3
- package/dist/page-list-loading.js.map +1 -1
- package/dist/platform-support-message-composer.js +2 -10
- package/dist/platform-support-message-composer.js.map +1 -1
- package/dist/sidebar-Dzvrjr69.d.ts +85 -0
- package/dist/styles/theme.css +52 -2
- package/dist/styles/theme.css.map +1 -1
- package/dist/support-presence-status.js +1 -1
- package/dist/theme-appearance-control.js +2 -1
- package/dist/theme-appearance-control.js.map +1 -1
- package/dist/ui/accordion.d.ts +9 -0
- package/dist/ui/accordion.js +4 -0
- package/dist/ui/accordion.js.map +1 -0
- package/dist/ui/calendar.d.ts +6 -0
- package/dist/ui/calendar.js +4 -0
- package/dist/ui/calendar.js.map +1 -0
- package/dist/ui/carousel.d.ts +22 -0
- package/dist/ui/carousel.js +5 -0
- package/dist/ui/carousel.js.map +1 -0
- package/dist/ui/chart.d.ts +42 -0
- package/dist/ui/chart.js +229 -0
- package/dist/ui/chart.js.map +1 -0
- package/dist/ui/command.d.ts +19 -0
- package/dist/ui/command.js +5 -0
- package/dist/ui/command.js.map +1 -0
- package/dist/ui/context-menu.d.ts +27 -0
- package/dist/ui/context-menu.js +4 -0
- package/dist/ui/context-menu.js.map +1 -0
- package/dist/ui/form.d.ts +27 -0
- package/dist/ui/form.js +5 -0
- package/dist/ui/form.js.map +1 -0
- package/dist/ui/input-otp.d.ts +13 -0
- package/dist/ui/input-otp.js +4 -0
- package/dist/ui/input-otp.js.map +1 -0
- package/dist/ui/menubar.d.ts +28 -0
- package/dist/ui/menubar.js +4 -0
- package/dist/ui/menubar.js.map +1 -0
- package/dist/ui/navigation-menu.d.ts +17 -0
- package/dist/ui/navigation-menu.js +4 -0
- package/dist/ui/navigation-menu.js.map +1 -0
- package/dist/ui/resizable.d.ts +10 -0
- package/dist/ui/resizable.js +4 -0
- package/dist/ui/resizable.js.map +1 -0
- package/dist/ui/sidebar.d.ts +7 -0
- package/dist/ui/sidebar.js +9 -0
- package/dist/ui/sidebar.js.map +1 -0
- package/dist/ui.d.ts +36 -270
- package/dist/ui.js +2471 -6
- package/dist/ui.js.map +1 -1
- package/package.json +15 -5
- package/dist/chunk-CKCXQBHQ.js.map +0 -1
- package/dist/chunk-F7MU5T46.js +0 -5146
- package/dist/chunk-F7MU5T46.js.map +0 -1
- package/dist/chunk-H7EX6B6N.js.map +0 -1
- package/dist/chunk-LUB7QWGU.js.map +0 -1
- package/dist/chunk-OTSA5ROL.js.map +0 -1
- package/dist/chunk-PBNBLCC2.js +0 -84
- package/dist/chunk-PBNBLCC2.js.map +0 -1
- package/dist/chunk-RV5PMZYZ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/booking/booking-schedule-calendars.tsx"],"names":[],"mappings":"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","file":"booking-schedule-calendars.js","sourcesContent":["import { useEffect, useState } from \"react\";\nimport { ChevronLeft, ChevronRight, Info } from \"lucide-react\";\nimport {\n MIN_MONTH,\n MIN_WEEK_START,\n PRICING_TODAY,\n addDays,\n addMonthsYm,\n currentMonthYm,\n currentWeekStart,\n diffDays,\n localDateYmd,\n monthCount,\n monthLabel,\n todayLocalYmd,\n weekCountBetween,\n weekRangeLabel,\n type BookingState,\n} from \"../lib/booking-schedule\";\nimport {\n TimeField,\n addMinutesToHm,\n formatTimeForDisplay,\n hourlyEndTimes,\n snapScheduleEndTime,\n} from \"../ui/time-field\";\nimport { CheckboxField, cn } from \"../ui\";\n\nconst MONTH_NAMES = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nfunction dayStr(d: Date): string {\n return localDateYmd(d);\n}\n\n/** Nav row, weekday row, and cells share hairlines so the calendar reads as one framed block. */\nconst calendarBlockClass = \"flex flex-col overflow-hidden rounded-xl border border-border/60\";\nconst calendarNavRowClass =\n \"flex items-center justify-between border-b border-border/40 px-2 py-1.5\";\nconst calendarWeekdayRowClass = \"grid grid-cols-7 border-b border-border/40\";\nconst calendarWeekdayCellClass =\n \"flex h-9 items-center justify-center border-r border-border/40 text-[10px] font-medium text-muted-foreground last:border-r-0\";\n\n/** Hairlines between cells of a fixed-column grid, without an outer frame. */\nfunction cellGridLines(index: number, total: number, cols: number): string {\n return cn(\n \"border-border/40\",\n index % cols !== cols - 1 && \"border-r\",\n index < total - cols && \"border-b\",\n );\n}\n\nfunction weekEndMonday(weekFrom: string, weekCount: number): string {\n if (!weekFrom || weekCount < 1) return weekFrom;\n return addDays(weekFrom, (weekCount - 1) * 7);\n}\n\n/** Returns dates for a Mon-anchored calendar grid (5 or 6 rows). */\nfunction getCalendarGrid(year: number, month: number): Date[] {\n const firstDay = new Date(year, month, 1);\n const dow = firstDay.getDay();\n const startOffset = dow === 0 ? -6 : 1 - dow;\n const days: Date[] = [];\n for (let i = 0; i < 35; i++) {\n days.push(new Date(year, month, 1 + startOffset + i));\n }\n if (days[days.length - 1] < new Date(year, month + 1, 0)) {\n for (let i = 35; i < 42; i++) {\n days.push(new Date(year, month, 1 + startOffset + i));\n }\n }\n return days;\n}\n\nexport function ScheduleFieldLabel({ children }: { children: React.ReactNode }) {\n return <label className=\"text-xs font-medium text-muted-foreground\">{children}</label>;\n}\n\nexport function ScheduleInfoBanner({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex items-start gap-2 rounded-xl border border-blue-100 bg-blue-50 px-3 py-2.5 dark:border-blue-900/50 dark:bg-blue-950/40\">\n <Info size={13} className=\"mt-0.5 shrink-0 text-blue-400\" />\n <span className=\"text-xs leading-relaxed text-blue-700 dark:text-blue-400\">{children}</span>\n </div>\n );\n}\n\nexport function ScheduleStepper({\n value,\n min = 1,\n max = 100,\n onChange,\n}: {\n value: number;\n min?: number;\n max?: number;\n onChange: (v: number) => void;\n}) {\n return (\n <div className=\"flex w-32 items-center overflow-hidden rounded-xl border border-border bg-card\">\n <button\n type=\"button\"\n onClick={() => onChange(Math.max(min, value - 1))}\n className=\"flex h-9 w-9 shrink-0 items-center justify-center border-r border-border text-sm text-muted-foreground hover:bg-accent\"\n >\n −\n </button>\n <span className=\"flex-1 text-center text-sm font-medium text-foreground\">{value}</span>\n <button\n type=\"button\"\n onClick={() => onChange(Math.min(max, value + 1))}\n className=\"flex h-9 w-9 shrink-0 items-center justify-center border-l border-border text-sm text-muted-foreground hover:bg-accent\"\n >\n +\n </button>\n </div>\n );\n}\n\nexport function WeekCalendarPicker({\n weekFrom,\n weekCount,\n rangeMode,\n onChange,\n flat = false,\n}: {\n weekFrom: string;\n weekCount: number;\n rangeMode: boolean;\n onChange: (weekFrom: string, weekCount: number) => void;\n flat?: boolean;\n}) {\n const initDate = new Date((weekFrom || MIN_WEEK_START) + \"T00:00:00\");\n const [calYear, setCalYear] = useState(initDate.getFullYear());\n const [calMonth, setCalMonth] = useState(initDate.getMonth());\n const [hoverMon, setHoverMon] = useState<string | null>(null);\n const [phase, setPhase] = useState<\"from\" | \"to\">(\"from\");\n\n useEffect(() => {\n setPhase(\"from\");\n }, [rangeMode]);\n\n const days = getCalendarGrid(calYear, calMonth);\n const minDate = new Date((currentWeekStart() || PRICING_TODAY) + \"T00:00:00\");\n const endMon = weekEndMonday(weekFrom, weekCount);\n\n const [dispFrom, dispTo] = (() => {\n if (!rangeMode || !weekFrom) return [weekFrom, endMon];\n if (phase === \"to\" && hoverMon) {\n if (hoverMon >= weekFrom) return [weekFrom, hoverMon];\n return [hoverMon, hoverMon];\n }\n return [weekFrom, endMon];\n })();\n\n const previewCount =\n rangeMode && phase === \"to\" && hoverMon && hoverMon >= weekFrom\n ? weekCountBetween(weekFrom, hoverMon)\n : weekCount;\n\n const prevMonth = () => {\n if (calMonth === 0) {\n setCalYear((y) => y - 1);\n setCalMonth(11);\n } else setCalMonth((m) => m - 1);\n };\n const nextMonth = () => {\n if (calMonth === 11) {\n setCalYear((y) => y + 1);\n setCalMonth(0);\n } else setCalMonth((m) => m + 1);\n };\n\n const weeks: Date[][] = [];\n for (let i = 0; i < days.length; i += 7) weeks.push(days.slice(i, i + 7));\n\n const handleWeekClick = (monStr: string) => {\n if (!rangeMode) {\n onChange(monStr, 1);\n return;\n }\n if (phase === \"from\") {\n onChange(monStr, 1);\n setPhase(\"to\");\n return;\n }\n if (monStr >= weekFrom) {\n onChange(weekFrom, weekCountBetween(weekFrom, monStr));\n setPhase(\"from\");\n return;\n }\n onChange(monStr, 1);\n setPhase(\"to\");\n };\n\n return (\n <div\n className={cn(\n \"flex select-none flex-col\",\n flat ? \"gap-3\" : \"gap-1 rounded-2xl border border-border bg-card p-3\",\n )}\n >\n {rangeMode ? (\n <div\n className={cn(\n \"flex items-center gap-2 px-1 text-[11px] font-medium\",\n phase === \"to\" ? \"text-blue-600 dark:text-blue-400\" : \"text-muted-foreground\",\n )}\n >\n {phase === \"from\" ? (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/50\" />\n Click the first week\n </>\n ) : (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 animate-pulse rounded-full bg-blue-500\" />\n Click the last week\n <button\n type=\"button\"\n onClick={() => {\n onChange(weekFrom, 1);\n setPhase(\"to\");\n }}\n className=\"ml-auto text-[10px] text-blue-400 underline underline-offset-2 hover:text-blue-600 dark:text-blue-400\"\n >\n Reset\n </button>\n </>\n )}\n </div>\n ) : null}\n\n <div className={calendarBlockClass}>\n <div className={calendarNavRowClass}>\n <button\n type=\"button\"\n onClick={prevMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-muted-foreground\"\n >\n <ChevronLeft size={12} strokeWidth={2.25} />\n </button>\n <span className=\"text-xs font-semibold text-muted-foreground\">\n {MONTH_NAMES[calMonth]} {calYear}\n </span>\n <button\n type=\"button\"\n onClick={nextMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-muted-foreground\"\n >\n <ChevronRight size={12} strokeWidth={2.25} />\n </button>\n </div>\n\n <div className={calendarWeekdayRowClass}>\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className={calendarWeekdayCellClass}>\n {d}\n </span>\n ))}\n </div>\n\n <div className=\"flex flex-col divide-y divide-border/40\">\n {weeks.map((week, wi) => {\n const mondayDate = week[0];\n const monStr = dayStr(mondayDate);\n const isSelectable = mondayDate >= minDate;\n const isStartWeek = Boolean(weekFrom) && monStr === dispFrom;\n const isEndWeek = Boolean(weekFrom) && monStr === dispTo;\n const inRange =\n rangeMode && Boolean(weekFrom) && monStr >= dispFrom && monStr <= dispTo;\n const isSelected = rangeMode ? inRange : monStr === weekFrom;\n\n return (\n <div\n key={wi}\n className={cn(\n \"relative flex cursor-pointer transition-colors\",\n isSelected && (isStartWeek || isEndWeek) && \"bg-blue-100/80\",\n isSelected && !isStartWeek && !isEndWeek && \"bg-blue-50\",\n isSelectable ? \"hover:bg-accent/60\" : \"cursor-not-allowed opacity-60\",\n )}\n onMouseEnter={() => isSelectable && setHoverMon(monStr)}\n onMouseLeave={() => setHoverMon(null)}\n onClick={() => isSelectable && handleWeekClick(monStr)}\n >\n {week.map((d, di) => {\n const isCurrentMonth = d.getMonth() === calMonth;\n const isMon = di === 0;\n const isSun = di === 6;\n const filled = rangeMode\n ? (isStartWeek && isMon) || (isEndWeek && isSun)\n : isSelected && isMon;\n\n return (\n <div\n key={di}\n className=\"relative z-10 flex h-9 flex-1 items-center justify-center border-r border-border/40 last:border-r-0\"\n >\n <span\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-full text-[11px] transition-colors\",\n isCurrentMonth ? \"text-muted-foreground\" : \"text-muted-foreground/50\",\n !isSelectable && \"text-muted-foreground/40\",\n isSelected && \"font-medium text-blue-700 dark:text-blue-300\",\n filled && \"bg-blue-500 font-semibold text-white shadow-sm\",\n )}\n >\n {d.getDate()}\n </span>\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n\n <p className=\"mt-1 text-center text-[10px] text-muted-foreground\">\n {rangeMode\n ? phase === \"from\"\n ? \"Click a week to start the range\"\n : previewCount > 1\n ? `${previewCount} weeks · ${weekRangeLabel(dispFrom, previewCount)}`\n : \"Click a week to finish the range\"\n : weekFrom\n ? `Selected week of ${formatDateLabel(weekFrom)}`\n : \"Click any row to select that week\"}\n </p>\n </div>\n );\n}\n\nexport function MonthRangeCalendar({\n monthFrom,\n monthTo,\n onChange,\n rangeMode,\n flat = false,\n}: {\n monthFrom: string;\n monthTo: string;\n onChange: (from: string, to: string) => void;\n rangeMode: boolean;\n flat?: boolean;\n}) {\n const initYear = monthFrom ? parseInt(monthFrom.split(\"-\")[0], 10) : new Date().getFullYear();\n const [calYear, setCalYear] = useState(initYear);\n const [phase, setPhase] = useState<\"from\" | \"to\">(\"from\");\n const [hoverYm, setHoverYm] = useState<string | null>(null);\n\n useEffect(() => {\n setPhase(\"from\");\n }, [rangeMode]);\n\n const ABBR = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n const toYm = (y: number, m: number) => `${y}-${String(m + 1).padStart(2, \"0\")}`;\n const minYm = currentMonthYm() || `${new Date().getFullYear()}-01`;\n\n const [dispFrom, dispTo] = (() => {\n if (!rangeMode) return [monthFrom, monthFrom || monthTo];\n if (phase === \"to\" && hoverYm) {\n if (hoverYm >= monthFrom) return [monthFrom, hoverYm];\n return [hoverYm, hoverYm];\n }\n return [monthFrom, monthTo];\n })();\n const isSingle = dispFrom === dispTo;\n\n const handleClick = (ymStr: string) => {\n if (ymStr < minYm) return;\n if (!rangeMode) {\n onChange(ymStr, ymStr);\n return;\n }\n if (phase === \"from\") {\n onChange(ymStr, ymStr);\n setPhase(\"to\");\n } else if (ymStr >= monthFrom) {\n onChange(monthFrom, ymStr);\n setPhase(\"from\");\n } else {\n onChange(ymStr, ymStr);\n setPhase(\"to\");\n }\n };\n\n const actualCount = monthCount(monthFrom, monthTo);\n const previewCount = monthCount(dispFrom, dispTo);\n\n return (\n <div\n className={cn(\n \"select-none\",\n flat ? \"flex flex-col gap-5\" : \"overflow-hidden rounded-2xl border border-border bg-card\",\n )}\n >\n {rangeMode ? (\n <div\n className={cn(\n \"flex items-center gap-2 text-[11px] font-medium transition-colors\",\n flat\n ? phase === \"to\"\n ? \"text-blue-600 dark:text-blue-400\"\n : \"text-muted-foreground\"\n : cn(\n \"px-4 py-2 text-[10px]\",\n phase === \"to\"\n ? \"bg-blue-50 text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\"\n : \"bg-transparent text-muted-foreground\",\n ),\n )}\n >\n {phase === \"from\" ? (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/50\" />\n Click the first month\n </>\n ) : (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 animate-pulse rounded-full bg-blue-500\" />\n Click the last month\n <button\n type=\"button\"\n onClick={() => {\n onChange(monthFrom, monthFrom);\n setPhase(\"to\");\n }}\n className=\"ml-auto text-[10px] text-blue-400 underline underline-offset-2 hover:text-blue-600 dark:text-blue-400\"\n >\n Reset\n </button>\n </>\n )}\n </div>\n ) : null}\n\n <div className={cn(calendarBlockClass, !flat && \"mx-3 mb-3\")}>\n <div className={calendarNavRowClass}>\n <button\n type=\"button\"\n onClick={() => setCalYear((y) => y - 1)}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-muted-foreground\"\n >\n <ChevronLeft size={12} strokeWidth={2.25} />\n </button>\n <span className=\"text-xs font-semibold text-muted-foreground\">{calYear}</span>\n <button\n type=\"button\"\n onClick={() => setCalYear((y) => y + 1)}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-muted-foreground\"\n >\n <ChevronRight size={12} strokeWidth={2.25} />\n </button>\n </div>\n\n <div className=\"grid grid-cols-4\">\n {ABBR.map((label, i) => {\n const ymStr = toYm(calYear, i);\n const disabled = ymStr < minYm;\n const inRange = !disabled && ymStr >= dispFrom && ymStr <= dispTo;\n const isFrom = ymStr === dispFrom;\n const isTo = ymStr === dispTo;\n const showStrip = rangeMode && inRange && !isSingle;\n const sLeft = isFrom ? \"left-1/2\" : \"left-0\";\n const sRight = isTo ? \"right-1/2\" : \"right-0\";\n const filled = (isFrom || isTo || (!rangeMode && ymStr === monthFrom)) && !disabled;\n\n return (\n <div\n key={i}\n className={cn(\n \"relative\",\n cellGridLines(i, 12, 4),\n flat ? \"h-14\" : \"h-12\",\n disabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n )}\n onMouseEnter={() => !disabled && setHoverYm(ymStr)}\n onMouseLeave={() => setHoverYm(null)}\n onClick={() => handleClick(ymStr)}\n >\n {showStrip ? (\n <div className={`absolute bottom-1.5 top-1.5 bg-blue-100 ${sLeft} ${sRight}`} />\n ) : null}\n <div\n className={cn(\n \"relative z-10 flex w-full items-center justify-center\",\n flat ? \"h-14\" : \"h-12\",\n )}\n >\n <span\n className={`flex h-9 w-9 items-center justify-center rounded-full text-xs font-medium transition-all duration-100\n ${\n filled\n ? \"bg-blue-500 text-white shadow-md shadow-blue-200\"\n : inRange\n ? \"text-blue-700 dark:text-blue-400\"\n : !disabled\n ? \"text-muted-foreground hover:bg-accent\"\n : \"text-muted-foreground/60\"\n }`}\n >\n {label}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <div\n className={cn(\n \"flex items-center justify-between transition-colors\",\n flat\n ? \"border-t border-border/70 pt-4 text-xs\"\n : cn(\n \"border-t px-4 py-2.5\",\n rangeMode && phase === \"from\" && actualCount > 0\n ? \"border-border bg-muted\"\n : \"border-transparent\",\n ),\n )}\n >\n {!rangeMode && monthFrom ? (\n <>\n <span className=\"text-[10px] text-muted-foreground\">{monthLabel(monthFrom)}</span>\n <span className=\"rounded-full bg-blue-50 px-2 py-0.5 text-[10px] font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n 1 month\n </span>\n </>\n ) : rangeMode && phase === \"from\" && actualCount > 0 ? (\n <>\n <span className=\"text-[10px] text-muted-foreground\">\n {monthLabel(monthFrom)} → {monthLabel(monthTo)}\n </span>\n <span className=\"rounded-full bg-blue-50 px-2 py-0.5 text-[10px] font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n {actualCount} month{actualCount !== 1 ? \"s\" : \"\"}\n </span>\n </>\n ) : rangeMode && phase === \"to\" ? (\n <>\n <span className=\"text-[10px] text-muted-foreground\">\n {hoverYm && hoverYm >= monthFrom\n ? `${monthLabel(monthFrom)} → ${monthLabel(hoverYm)}`\n : `Start: ${monthLabel(monthFrom)}`}\n </span>\n {hoverYm && hoverYm >= monthFrom && previewCount > 0 ? (\n <span className=\"text-[10px] font-medium text-blue-400\">\n {previewCount} month{previewCount !== 1 ? \"s\" : \"\"}\n </span>\n ) : null}\n </>\n ) : (\n <span className=\"text-[10px] text-muted-foreground/60\">\n {rangeMode ? \"Select a month range\" : \"Click a month to book\"}\n </span>\n )}\n </div>\n </div>\n );\n}\n\nexport function MonthPeriodPicker({\n booking,\n onChange,\n flat = true,\n}: {\n booking: BookingState;\n onChange: (patch: Partial<BookingState>) => void;\n flat?: boolean;\n}) {\n const [rangeMode, setRangeMode] = useState(\n () => Boolean(booking.monthFrom && booking.monthTo && booking.monthFrom !== booking.monthTo),\n );\n\n useEffect(() => {\n if (booking.monthFrom && booking.monthTo && booking.monthFrom !== booking.monthTo) {\n setRangeMode(true);\n }\n }, [booking.monthFrom, booking.monthTo]);\n\n const monthCountSelected = monthCount(booking.monthFrom, booking.monthTo);\n\n return (\n <div className={cn(\"flex flex-col\", flat ? \"gap-5\" : \"gap-3\")}>\n <ScheduleInfoBanner>\n Current month is available at full price, or choose a future month.\n </ScheduleInfoBanner>\n\n <CheckboxField\n size=\"sm\"\n label=\"Select multiple months\"\n className=\"w-fit items-center\"\n checked={rangeMode}\n onCheckedChange={(checked) => {\n setRangeMode(checked);\n const from = booking.monthFrom || currentMonthYm();\n if (!checked) {\n onChange({ monthFrom: from, monthTo: from });\n return;\n }\n const to =\n booking.monthTo && booking.monthTo > from ? booking.monthTo : addMonthsYm(from, 1);\n onChange({ monthFrom: from, monthTo: to });\n }}\n />\n\n <ScheduleFieldLabel>{rangeMode ? \"Select month range\" : \"Select month\"}</ScheduleFieldLabel>\n <MonthRangeCalendar\n flat={flat}\n rangeMode={rangeMode}\n monthFrom={booking.monthFrom}\n monthTo={booking.monthTo}\n onChange={(from, to) => onChange({ monthFrom: from, monthTo: to })}\n />\n\n {monthCountSelected > 0 ? (\n <div className=\"flex items-center justify-between rounded-xl border border-border bg-muted px-3 py-2.5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-[10px] text-muted-foreground\">Period</span>\n <span className=\"text-xs font-medium text-muted-foreground\">\n {rangeMode && monthCountSelected > 1\n ? `${monthLabel(booking.monthFrom)} → ${monthLabel(booking.monthTo)}`\n : monthLabel(booking.monthFrom)}\n </span>\n </div>\n <span className=\"rounded-lg bg-blue-50 px-2 py-1 text-xs font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n {monthCountSelected} month{monthCountSelected !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function WeekPeriodPicker({\n booking,\n onChange,\n flat = true,\n}: {\n booking: BookingState;\n onChange: (patch: Partial<BookingState>) => void;\n flat?: boolean;\n}) {\n const [rangeMode, setRangeMode] = useState(() => booking.weekCount > 1);\n\n useEffect(() => {\n if (booking.weekCount > 1) setRangeMode(true);\n }, [booking.weekCount]);\n\n const rangeStr = weekRangeLabel(booking.weekFrom, booking.weekCount);\n\n return (\n <div className={cn(\"flex flex-col\", flat ? \"gap-5\" : \"gap-3\")}>\n <ScheduleInfoBanner>\n Current week is available at full price, or choose a future week.\n </ScheduleInfoBanner>\n\n <CheckboxField\n size=\"sm\"\n label=\"Select multiple weeks\"\n className=\"w-fit items-center\"\n checked={rangeMode}\n onCheckedChange={(checked) => {\n setRangeMode(checked);\n const from = booking.weekFrom || currentWeekStart();\n if (!checked) {\n onChange({ weekFrom: from, weekCount: 1 });\n return;\n }\n onChange({\n weekFrom: from,\n weekCount: Math.max(2, booking.weekCount),\n });\n }}\n />\n\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>{rangeMode ? \"Select week range\" : \"Select week\"}</ScheduleFieldLabel>\n <WeekCalendarPicker\n flat={flat}\n rangeMode={rangeMode}\n weekFrom={booking.weekFrom}\n weekCount={booking.weekCount}\n onChange={(weekFrom, weekCount) => onChange({ weekFrom, weekCount })}\n />\n </div>\n\n {booking.weekFrom && booking.weekCount > 0 ? (\n <div className=\"flex items-center justify-between rounded-xl border border-border bg-muted px-3 py-2.5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-[10px] text-muted-foreground\">Period</span>\n <span className=\"text-xs font-medium text-muted-foreground\">{rangeStr}</span>\n </div>\n <span className=\"rounded-lg bg-blue-50 px-2 py-1 text-xs font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n {booking.weekCount} week{booking.weekCount !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction formatDateLabel(iso: string): string {\n if (!iso) return \"—\";\n return new Date(iso + \"T00:00:00\").toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\nfunction isBillableDay(day: string, start: string, end: string): boolean {\n return Boolean(start && end && day >= start && day < end);\n}\n\nexport function DayCalendarPicker({\n selectedDate,\n onChange,\n minDate = todayLocalYmd(),\n flat = false,\n}: {\n selectedDate: string;\n onChange: (date: string) => void;\n minDate?: string;\n flat?: boolean;\n}) {\n const initDate = new Date((selectedDate || minDate) + \"T00:00:00\");\n const [calYear, setCalYear] = useState(initDate.getFullYear());\n const [calMonth, setCalMonth] = useState(initDate.getMonth());\n\n const days = getCalendarGrid(calYear, calMonth);\n\n const prevMonth = () => {\n if (calMonth === 0) {\n setCalYear((y) => y - 1);\n setCalMonth(11);\n } else setCalMonth((m) => m - 1);\n };\n const nextMonth = () => {\n if (calMonth === 11) {\n setCalYear((y) => y + 1);\n setCalMonth(0);\n } else setCalMonth((m) => m + 1);\n };\n\n return (\n <div\n className={cn(\n \"flex select-none flex-col\",\n flat ? \"gap-3\" : \"gap-1 rounded-2xl border border-border bg-card p-3\",\n )}\n >\n <div className={calendarBlockClass}>\n <div className={calendarNavRowClass}>\n <button\n type=\"button\"\n onClick={prevMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent\"\n >\n <ChevronLeft size={12} strokeWidth={2.25} />\n </button>\n <span className=\"text-xs font-semibold text-muted-foreground\">\n {MONTH_NAMES[calMonth]} {calYear}\n </span>\n <button\n type=\"button\"\n onClick={nextMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent\"\n >\n <ChevronRight size={12} strokeWidth={2.25} />\n </button>\n </div>\n\n <div className={calendarWeekdayRowClass}>\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className={calendarWeekdayCellClass}>\n {d}\n </span>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7\">\n {days.map((d, i) => {\n const ds = dayStr(d);\n const isCurrentMonth = d.getMonth() === calMonth;\n const isSelectable = ds >= minDate;\n const isSelected = ds === selectedDate;\n\n return (\n <button\n key={ds}\n type=\"button\"\n disabled={!isSelectable}\n onClick={() => isSelectable && onChange(ds)}\n className={cn(\n \"flex h-9 items-center justify-center\",\n cellGridLines(i, days.length, 7),\n !isSelectable && \"cursor-not-allowed\",\n )}\n >\n <span\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-full text-[11px] transition-colors\",\n isSelectable && isCurrentMonth && \"text-foreground hover:bg-accent\",\n isSelectable && !isCurrentMonth && \"text-muted-foreground hover:bg-accent\",\n !isSelectable && isCurrentMonth && \"text-muted-foreground/40\",\n !isSelectable && !isCurrentMonth && \"text-muted-foreground/30\",\n isSelected && \"bg-blue-500 font-semibold text-white shadow-sm\",\n )}\n >\n {d.getDate()}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n\n {selectedDate ? (\n <p className=\"mt-1 text-center text-[10px] text-muted-foreground\">\n Selected {formatDateLabel(selectedDate)}\n </p>\n ) : (\n <p className=\"mt-1 text-center text-[10px] text-muted-foreground\">Click a day to book</p>\n )}\n </div>\n );\n}\n\nexport function DayRangeCalendar({\n startDate,\n endDate,\n onChange,\n minDate = currentWeekStart(),\n flat = false,\n}: {\n startDate: string;\n endDate: string;\n onChange: (start: string, end: string) => void;\n minDate?: string;\n flat?: boolean;\n}) {\n const initDate = new Date((startDate || minDate) + \"T00:00:00\");\n const [calYear, setCalYear] = useState(initDate.getFullYear());\n const [calMonth, setCalMonth] = useState(initDate.getMonth());\n const [phase, setPhase] = useState<\"from\" | \"to\">(\"from\");\n const [hoverDay, setHoverDay] = useState<string | null>(null);\n\n const days = getCalendarGrid(calYear, calMonth);\n const lastBillableDay = endDate ? addDays(endDate, -1) : \"\";\n\n const [dispStart, dispEnd] = (() => {\n if (phase === \"to\" && hoverDay && startDate) {\n if (hoverDay >= startDate) return [startDate, addDays(hoverDay, 1)];\n return [hoverDay, addDays(hoverDay, 1)];\n }\n return [startDate, endDate];\n })();\n\n const dayCount = startDate && endDate ? diffDays(startDate, endDate) : 0;\n\n const handleClick = (ds: string) => {\n if (ds < minDate) return;\n if (phase === \"from\") {\n onChange(ds, addDays(ds, 1));\n setPhase(\"to\");\n return;\n }\n if (ds < startDate) {\n onChange(ds, addDays(ds, 1));\n setPhase(\"to\");\n return;\n }\n onChange(startDate, addDays(ds, 1));\n setPhase(\"from\");\n };\n\n const prevMonth = () => {\n if (calMonth === 0) {\n setCalYear((y) => y - 1);\n setCalMonth(11);\n } else setCalMonth((m) => m - 1);\n };\n const nextMonth = () => {\n if (calMonth === 11) {\n setCalYear((y) => y + 1);\n setCalMonth(0);\n } else setCalMonth((m) => m + 1);\n };\n\n return (\n <div\n className={cn(\n \"flex select-none flex-col\",\n flat ? \"gap-3\" : \"gap-1 rounded-2xl border border-border bg-card p-3\",\n )}\n >\n <div\n className={cn(\n \"flex items-center gap-2 px-1 text-[11px] font-medium\",\n phase === \"to\" ? \"text-blue-600 dark:text-blue-400\" : \"text-muted-foreground\",\n )}\n >\n {phase === \"from\" ? (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/50\" />\n Click the first day\n </>\n ) : (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 animate-pulse rounded-full bg-blue-500\" />\n Click the last day\n <button\n type=\"button\"\n onClick={() => {\n onChange(startDate, addDays(startDate, 1));\n setPhase(\"to\");\n }}\n className=\"ml-auto text-[10px] text-blue-400 underline underline-offset-2 hover:text-blue-600 dark:text-blue-400\"\n >\n Reset\n </button>\n </>\n )}\n </div>\n\n <div className={calendarBlockClass}>\n <div className={calendarNavRowClass}>\n <button\n type=\"button\"\n onClick={prevMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent\"\n >\n <ChevronLeft size={12} strokeWidth={2.25} />\n </button>\n <span className=\"text-xs font-semibold text-muted-foreground\">\n {MONTH_NAMES[calMonth]} {calYear}\n </span>\n <button\n type=\"button\"\n onClick={nextMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent\"\n >\n <ChevronRight size={12} strokeWidth={2.25} />\n </button>\n </div>\n\n <div className={calendarWeekdayRowClass}>\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className={calendarWeekdayCellClass}>\n {d}\n </span>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7\">\n {days.map((d, i) => {\n const ds = dayStr(d);\n const isCurrentMonth = d.getMonth() === calMonth;\n const isSelectable = ds >= minDate;\n const inRange = isBillableDay(ds, dispStart, dispEnd);\n const isStart = ds === dispStart;\n const isEnd = ds === lastBillableDay && dispEnd && diffDays(dispStart, dispEnd) > 1;\n const isSingle =\n dispStart && dispEnd && diffDays(dispStart, dispEnd) === 1 && ds === dispStart;\n\n return (\n <button\n key={ds}\n type=\"button\"\n disabled={!isSelectable}\n onMouseEnter={() => isSelectable && setHoverDay(ds)}\n onMouseLeave={() => setHoverDay(null)}\n onClick={() => isSelectable && handleClick(ds)}\n className={cn(\n \"relative flex h-9 items-center justify-center\",\n cellGridLines(i, days.length, 7),\n !isSelectable && \"cursor-not-allowed\",\n )}\n >\n {inRange && !isSingle ? (\n <span\n className={cn(\n \"absolute inset-y-1.5 bg-blue-100\",\n isStart\n ? \"left-1/2 right-0 rounded-l-full\"\n : isEnd\n ? \"left-0 right-1/2 rounded-r-full\"\n : \"inset-x-0\",\n )}\n />\n ) : null}\n <span\n className={cn(\n \"relative z-10 flex h-8 w-8 items-center justify-center rounded-full text-[11px] transition-colors\",\n !inRange && isSelectable && isCurrentMonth && \"text-foreground hover:bg-accent\",\n !inRange &&\n isSelectable &&\n !isCurrentMonth &&\n \"text-muted-foreground hover:bg-accent\",\n !isSelectable && isCurrentMonth && \"text-muted-foreground/40\",\n !isSelectable && !isCurrentMonth && \"text-muted-foreground/30\",\n inRange && \"font-medium text-blue-700 dark:text-blue-300\",\n (isStart || isEnd || isSingle) &&\n \"bg-blue-500 font-semibold text-white shadow-sm\",\n )}\n >\n {d.getDate()}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n\n <div className=\"flex items-center justify-between border-t border-border/70 pt-3 text-xs\">\n {dayCount > 0 ? (\n <>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatDateLabel(startDate)}\n {dayCount > 1 ? ` → ${formatDateLabel(lastBillableDay)}` : \"\"}\n </span>\n <span className=\"rounded-full bg-blue-50 px-2 py-0.5 text-[10px] font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n {dayCount} day{dayCount !== 1 ? \"s\" : \"\"}\n </span>\n </>\n ) : (\n <span className=\"text-[10px] text-muted-foreground/60\">Select a date range</span>\n )}\n </div>\n </div>\n );\n}\n\nexport function DayPeriodPicker({\n booking,\n onChange,\n flat = true,\n}: {\n booking: BookingState;\n onChange: (patch: Partial<BookingState>) => void;\n flat?: boolean;\n}) {\n const oneDay = booking.oneDayBooking ?? true;\n const dayCount = oneDay ? 1 : diffDays(booking.startDate, booking.endDate);\n\n return (\n <div className={cn(\"flex flex-col\", flat ? \"gap-5\" : \"gap-3\")}>\n <CheckboxField\n size=\"sm\"\n label=\"Select a date range\"\n className=\"w-fit items-center\"\n checked={!oneDay}\n onCheckedChange={(checked) => {\n const start = booking.startDate || todayLocalYmd();\n if (!checked) {\n onChange({ oneDayBooking: true, startDate: start, endDate: addDays(start, 1) });\n return;\n }\n const end =\n booking.endDate && booking.endDate > start && diffDays(start, booking.endDate) > 1\n ? booking.endDate\n : addDays(start, 7);\n onChange({ oneDayBooking: false, startDate: start, endDate: end });\n }}\n />\n\n {oneDay ? (\n <DayCalendarPicker\n flat={flat}\n selectedDate={booking.startDate}\n onChange={(v) => onChange({ startDate: v, endDate: addDays(v, 1) })}\n />\n ) : (\n <DayRangeCalendar\n flat={flat}\n startDate={booking.startDate}\n endDate={booking.endDate}\n onChange={(start, end) => onChange({ startDate: start, endDate: end })}\n />\n )}\n\n {dayCount > 0 ? (\n <div className=\"flex items-center justify-between rounded-xl border border-border bg-muted px-3 py-2.5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-[10px] text-muted-foreground\">Period</span>\n <span className=\"text-xs font-medium text-muted-foreground\">\n {oneDay\n ? formatDateLabel(booking.startDate)\n : `${formatDateLabel(booking.startDate)} → ${formatDateLabel(addDays(booking.endDate, -1))}`}\n </span>\n </div>\n <span className=\"rounded-lg bg-blue-50 px-2 py-1 text-xs font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n {dayCount} day{dayCount !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n ) : null}\n </div>\n );\n}\n\ntype HourlyPickerStep = \"date\" | \"time\";\n\nfunction HourlyTimeRangeFields({\n fromTime,\n scheduleEndTime,\n chargeBy,\n timeFormat,\n toOptions,\n minTo,\n onFromChange,\n onToChange,\n vertical = false,\n}: {\n fromTime: string;\n scheduleEndTime: string;\n chargeBy: \"hours\" | \"minutes\";\n timeFormat: \"12h\" | \"24h\";\n toOptions: string[];\n minTo: string | undefined;\n onFromChange: (nextFrom: string) => void;\n onToChange: (v: string) => void;\n vertical?: boolean;\n}) {\n const fields = (\n <>\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>From</ScheduleFieldLabel>\n <TimeField value={fromTime} onChange={onFromChange} timeFormat={timeFormat} />\n </div>\n {vertical ? <div className=\"h-px bg-border\" aria-hidden /> : null}\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>To</ScheduleFieldLabel>\n {chargeBy === \"hours\" ? (\n <TimeField\n value={scheduleEndTime}\n onChange={onToChange}\n timeFormat={timeFormat}\n allowedTimes={toOptions}\n disabled={toOptions.length === 0}\n placeholder={toOptions.length === 0 ? \"No later times\" : \"Select time\"}\n />\n ) : (\n <TimeField\n value={scheduleEndTime}\n onChange={onToChange}\n timeFormat={timeFormat}\n minTime={minTo}\n disabled={!minTo}\n placeholder={minTo ? \"Select time\" : \"No later times\"}\n />\n )}\n </div>\n </>\n );\n\n if (vertical) {\n return <div className=\"flex flex-col gap-4\">{fields}</div>;\n }\n\n return <div className=\"grid grid-cols-2 gap-3\">{fields}</div>;\n}\n\nexport function HourlySchedulePicker({\n scheduleDate,\n scheduleTime,\n scheduleEndTime = \"\",\n onChange,\n timeFormat = \"24h\",\n flat = true,\n chargeBy = \"hours\",\n splitLayout = false,\n stackLayout = false,\n}: {\n scheduleDate: string;\n scheduleTime: string;\n scheduleEndTime?: string;\n onChange: (patch: {\n scheduleDate?: string;\n scheduleTime?: string;\n scheduleEndTime?: string;\n }) => void;\n timeFormat?: \"12h\" | \"24h\";\n flat?: boolean;\n chargeBy?: \"hours\" | \"minutes\";\n /** Calendar and time pickers side-by-side; From / To stacked on the right. */\n splitLayout?: boolean;\n /** Calendar on top; From / To stacked underneath (always visible). */\n stackLayout?: boolean;\n}) {\n const [step, setStep] = useState<HourlyPickerStep>(\"date\");\n const fromTime = scheduleTime || \"09:00\";\n const toOptions = chargeBy === \"hours\" ? hourlyEndTimes(fromTime) : [];\n const minTo = chargeBy === \"minutes\" ? addMinutesToHm(fromTime, 1) ?? undefined : undefined;\n\n const handleFromChange = (nextFrom: string) => {\n onChange({\n scheduleTime: nextFrom,\n scheduleEndTime: snapScheduleEndTime(nextFrom, scheduleEndTime, chargeBy),\n });\n };\n\n const handleDateChange = (v: string) => {\n const nextFrom = scheduleTime || \"09:00\";\n onChange({\n scheduleDate: v,\n scheduleTime: nextFrom,\n scheduleEndTime:\n scheduleEndTime || snapScheduleEndTime(nextFrom, \"\", chargeBy) || \"10:00\",\n });\n };\n\n const summary =\n scheduleDate && fromTime && scheduleEndTime ? (\n <div className=\"flex items-center justify-between rounded-xl border border-border bg-muted px-3 py-2.5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-[10px] text-muted-foreground\">Scheduled for</span>\n <span className=\"text-xs font-medium text-foreground\">\n {formatDateLabel(scheduleDate)} · {formatTimeForDisplay(fromTime, timeFormat)} →{\" \"}\n {formatTimeForDisplay(scheduleEndTime, timeFormat)}\n </span>\n </div>\n </div>\n ) : null;\n\n const timeFields = (\n <HourlyTimeRangeFields\n fromTime={fromTime}\n scheduleEndTime={scheduleEndTime}\n chargeBy={chargeBy}\n timeFormat={timeFormat}\n toOptions={toOptions}\n minTo={minTo}\n onFromChange={handleFromChange}\n onToChange={(v) => onChange({ scheduleEndTime: v })}\n vertical={splitLayout || stackLayout}\n />\n );\n\n if (stackLayout) {\n return (\n <div className={cn(\"flex flex-col gap-5\", flat ? \"\" : \"rounded-2xl border border-border bg-card p-4\")}>\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Date</ScheduleFieldLabel>\n <DayCalendarPicker\n flat={flat}\n selectedDate={scheduleDate}\n minDate={todayLocalYmd()}\n onChange={handleDateChange}\n />\n </div>\n {timeFields}\n {summary}\n </div>\n );\n }\n\n if (splitLayout) {\n return (\n <div className={cn(\"flex flex-col gap-5\", flat ? \"\" : \"rounded-2xl border border-border bg-card p-4\")}>\n <div className=\"flex flex-col gap-5 sm:flex-row sm:items-start\">\n <div className=\"min-w-0 flex-1\">\n <ScheduleFieldLabel>Date</ScheduleFieldLabel>\n <div className=\"mt-1.5\">\n <DayCalendarPicker\n flat={flat}\n selectedDate={scheduleDate}\n minDate={todayLocalYmd()}\n onChange={handleDateChange}\n />\n </div>\n </div>\n <div className=\"hidden w-px shrink-0 self-stretch bg-border sm:block\" aria-hidden />\n <div className=\"min-w-[9.5rem] shrink-0 sm:w-44\">\n <ScheduleFieldLabel>Time</ScheduleFieldLabel>\n <div className=\"mt-1.5\">{timeFields}</div>\n </div>\n </div>\n {summary}\n </div>\n );\n }\n\n return (\n <div className={cn(\"flex flex-col gap-5\", flat ? \"\" : \"rounded-2xl border border-border bg-card p-4\")}>\n <div className=\"flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground\">\n <span\n className={cn(\n step === \"date\" && \"font-semibold text-blue-600 dark:text-blue-400\",\n scheduleDate && step !== \"date\" && \"text-foreground\",\n )}\n >\n Date\n </span>\n <span aria-hidden>·</span>\n <span\n className={cn(\n step === \"time\" && \"font-semibold text-blue-600 dark:text-blue-400\",\n step !== \"time\" && \"text-muted-foreground/60\",\n )}\n >\n Time\n </span>\n </div>\n\n {step === \"date\" ? (\n <div className=\"flex flex-col gap-3\">\n <ScheduleFieldLabel>Pick a day</ScheduleFieldLabel>\n <DayCalendarPicker\n flat={flat}\n selectedDate={scheduleDate}\n minDate={todayLocalYmd()}\n onChange={(v) => {\n handleDateChange(v);\n setStep(\"time\");\n }}\n />\n <p className=\"text-center text-[11px] text-muted-foreground\">Select a day to set the time</p>\n </div>\n ) : (\n <div className=\"flex flex-col gap-5\">\n <button\n type=\"button\"\n onClick={() => setStep(\"date\")}\n className=\"inline-flex w-fit items-center gap-2 rounded-xl border border-border bg-muted/60 px-3 py-2 text-left transition-colors hover:bg-muted\"\n >\n <ChevronLeft size={14} className=\"shrink-0 text-muted-foreground\" />\n <div>\n <p className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">Date</p>\n <p className=\"text-sm font-medium text-foreground\">{formatDateLabel(scheduleDate)}</p>\n </div>\n <span className=\"ml-2 text-[11px] font-medium text-blue-600 dark:text-blue-400\">Change</span>\n </button>\n\n {timeFields}\n\n {summary}\n </div>\n )}\n </div>\n );\n}\n\nexport function ServiceNeededAtPicker({\n scheduleDate,\n scheduleTime,\n onChange,\n timeFormat = \"24h\",\n flat = true,\n stackLayout = true,\n minDate = todayLocalYmd(),\n preparationMinutes = 0,\n}: {\n scheduleDate: string;\n scheduleTime: string;\n onChange: (patch: {\n scheduleDate?: string;\n scheduleTime?: string;\n scheduleEndTime?: string;\n startDate?: string;\n endDate?: string;\n }) => void;\n timeFormat?: \"12h\" | \"24h\";\n flat?: boolean;\n stackLayout?: boolean;\n minDate?: string;\n /** When booking for today, earliest Needed-at is now + this many minutes. */\n preparationMinutes?: number;\n}) {\n const neededTime = scheduleTime || \"09:00\";\n const todayYmd = todayLocalYmd();\n const minTimeToday =\n preparationMinutes > 0 && scheduleDate === todayYmd\n ? minNeededTimeHm(preparationMinutes)\n : undefined;\n\n const syncNeeded = (date: string, time: string) => {\n let nextTime = time;\n if (preparationMinutes > 0 && date === todayYmd) {\n const floor = minNeededTimeHm(preparationMinutes);\n if (floor && nextTime < floor) nextTime = floor;\n }\n onChange({\n scheduleDate: date,\n scheduleTime: nextTime,\n scheduleEndTime: nextTime,\n startDate: date,\n endDate: date,\n });\n };\n\n const handleDateChange = (v: string) => syncNeeded(v, neededTime);\n const handleTimeChange = (v: string) => {\n if (!scheduleDate) return;\n syncNeeded(scheduleDate, v);\n };\n\n const summary =\n scheduleDate && neededTime ? (\n <div className=\"flex items-center justify-between rounded-xl border border-border bg-muted px-3 py-2.5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-[10px] text-muted-foreground\">Needed at</span>\n <span className=\"text-xs font-medium text-foreground\">\n {formatDateLabel(scheduleDate)} · {formatTimeForDisplay(neededTime, timeFormat)}\n </span>\n </div>\n </div>\n ) : null;\n\n const timeField = (\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Needed at</ScheduleFieldLabel>\n <TimeField\n value={neededTime}\n onChange={handleTimeChange}\n timeFormat={timeFormat}\n minTime={minTimeToday}\n disabled={Boolean(minTimeToday && !minTimeToday)}\n placeholder={minTimeToday ? \"Select time\" : undefined}\n />\n </div>\n );\n\n if (stackLayout) {\n return (\n <div className={cn(\"flex flex-col gap-5\", flat ? \"\" : \"rounded-2xl border border-border bg-card p-4\")}>\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Date</ScheduleFieldLabel>\n <DayCalendarPicker\n flat={flat}\n selectedDate={scheduleDate}\n minDate={minDate}\n onChange={handleDateChange}\n />\n </div>\n {timeField}\n {summary}\n </div>\n );\n }\n\n return (\n <div className={cn(\"flex flex-col gap-5 sm:flex-row sm:items-start\", flat ? \"\" : \"rounded-2xl border border-border bg-card p-4\")}>\n <div className=\"min-w-0 flex-1\">\n <ScheduleFieldLabel>Date</ScheduleFieldLabel>\n <div className=\"mt-1.5\">\n <DayCalendarPicker\n flat={flat}\n selectedDate={scheduleDate}\n minDate={minDate}\n onChange={handleDateChange}\n />\n </div>\n </div>\n <div className=\"hidden w-px shrink-0 self-stretch bg-border sm:block\" aria-hidden />\n <div className=\"min-w-[9.5rem] shrink-0 sm:w-44\">{timeField}</div>\n {summary ? <div className=\"w-full\">{summary}</div> : null}\n </div>\n );\n}\n\nfunction minNeededTimeHm(prepMinutes: number, now: Date = new Date()): string {\n const earliest = new Date(now.getTime() + prepMinutes * 60_000);\n if (earliest.getSeconds() > 0 || earliest.getMilliseconds() > 0) {\n earliest.setMinutes(earliest.getMinutes() + 1);\n }\n earliest.setSeconds(0, 0);\n return `${String(earliest.getHours()).padStart(2, \"0\")}:${String(earliest.getMinutes()).padStart(2, \"0\")}`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/booking/booking-schedule-calendars.tsx"],"names":[],"mappings":"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","file":"booking-schedule-calendars.js","sourcesContent":["import { useEffect, useState } from \"react\";\nimport { ChevronLeft, ChevronRight, Info } from \"lucide-react\";\nimport {\n MIN_MONTH,\n MIN_WEEK_START,\n PRICING_TODAY,\n addDays,\n addMonthsYm,\n currentMonthYm,\n currentWeekStart,\n diffDays,\n localDateYmd,\n monthCount,\n monthLabel,\n todayLocalYmd,\n weekCountBetween,\n weekRangeLabel,\n type BookingState,\n} from \"../lib/booking-schedule\";\nimport {\n TimeField,\n addMinutesToHm,\n currentTimeHm,\n formatTimeForDisplay,\n hourlyEndTimes,\n snapScheduleEndTime,\n} from \"../ui/time-field\";\nimport { CheckboxField } from \"../ui/checkbox-field\";\nimport { cn } from \"../ui/utils\";\n\nconst MONTH_NAMES = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nfunction dayStr(d: Date): string {\n return localDateYmd(d);\n}\n\n/** Nav row, weekday row, and cells share hairlines so the calendar reads as one framed block. */\nconst calendarBlockClass = \"flex flex-col overflow-hidden rounded-xl border border-border/60\";\nconst calendarNavRowClass =\n \"flex items-center justify-between border-b border-border/40 px-2 py-1.5\";\nconst calendarWeekdayRowClass = \"grid grid-cols-7 border-b border-border/40\";\nconst calendarWeekdayCellClass =\n \"flex h-9 items-center justify-center border-r border-border/40 text-[10px] font-medium text-muted-foreground last:border-r-0\";\n\n/** Hairlines between cells of a fixed-column grid, without an outer frame. */\nfunction cellGridLines(index: number, total: number, cols: number): string {\n return cn(\n \"border-border/40\",\n index % cols !== cols - 1 && \"border-r\",\n index < total - cols && \"border-b\",\n );\n}\n\nfunction weekEndMonday(weekFrom: string, weekCount: number): string {\n if (!weekFrom || weekCount < 1) return weekFrom;\n return addDays(weekFrom, (weekCount - 1) * 7);\n}\n\n/** Returns dates for a Mon-anchored calendar grid (5 or 6 rows). */\nfunction getCalendarGrid(year: number, month: number): Date[] {\n const firstDay = new Date(year, month, 1);\n const dow = firstDay.getDay();\n const startOffset = dow === 0 ? -6 : 1 - dow;\n const days: Date[] = [];\n for (let i = 0; i < 35; i++) {\n days.push(new Date(year, month, 1 + startOffset + i));\n }\n if (days[days.length - 1] < new Date(year, month + 1, 0)) {\n for (let i = 35; i < 42; i++) {\n days.push(new Date(year, month, 1 + startOffset + i));\n }\n }\n return days;\n}\n\nexport function ScheduleFieldLabel({ children }: { children: React.ReactNode }) {\n return <label className=\"text-xs font-medium text-muted-foreground\">{children}</label>;\n}\n\nexport function ScheduleInfoBanner({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex items-start gap-2 rounded-xl border border-blue-100 bg-blue-50 px-3 py-2.5 dark:border-blue-900/50 dark:bg-blue-950/40\">\n <Info size={13} className=\"mt-0.5 shrink-0 text-blue-400\" />\n <span className=\"text-xs leading-relaxed text-blue-700 dark:text-blue-400\">{children}</span>\n </div>\n );\n}\n\nfunction clampNaturalNumber(value: number, min: number, max: number): number {\n if (!Number.isFinite(value)) return min;\n return Math.min(max, Math.max(min, Math.floor(value)));\n}\n\nexport function ScheduleStepper({\n value,\n min = 1,\n max = 100,\n onChange,\n}: {\n value: number;\n min?: number;\n max?: number;\n onChange: (v: number) => void;\n}) {\n const [draft, setDraft] = useState(String(value));\n const [focused, setFocused] = useState(false);\n\n useEffect(() => {\n if (!focused) {\n setDraft(String(value));\n }\n }, [value, focused]);\n\n const commitDraft = (raw: string) => {\n const trimmed = raw.trim();\n if (trimmed === \"\") {\n onChange(min);\n setDraft(String(min));\n return;\n }\n const parsed = Number.parseInt(trimmed, 10);\n const next = clampNaturalNumber(parsed, min, max);\n onChange(next);\n setDraft(String(next));\n };\n\n return (\n <div className=\"flex w-32 items-center overflow-hidden rounded-xl border border-border bg-card\">\n <button\n type=\"button\"\n onClick={() => onChange(clampNaturalNumber(value - 1, min, max))}\n className=\"flex h-9 w-9 shrink-0 items-center justify-center border-r border-border text-sm text-muted-foreground hover:bg-accent\"\n aria-label=\"Decrease\"\n >\n −\n </button>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n aria-label=\"Quantity\"\n value={draft}\n onChange={(event) => setDraft(event.target.value.replace(/\\D/g, \"\"))}\n onFocus={() => setFocused(true)}\n onBlur={() => {\n setFocused(false);\n commitDraft(draft);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.currentTarget.blur();\n }\n }}\n className=\"min-w-0 flex-1 border-0 bg-transparent px-1 text-center text-sm font-medium text-foreground outline-none focus:ring-0\"\n />\n <button\n type=\"button\"\n onClick={() => onChange(clampNaturalNumber(value + 1, min, max))}\n className=\"flex h-9 w-9 shrink-0 items-center justify-center border-l border-border text-sm text-muted-foreground hover:bg-accent\"\n aria-label=\"Increase\"\n >\n +\n </button>\n </div>\n );\n}\n\nexport function WeekCalendarPicker({\n weekFrom,\n weekCount,\n rangeMode,\n onChange,\n flat = false,\n}: {\n weekFrom: string;\n weekCount: number;\n rangeMode: boolean;\n onChange: (weekFrom: string, weekCount: number) => void;\n flat?: boolean;\n}) {\n const initDate = new Date((weekFrom || MIN_WEEK_START) + \"T00:00:00\");\n const [calYear, setCalYear] = useState(initDate.getFullYear());\n const [calMonth, setCalMonth] = useState(initDate.getMonth());\n const [hoverMon, setHoverMon] = useState<string | null>(null);\n const [phase, setPhase] = useState<\"from\" | \"to\">(\"from\");\n\n useEffect(() => {\n setPhase(\"from\");\n }, [rangeMode]);\n\n const days = getCalendarGrid(calYear, calMonth);\n const minDate = new Date((currentWeekStart() || PRICING_TODAY) + \"T00:00:00\");\n const endMon = weekEndMonday(weekFrom, weekCount);\n\n const [dispFrom, dispTo] = (() => {\n if (!rangeMode || !weekFrom) return [weekFrom, endMon];\n if (phase === \"to\" && hoverMon) {\n if (hoverMon >= weekFrom) return [weekFrom, hoverMon];\n return [hoverMon, hoverMon];\n }\n return [weekFrom, endMon];\n })();\n\n const previewCount =\n rangeMode && phase === \"to\" && hoverMon && hoverMon >= weekFrom\n ? weekCountBetween(weekFrom, hoverMon)\n : weekCount;\n\n const prevMonth = () => {\n if (calMonth === 0) {\n setCalYear((y) => y - 1);\n setCalMonth(11);\n } else setCalMonth((m) => m - 1);\n };\n const nextMonth = () => {\n if (calMonth === 11) {\n setCalYear((y) => y + 1);\n setCalMonth(0);\n } else setCalMonth((m) => m + 1);\n };\n\n const weeks: Date[][] = [];\n for (let i = 0; i < days.length; i += 7) weeks.push(days.slice(i, i + 7));\n\n const handleWeekClick = (monStr: string) => {\n if (!rangeMode) {\n onChange(monStr, 1);\n return;\n }\n if (phase === \"from\") {\n onChange(monStr, 1);\n setPhase(\"to\");\n return;\n }\n if (monStr >= weekFrom) {\n onChange(weekFrom, weekCountBetween(weekFrom, monStr));\n setPhase(\"from\");\n return;\n }\n onChange(monStr, 1);\n setPhase(\"to\");\n };\n\n return (\n <div\n className={cn(\n \"flex select-none flex-col\",\n flat ? \"gap-3\" : \"gap-1 rounded-2xl border border-border bg-card p-3\",\n )}\n >\n {rangeMode ? (\n <div\n className={cn(\n \"flex items-center gap-2 px-1 text-[11px] font-medium\",\n phase === \"to\" ? \"text-blue-600 dark:text-blue-400\" : \"text-muted-foreground\",\n )}\n >\n {phase === \"from\" ? (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/50\" />\n Click the first week\n </>\n ) : (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 animate-pulse rounded-full bg-blue-500\" />\n Click the last week\n <button\n type=\"button\"\n onClick={() => {\n onChange(weekFrom, 1);\n setPhase(\"to\");\n }}\n className=\"ml-auto text-[10px] text-blue-400 underline underline-offset-2 hover:text-blue-600 dark:text-blue-400\"\n >\n Reset\n </button>\n </>\n )}\n </div>\n ) : null}\n\n <div className={calendarBlockClass}>\n <div className={calendarNavRowClass}>\n <button\n type=\"button\"\n onClick={prevMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-muted-foreground\"\n >\n <ChevronLeft size={12} strokeWidth={2.25} />\n </button>\n <span className=\"text-xs font-semibold text-muted-foreground\">\n {MONTH_NAMES[calMonth]} {calYear}\n </span>\n <button\n type=\"button\"\n onClick={nextMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-muted-foreground\"\n >\n <ChevronRight size={12} strokeWidth={2.25} />\n </button>\n </div>\n\n <div className={calendarWeekdayRowClass}>\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className={calendarWeekdayCellClass}>\n {d}\n </span>\n ))}\n </div>\n\n <div className=\"flex flex-col divide-y divide-border/40\">\n {weeks.map((week, wi) => {\n const mondayDate = week[0];\n const monStr = dayStr(mondayDate);\n const isSelectable = mondayDate >= minDate;\n const isStartWeek = Boolean(weekFrom) && monStr === dispFrom;\n const isEndWeek = Boolean(weekFrom) && monStr === dispTo;\n const inRange =\n rangeMode && Boolean(weekFrom) && monStr >= dispFrom && monStr <= dispTo;\n const isSelected = rangeMode ? inRange : monStr === weekFrom;\n\n return (\n <div\n key={wi}\n className={cn(\n \"relative flex cursor-pointer transition-colors\",\n isSelected && (isStartWeek || isEndWeek) && \"bg-blue-100/80\",\n isSelected && !isStartWeek && !isEndWeek && \"bg-blue-50\",\n isSelectable ? \"hover:bg-accent/60\" : \"cursor-not-allowed opacity-60\",\n )}\n onMouseEnter={() => isSelectable && setHoverMon(monStr)}\n onMouseLeave={() => setHoverMon(null)}\n onClick={() => isSelectable && handleWeekClick(monStr)}\n >\n {week.map((d, di) => {\n const isCurrentMonth = d.getMonth() === calMonth;\n const isMon = di === 0;\n const isSun = di === 6;\n const filled = rangeMode\n ? (isStartWeek && isMon) || (isEndWeek && isSun)\n : isSelected && isMon;\n\n return (\n <div\n key={di}\n className=\"relative z-10 flex h-9 flex-1 items-center justify-center border-r border-border/40 last:border-r-0\"\n >\n <span\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-full text-[11px] transition-colors\",\n isCurrentMonth ? \"text-muted-foreground\" : \"text-muted-foreground/50\",\n !isSelectable && \"text-muted-foreground/40\",\n isSelected && \"font-medium text-blue-700 dark:text-blue-300\",\n filled && \"bg-blue-500 font-semibold text-white shadow-sm\",\n )}\n >\n {d.getDate()}\n </span>\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n\n <p className=\"mt-1 text-center text-[10px] text-muted-foreground\">\n {rangeMode\n ? phase === \"from\"\n ? \"Click a week to start the range\"\n : previewCount > 1\n ? `${previewCount} weeks · ${weekRangeLabel(dispFrom, previewCount)}`\n : \"Click a week to finish the range\"\n : weekFrom\n ? `Selected week of ${formatDateLabel(weekFrom)}`\n : \"Click any row to select that week\"}\n </p>\n </div>\n );\n}\n\nexport function MonthRangeCalendar({\n monthFrom,\n monthTo,\n onChange,\n rangeMode,\n flat = false,\n}: {\n monthFrom: string;\n monthTo: string;\n onChange: (from: string, to: string) => void;\n rangeMode: boolean;\n flat?: boolean;\n}) {\n const initYear = monthFrom ? parseInt(monthFrom.split(\"-\")[0], 10) : new Date().getFullYear();\n const [calYear, setCalYear] = useState(initYear);\n const [phase, setPhase] = useState<\"from\" | \"to\">(\"from\");\n const [hoverYm, setHoverYm] = useState<string | null>(null);\n\n useEffect(() => {\n setPhase(\"from\");\n }, [rangeMode]);\n\n const ABBR = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n const toYm = (y: number, m: number) => `${y}-${String(m + 1).padStart(2, \"0\")}`;\n const minYm = currentMonthYm() || `${new Date().getFullYear()}-01`;\n\n const [dispFrom, dispTo] = (() => {\n if (!rangeMode) return [monthFrom, monthFrom || monthTo];\n if (phase === \"to\" && hoverYm) {\n if (hoverYm >= monthFrom) return [monthFrom, hoverYm];\n return [hoverYm, hoverYm];\n }\n return [monthFrom, monthTo];\n })();\n const isSingle = dispFrom === dispTo;\n\n const handleClick = (ymStr: string) => {\n if (ymStr < minYm) return;\n if (!rangeMode) {\n onChange(ymStr, ymStr);\n return;\n }\n if (phase === \"from\") {\n onChange(ymStr, ymStr);\n setPhase(\"to\");\n } else if (ymStr >= monthFrom) {\n onChange(monthFrom, ymStr);\n setPhase(\"from\");\n } else {\n onChange(ymStr, ymStr);\n setPhase(\"to\");\n }\n };\n\n const actualCount = monthCount(monthFrom, monthTo);\n const previewCount = monthCount(dispFrom, dispTo);\n\n return (\n <div\n className={cn(\n \"select-none\",\n flat ? \"flex flex-col gap-5\" : \"overflow-hidden rounded-2xl border border-border bg-card\",\n )}\n >\n {rangeMode ? (\n <div\n className={cn(\n \"flex items-center gap-2 text-[11px] font-medium transition-colors\",\n flat\n ? phase === \"to\"\n ? \"text-blue-600 dark:text-blue-400\"\n : \"text-muted-foreground\"\n : cn(\n \"px-4 py-2 text-[10px]\",\n phase === \"to\"\n ? \"bg-blue-50 text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\"\n : \"bg-transparent text-muted-foreground\",\n ),\n )}\n >\n {phase === \"from\" ? (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/50\" />\n Click the first month\n </>\n ) : (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 animate-pulse rounded-full bg-blue-500\" />\n Click the last month\n <button\n type=\"button\"\n onClick={() => {\n onChange(monthFrom, monthFrom);\n setPhase(\"to\");\n }}\n className=\"ml-auto text-[10px] text-blue-400 underline underline-offset-2 hover:text-blue-600 dark:text-blue-400\"\n >\n Reset\n </button>\n </>\n )}\n </div>\n ) : null}\n\n <div className={cn(calendarBlockClass, !flat && \"mx-3 mb-3\")}>\n <div className={calendarNavRowClass}>\n <button\n type=\"button\"\n onClick={() => setCalYear((y) => y - 1)}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-muted-foreground\"\n >\n <ChevronLeft size={12} strokeWidth={2.25} />\n </button>\n <span className=\"text-xs font-semibold text-muted-foreground\">{calYear}</span>\n <button\n type=\"button\"\n onClick={() => setCalYear((y) => y + 1)}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-muted-foreground\"\n >\n <ChevronRight size={12} strokeWidth={2.25} />\n </button>\n </div>\n\n <div className=\"grid grid-cols-4\">\n {ABBR.map((label, i) => {\n const ymStr = toYm(calYear, i);\n const disabled = ymStr < minYm;\n const inRange = !disabled && ymStr >= dispFrom && ymStr <= dispTo;\n const isFrom = ymStr === dispFrom;\n const isTo = ymStr === dispTo;\n const showStrip = rangeMode && inRange && !isSingle;\n const sLeft = isFrom ? \"left-1/2\" : \"left-0\";\n const sRight = isTo ? \"right-1/2\" : \"right-0\";\n const filled = (isFrom || isTo || (!rangeMode && ymStr === monthFrom)) && !disabled;\n\n return (\n <div\n key={i}\n className={cn(\n \"relative\",\n cellGridLines(i, 12, 4),\n flat ? \"h-14\" : \"h-12\",\n disabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n )}\n onMouseEnter={() => !disabled && setHoverYm(ymStr)}\n onMouseLeave={() => setHoverYm(null)}\n onClick={() => handleClick(ymStr)}\n >\n {showStrip ? (\n <div className={`absolute bottom-1.5 top-1.5 bg-blue-100 ${sLeft} ${sRight}`} />\n ) : null}\n <div\n className={cn(\n \"relative z-10 flex w-full items-center justify-center\",\n flat ? \"h-14\" : \"h-12\",\n )}\n >\n <span\n className={`flex h-9 w-9 items-center justify-center rounded-full text-xs font-medium transition-all duration-100\n ${\n filled\n ? \"bg-blue-500 text-white shadow-md shadow-blue-200\"\n : inRange\n ? \"text-blue-700 dark:text-blue-400\"\n : !disabled\n ? \"text-muted-foreground hover:bg-accent\"\n : \"text-muted-foreground/60\"\n }`}\n >\n {label}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <div\n className={cn(\n \"flex items-center justify-between transition-colors\",\n flat\n ? \"border-t border-border/70 pt-4 text-xs\"\n : cn(\n \"border-t px-4 py-2.5\",\n rangeMode && phase === \"from\" && actualCount > 0\n ? \"border-border bg-muted\"\n : \"border-transparent\",\n ),\n )}\n >\n {!rangeMode && monthFrom ? (\n <>\n <span className=\"text-[10px] text-muted-foreground\">{monthLabel(monthFrom)}</span>\n <span className=\"rounded-full bg-blue-50 px-2 py-0.5 text-[10px] font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n 1 month\n </span>\n </>\n ) : rangeMode && phase === \"from\" && actualCount > 0 ? (\n <>\n <span className=\"text-[10px] text-muted-foreground\">\n {monthLabel(monthFrom)} → {monthLabel(monthTo)}\n </span>\n <span className=\"rounded-full bg-blue-50 px-2 py-0.5 text-[10px] font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n {actualCount} month{actualCount !== 1 ? \"s\" : \"\"}\n </span>\n </>\n ) : rangeMode && phase === \"to\" ? (\n <>\n <span className=\"text-[10px] text-muted-foreground\">\n {hoverYm && hoverYm >= monthFrom\n ? `${monthLabel(monthFrom)} → ${monthLabel(hoverYm)}`\n : `Start: ${monthLabel(monthFrom)}`}\n </span>\n {hoverYm && hoverYm >= monthFrom && previewCount > 0 ? (\n <span className=\"text-[10px] font-medium text-blue-400\">\n {previewCount} month{previewCount !== 1 ? \"s\" : \"\"}\n </span>\n ) : null}\n </>\n ) : (\n <span className=\"text-[10px] text-muted-foreground/60\">\n {rangeMode ? \"Select a month range\" : \"Click a month to book\"}\n </span>\n )}\n </div>\n </div>\n );\n}\n\nexport function MonthPeriodPicker({\n booking,\n onChange,\n flat = true,\n}: {\n booking: BookingState;\n onChange: (patch: Partial<BookingState>) => void;\n flat?: boolean;\n}) {\n const [rangeMode, setRangeMode] = useState(\n () => Boolean(booking.monthFrom && booking.monthTo && booking.monthFrom !== booking.monthTo),\n );\n\n useEffect(() => {\n if (booking.monthFrom && booking.monthTo && booking.monthFrom !== booking.monthTo) {\n setRangeMode(true);\n }\n }, [booking.monthFrom, booking.monthTo]);\n\n const monthCountSelected = monthCount(booking.monthFrom, booking.monthTo);\n\n return (\n <div className={cn(\"flex flex-col\", flat ? \"gap-5\" : \"gap-3\")}>\n <ScheduleInfoBanner>\n Current month is available at full price, or choose a future month.\n </ScheduleInfoBanner>\n\n <CheckboxField\n size=\"sm\"\n label=\"Select multiple months\"\n className=\"w-fit items-center\"\n checked={rangeMode}\n onCheckedChange={(checked) => {\n setRangeMode(checked);\n const from = booking.monthFrom || currentMonthYm();\n if (!checked) {\n onChange({ monthFrom: from, monthTo: from });\n return;\n }\n const to =\n booking.monthTo && booking.monthTo > from ? booking.monthTo : addMonthsYm(from, 1);\n onChange({ monthFrom: from, monthTo: to });\n }}\n />\n\n <ScheduleFieldLabel>{rangeMode ? \"Select month range\" : \"Select month\"}</ScheduleFieldLabel>\n <MonthRangeCalendar\n flat={flat}\n rangeMode={rangeMode}\n monthFrom={booking.monthFrom}\n monthTo={booking.monthTo}\n onChange={(from, to) => onChange({ monthFrom: from, monthTo: to })}\n />\n\n {monthCountSelected > 0 ? (\n <div className=\"flex items-center justify-between rounded-xl border border-border bg-muted px-3 py-2.5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-[10px] text-muted-foreground\">Period</span>\n <span className=\"text-xs font-medium text-muted-foreground\">\n {rangeMode && monthCountSelected > 1\n ? `${monthLabel(booking.monthFrom)} → ${monthLabel(booking.monthTo)}`\n : monthLabel(booking.monthFrom)}\n </span>\n </div>\n <span className=\"rounded-lg bg-blue-50 px-2 py-1 text-xs font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n {monthCountSelected} month{monthCountSelected !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function WeekPeriodPicker({\n booking,\n onChange,\n flat = true,\n}: {\n booking: BookingState;\n onChange: (patch: Partial<BookingState>) => void;\n flat?: boolean;\n}) {\n const [rangeMode, setRangeMode] = useState(() => booking.weekCount > 1);\n\n useEffect(() => {\n if (booking.weekCount > 1) setRangeMode(true);\n }, [booking.weekCount]);\n\n const rangeStr = weekRangeLabel(booking.weekFrom, booking.weekCount);\n\n return (\n <div className={cn(\"flex flex-col\", flat ? \"gap-5\" : \"gap-3\")}>\n <ScheduleInfoBanner>\n Current week is available at full price, or choose a future week.\n </ScheduleInfoBanner>\n\n <CheckboxField\n size=\"sm\"\n label=\"Select multiple weeks\"\n className=\"w-fit items-center\"\n checked={rangeMode}\n onCheckedChange={(checked) => {\n setRangeMode(checked);\n const from = booking.weekFrom || currentWeekStart();\n if (!checked) {\n onChange({ weekFrom: from, weekCount: 1 });\n return;\n }\n onChange({\n weekFrom: from,\n weekCount: Math.max(2, booking.weekCount),\n });\n }}\n />\n\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>{rangeMode ? \"Select week range\" : \"Select week\"}</ScheduleFieldLabel>\n <WeekCalendarPicker\n flat={flat}\n rangeMode={rangeMode}\n weekFrom={booking.weekFrom}\n weekCount={booking.weekCount}\n onChange={(weekFrom, weekCount) => onChange({ weekFrom, weekCount })}\n />\n </div>\n\n {booking.weekFrom && booking.weekCount > 0 ? (\n <div className=\"flex items-center justify-between rounded-xl border border-border bg-muted px-3 py-2.5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-[10px] text-muted-foreground\">Period</span>\n <span className=\"text-xs font-medium text-muted-foreground\">{rangeStr}</span>\n </div>\n <span className=\"rounded-lg bg-blue-50 px-2 py-1 text-xs font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n {booking.weekCount} week{booking.weekCount !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction formatDateLabel(iso: string): string {\n if (!iso) return \"—\";\n return new Date(iso + \"T00:00:00\").toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\nfunction isBillableDay(day: string, start: string, end: string): boolean {\n return Boolean(start && end && day >= start && day < end);\n}\n\nexport function DayCalendarPicker({\n selectedDate,\n onChange,\n minDate = todayLocalYmd(),\n flat = false,\n}: {\n selectedDate: string;\n onChange: (date: string) => void;\n minDate?: string;\n flat?: boolean;\n}) {\n const initDate = new Date((selectedDate || minDate) + \"T00:00:00\");\n const [calYear, setCalYear] = useState(initDate.getFullYear());\n const [calMonth, setCalMonth] = useState(initDate.getMonth());\n\n const days = getCalendarGrid(calYear, calMonth);\n\n const prevMonth = () => {\n if (calMonth === 0) {\n setCalYear((y) => y - 1);\n setCalMonth(11);\n } else setCalMonth((m) => m - 1);\n };\n const nextMonth = () => {\n if (calMonth === 11) {\n setCalYear((y) => y + 1);\n setCalMonth(0);\n } else setCalMonth((m) => m + 1);\n };\n\n return (\n <div\n className={cn(\n \"flex select-none flex-col\",\n flat ? \"gap-3\" : \"gap-1 rounded-2xl border border-border bg-card p-3\",\n )}\n >\n <div className={calendarBlockClass}>\n <div className={calendarNavRowClass}>\n <button\n type=\"button\"\n onClick={prevMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent\"\n >\n <ChevronLeft size={12} strokeWidth={2.25} />\n </button>\n <span className=\"text-xs font-semibold text-muted-foreground\">\n {MONTH_NAMES[calMonth]} {calYear}\n </span>\n <button\n type=\"button\"\n onClick={nextMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent\"\n >\n <ChevronRight size={12} strokeWidth={2.25} />\n </button>\n </div>\n\n <div className={calendarWeekdayRowClass}>\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className={calendarWeekdayCellClass}>\n {d}\n </span>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7\">\n {days.map((d, i) => {\n const ds = dayStr(d);\n const isCurrentMonth = d.getMonth() === calMonth;\n const isSelectable = ds >= minDate;\n const isSelected = ds === selectedDate;\n\n return (\n <button\n key={ds}\n type=\"button\"\n disabled={!isSelectable}\n onClick={() => isSelectable && onChange(ds)}\n className={cn(\n \"flex h-9 items-center justify-center\",\n cellGridLines(i, days.length, 7),\n !isSelectable && \"cursor-not-allowed\",\n )}\n >\n <span\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-full text-[11px] transition-colors\",\n isSelectable && isCurrentMonth && \"text-foreground hover:bg-accent\",\n isSelectable && !isCurrentMonth && \"text-muted-foreground hover:bg-accent\",\n !isSelectable && isCurrentMonth && \"text-muted-foreground/40\",\n !isSelectable && !isCurrentMonth && \"text-muted-foreground/30\",\n isSelected && \"bg-blue-500 font-semibold text-white shadow-sm\",\n )}\n >\n {d.getDate()}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n\n {selectedDate ? (\n <p className=\"mt-1 text-center text-[10px] text-muted-foreground\">\n Selected {formatDateLabel(selectedDate)}\n </p>\n ) : (\n <p className=\"mt-1 text-center text-[10px] text-muted-foreground\">Click a day to book</p>\n )}\n </div>\n );\n}\n\nexport function DayRangeCalendar({\n startDate,\n endDate,\n onChange,\n minDate = currentWeekStart(),\n flat = false,\n}: {\n startDate: string;\n endDate: string;\n onChange: (start: string, end: string) => void;\n minDate?: string;\n flat?: boolean;\n}) {\n const initDate = new Date((startDate || minDate) + \"T00:00:00\");\n const [calYear, setCalYear] = useState(initDate.getFullYear());\n const [calMonth, setCalMonth] = useState(initDate.getMonth());\n const [phase, setPhase] = useState<\"from\" | \"to\">(\"from\");\n const [hoverDay, setHoverDay] = useState<string | null>(null);\n\n const days = getCalendarGrid(calYear, calMonth);\n const lastBillableDay = endDate ? addDays(endDate, -1) : \"\";\n\n const [dispStart, dispEnd] = (() => {\n if (phase === \"to\" && hoverDay && startDate) {\n if (hoverDay >= startDate) return [startDate, addDays(hoverDay, 1)];\n return [hoverDay, addDays(hoverDay, 1)];\n }\n return [startDate, endDate];\n })();\n\n const dayCount = startDate && endDate ? diffDays(startDate, endDate) : 0;\n\n const handleClick = (ds: string) => {\n if (ds < minDate) return;\n if (phase === \"from\") {\n onChange(ds, addDays(ds, 1));\n setPhase(\"to\");\n return;\n }\n if (ds < startDate) {\n onChange(ds, addDays(ds, 1));\n setPhase(\"to\");\n return;\n }\n onChange(startDate, addDays(ds, 1));\n setPhase(\"from\");\n };\n\n const prevMonth = () => {\n if (calMonth === 0) {\n setCalYear((y) => y - 1);\n setCalMonth(11);\n } else setCalMonth((m) => m - 1);\n };\n const nextMonth = () => {\n if (calMonth === 11) {\n setCalYear((y) => y + 1);\n setCalMonth(0);\n } else setCalMonth((m) => m + 1);\n };\n\n return (\n <div\n className={cn(\n \"flex select-none flex-col\",\n flat ? \"gap-3\" : \"gap-1 rounded-2xl border border-border bg-card p-3\",\n )}\n >\n <div\n className={cn(\n \"flex items-center gap-2 px-1 text-[11px] font-medium\",\n phase === \"to\" ? \"text-blue-600 dark:text-blue-400\" : \"text-muted-foreground\",\n )}\n >\n {phase === \"from\" ? (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/50\" />\n Click the first day\n </>\n ) : (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 animate-pulse rounded-full bg-blue-500\" />\n Click the last day\n <button\n type=\"button\"\n onClick={() => {\n onChange(startDate, addDays(startDate, 1));\n setPhase(\"to\");\n }}\n className=\"ml-auto text-[10px] text-blue-400 underline underline-offset-2 hover:text-blue-600 dark:text-blue-400\"\n >\n Reset\n </button>\n </>\n )}\n </div>\n\n <div className={calendarBlockClass}>\n <div className={calendarNavRowClass}>\n <button\n type=\"button\"\n onClick={prevMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent\"\n >\n <ChevronLeft size={12} strokeWidth={2.25} />\n </button>\n <span className=\"text-xs font-semibold text-muted-foreground\">\n {MONTH_NAMES[calMonth]} {calYear}\n </span>\n <button\n type=\"button\"\n onClick={nextMonth}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent\"\n >\n <ChevronRight size={12} strokeWidth={2.25} />\n </button>\n </div>\n\n <div className={calendarWeekdayRowClass}>\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className={calendarWeekdayCellClass}>\n {d}\n </span>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7\">\n {days.map((d, i) => {\n const ds = dayStr(d);\n const isCurrentMonth = d.getMonth() === calMonth;\n const isSelectable = ds >= minDate;\n const inRange = isBillableDay(ds, dispStart, dispEnd);\n const isStart = ds === dispStart;\n const isEnd = ds === lastBillableDay && dispEnd && diffDays(dispStart, dispEnd) > 1;\n const isSingle =\n dispStart && dispEnd && diffDays(dispStart, dispEnd) === 1 && ds === dispStart;\n\n return (\n <button\n key={ds}\n type=\"button\"\n disabled={!isSelectable}\n onMouseEnter={() => isSelectable && setHoverDay(ds)}\n onMouseLeave={() => setHoverDay(null)}\n onClick={() => isSelectable && handleClick(ds)}\n className={cn(\n \"relative flex h-9 items-center justify-center\",\n cellGridLines(i, days.length, 7),\n !isSelectable && \"cursor-not-allowed\",\n )}\n >\n {inRange && !isSingle ? (\n <span\n className={cn(\n \"absolute inset-y-1.5 bg-blue-100\",\n isStart\n ? \"left-1/2 right-0 rounded-l-full\"\n : isEnd\n ? \"left-0 right-1/2 rounded-r-full\"\n : \"inset-x-0\",\n )}\n />\n ) : null}\n <span\n className={cn(\n \"relative z-10 flex h-8 w-8 items-center justify-center rounded-full text-[11px] transition-colors\",\n !inRange && isSelectable && isCurrentMonth && \"text-foreground hover:bg-accent\",\n !inRange &&\n isSelectable &&\n !isCurrentMonth &&\n \"text-muted-foreground hover:bg-accent\",\n !isSelectable && isCurrentMonth && \"text-muted-foreground/40\",\n !isSelectable && !isCurrentMonth && \"text-muted-foreground/30\",\n inRange && \"font-medium text-blue-700 dark:text-blue-300\",\n (isStart || isEnd || isSingle) &&\n \"bg-blue-500 font-semibold text-white shadow-sm\",\n )}\n >\n {d.getDate()}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n\n <div className=\"flex items-center justify-between border-t border-border/70 pt-3 text-xs\">\n {dayCount > 0 ? (\n <>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatDateLabel(startDate)}\n {dayCount > 1 ? ` → ${formatDateLabel(lastBillableDay)}` : \"\"}\n </span>\n <span className=\"rounded-full bg-blue-50 px-2 py-0.5 text-[10px] font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n {dayCount} day{dayCount !== 1 ? \"s\" : \"\"}\n </span>\n </>\n ) : (\n <span className=\"text-[10px] text-muted-foreground/60\">Select a date range</span>\n )}\n </div>\n </div>\n );\n}\n\nexport function DayPeriodPicker({\n booking,\n onChange,\n flat = true,\n}: {\n booking: BookingState;\n onChange: (patch: Partial<BookingState>) => void;\n flat?: boolean;\n}) {\n const oneDay = booking.oneDayBooking ?? true;\n const dayCount = oneDay ? 1 : diffDays(booking.startDate, booking.endDate);\n\n return (\n <div className={cn(\"flex flex-col\", flat ? \"gap-5\" : \"gap-3\")}>\n <CheckboxField\n size=\"sm\"\n label=\"Select a date range\"\n className=\"w-fit items-center\"\n checked={!oneDay}\n onCheckedChange={(checked) => {\n const start = booking.startDate || todayLocalYmd();\n if (!checked) {\n onChange({ oneDayBooking: true, startDate: start, endDate: addDays(start, 1) });\n return;\n }\n const end =\n booking.endDate && booking.endDate > start && diffDays(start, booking.endDate) > 1\n ? booking.endDate\n : addDays(start, 7);\n onChange({ oneDayBooking: false, startDate: start, endDate: end });\n }}\n />\n\n {oneDay ? (\n <DayCalendarPicker\n flat={flat}\n selectedDate={booking.startDate}\n onChange={(v) => onChange({ startDate: v, endDate: addDays(v, 1) })}\n />\n ) : (\n <DayRangeCalendar\n flat={flat}\n startDate={booking.startDate}\n endDate={booking.endDate}\n onChange={(start, end) => onChange({ startDate: start, endDate: end })}\n />\n )}\n\n {dayCount > 0 ? (\n <div className=\"flex items-center justify-between rounded-xl border border-border bg-muted px-3 py-2.5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-[10px] text-muted-foreground\">Period</span>\n <span className=\"text-xs font-medium text-muted-foreground\">\n {oneDay\n ? formatDateLabel(booking.startDate)\n : `${formatDateLabel(booking.startDate)} → ${formatDateLabel(addDays(booking.endDate, -1))}`}\n </span>\n </div>\n <span className=\"rounded-lg bg-blue-50 px-2 py-1 text-xs font-semibold text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\">\n {dayCount} day{dayCount !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n ) : null}\n </div>\n );\n}\n\ntype HourlyPickerStep = \"date\" | \"time\";\n\nfunction HourlyTimeRangeFields({\n fromTime,\n scheduleEndTime,\n chargeBy,\n timeFormat,\n toOptions,\n minTo,\n onFromChange,\n onToChange,\n vertical = false,\n}: {\n fromTime: string;\n scheduleEndTime: string;\n chargeBy: \"hours\" | \"minutes\";\n timeFormat: \"12h\" | \"24h\";\n toOptions: string[];\n minTo: string | undefined;\n onFromChange: (nextFrom: string) => void;\n onToChange: (v: string) => void;\n vertical?: boolean;\n}) {\n const fields = (\n <>\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>From</ScheduleFieldLabel>\n <TimeField value={fromTime} onChange={onFromChange} timeFormat={timeFormat} />\n </div>\n {vertical ? <div className=\"h-px bg-border\" aria-hidden /> : null}\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>To</ScheduleFieldLabel>\n {chargeBy === \"hours\" ? (\n <TimeField\n value={scheduleEndTime}\n onChange={onToChange}\n timeFormat={timeFormat}\n allowedTimes={toOptions}\n disabled={toOptions.length === 0}\n placeholder={toOptions.length === 0 ? \"No later times\" : \"Select time\"}\n />\n ) : (\n <TimeField\n value={scheduleEndTime}\n onChange={onToChange}\n timeFormat={timeFormat}\n minTime={minTo}\n disabled={!minTo}\n placeholder={minTo ? \"Select time\" : \"No later times\"}\n />\n )}\n </div>\n </>\n );\n\n if (vertical) {\n return <div className=\"flex flex-col gap-4\">{fields}</div>;\n }\n\n return <div className=\"grid grid-cols-2 gap-3\">{fields}</div>;\n}\n\nexport function HourlySchedulePicker({\n scheduleDate,\n scheduleTime,\n scheduleEndTime = \"\",\n onChange,\n timeFormat = \"24h\",\n flat = true,\n chargeBy = \"hours\",\n splitLayout = false,\n stackLayout = false,\n}: {\n scheduleDate: string;\n scheduleTime: string;\n scheduleEndTime?: string;\n onChange: (patch: {\n scheduleDate?: string;\n scheduleTime?: string;\n scheduleEndTime?: string;\n }) => void;\n timeFormat?: \"12h\" | \"24h\";\n flat?: boolean;\n chargeBy?: \"hours\" | \"minutes\";\n /** Calendar and time pickers side-by-side; From / To stacked on the right. */\n splitLayout?: boolean;\n /** Calendar on top; From / To stacked underneath (always visible). */\n stackLayout?: boolean;\n}) {\n const [step, setStep] = useState<HourlyPickerStep>(\"date\");\n const fromTime = scheduleTime || \"09:00\";\n const toOptions = chargeBy === \"hours\" ? hourlyEndTimes(fromTime) : [];\n const minTo = chargeBy === \"minutes\" ? addMinutesToHm(fromTime, 1) ?? undefined : undefined;\n\n const handleFromChange = (nextFrom: string) => {\n onChange({\n scheduleTime: nextFrom,\n scheduleEndTime: snapScheduleEndTime(nextFrom, scheduleEndTime, chargeBy),\n });\n };\n\n const handleDateChange = (v: string) => {\n const nextFrom = scheduleTime || \"09:00\";\n onChange({\n scheduleDate: v,\n scheduleTime: nextFrom,\n scheduleEndTime:\n scheduleEndTime || snapScheduleEndTime(nextFrom, \"\", chargeBy) || \"10:00\",\n });\n };\n\n const summary =\n scheduleDate && fromTime && scheduleEndTime ? (\n <div className=\"flex items-center justify-between rounded-xl border border-border bg-muted px-3 py-2.5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-[10px] text-muted-foreground\">Scheduled for</span>\n <span className=\"text-xs font-medium text-foreground\">\n {formatDateLabel(scheduleDate)} · {formatTimeForDisplay(fromTime, timeFormat)} →{\" \"}\n {formatTimeForDisplay(scheduleEndTime, timeFormat)}\n </span>\n </div>\n </div>\n ) : null;\n\n const timeFields = (\n <HourlyTimeRangeFields\n fromTime={fromTime}\n scheduleEndTime={scheduleEndTime}\n chargeBy={chargeBy}\n timeFormat={timeFormat}\n toOptions={toOptions}\n minTo={minTo}\n onFromChange={handleFromChange}\n onToChange={(v) => onChange({ scheduleEndTime: v })}\n vertical={splitLayout || stackLayout}\n />\n );\n\n if (stackLayout) {\n return (\n <div className={cn(\"flex flex-col gap-5\", flat ? \"\" : \"rounded-2xl border border-border bg-card p-4\")}>\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Date</ScheduleFieldLabel>\n <DayCalendarPicker\n flat={flat}\n selectedDate={scheduleDate}\n minDate={todayLocalYmd()}\n onChange={handleDateChange}\n />\n </div>\n {timeFields}\n {summary}\n </div>\n );\n }\n\n if (splitLayout) {\n return (\n <div className={cn(\"flex flex-col gap-5\", flat ? \"\" : \"rounded-2xl border border-border bg-card p-4\")}>\n <div className=\"flex flex-col gap-5 sm:flex-row sm:items-start\">\n <div className=\"min-w-0 flex-1\">\n <ScheduleFieldLabel>Date</ScheduleFieldLabel>\n <div className=\"mt-1.5\">\n <DayCalendarPicker\n flat={flat}\n selectedDate={scheduleDate}\n minDate={todayLocalYmd()}\n onChange={handleDateChange}\n />\n </div>\n </div>\n <div className=\"hidden w-px shrink-0 self-stretch bg-border sm:block\" aria-hidden />\n <div className=\"min-w-[9.5rem] shrink-0 sm:w-44\">\n <ScheduleFieldLabel>Time</ScheduleFieldLabel>\n <div className=\"mt-1.5\">{timeFields}</div>\n </div>\n </div>\n {summary}\n </div>\n );\n }\n\n return (\n <div className={cn(\"flex flex-col gap-5\", flat ? \"\" : \"rounded-2xl border border-border bg-card p-4\")}>\n <div className=\"flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground\">\n <span\n className={cn(\n step === \"date\" && \"font-semibold text-blue-600 dark:text-blue-400\",\n scheduleDate && step !== \"date\" && \"text-foreground\",\n )}\n >\n Date\n </span>\n <span aria-hidden>·</span>\n <span\n className={cn(\n step === \"time\" && \"font-semibold text-blue-600 dark:text-blue-400\",\n step !== \"time\" && \"text-muted-foreground/60\",\n )}\n >\n Time\n </span>\n </div>\n\n {step === \"date\" ? (\n <div className=\"flex flex-col gap-3\">\n <ScheduleFieldLabel>Pick a day</ScheduleFieldLabel>\n <DayCalendarPicker\n flat={flat}\n selectedDate={scheduleDate}\n minDate={todayLocalYmd()}\n onChange={(v) => {\n handleDateChange(v);\n setStep(\"time\");\n }}\n />\n <p className=\"text-center text-[11px] text-muted-foreground\">Select a day to set the time</p>\n </div>\n ) : (\n <div className=\"flex flex-col gap-5\">\n <button\n type=\"button\"\n onClick={() => setStep(\"date\")}\n className=\"inline-flex w-fit items-center gap-2 rounded-xl border border-border bg-muted/60 px-3 py-2 text-left transition-colors hover:bg-muted\"\n >\n <ChevronLeft size={14} className=\"shrink-0 text-muted-foreground\" />\n <div>\n <p className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">Date</p>\n <p className=\"text-sm font-medium text-foreground\">{formatDateLabel(scheduleDate)}</p>\n </div>\n <span className=\"ml-2 text-[11px] font-medium text-blue-600 dark:text-blue-400\">Change</span>\n </button>\n\n {timeFields}\n\n {summary}\n </div>\n )}\n </div>\n );\n}\n\nfunction defaultNeededTime(\n scheduleDate: string,\n preparationMinutes: number,\n todayYmd: string,\n now: Date = new Date(),\n): string {\n let time = currentTimeHm(now);\n if (preparationMinutes > 0 && scheduleDate === todayYmd) {\n const floor = minNeededTimeHm(preparationMinutes, now);\n if (time < floor) time = floor;\n }\n return time;\n}\n\nexport function ServiceNeededAtPicker({\n scheduleDate,\n scheduleTime,\n onChange,\n timeFormat = \"24h\",\n flat = true,\n stackLayout = true,\n minDate = todayLocalYmd(),\n preparationMinutes = 0,\n}: {\n scheduleDate: string;\n scheduleTime: string;\n onChange: (patch: {\n scheduleDate?: string;\n scheduleTime?: string;\n scheduleEndTime?: string;\n startDate?: string;\n endDate?: string;\n }) => void;\n timeFormat?: \"12h\" | \"24h\";\n flat?: boolean;\n stackLayout?: boolean;\n minDate?: string;\n /** When booking for today, earliest Needed-at is now + this many minutes. */\n preparationMinutes?: number;\n}) {\n const todayYmd = todayLocalYmd();\n const effectiveDate = scheduleDate || todayYmd;\n const neededTime =\n scheduleTime || defaultNeededTime(effectiveDate, preparationMinutes, todayYmd);\n const minTimeToday =\n preparationMinutes > 0 && effectiveDate === todayYmd\n ? minNeededTimeHm(preparationMinutes)\n : undefined;\n\n const syncNeeded = (date: string, time: string) => {\n let nextTime = time;\n if (preparationMinutes > 0 && date === todayYmd) {\n const floor = minNeededTimeHm(preparationMinutes);\n if (floor && nextTime < floor) nextTime = floor;\n }\n onChange({\n scheduleDate: date,\n scheduleTime: nextTime,\n scheduleEndTime: nextTime,\n startDate: date,\n endDate: date,\n });\n };\n\n const handleDateChange = (v: string) => syncNeeded(v, neededTime);\n const handleTimeChange = (v: string) => {\n if (!effectiveDate) return;\n syncNeeded(effectiveDate, v);\n };\n\n useEffect(() => {\n const defaultTime = defaultNeededTime(effectiveDate, preparationMinutes, todayYmd);\n const floor =\n preparationMinutes > 0 && effectiveDate === todayYmd\n ? minNeededTimeHm(preparationMinutes)\n : undefined;\n let nextTime = scheduleTime || defaultTime;\n if (floor && nextTime < floor) nextTime = floor;\n if (scheduleTime === nextTime && scheduleDate === effectiveDate) return;\n onChange({\n scheduleDate: effectiveDate,\n scheduleTime: nextTime,\n scheduleEndTime: nextTime,\n startDate: effectiveDate,\n endDate: effectiveDate,\n });\n }, [effectiveDate, scheduleTime, preparationMinutes, todayYmd, onChange]);\n\n const summary =\n scheduleDate && neededTime ? (\n <div className=\"flex items-center justify-between rounded-xl border border-border bg-muted px-3 py-2.5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-[10px] text-muted-foreground\">Needed at</span>\n <span className=\"text-xs font-medium text-foreground\">\n {formatDateLabel(scheduleDate)} · {formatTimeForDisplay(neededTime, timeFormat)}\n </span>\n </div>\n </div>\n ) : null;\n\n const timeField = (\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Needed at</ScheduleFieldLabel>\n <TimeField\n value={neededTime}\n onChange={handleTimeChange}\n timeFormat={timeFormat}\n minTime={minTimeToday}\n disabled={Boolean(minTimeToday && !minTimeToday)}\n placeholder={minTimeToday ? \"Select time\" : undefined}\n />\n </div>\n );\n\n if (stackLayout) {\n return (\n <div className={cn(\"flex flex-col gap-5\", flat ? \"\" : \"rounded-2xl border border-border bg-card p-4\")}>\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Date</ScheduleFieldLabel>\n <DayCalendarPicker\n flat={flat}\n selectedDate={scheduleDate}\n minDate={minDate}\n onChange={handleDateChange}\n />\n </div>\n {timeField}\n {summary}\n </div>\n );\n }\n\n return (\n <div className={cn(\"flex flex-col gap-5 sm:flex-row sm:items-start\", flat ? \"\" : \"rounded-2xl border border-border bg-card p-4\")}>\n <div className=\"min-w-0 flex-1\">\n <ScheduleFieldLabel>Date</ScheduleFieldLabel>\n <div className=\"mt-1.5\">\n <DayCalendarPicker\n flat={flat}\n selectedDate={scheduleDate}\n minDate={minDate}\n onChange={handleDateChange}\n />\n </div>\n </div>\n <div className=\"hidden w-px shrink-0 self-stretch bg-border sm:block\" aria-hidden />\n <div className=\"min-w-[9.5rem] shrink-0 sm:w-44\">{timeField}</div>\n {summary ? <div className=\"w-full\">{summary}</div> : null}\n </div>\n );\n}\n\nfunction minNeededTimeHm(prepMinutes: number, now: Date = new Date()): string {\n const earliest = new Date(now.getTime() + prepMinutes * 60_000);\n if (earliest.getSeconds() > 0 || earliest.getMilliseconds() > 0) {\n earliest.setMinutes(earliest.getMinutes() + 1);\n }\n earliest.setSeconds(0, 0);\n return `${String(earliest.getHours()).padStart(2, \"0\")}:${String(earliest.getMinutes()).padStart(2, \"0\")}`;\n}\n"]}
|
package/dist/booking-schedule.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { IS_PARTIAL_MONTH, MIN_MONTH, MIN_WEEK_START, PRICING_TODAY, addDays, addMonthsYm, applyBookingScheduleDefaults, computeMinMonth, computeMinWeekStart, currentMonthYm, currentWeekStart, diffDays, formatPartialElapsedLabel, localDateYmd, monthCount, monthLabel, partialElapsed, pricingTodayYmd, todayLocalYmd, weekCountBetween, weekRangeLabel } from './chunk-
|
|
1
|
+
export { IS_PARTIAL_MONTH, MIN_MONTH, MIN_WEEK_START, PRICING_TODAY, addDays, addMonthsYm, applyBookingScheduleDefaults, computeMinMonth, computeMinWeekStart, currentMonthYm, currentWeekStart, diffDays, formatPartialElapsedLabel, localDateYmd, monthCount, monthLabel, partialElapsed, pricingTodayYmd, todayLocalYmd, weekCountBetween, weekRangeLabel } from './chunk-5CUJZNUC.js';
|
|
2
2
|
//# sourceMappingURL=booking-schedule.js.map
|
|
3
3
|
//# sourceMappingURL=booking-schedule.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { L as LayoutCanvasFloorLayout, a as LayoutCanvasViewRow } from './layout-canvas-view-
|
|
2
|
+
import { L as LayoutCanvasFloorLayout, a as LayoutCanvasViewRow } from './layout-canvas-view-C3u96xu4.js';
|
|
3
3
|
|
|
4
4
|
type BookingSpaceFloorOption = {
|
|
5
5
|
id: string;
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import { LayoutCanvasView } from './chunk-
|
|
1
|
+
import { LayoutCanvasView } from './chunk-KXTYPZDK.js';
|
|
2
2
|
import './chunk-XU3EFSQX.js';
|
|
3
3
|
import './chunk-4Y5DBM6Z.js';
|
|
4
4
|
import './chunk-ZIJQ7BXU.js';
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-VVXGQKN7.js';
|
|
10
|
-
import './chunk-7YCAAP43.js';
|
|
11
|
-
import './chunk-DC4QH6W2.js';
|
|
12
|
-
import './chunk-H7EX6B6N.js';
|
|
13
|
-
import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-LUB7QWGU.js';
|
|
14
|
-
import './chunk-VHINHHZQ.js';
|
|
5
|
+
import './chunk-AHFRK6KP.js';
|
|
6
|
+
import './chunk-CXXOKCLJ.js';
|
|
7
|
+
import './chunk-BQVMO33N.js';
|
|
8
|
+
import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-VIJ2HWPZ.js';
|
|
15
9
|
import './chunk-FCY5FYJB.js';
|
|
10
|
+
import './chunk-XDVGFHK4.js';
|
|
11
|
+
import './chunk-PPMJZVR4.js';
|
|
12
|
+
import './chunk-VHINHHZQ.js';
|
|
16
13
|
import './chunk-OWNUMPUC.js';
|
|
17
14
|
import { cn } from './chunk-DMPSQ22Q.js';
|
|
18
15
|
import { Layers } from 'lucide-react';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/booking/booking-space-layout-picker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/booking/booking-space-layout-picker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAuBO,SAAS,wBAAA,CAAyB;AAAA,EACvC,MAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EASG;AACD,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAA,KAAO,aAAa,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA;AAErE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,sGAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,IAAA;AAAA,UACA,gBAAA;AAAA,UACA,WAAA;AAAA,UACA,aAAA,EAAe,KAAA;AAAA,UACf,SAAA,EAAU,uBAAA;AAAA,UACV,cACE,MAAA,CAAO,MAAA,GAAS,oBACd,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,UAAO,IAAA,EAAM,EAAA,EAAI,SAAA,EAAU,gCAAA,EAAiC,eAAW,IAAA,EAAC,CAAA;AAAA,iCACxE,MAAA,EAAA,EAAO,KAAA,EAAO,QAAQ,EAAA,IAAM,aAAA,EAAe,eAAe,aAAA,EACzD,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,iBAAc,SAAA,EAAU,4EAAA,EACvB,8BAAC,WAAA,EAAA,EAAY,WAAA,EAAY,gBAAe,CAAA,EAC1C,CAAA;AAAA,8BACA,GAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,0BACX,IAAA,CAAC,UAAA,EAAA,EAA0B,KAAA,EAAO,KAAA,CAAM,EAAA,EACrC,QAAA,EAAA;AAAA,gBAAA,KAAA,CAAM,IAAA;AAAA,gBAAK,QAAA;AAAA,gBAAI,KAAA,CAAM,SAAA;AAAA,gBAAU;AAAA,eAAA,EAAA,EADjB,KAAA,CAAM,EAEvB,CACD,CAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA,GACE;AAAA;AAAA;AAER;AAAA,GACF;AAEJ","file":"booking-space-layout-picker.js","sourcesContent":["\"use client\";\n\nimport { Layers } from \"lucide-react\";\nimport {\n LayoutCanvasView,\n type LayoutCanvasViewRow,\n} from \"../live-space/layout-canvas-view\";\nimport type { LayoutCanvasFloorLayout } from \"../live-space/layout-canvas-types\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport { cn } from \"../ui/utils\";\n\nexport type BookingSpaceFloorOption = {\n id: string;\n name: string;\n freeCount: number;\n};\n\nexport function BookingSpaceLayoutPicker({\n floors,\n activeFloorId,\n onFloorChange,\n layout,\n rows,\n selectedIds,\n onResourceSelect,\n className,\n}: {\n floors: BookingSpaceFloorOption[];\n activeFloorId: string;\n onFloorChange: (floorId: string) => void;\n layout: LayoutCanvasFloorLayout;\n rows: LayoutCanvasViewRow[];\n selectedIds: string[];\n onResourceSelect: (id: string) => void;\n className?: string;\n}) {\n const active = floors.find((f) => f.id === activeFloorId) ?? floors[0];\n\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden rounded-2xl border border-border bg-card\",\n className,\n )}\n >\n <LayoutCanvasView\n layout={layout}\n rows={rows}\n onResourceSelect={onResourceSelect}\n selectedIds={selectedIds}\n showStatusDot={false}\n className=\"h-full min-h-0 flex-1\"\n toolbarStart={\n floors.length > 0 ? (\n <div className=\"flex min-w-0 items-center gap-2\">\n <Layers size={14} className=\"shrink-0 text-muted-foreground\" aria-hidden />\n <Select value={active?.id ?? activeFloorId} onValueChange={onFloorChange}>\n <SelectTrigger className=\"h-8 min-w-0 max-w-full flex-1 rounded-lg border-border bg-card sm:max-w-xs\">\n <SelectValue placeholder=\"Select floor\" />\n </SelectTrigger>\n <SelectContent>\n {floors.map((floor) => (\n <SelectItem key={floor.id} value={floor.id}>\n {floor.name} · {floor.freeCount} free\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ) : null\n }\n />\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { VariantProps } from 'class-variance-authority';
|
|
4
|
+
|
|
5
|
+
declare const buttonVariants: (props?: ({
|
|
6
|
+
variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
|
|
7
|
+
size?: "default" | "sm" | "lg" | "icon" | null | undefined;
|
|
8
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
|
+
declare const Button: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLButtonElement> & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<(props?: ({
|
|
10
|
+
variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
|
|
11
|
+
size?: "default" | "sm" | "lg" | "icon" | null | undefined;
|
|
12
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string> & {
|
|
13
|
+
asChild?: boolean;
|
|
14
|
+
}, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
15
|
+
|
|
16
|
+
export { Button as B, buttonVariants as b };
|
|
@@ -1,14 +1,4 @@
|
|
|
1
|
-
import './chunk-F7MU5T46.js';
|
|
2
|
-
import './chunk-RV5PMZYZ.js';
|
|
3
|
-
import './chunk-L65F4EMK.js';
|
|
4
|
-
import './chunk-PBNBLCC2.js';
|
|
5
|
-
import './chunk-VVXGQKN7.js';
|
|
6
|
-
import './chunk-7YCAAP43.js';
|
|
7
|
-
import './chunk-DC4QH6W2.js';
|
|
8
|
-
import './chunk-LUB7QWGU.js';
|
|
9
1
|
import { Button } from './chunk-VHINHHZQ.js';
|
|
10
|
-
import './chunk-FCY5FYJB.js';
|
|
11
|
-
import './chunk-OWNUMPUC.js';
|
|
12
2
|
import { cn } from './chunk-DMPSQ22Q.js';
|
|
13
3
|
import { useRef, useState, useCallback, useEffect, useLayoutEffect } from 'react';
|
|
14
4
|
import { ChevronDown } from 'lucide-react';
|