import type { Field } from '@/types/field' type DisabledDateChecker = (time: Date) => boolean function parseIsoBoundaryDate(value: string | undefined): Date | null { if (!value) return null const parts = String(value).split('-') if (parts.length !== 3) return null const date = new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2])) return Number.isNaN(date.getTime()) ? null : date } /** Lite path: disable only dates outside configured min/max (ISO YYYY-MM-DD). */ export function createLiteMinMaxDisabledDate(field: Field): DisabledDateChecker { const minDate = parseIsoBoundaryDate(field.minDateValue as string | undefined) const maxDate = parseIsoBoundaryDate(field.maxDateValue as string | undefined) return (time: Date) => { if (minDate && time < minDate) return true if (maxDate && time > maxDate) return true return false } } export function resolveDateFieldDisabledDate(field: Field, weekStart: number): DisabledDateChecker { const proResolver = window.IvyForms?.hooks?.resolveDateFieldDisabledDate if (proResolver) { const proChecker = proResolver(field, weekStart) if (proChecker) { return proChecker } } return createLiteMinMaxDisabledDate(field) }