From abf78cbbb5fd2675140b3d392aab375a7cb19ecb Mon Sep 17 00:00:00 2001 From: dekun Date: Sat, 13 Jun 2026 09:06:37 +0800 Subject: [PATCH] Use lunar calendar input for birth date with solar conversion display. Add LunarBirthPicker for bazi and combined forms, converting lunar input to solar for chart calculation. Co-authored-by: Cursor --- components/modes/bazi-form.tsx | 12 +- components/modes/combined-form.tsx | 13 ++- components/shared/lunar-birth-picker.tsx | 139 +++++++++++++++++++++++ lib/calc/lunar-date.ts | 79 +++++++++++++ types/lunar-javascript.d.ts | 17 +++ 5 files changed, 250 insertions(+), 10 deletions(-) create mode 100644 components/shared/lunar-birth-picker.tsx create mode 100644 lib/calc/lunar-date.ts diff --git a/components/modes/bazi-form.tsx b/components/modes/bazi-form.tsx index c41efca..861fe9f 100644 --- a/components/modes/bazi-form.tsx +++ b/components/modes/bazi-form.tsx @@ -8,7 +8,9 @@ import { ZenCard } from "@/components/ui/zen-card"; import { ModeWorkspace } from "@/components/layout/mode-workspace"; import ResultAI from "@/components/result-ai"; import BaziChartDisplay from "@/components/modes/bazi-chart"; -import DateTimePicker, { nowDateString } from "@/components/shared/datetime-picker"; +import LunarBirthPicker, { + todaySolarYmd, +} from "@/components/shared/lunar-birth-picker"; import RegionSelect, { useRegionLocation, } from "@/components/shared/region-select"; @@ -16,7 +18,7 @@ import { calculateBazi, type BaziChart } from "@/lib/calc/bazi"; import { streamAiCompletion } from "@/lib/ai/client-stream"; export default function BaziForm() { - const [date, setDate] = useState(nowDateString()); + const [date, setDate] = useState(todaySolarYmd()); const [time, setTime] = useState("12:00"); const [unknownHour, setUnknownHour] = useState(false); const [gender, setGender] = useState<"male" | "female">("male"); @@ -110,12 +112,12 @@ export default function BaziForm() { } > -