@spacesync/client 0.1.0 → 0.1.1
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 +9 -14
- package/dist/analog-clock-picker.d.ts +2 -2
- package/dist/analog-clock-picker.js +12 -406
- package/dist/analog-clock-picker.js.map +1 -1
- package/dist/api.js +7 -87
- package/dist/api.js.map +1 -1
- package/dist/app-modal.d.ts +7 -8
- package/dist/app-modal.js +3 -74
- package/dist/app-modal.js.map +1 -1
- package/dist/app-shell-mobile-nav.d.ts +1 -2
- package/dist/app-shell-mobile-nav.js +2 -66
- package/dist/app-shell-mobile-nav.js.map +1 -1
- package/dist/app-web-shell.d.ts +2 -2
- package/dist/app-web-shell.js +1 -4
- package/dist/app-web-shell.js.map +1 -1
- package/dist/booking-schedule-calendars.d.ts +12 -12
- package/dist/booking-schedule-calendars.js +13 -402
- package/dist/booking-schedule-calendars.js.map +1 -1
- package/dist/chat-stick-to-bottom.d.ts +1 -2
- package/dist/chat-stick-to-bottom.js +12 -48
- package/dist/chat-stick-to-bottom.js.map +1 -1
- package/dist/chunk-4A6RCBB5.js +4925 -0
- package/dist/chunk-4A6RCBB5.js.map +1 -0
- package/dist/chunk-4NNK5IXY.js +79 -0
- package/dist/chunk-4NNK5IXY.js.map +1 -0
- package/dist/chunk-4Y5DBM6Z.js +6 -0
- package/dist/chunk-4Y5DBM6Z.js.map +1 -0
- package/dist/chunk-7YCAAP43.js +107 -0
- package/dist/chunk-7YCAAP43.js.map +1 -0
- package/dist/chunk-DMPSQ22Q.js +11 -0
- package/dist/chunk-DMPSQ22Q.js.map +1 -0
- package/dist/chunk-FCY5FYJB.js +104 -0
- package/dist/chunk-FCY5FYJB.js.map +1 -0
- package/dist/chunk-H7EX6B6N.js +580 -0
- package/dist/chunk-H7EX6B6N.js.map +1 -0
- package/dist/chunk-HCHASUB6.js +13 -0
- package/dist/chunk-HCHASUB6.js.map +1 -0
- package/dist/chunk-L65F4EMK.js +34 -0
- package/dist/chunk-L65F4EMK.js.map +1 -0
- package/dist/chunk-LUB7QWGU.js +301 -0
- package/dist/chunk-LUB7QWGU.js.map +1 -0
- package/dist/chunk-OMSJWTSZ.js +120 -0
- package/dist/chunk-OMSJWTSZ.js.map +1 -0
- package/dist/chunk-OWNUMPUC.js +9 -0
- package/dist/chunk-OWNUMPUC.js.map +1 -0
- package/dist/chunk-P65TMY3D.js +87 -0
- package/dist/chunk-P65TMY3D.js.map +1 -0
- package/dist/chunk-PBNBLCC2.js +84 -0
- package/dist/chunk-PBNBLCC2.js.map +1 -0
- package/dist/chunk-RV5PMZYZ.js +63 -0
- package/dist/chunk-RV5PMZYZ.js.map +1 -0
- package/dist/chunk-VHINHHZQ.js +48 -0
- package/dist/chunk-VHINHHZQ.js.map +1 -0
- package/dist/chunk-VVXGQKN7.js +107 -0
- package/dist/chunk-VVXGQKN7.js.map +1 -0
- package/dist/chunk-XU3EFSQX.js +22 -0
- package/dist/chunk-XU3EFSQX.js.map +1 -0
- package/dist/chunk-YAVEMXXV.js +381 -0
- package/dist/chunk-YAVEMXXV.js.map +1 -0
- package/dist/chunk-ZIJQ7BXU.js +27 -0
- package/dist/chunk-ZIJQ7BXU.js.map +1 -0
- package/dist/detail-page-header.d.ts +3 -3
- package/dist/detail-page-header.js +5 -149
- package/dist/detail-page-header.js.map +1 -1
- package/dist/{dialog-CIdvylPK.d.ts → dialog-CPkbi5N3.d.ts} +10 -11
- package/dist/file-picker-field.d.ts +2 -2
- package/dist/file-picker-field.js +3 -163
- package/dist/file-picker-field.js.map +1 -1
- package/dist/file-viewer-dialog.d.ts +2 -2
- package/dist/file-viewer-dialog.js +12 -223
- package/dist/file-viewer-dialog.js.map +1 -1
- package/dist/floor-switcher.d.ts +2 -2
- package/dist/floor-switcher.js +13 -323
- package/dist/floor-switcher.js.map +1 -1
- package/dist/forms.js +1 -23
- package/dist/forms.js.map +1 -1
- package/dist/image-picker-field.d.ts +2 -2
- package/dist/image-picker-field.js +3 -48
- package/dist/image-picker-field.js.map +1 -1
- package/dist/layout-canvas-view.d.ts +2 -2
- package/dist/layout-canvas-view.js +17 -220
- package/dist/layout-canvas-view.js.map +1 -1
- package/dist/lib/dateDisplay.js +1 -82
- package/dist/lib/dateDisplay.js.map +1 -1
- package/dist/live-resource-meta.js +1 -25
- package/dist/live-resource-meta.js.map +1 -1
- package/dist/live-space-pulse-dot.d.ts +2 -2
- package/dist/live-space-pulse-dot.js +2 -16
- package/dist/live-space-pulse-dot.js.map +1 -1
- package/dist/notification-sidebar-preview.d.ts +3 -3
- package/dist/notification-sidebar-preview.js +3 -61
- package/dist/notification-sidebar-preview.js.map +1 -1
- package/dist/page-list-chrome.d.ts +25 -25
- package/dist/page-list-chrome.js +6 -968
- package/dist/page-list-chrome.js.map +1 -1
- package/dist/platform-support-message-composer.d.ts +4 -4
- package/dist/platform-support-message-composer.js +15 -218
- package/dist/platform-support-message-composer.js.map +1 -1
- package/dist/shell-sidebar-nav.js +8 -13
- package/dist/shell-sidebar-nav.js.map +1 -1
- package/dist/shell-theme.js +1 -7
- package/dist/shell-theme.js.map +1 -1
- package/dist/shell-top-bar-chrome.js +3 -103
- package/dist/shell-top-bar-chrome.js.map +1 -1
- package/dist/shell-top-bar.d.ts +3 -3
- package/dist/shell-top-bar.js +1 -69
- package/dist/shell-top-bar.js.map +1 -1
- package/dist/support-presence-status.d.ts +2 -2
- package/dist/support-presence-status.js +3 -41
- package/dist/support-presence-status.js.map +1 -1
- package/dist/theme-appearance-control.d.ts +2 -2
- package/dist/theme-appearance-control.js +4 -63
- package/dist/theme-appearance-control.js.map +1 -1
- package/dist/theme-boot-script.js +1 -2
- package/dist/theme-boot-script.js.map +1 -1
- package/dist/theme-provider.d.ts +2 -2
- package/dist/theme-provider.js +2 -23
- package/dist/theme-provider.js.map +1 -1
- package/dist/ui.d.ts +261 -262
- package/dist/ui.js +11 -5635
- package/dist/ui.js.map +1 -1
- package/package.json +11 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/booking-schedule.ts","../src/ui/utils.ts","../src/ui/time-field.tsx","../src/booking/analog-clock-picker.tsx","../src/booking/booking-schedule-calendars.tsx"],"names":["useState","jsxs","jsx"],"mappings":"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","file":"booking-schedule-calendars.js","sourcesContent":["/**\n * Date / schedule helpers used by booking-schedule calendars.\n * Copied from `@spacesync/client/domain/lib/pricing` so the client has no package dependency.\n */\n\nexport type RepeatType = \"none\" | \"daily\" | \"weekly\" | \"monthly\";\nexport type BookingMode = \"slots\" | \"schedule\";\n\n/** Editor state for slot / schedule / daily / item shaped tiers */\nexport interface BookingState {\n slotCount: number;\n bookingDate: string;\n bookingMode: BookingMode;\n scheduleDate: string;\n scheduleTime: string;\n repeatType: RepeatType;\n repeatEveryDays: number;\n repeatEveryWeeks: number;\n repeatOnDays: string[];\n repeatEveryMonths: number;\n repeatUntilDate: string;\n startDate: string;\n endDate: string;\n monthFrom: string;\n monthTo: string;\n weekFrom: string;\n weekCount: number;\n itemQuantity: number;\n /** Daily per-day tiers: single-day booking when true (endDate = startDate + 1 day). */\n oneDayBooking?: boolean;\n}\n\nexport const PRICING_TODAY = new Date().toISOString().split(\"T\")[0];\n\n/** First full month available: next month if today is past the 1st, else current month. */\nexport function computeMinMonth(): string {\n const d = new Date();\n if (d.getDate() === 1) {\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, \"0\")}`;\n }\n const n = new Date(d.getFullYear(), d.getMonth() + 1, 1);\n return `${n.getFullYear()}-${String(n.getMonth() + 1).padStart(2, \"0\")}`;\n}\n\n/** First full week available: next Monday unless today is already Monday. */\nexport function computeMinWeekStart(): string {\n const d = new Date();\n const day = d.getDay();\n if (day === 1) return d.toISOString().split(\"T\")[0];\n const skip = day === 0 ? 1 : 8 - day;\n d.setDate(d.getDate() + skip);\n return d.toISOString().split(\"T\")[0];\n}\n\nexport const MIN_MONTH =\n computeMinMonth() ||\n `${new Date().getFullYear()}-${String(new Date().getMonth() + 2).padStart(2, \"0\")}`;\nexport const MIN_WEEK_START = computeMinWeekStart() || PRICING_TODAY;\n\n/** True when today is not the 1st — meaning the current month is partial. */\nexport const IS_PARTIAL_MONTH = new Date().getDate() !== 1;\n\nexport function monthLabel(ym: string): string {\n const [y, m] = ym.split(\"-\").map(Number);\n return new Date(y, m - 1, 1).toLocaleDateString(\"en-US\", { month: \"long\", year: \"numeric\" });\n}\n\nexport function monthCount(from: string, to: string): number {\n if (!from || !to || !from.includes(\"-\") || !to.includes(\"-\")) return 0;\n const [fy, fm] = from.split(\"-\").map(Number);\n const [ty, tm] = to.split(\"-\").map(Number);\n return (ty - fy) * 12 + (tm - fm) + 1;\n}\n\nexport function weekRangeLabel(weekFrom: string, weekCount: number): string {\n if (!weekFrom || isNaN(new Date(weekFrom).getTime())) return \"—\";\n const end = new Date(weekFrom);\n end.setDate(end.getDate() + weekCount * 7 - 1);\n const s = new Date(weekFrom).toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" });\n const e = end.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\", year: \"numeric\" });\n return `${s} – ${e}`;\n}\n\nfunction parseDateOnly(date: string): Date {\n const [y, m, d] = date.split(\"-\").map(Number);\n return new Date(y, m - 1, d);\n}\n\nfunction formatDateOnly(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${day}`;\n}\n\nexport function diffDays(a: string, b: string): number {\n const da = parseDateOnly(a);\n const db = parseDateOnly(b);\n return Math.max(0, Math.round((db.getTime() - da.getTime()) / 86_400_000));\n}\n\nexport function addDays(date: string, days: number): string {\n const d = parseDateOnly(date);\n d.setDate(d.getDate() + days);\n return formatDateOnly(d);\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Clock } from \"lucide-react\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"./select\";\nimport { cn } from \"./utils\";\n\nconst SELECT_CONTENT_Z = \"z-[200]\";\n\nconst TIME_SELECT_TRIGGER_CLASS =\n \"border-white/20 bg-card/10 text-popover-foreground hover:bg-card/15 hover:border-white/30 focus-visible:border-blue-400/70 focus-visible:ring-blue-400/30 [&_svg:not([class*='text-'])]:text-white/60\";\n\nexport function parseHm(value: string): { h: number; m: number } | undefined {\n const m = /^([01]\\d|2[0-3]):([0-5]\\d)$/.exec(value.trim());\n if (!m) return undefined;\n const h = Number(m[1]);\n const min = Number(m[2]);\n if (h > 23 || min > 59) return undefined;\n return { h, m: min };\n}\n\nexport function toTimeStr(h: number, m: number): string {\n return `${String(h).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")}`;\n}\n\nexport function formatTimeForDisplay(value: string, timeFormat: \"12h\" | \"24h\"): string {\n const p = parseHm(value);\n if (!p) return value.trim() || \"—\";\n if (timeFormat === \"24h\") return toTimeStr(p.h, p.m);\n const ap = p.h >= 12 ? \"pm\" : \"am\";\n const h12 = p.h % 12 || 12;\n return `${String(h12).padStart(2, \"0\")}:${String(p.m).padStart(2, \"0\")} ${ap}`;\n}\n\nfunction split12(h24: number): { h12: number; ap: \"am\" | \"pm\" } {\n return { h12: h24 % 12 || 12, ap: h24 >= 12 ? \"pm\" : \"am\" };\n}\n\nfunction from12(h12: number, m: number, ap: \"am\" | \"pm\"): { h: number; m: number } {\n if (ap === \"am\") {\n return { h: h12 === 12 ? 0 : h12, m };\n }\n return { h: h12 === 12 ? 12 : h12 + 12, m };\n}\n\nconst HOURS_24 = Array.from({ length: 24 }, (_, i) => String(i).padStart(2, \"0\"));\nconst MINUTES = Array.from({ length: 60 }, (_, i) => String(i).padStart(2, \"0\"));\nconst HOURS_12 = Array.from({ length: 12 }, (_, i) => String(i + 1));\n\nexport function TimeField({\n value,\n onChange,\n disabled,\n id,\n placeholder = \"Select time\",\n triggerClassName,\n align = \"start\",\n timeFormat = \"24h\",\n}: {\n value: string;\n onChange: (v: string) => void;\n disabled?: boolean;\n id?: string;\n placeholder?: string;\n triggerClassName?: string;\n align?: \"start\" | \"center\" | \"end\";\n timeFormat?: \"12h\" | \"24h\";\n}) {\n const [open, setOpen] = React.useState(false);\n\n const parsed = parseHm(value);\n const editor = parsed ?? { h: 9, m: 0 };\n const label = parsed ? formatTimeForDisplay(value, timeFormat) : placeholder;\n const { h12, ap } = split12(editor.h);\n\n const setFrom24 = (h: number, m: number) => {\n onChange(toTimeStr(h, m));\n };\n\n return (\n <Popover modal={false} open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n id={id}\n disabled={disabled}\n className={cn(\n \"flex w-full min-w-0 items-center gap-2 rounded-md border border-border bg-card px-3 h-9 text-left text-sm text-muted-foreground outline-none transition-colors hover:bg-muted/80 focus-visible:border-blue-400 focus-visible:ring-[3px] focus-visible:ring-blue-500/25 disabled:cursor-not-allowed disabled:opacity-50\",\n triggerClassName,\n )}\n >\n <Clock size={13} className=\"shrink-0 text-muted-foreground\" aria-hidden />\n <span className={cn(\"min-w-0 flex-1 truncate\", !parsed && \"text-muted-foreground\")}>{label}</span>\n </button>\n </PopoverTrigger>\n <PopoverContent className=\"z-[100] w-auto p-3\" align={align}>\n {timeFormat === \"24h\" ? (\n <div className=\"flex items-center gap-2\">\n <Select\n value={String(editor.h).padStart(2, \"0\")}\n onValueChange={(v) => setFrom24(Number(v), editor.m)}\n >\n <SelectTrigger size=\"sm\" className={cn(\"h-8 w-[4.75rem] text-xs\", TIME_SELECT_TRIGGER_CLASS)}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent position=\"popper\" className={SELECT_CONTENT_Z}>\n {HOURS_24.map((h) => (\n <SelectItem key={h} value={h} className=\"text-xs\">\n {h}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <span className=\"text-xs font-medium text-white/60\">:</span>\n <Select\n value={String(editor.m).padStart(2, \"0\")}\n onValueChange={(v) => setFrom24(editor.h, Number(v))}\n >\n <SelectTrigger size=\"sm\" className={cn(\"h-8 w-[4.75rem] text-xs\", TIME_SELECT_TRIGGER_CLASS)}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent position=\"popper\" className={SELECT_CONTENT_Z}>\n {MINUTES.map((mi) => (\n <SelectItem key={mi} value={mi} className=\"text-xs\">\n {mi}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n <Select\n value={String(h12)}\n onValueChange={(v) => {\n const next = from12(Number(v), editor.m, ap);\n setFrom24(next.h, next.m);\n }}\n >\n <SelectTrigger size=\"sm\" className={cn(\"h-8 w-[3.75rem] text-xs\", TIME_SELECT_TRIGGER_CLASS)}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent position=\"popper\" className={SELECT_CONTENT_Z}>\n {HOURS_12.map((h) => (\n <SelectItem key={h} value={h} className=\"text-xs\">\n {h}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <span className=\"text-xs font-medium text-white/60\">:</span>\n <Select\n value={String(editor.m).padStart(2, \"0\")}\n onValueChange={(v) => {\n const next = from12(h12, Number(v), ap);\n setFrom24(next.h, next.m);\n }}\n >\n <SelectTrigger size=\"sm\" className={cn(\"h-8 w-[4.75rem] text-xs\", TIME_SELECT_TRIGGER_CLASS)}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent position=\"popper\" className={SELECT_CONTENT_Z}>\n {MINUTES.map((mi) => (\n <SelectItem key={mi} value={mi} className=\"text-xs\">\n {mi}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Select\n value={ap}\n onValueChange={(v) => {\n const next = from12(h12, editor.m, v as \"am\" | \"pm\");\n setFrom24(next.h, next.m);\n }}\n >\n <SelectTrigger size=\"sm\" className={cn(\"h-8 w-[4.25rem] text-xs\", TIME_SELECT_TRIGGER_CLASS)}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent position=\"popper\" className={SELECT_CONTENT_Z}>\n <SelectItem value=\"am\" className=\"text-xs\">\n am\n </SelectItem>\n <SelectItem value=\"pm\" className=\"text-xs\">\n pm\n </SelectItem>\n </SelectContent>\n </Select>\n </div>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n formatTimeForDisplay,\n parseHm,\n toTimeStr,\n} from \"../ui/time-field\";\nimport { cn } from \"../ui\";\n\nconst SIZE = 248;\nconst CX = SIZE / 2;\nconst CY = SIZE / 2;\nconst FACE_R = 98;\nconst HOUR_LABEL_R = 72;\nconst MINUTE_TICK_R = 84;\n\ntype ClockPhase = \"hour\" | \"minute\";\n\nfunction pointToAngleDeg(x: number, y: number): number {\n const dx = x - CX;\n const dy = y - CY;\n let deg = (Math.atan2(dy, dx) * 180) / Math.PI + 90;\n if (deg < 0) deg += 360;\n return deg;\n}\n\nfunction angleToHour12(deg: number): number {\n const h = Math.round(deg / 30) % 12;\n return h === 0 ? 12 : h;\n}\n\nfunction angleToHour24(deg: number): number {\n return Math.round(deg / 15) % 24;\n}\n\nfunction angleToMinute(deg: number): number {\n return Math.round(deg / 6) % 60;\n}\n\nfunction hour12To24(h12: number, ap: \"am\" | \"pm\"): number {\n if (ap === \"am\") return h12 === 12 ? 0 : h12;\n return h12 === 12 ? 12 : h12 + 12;\n}\n\nfunction hour24To12(h24: number): { h12: number; ap: \"am\" | \"pm\" } {\n return { h12: h24 % 12 || 12, ap: h24 >= 12 ? \"pm\" : \"am\" };\n}\n\nfunction handEnd(deg: number, length: number): { x: number; y: number } {\n const rad = ((deg - 90) * Math.PI) / 180;\n return { x: CX + Math.cos(rad) * length, y: CY + Math.sin(rad) * length };\n}\n\nfunction hourCenterDeg(h: number, timeFormat: \"12h\" | \"24h\"): number {\n if (timeFormat === \"24h\") return h * 15;\n return (h % 12) * 30;\n}\n\nfunction sectorPath(centerDeg: number, spread: number, radius: number): string {\n const start = handEnd(centerDeg - spread, radius);\n const end = handEnd(centerDeg + spread, radius);\n return `M ${CX} ${CY} L ${start.x} ${start.y} A ${radius} ${radius} 0 0 1 ${end.x} ${end.y} Z`;\n}\n\nfunction pointerTarget(\n clientX: number,\n clientY: number,\n svg: SVGSVGElement,\n phase: ClockPhase,\n timeFormat: \"12h\" | \"24h\",\n): number | null {\n const rect = svg.getBoundingClientRect();\n const scale = SIZE / rect.width;\n const x = (clientX - rect.left) * scale;\n const y = (clientY - rect.top) * scale;\n const dist = Math.hypot(x - CX, y - CY);\n if (dist < 24 || dist > FACE_R + 8) return null;\n\n const deg = pointToAngleDeg(x, y);\n if (phase === \"hour\") {\n return timeFormat === \"24h\" ? angleToHour24(deg) : angleToHour12(deg);\n }\n return angleToMinute(deg);\n}\n\nexport function AnalogClockPicker({\n value,\n onChange,\n timeFormat = \"24h\",\n className,\n}: {\n value: string;\n onChange: (v: string) => void;\n timeFormat?: \"12h\" | \"24h\";\n className?: string;\n}) {\n const svgRef = useRef<SVGSVGElement>(null);\n const parsed = parseHm(value);\n const editor = parsed ?? { h: 9, m: 0 };\n const { h12, ap } = hour24To12(editor.h);\n\n const [phase, setPhase] = useState<ClockPhase>(\"hour\");\n const [hoverTarget, setHoverTarget] = useState<number | null>(null);\n\n const setTime = useCallback(\n (h: number, m: number) => {\n onChange(toTimeStr(h, m));\n },\n [onChange],\n );\n\n const handlePointer = useCallback(\n (clientX: number, clientY: number) => {\n const svg = svgRef.current;\n if (!svg) return;\n const rect = svg.getBoundingClientRect();\n const scale = SIZE / rect.width;\n const x = (clientX - rect.left) * scale;\n const y = (clientY - rect.top) * scale;\n const deg = pointToAngleDeg(x, y);\n\n if (phase === \"hour\") {\n if (timeFormat === \"24h\") {\n const h24 = angleToHour24(deg);\n setTime(h24, editor.m);\n } else {\n const h = angleToHour12(deg);\n setTime(hour12To24(h, ap), editor.m);\n }\n setPhase(\"minute\");\n } else {\n const m = angleToMinute(deg);\n setTime(editor.h, m);\n }\n },\n [phase, timeFormat, ap, editor.h, editor.m, setTime],\n );\n\n const updateHover = useCallback(\n (clientX: number, clientY: number) => {\n const svg = svgRef.current;\n if (!svg) return;\n setHoverTarget(pointerTarget(clientX, clientY, svg, phase, timeFormat));\n },\n [phase, timeFormat],\n );\n\n const previewHour =\n phase === \"hour\" && hoverTarget != null\n ? timeFormat === \"24h\"\n ? hoverTarget\n : hour12To24(hoverTarget, ap)\n : editor.h;\n\n const previewMinute = phase === \"minute\" && hoverTarget != null ? hoverTarget : editor.m;\n\n const hourHandDeg = (previewHour % 12) * 30 + previewMinute * 0.5;\n const minuteHandDeg = previewMinute * 6;\n const hourEnd = handEnd(hourHandDeg, 46);\n const minuteEnd = handEnd(minuteHandDeg, 64);\n\n const selectedHourKey =\n timeFormat === \"24h\" ? editor.h : h12;\n const hoveredHourKey = phase === \"hour\" ? hoverTarget : null;\n\n const hourMarkers = useMemo(() => {\n if (timeFormat === \"24h\") {\n return Array.from({ length: 24 }, (_, h) => {\n const deg = h * 15;\n const rad = ((deg - 90) * Math.PI) / 180;\n const showLabel = h % 3 === 0;\n const r = showLabel ? HOUR_LABEL_R - 6 : HOUR_LABEL_R + 4;\n return {\n key: h,\n label: showLabel ? String(h).padStart(2, \"0\") : null,\n x: CX + Math.cos(rad) * r,\n y: CY + Math.sin(rad) * r,\n deg,\n h,\n };\n });\n }\n return Array.from({ length: 12 }, (_, i) => {\n const h = i === 0 ? 12 : i;\n const deg = h * 30;\n const rad = ((deg - 90) * Math.PI) / 180;\n return {\n key: h,\n label: String(h),\n x: CX + Math.cos(rad) * HOUR_LABEL_R,\n y: CY + Math.sin(rad) * HOUR_LABEL_R,\n deg,\n h,\n };\n });\n }, [timeFormat]);\n\n const minuteMarkers = useMemo(\n () =>\n Array.from({ length: 12 }, (_, i) => {\n const m = i * 5;\n const deg = m * 6;\n const rad = ((deg - 90) * Math.PI) / 180;\n const selected = editor.m === m;\n const hovered =\n hoverTarget != null && Math.round(hoverTarget / 5) * 5 === m;\n return {\n m,\n x: CX + Math.cos(rad) * MINUTE_TICK_R,\n y: CY + Math.sin(rad) * MINUTE_TICK_R,\n selected,\n hovered,\n };\n }),\n [editor.m, hoverTarget],\n );\n\n const displayTime = formatTimeForDisplay(value || toTimeStr(editor.h, editor.m), timeFormat);\n\n return (\n <div className={cn(\"flex flex-col items-center gap-4\", className)}>\n <div className=\"flex items-center gap-1 rounded-2xl border border-border bg-muted/60 px-4 py-2.5\">\n <button\n type=\"button\"\n onClick={() => setPhase(\"hour\")}\n className={cn(\n \"rounded-lg px-3 py-1 text-2xl font-semibold tabular-nums transition-colors\",\n phase === \"hour\"\n ? \"bg-blue-500 text-white shadow-sm\"\n : \"text-foreground hover:bg-accent\",\n )}\n >\n {timeFormat === \"24h\"\n ? String(editor.h).padStart(2, \"0\")\n : String(h12).padStart(2, \"0\")}\n </button>\n <span className=\"text-2xl font-semibold text-muted-foreground\">:</span>\n <button\n type=\"button\"\n onClick={() => setPhase(\"minute\")}\n className={cn(\n \"rounded-lg px-3 py-1 text-2xl font-semibold tabular-nums transition-colors\",\n phase === \"minute\"\n ? \"bg-blue-500 text-white shadow-sm\"\n : \"text-foreground hover:bg-accent\",\n )}\n >\n {String(editor.m).padStart(2, \"0\")}\n </button>\n {timeFormat === \"12h\" ? (\n <div className=\"ml-2 flex flex-col gap-0.5\">\n {([\"am\", \"pm\"] as const).map((p) => (\n <button\n key={p}\n type=\"button\"\n onClick={() => setTime(hour12To24(h12, p), editor.m)}\n className={cn(\n \"rounded-md px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide transition-colors\",\n ap === p\n ? \"bg-blue-100 text-blue-700 dark:bg-blue-950/50 dark:text-blue-300\"\n : \"text-muted-foreground hover:bg-accent\",\n )}\n >\n {p}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n\n <div className=\"relative\">\n <svg\n ref={svgRef}\n width={SIZE}\n height={SIZE}\n viewBox={`0 0 ${SIZE} ${SIZE}`}\n className=\"cursor-pointer touch-none select-none\"\n onClick={(e) => handlePointer(e.clientX, e.clientY)}\n onPointerMove={(e) => updateHover(e.clientX, e.clientY)}\n onPointerLeave={() => setHoverTarget(null)}\n onPointerDown={(e) => {\n e.preventDefault();\n handlePointer(e.clientX, e.clientY);\n }}\n >\n <circle cx={CX} cy={CY} r={FACE_R} className=\"fill-blue-50/80 dark:fill-blue-950/30\" />\n <circle\n cx={CX}\n cy={CY}\n r={FACE_R}\n className=\"fill-none stroke-border\"\n strokeWidth={1.5}\n />\n\n {phase === \"hour\" && hoverTarget != null ? (\n <path\n d={sectorPath(\n hourCenterDeg(hoverTarget, timeFormat),\n timeFormat === \"24h\" ? 7.5 : 15,\n FACE_R - 2,\n )}\n className=\"fill-blue-200/70 transition-opacity dark:fill-blue-500/25\"\n />\n ) : null}\n\n {phase === \"minute\" && hoverTarget != null ? (\n <path\n d={sectorPath(hoverTarget * 6, 3, FACE_R - 2)}\n className=\"fill-blue-200/70 transition-opacity dark:fill-blue-500/25\"\n />\n ) : null}\n\n {phase === \"hour\"\n ? hourMarkers.map((m) => {\n const isSelected = m.h === selectedHourKey || (timeFormat === \"12h\" && m.h === h12);\n const isHovered = m.h === hoveredHourKey;\n const active = isHovered || (isSelected && hoveredHourKey == null);\n return (\n <g key={m.key}>\n {active ? (\n <circle\n cx={m.x}\n cy={m.y}\n r={isHovered ? 18 : 16}\n className={cn(\n \"transition-all duration-100\",\n isHovered\n ? \"fill-blue-500 shadow-sm\"\n : \"fill-blue-400/90\",\n )}\n />\n ) : null}\n {m.label ? (\n <text\n x={m.x}\n y={m.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n className={cn(\n \"pointer-events-none text-[11px] font-semibold transition-colors duration-100\",\n active ? \"fill-white\" : \"fill-muted-foreground\",\n isHovered && \"text-[12px] font-bold\",\n )}\n >\n {m.label}\n </text>\n ) : (\n <circle\n cx={m.x}\n cy={m.y}\n r={isHovered ? 5 : 2}\n className={cn(\n \"pointer-events-none transition-all duration-100\",\n isHovered ? \"fill-white\" : \"fill-muted-foreground/40\",\n )}\n />\n )}\n </g>\n );\n })\n : minuteMarkers.map((m) => {\n const active = m.selected || m.hovered;\n return (\n <g key={m.m}>\n <circle\n cx={m.x}\n cy={m.y}\n r={m.hovered ? 16 : m.selected ? 14 : 4}\n className={cn(\n \"transition-all duration-100\",\n m.hovered\n ? \"fill-blue-400\"\n : m.selected\n ? \"fill-blue-500\"\n : \"fill-blue-200/80 dark:fill-blue-800/60\",\n )}\n />\n {active || m.m % 15 === 0 ? (\n <text\n x={m.x}\n y={m.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n className={cn(\n \"pointer-events-none text-[10px] font-semibold transition-colors duration-100\",\n active ? \"fill-white\" : \"fill-blue-700 dark:fill-blue-300\",\n )}\n >\n {String(m.m).padStart(2, \"0\")}\n </text>\n ) : null}\n </g>\n );\n })}\n\n <line\n x1={CX}\n y1={CY}\n x2={hourEnd.x}\n y2={hourEnd.y}\n className={cn(\n \"stroke-blue-600 transition-all duration-100 dark:stroke-blue-400\",\n phase === \"hour\" && hoverTarget != null && \"stroke-blue-500 opacity-90\",\n )}\n strokeWidth={3.5}\n strokeLinecap=\"round\"\n />\n <line\n x1={CX}\n y1={CY}\n x2={minuteEnd.x}\n y2={minuteEnd.y}\n className={cn(\n \"stroke-blue-500 transition-all duration-100 dark:stroke-blue-300\",\n phase === \"minute\" && hoverTarget != null && \"stroke-blue-400 opacity-90\",\n )}\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n />\n <circle cx={CX} cy={CY} r={5} className=\"fill-blue-600 dark:fill-blue-400\" />\n <circle cx={CX} cy={CY} r={2.5} className=\"fill-white\" />\n </svg>\n </div>\n\n <p className=\"text-center text-[11px] text-muted-foreground\">\n {phase === \"hour\" ? \"Hover or tap an hour\" : \"Hover or tap minutes · \"}\n <span className=\"font-medium text-foreground\">\n {hoverTarget != null && phase === \"hour\"\n ? formatTimeForDisplay(\n toTimeStr(\n timeFormat === \"24h\" ? hoverTarget : hour12To24(hoverTarget, ap),\n editor.m,\n ),\n timeFormat,\n )\n : hoverTarget != null && phase === \"minute\"\n ? formatTimeForDisplay(toTimeStr(editor.h, hoverTarget), timeFormat)\n : displayTime}\n </span>\n </p>\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { ChevronLeft, ChevronRight, Info } from \"lucide-react\";\nimport {\n IS_PARTIAL_MONTH,\n MIN_MONTH,\n MIN_WEEK_START,\n PRICING_TODAY,\n addDays,\n diffDays,\n monthCount,\n monthLabel,\n weekRangeLabel,\n type BookingState,\n} from \"../lib/booking-schedule\";\nimport { AnalogClockPicker } from \"./analog-clock-picker\";\nimport { formatTimeForDisplay } from \"../ui/time-field\";\nimport { 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 d.toISOString().split(\"T\")[0];\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 onChange,\n flat = false,\n}: {\n weekFrom: string;\n onChange: (v: string) => 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\n const days = getCalendarGrid(calYear, calMonth);\n const minDate = new Date((MIN_WEEK_START || PRICING_TODAY) + \"T00:00:00\");\n const selectedMonStr = weekFrom || null;\n const hoverMonStr = hoverMon;\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 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=\"mb-1 flex items-center justify-between px-1\">\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=\"mb-0.5 grid grid-cols-7\">\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className=\"py-0.5 text-center text-[10px] font-medium text-muted-foreground\">\n {d}\n </span>\n ))}\n </div>\n\n {weeks.map((week, wi) => {\n const mondayDate = week[0];\n const monStr = dayStr(mondayDate);\n const isSelectable = mondayDate >= minDate;\n const isSelected = monStr === selectedMonStr;\n const isHovered = monStr === hoverMonStr && isSelectable && !isSelected;\n\n return (\n <div\n key={wi}\n className={`flex cursor-pointer overflow-hidden rounded-xl transition-colors\n ${isSelected ? \"bg-blue-100\" : isHovered ? \"bg-blue-50\" : isSelectable ? \"hover:bg-accent\" : \"cursor-not-allowed\"}`}\n onMouseEnter={() => isSelectable && setHoverMon(monStr)}\n onMouseLeave={() => setHoverMon(null)}\n onClick={() => isSelectable && onChange(monStr)}\n >\n {week.map((d, di) => {\n const isCurrentMonth = d.getMonth() === calMonth;\n const isMon = di === 0;\n const isSelectedMon = isSelected && isMon;\n\n return (\n <div key={di} className=\"flex h-8 flex-1 items-center justify-center\">\n <span\n className={`\n flex h-7 w-7 items-center justify-center rounded-full text-[11px] transition-colors\n ${isSelectedMon ? \"bg-blue-500 font-semibold text-white\" : \"\"}\n ${!isSelectedMon && isSelected ? \"text-blue-700 dark:text-blue-400\" : \"\"}\n ${!isSelected && isSelectable && isCurrentMonth ? \"text-muted-foreground\" : \"\"}\n ${!isSelectable && isCurrentMonth ? \"text-muted-foreground/60\" : \"\"}\n ${!isCurrentMonth ? \"text-muted-foreground/60\" : \"\"}\n `}\n >\n {d.getDate()}\n </span>\n </div>\n );\n })}\n </div>\n );\n })}\n\n <p className=\"mt-1 text-center text-[10px] text-muted-foreground\">Click any row to select that week</p>\n </div>\n );\n}\n\nexport function MonthRangeCalendar({\n monthFrom,\n monthTo,\n onChange,\n flat = false,\n}: {\n monthFrom: string;\n monthTo: string;\n onChange: (from: string, to: string) => void;\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 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 = MIN_MONTH || `${new Date().getFullYear()}-01`;\n\n const [dispFrom, dispTo] = (() => {\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 (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 }\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 <div className={cn(\"flex items-center justify-between\", flat ? \"px-1\" : \"px-4 pb-2 pt-4\")}>\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\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 a month to set the start\n </>\n ) : (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 animate-pulse rounded-full bg-blue-500\" />\n Now click to set the end 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\n <div\n className={cn(\"grid grid-cols-4\", flat ? \"gap-2 py-1\" : \"px-2 pb-3 pt-1\")}\n style={flat ? undefined : { gap: 0 }}\n >\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 = 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) && !disabled;\n\n return (\n <div\n key={i}\n className={cn(\n \"relative\",\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\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 phase === \"from\" && actualCount > 0 ? \"border-border bg-muted\" : \"border-transparent\",\n ),\n )}\n >\n {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 ) : 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\">No months selected</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 return (\n <div className={cn(\"flex flex-col\", flat ? \"gap-5\" : \"gap-3\")}>\n {IS_PARTIAL_MONTH ? (\n <ScheduleInfoBanner>\n Today is {new Date(PRICING_TODAY).toLocaleDateString(\"en-US\", { month: \"long\", day: \"numeric\" })}.\n Current month is partially elapsed — earliest bookable month is{\" \"}\n <strong>{monthLabel(MIN_MONTH)}</strong>.\n </ScheduleInfoBanner>\n ) : null}\n <ScheduleFieldLabel>Select month range</ScheduleFieldLabel>\n <MonthRangeCalendar\n flat={flat}\n monthFrom={booking.monthFrom}\n monthTo={booking.monthTo}\n onChange={(from, to) => onChange({ monthFrom: from, monthTo: to })}\n />\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 rangeStr = weekRangeLabel(booking.weekFrom, booking.weekCount);\n const isCurrentWeekPartial = new Date(PRICING_TODAY).getDay() !== 1;\n\n return (\n <div className={cn(\"flex flex-col\", flat ? \"gap-5\" : \"gap-3\")}>\n {isCurrentWeekPartial ? (\n <ScheduleInfoBanner>\n This week started on a {new Date(PRICING_TODAY).toLocaleDateString(\"en-US\", { weekday: \"long\" })} — earliest\n full week begins{\" \"}\n <strong>\n {new Date(MIN_WEEK_START).toLocaleDateString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n })}\n </strong>\n .\n </ScheduleInfoBanner>\n ) : null}\n\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Starting week</ScheduleFieldLabel>\n <WeekCalendarPicker\n flat={flat}\n weekFrom={booking.weekFrom}\n onChange={(v) => onChange({ weekFrom: v })}\n />\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Number of weeks</ScheduleFieldLabel>\n <div className=\"flex items-center gap-3\">\n <ScheduleStepper\n value={booking.weekCount}\n max={52}\n onChange={(v) => onChange({ weekCount: v })}\n />\n <span className=\"text-xs text-muted-foreground\">\n {booking.weekCount} week{booking.weekCount !== 1 ? \"s\" : \"\"}\n </span>\n </div>\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 = PRICING_TODAY,\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=\"mb-1 flex items-center justify-between px-1\">\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=\"mb-0.5 grid grid-cols-7\">\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className=\"py-0.5 text-center text-[10px] font-medium text-muted-foreground\">\n {d}\n </span>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7\">\n {days.map((d) => {\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 !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 isSelected && \"bg-blue-500 font-semibold text-white shadow-sm\",\n !isSelected && isSelectable && isCurrentMonth && \"text-foreground hover:bg-accent\",\n !isSelected && isSelectable && !isCurrentMonth && \"text-muted-foreground hover:bg-accent\",\n !isSelectable && isCurrentMonth && \"text-muted-foreground/40\",\n !isSelectable && !isCurrentMonth && \"text-muted-foreground/30\",\n )}\n >\n {d.getDate()}\n </span>\n </button>\n );\n })}\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 = PRICING_TODAY,\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 className=\"mb-1 flex items-center justify-between px-1\">\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\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=\"mb-0.5 grid grid-cols-7\">\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className=\"py-0.5 text-center text-[10px] font-medium text-muted-foreground\">\n {d}\n </span>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7\">\n {days.map((d) => {\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 = 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 !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 ? \"left-1/2 right-0 rounded-l-full\" : isEnd ? \"left-0 right-1/2 rounded-r-full\" : \"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 (isStart || isEnd || isSingle) && \"bg-blue-500 font-semibold text-white shadow-sm\",\n !isStart && !isEnd && !isSingle && inRange && \"font-medium text-blue-700 dark:text-blue-400\",\n !inRange && isSelectable && isCurrentMonth && \"text-foreground hover:bg-accent\",\n !inRange && isSelectable && !isCurrentMonth && \"text-muted-foreground hover:bg-accent\",\n !isSelectable && isCurrentMonth && \"text-muted-foreground/40\",\n !isSelectable && !isCurrentMonth && \"text-muted-foreground/30\",\n )}\n >\n {d.getDate()}\n </span>\n </button>\n );\n })}\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 <div className=\"flex gap-2\">\n {(\n [\n { key: true, label: \"Single day\" },\n { key: false, label: \"Multiple days\" },\n ] as const\n ).map(({ key, label }) => (\n <button\n key={String(key)}\n type=\"button\"\n onClick={() => {\n const start = booking.startDate || PRICING_TODAY;\n if (key) {\n onChange({ oneDayBooking: true, startDate: start, endDate: addDays(start, 1) });\n } else {\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 className={cn(\n \"flex h-9 flex-1 items-center justify-center rounded-xl border text-sm font-medium transition-colors\",\n oneDay === key\n ? \"border-blue-400 bg-blue-50 text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\"\n : \"border-border bg-card text-muted-foreground hover:bg-accent\",\n )}\n >\n {label}\n </button>\n ))}\n </div>\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\nexport function HourlySchedulePicker({\n scheduleDate,\n scheduleTime,\n onChange,\n timeFormat = \"24h\",\n flat = true,\n}: {\n scheduleDate: string;\n scheduleTime: string;\n onChange: (patch: { scheduleDate?: string; scheduleTime?: string }) => void;\n timeFormat?: \"12h\" | \"24h\";\n flat?: boolean;\n}) {\n const [step, setStep] = useState<HourlyPickerStep>(() => (scheduleDate ? \"time\" : \"date\"));\n\n useEffect(() => {\n if (!scheduleDate) setStep(\"date\");\n }, [scheduleDate]);\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 !scheduleDate && \"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={PRICING_TODAY}\n onChange={(v) => {\n onChange({ scheduleDate: 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 <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Pick a time</ScheduleFieldLabel>\n <div className=\"flex justify-center rounded-2xl border border-border bg-card py-6\">\n <AnalogClockPicker\n value={scheduleTime}\n onChange={(v) => onChange({ scheduleTime: v })}\n timeFormat={timeFormat}\n />\n </div>\n </div>\n\n {scheduleDate && scheduleTime ? (\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(scheduleTime, timeFormat)}\n </span>\n </div>\n </div>\n ) : null}\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/booking-schedule.ts","../src/booking/booking-schedule-calendars.tsx"],"names":[],"mappings":"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","file":"booking-schedule-calendars.js","sourcesContent":["/**\n * Date / schedule helpers used by booking-schedule calendars.\n * Copied from `@spacesync/client/domain/lib/pricing` so the client has no package dependency.\n */\n\nexport type RepeatType = \"none\" | \"daily\" | \"weekly\" | \"monthly\";\nexport type BookingMode = \"slots\" | \"schedule\";\n\n/** Editor state for slot / schedule / daily / item shaped tiers */\nexport interface BookingState {\n slotCount: number;\n bookingDate: string;\n bookingMode: BookingMode;\n scheduleDate: string;\n scheduleTime: string;\n repeatType: RepeatType;\n repeatEveryDays: number;\n repeatEveryWeeks: number;\n repeatOnDays: string[];\n repeatEveryMonths: number;\n repeatUntilDate: string;\n startDate: string;\n endDate: string;\n monthFrom: string;\n monthTo: string;\n weekFrom: string;\n weekCount: number;\n itemQuantity: number;\n /** Daily per-day tiers: single-day booking when true (endDate = startDate + 1 day). */\n oneDayBooking?: boolean;\n}\n\nexport const PRICING_TODAY = new Date().toISOString().split(\"T\")[0];\n\n/** First full month available: next month if today is past the 1st, else current month. */\nexport function computeMinMonth(): string {\n const d = new Date();\n if (d.getDate() === 1) {\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, \"0\")}`;\n }\n const n = new Date(d.getFullYear(), d.getMonth() + 1, 1);\n return `${n.getFullYear()}-${String(n.getMonth() + 1).padStart(2, \"0\")}`;\n}\n\n/** First full week available: next Monday unless today is already Monday. */\nexport function computeMinWeekStart(): string {\n const d = new Date();\n const day = d.getDay();\n if (day === 1) return d.toISOString().split(\"T\")[0];\n const skip = day === 0 ? 1 : 8 - day;\n d.setDate(d.getDate() + skip);\n return d.toISOString().split(\"T\")[0];\n}\n\nexport const MIN_MONTH =\n computeMinMonth() ||\n `${new Date().getFullYear()}-${String(new Date().getMonth() + 2).padStart(2, \"0\")}`;\nexport const MIN_WEEK_START = computeMinWeekStart() || PRICING_TODAY;\n\n/** True when today is not the 1st — meaning the current month is partial. */\nexport const IS_PARTIAL_MONTH = new Date().getDate() !== 1;\n\nexport function monthLabel(ym: string): string {\n const [y, m] = ym.split(\"-\").map(Number);\n return new Date(y, m - 1, 1).toLocaleDateString(\"en-US\", { month: \"long\", year: \"numeric\" });\n}\n\nexport function monthCount(from: string, to: string): number {\n if (!from || !to || !from.includes(\"-\") || !to.includes(\"-\")) return 0;\n const [fy, fm] = from.split(\"-\").map(Number);\n const [ty, tm] = to.split(\"-\").map(Number);\n return (ty - fy) * 12 + (tm - fm) + 1;\n}\n\nexport function weekRangeLabel(weekFrom: string, weekCount: number): string {\n if (!weekFrom || isNaN(new Date(weekFrom).getTime())) return \"—\";\n const end = new Date(weekFrom);\n end.setDate(end.getDate() + weekCount * 7 - 1);\n const s = new Date(weekFrom).toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" });\n const e = end.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\", year: \"numeric\" });\n return `${s} – ${e}`;\n}\n\nfunction parseDateOnly(date: string): Date {\n const [y, m, d] = date.split(\"-\").map(Number);\n return new Date(y, m - 1, d);\n}\n\nfunction formatDateOnly(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${day}`;\n}\n\nexport function diffDays(a: string, b: string): number {\n const da = parseDateOnly(a);\n const db = parseDateOnly(b);\n return Math.max(0, Math.round((db.getTime() - da.getTime()) / 86_400_000));\n}\n\nexport function addDays(date: string, days: number): string {\n const d = parseDateOnly(date);\n d.setDate(d.getDate() + days);\n return formatDateOnly(d);\n}\n","import { useEffect, useState } from \"react\";\nimport { ChevronLeft, ChevronRight, Info } from \"lucide-react\";\nimport {\n IS_PARTIAL_MONTH,\n MIN_MONTH,\n MIN_WEEK_START,\n PRICING_TODAY,\n addDays,\n diffDays,\n monthCount,\n monthLabel,\n weekRangeLabel,\n type BookingState,\n} from \"../lib/booking-schedule\";\nimport { AnalogClockPicker } from \"./analog-clock-picker\";\nimport { formatTimeForDisplay } from \"../ui/time-field\";\nimport { 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 d.toISOString().split(\"T\")[0];\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 onChange,\n flat = false,\n}: {\n weekFrom: string;\n onChange: (v: string) => 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\n const days = getCalendarGrid(calYear, calMonth);\n const minDate = new Date((MIN_WEEK_START || PRICING_TODAY) + \"T00:00:00\");\n const selectedMonStr = weekFrom || null;\n const hoverMonStr = hoverMon;\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 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=\"mb-1 flex items-center justify-between px-1\">\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=\"mb-0.5 grid grid-cols-7\">\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className=\"py-0.5 text-center text-[10px] font-medium text-muted-foreground\">\n {d}\n </span>\n ))}\n </div>\n\n {weeks.map((week, wi) => {\n const mondayDate = week[0];\n const monStr = dayStr(mondayDate);\n const isSelectable = mondayDate >= minDate;\n const isSelected = monStr === selectedMonStr;\n const isHovered = monStr === hoverMonStr && isSelectable && !isSelected;\n\n return (\n <div\n key={wi}\n className={`flex cursor-pointer overflow-hidden rounded-xl transition-colors\n ${isSelected ? \"bg-blue-100\" : isHovered ? \"bg-blue-50\" : isSelectable ? \"hover:bg-accent\" : \"cursor-not-allowed\"}`}\n onMouseEnter={() => isSelectable && setHoverMon(monStr)}\n onMouseLeave={() => setHoverMon(null)}\n onClick={() => isSelectable && onChange(monStr)}\n >\n {week.map((d, di) => {\n const isCurrentMonth = d.getMonth() === calMonth;\n const isMon = di === 0;\n const isSelectedMon = isSelected && isMon;\n\n return (\n <div key={di} className=\"flex h-8 flex-1 items-center justify-center\">\n <span\n className={`\n flex h-7 w-7 items-center justify-center rounded-full text-[11px] transition-colors\n ${isSelectedMon ? \"bg-blue-500 font-semibold text-white\" : \"\"}\n ${!isSelectedMon && isSelected ? \"text-blue-700 dark:text-blue-400\" : \"\"}\n ${!isSelected && isSelectable && isCurrentMonth ? \"text-muted-foreground\" : \"\"}\n ${!isSelectable && isCurrentMonth ? \"text-muted-foreground/60\" : \"\"}\n ${!isCurrentMonth ? \"text-muted-foreground/60\" : \"\"}\n `}\n >\n {d.getDate()}\n </span>\n </div>\n );\n })}\n </div>\n );\n })}\n\n <p className=\"mt-1 text-center text-[10px] text-muted-foreground\">Click any row to select that week</p>\n </div>\n );\n}\n\nexport function MonthRangeCalendar({\n monthFrom,\n monthTo,\n onChange,\n flat = false,\n}: {\n monthFrom: string;\n monthTo: string;\n onChange: (from: string, to: string) => void;\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 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 = MIN_MONTH || `${new Date().getFullYear()}-01`;\n\n const [dispFrom, dispTo] = (() => {\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 (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 }\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 <div className={cn(\"flex items-center justify-between\", flat ? \"px-1\" : \"px-4 pb-2 pt-4\")}>\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\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 a month to set the start\n </>\n ) : (\n <>\n <span className=\"h-1.5 w-1.5 shrink-0 animate-pulse rounded-full bg-blue-500\" />\n Now click to set the end 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\n <div\n className={cn(\"grid grid-cols-4\", flat ? \"gap-2 py-1\" : \"px-2 pb-3 pt-1\")}\n style={flat ? undefined : { gap: 0 }}\n >\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 = 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) && !disabled;\n\n return (\n <div\n key={i}\n className={cn(\n \"relative\",\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\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 phase === \"from\" && actualCount > 0 ? \"border-border bg-muted\" : \"border-transparent\",\n ),\n )}\n >\n {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 ) : 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\">No months selected</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 return (\n <div className={cn(\"flex flex-col\", flat ? \"gap-5\" : \"gap-3\")}>\n {IS_PARTIAL_MONTH ? (\n <ScheduleInfoBanner>\n Today is {new Date(PRICING_TODAY).toLocaleDateString(\"en-US\", { month: \"long\", day: \"numeric\" })}.\n Current month is partially elapsed — earliest bookable month is{\" \"}\n <strong>{monthLabel(MIN_MONTH)}</strong>.\n </ScheduleInfoBanner>\n ) : null}\n <ScheduleFieldLabel>Select month range</ScheduleFieldLabel>\n <MonthRangeCalendar\n flat={flat}\n monthFrom={booking.monthFrom}\n monthTo={booking.monthTo}\n onChange={(from, to) => onChange({ monthFrom: from, monthTo: to })}\n />\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 rangeStr = weekRangeLabel(booking.weekFrom, booking.weekCount);\n const isCurrentWeekPartial = new Date(PRICING_TODAY).getDay() !== 1;\n\n return (\n <div className={cn(\"flex flex-col\", flat ? \"gap-5\" : \"gap-3\")}>\n {isCurrentWeekPartial ? (\n <ScheduleInfoBanner>\n This week started on a {new Date(PRICING_TODAY).toLocaleDateString(\"en-US\", { weekday: \"long\" })} — earliest\n full week begins{\" \"}\n <strong>\n {new Date(MIN_WEEK_START).toLocaleDateString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n })}\n </strong>\n .\n </ScheduleInfoBanner>\n ) : null}\n\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Starting week</ScheduleFieldLabel>\n <WeekCalendarPicker\n flat={flat}\n weekFrom={booking.weekFrom}\n onChange={(v) => onChange({ weekFrom: v })}\n />\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Number of weeks</ScheduleFieldLabel>\n <div className=\"flex items-center gap-3\">\n <ScheduleStepper\n value={booking.weekCount}\n max={52}\n onChange={(v) => onChange({ weekCount: v })}\n />\n <span className=\"text-xs text-muted-foreground\">\n {booking.weekCount} week{booking.weekCount !== 1 ? \"s\" : \"\"}\n </span>\n </div>\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 = PRICING_TODAY,\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=\"mb-1 flex items-center justify-between px-1\">\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=\"mb-0.5 grid grid-cols-7\">\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className=\"py-0.5 text-center text-[10px] font-medium text-muted-foreground\">\n {d}\n </span>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7\">\n {days.map((d) => {\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 !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 isSelected && \"bg-blue-500 font-semibold text-white shadow-sm\",\n !isSelected && isSelectable && isCurrentMonth && \"text-foreground hover:bg-accent\",\n !isSelected && isSelectable && !isCurrentMonth && \"text-muted-foreground hover:bg-accent\",\n !isSelectable && isCurrentMonth && \"text-muted-foreground/40\",\n !isSelectable && !isCurrentMonth && \"text-muted-foreground/30\",\n )}\n >\n {d.getDate()}\n </span>\n </button>\n );\n })}\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 = PRICING_TODAY,\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 className=\"mb-1 flex items-center justify-between px-1\">\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\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=\"mb-0.5 grid grid-cols-7\">\n {[\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"].map((d) => (\n <span key={d} className=\"py-0.5 text-center text-[10px] font-medium text-muted-foreground\">\n {d}\n </span>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7\">\n {days.map((d) => {\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 = 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 !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 ? \"left-1/2 right-0 rounded-l-full\" : isEnd ? \"left-0 right-1/2 rounded-r-full\" : \"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 (isStart || isEnd || isSingle) && \"bg-blue-500 font-semibold text-white shadow-sm\",\n !isStart && !isEnd && !isSingle && inRange && \"font-medium text-blue-700 dark:text-blue-400\",\n !inRange && isSelectable && isCurrentMonth && \"text-foreground hover:bg-accent\",\n !inRange && isSelectable && !isCurrentMonth && \"text-muted-foreground hover:bg-accent\",\n !isSelectable && isCurrentMonth && \"text-muted-foreground/40\",\n !isSelectable && !isCurrentMonth && \"text-muted-foreground/30\",\n )}\n >\n {d.getDate()}\n </span>\n </button>\n );\n })}\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 <div className=\"flex gap-2\">\n {(\n [\n { key: true, label: \"Single day\" },\n { key: false, label: \"Multiple days\" },\n ] as const\n ).map(({ key, label }) => (\n <button\n key={String(key)}\n type=\"button\"\n onClick={() => {\n const start = booking.startDate || PRICING_TODAY;\n if (key) {\n onChange({ oneDayBooking: true, startDate: start, endDate: addDays(start, 1) });\n } else {\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 className={cn(\n \"flex h-9 flex-1 items-center justify-center rounded-xl border text-sm font-medium transition-colors\",\n oneDay === key\n ? \"border-blue-400 bg-blue-50 text-blue-600 dark:bg-blue-950/40 dark:text-blue-400\"\n : \"border-border bg-card text-muted-foreground hover:bg-accent\",\n )}\n >\n {label}\n </button>\n ))}\n </div>\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\nexport function HourlySchedulePicker({\n scheduleDate,\n scheduleTime,\n onChange,\n timeFormat = \"24h\",\n flat = true,\n}: {\n scheduleDate: string;\n scheduleTime: string;\n onChange: (patch: { scheduleDate?: string; scheduleTime?: string }) => void;\n timeFormat?: \"12h\" | \"24h\";\n flat?: boolean;\n}) {\n const [step, setStep] = useState<HourlyPickerStep>(() => (scheduleDate ? \"time\" : \"date\"));\n\n useEffect(() => {\n if (!scheduleDate) setStep(\"date\");\n }, [scheduleDate]);\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 !scheduleDate && \"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={PRICING_TODAY}\n onChange={(v) => {\n onChange({ scheduleDate: 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 <div className=\"flex flex-col gap-1.5\">\n <ScheduleFieldLabel>Pick a time</ScheduleFieldLabel>\n <div className=\"flex justify-center rounded-2xl border border-border bg-card py-6\">\n <AnalogClockPicker\n value={scheduleTime}\n onChange={(v) => onChange({ scheduleTime: v })}\n timeFormat={timeFormat}\n />\n </div>\n </div>\n\n {scheduleDate && scheduleTime ? (\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(scheduleTime, timeFormat)}\n </span>\n </div>\n </div>\n ) : null}\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
|
|
4
3
|
declare function useChatStickToBottom(opts: {
|
|
@@ -17,6 +16,6 @@ declare function ChatNewMessagesButton({ count, onClick, className, }: {
|
|
|
17
16
|
count: number;
|
|
18
17
|
onClick: () => void;
|
|
19
18
|
className?: string;
|
|
20
|
-
}):
|
|
19
|
+
}): React.JSX.Element | null;
|
|
21
20
|
|
|
22
21
|
export { ChatNewMessagesButton, useChatStickToBottom };
|
|
@@ -1,54 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import './chunk-4A6RCBB5.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-LUB7QWGU.js';
|
|
8
|
+
import { Button } from './chunk-VHINHHZQ.js';
|
|
9
|
+
import './chunk-FCY5FYJB.js';
|
|
10
|
+
import './chunk-OWNUMPUC.js';
|
|
11
|
+
import { cn } from './chunk-DMPSQ22Q.js';
|
|
2
12
|
import { useRef, useState, useCallback, useEffect, useLayoutEffect } from 'react';
|
|
3
13
|
import { ChevronDown } from 'lucide-react';
|
|
4
|
-
import {
|
|
5
|
-
import { twMerge } from 'tailwind-merge';
|
|
6
|
-
import { Slot } from '@radix-ui/react-slot';
|
|
7
|
-
import { cva } from 'class-variance-authority';
|
|
8
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
14
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
9
15
|
|
|
10
|
-
// src/support/chat-stick-to-bottom.tsx
|
|
11
|
-
function cn(...inputs) {
|
|
12
|
-
return twMerge(clsx(inputs));
|
|
13
|
-
}
|
|
14
|
-
var buttonVariants = cva(
|
|
15
|
-
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium cursor-pointer transition-all disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
16
|
-
{
|
|
17
|
-
variants: {
|
|
18
|
-
variant: {
|
|
19
|
-
default: "bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80 active:scale-[0.98]",
|
|
20
|
-
destructive: "bg-destructive text-white hover:bg-destructive/90 active:bg-destructive/80 active:scale-[0.98] focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 dark:active:bg-destructive/70",
|
|
21
|
-
outline: "border bg-background text-foreground hover:bg-accent hover:text-accent-foreground active:bg-accent/80 active:scale-[0.98] dark:bg-input/30 dark:border-input dark:hover:bg-input/50 dark:active:bg-input/60",
|
|
22
|
-
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70 active:scale-[0.98]",
|
|
23
|
-
ghost: "hover:bg-accent hover:text-accent-foreground active:bg-accent/90 active:scale-[0.98] dark:hover:bg-accent/50 dark:active:bg-accent/40",
|
|
24
|
-
link: "text-primary underline-offset-4 hover:underline active:text-primary/80"
|
|
25
|
-
},
|
|
26
|
-
size: {
|
|
27
|
-
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
28
|
-
sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
|
|
29
|
-
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
|
30
|
-
icon: "size-9 rounded-md"
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
defaultVariants: {
|
|
34
|
-
variant: "default",
|
|
35
|
-
size: "default"
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
);
|
|
39
|
-
var Button = React.forwardRef(function Button2({ className, variant, size, asChild = false, ...props }, ref) {
|
|
40
|
-
const Comp = asChild ? Slot : "button";
|
|
41
|
-
return /* @__PURE__ */ jsx(
|
|
42
|
-
Comp,
|
|
43
|
-
{
|
|
44
|
-
ref,
|
|
45
|
-
"data-slot": "button",
|
|
46
|
-
className: cn(buttonVariants({ variant, size }), className),
|
|
47
|
-
...props
|
|
48
|
-
}
|
|
49
|
-
);
|
|
50
|
-
});
|
|
51
|
-
Button.displayName = "Button";
|
|
52
16
|
var NEAR_BOTTOM_PX = 80;
|
|
53
17
|
function isNearBottom(el) {
|
|
54
18
|
return el.scrollHeight - el.scrollTop - el.clientHeight <= NEAR_BOTTOM_PX;
|