@bookinglab/booking-ui-react 1.13.0 → 1.15.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/BookingForm.tsx","../src/utils/validators.ts","../src/components/RegistrationForm.tsx","../src/components/ContactDetailsForm.tsx","../src/components/ResetPasswordForm.tsx","../../../node_modules/date-fns/toDate.mjs","../../../node_modules/date-fns/constructFrom.mjs","../../../node_modules/date-fns/addDays.mjs","../../../node_modules/date-fns/constants.mjs","../../../node_modules/date-fns/_lib/defaultOptions.mjs","../../../node_modules/date-fns/startOfWeek.mjs","../../../node_modules/date-fns/startOfISOWeek.mjs","../../../node_modules/date-fns/getISOWeekYear.mjs","../../../node_modules/date-fns/startOfDay.mjs","../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.mjs","../../../node_modules/date-fns/startOfISOWeekYear.mjs","../../../node_modules/date-fns/isDate.mjs","../../../node_modules/date-fns/isValid.mjs","../../../node_modules/date-fns/locale/en-US/_lib/formatDistance.mjs","../../../node_modules/date-fns/locale/_lib/buildFormatLongFn.mjs","../../../node_modules/date-fns/locale/en-US/_lib/formatLong.mjs","../../../node_modules/date-fns/locale/en-US/_lib/formatRelative.mjs","../../../node_modules/date-fns/locale/_lib/buildLocalizeFn.mjs","../../../node_modules/date-fns/locale/en-US/_lib/localize.mjs","../../../node_modules/date-fns/locale/_lib/buildMatchFn.mjs","../../../node_modules/date-fns/locale/_lib/buildMatchPatternFn.mjs","../../../node_modules/date-fns/locale/en-US/_lib/match.mjs","../../../node_modules/date-fns/locale/en-US.mjs","../../../node_modules/date-fns/getISOWeek.mjs","../../../node_modules/date-fns/getWeekYear.mjs","../../../node_modules/date-fns/startOfWeekYear.mjs","../../../node_modules/date-fns/getWeek.mjs","../../../node_modules/date-fns/_lib/format/longFormatters.mjs","../../../node_modules/date-fns/_lib/protectedTokens.mjs","../../../node_modules/date-fns/getDefaultOptions.mjs","../../../node_modules/date-fns/getISODay.mjs","../../../node_modules/date-fns/isAfter.mjs","../../../node_modules/date-fns/isBefore.mjs","../../../node_modules/date-fns/transpose.mjs","../../../node_modules/date-fns/parse/_lib/Setter.mjs","../../../node_modules/date-fns/parse/_lib/Parser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/EraParser.mjs","../../../node_modules/date-fns/parse/_lib/constants.mjs","../../../node_modules/date-fns/parse/_lib/utils.mjs","../../../node_modules/date-fns/parse/_lib/parsers/YearParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/QuarterParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/MonthParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.mjs","../../../node_modules/date-fns/setWeek.mjs","../../../node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.mjs","../../../node_modules/date-fns/setISOWeek.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/DateParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.mjs","../../../node_modules/date-fns/setDay.mjs","../../../node_modules/date-fns/parse/_lib/parsers/DayParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/LocalDayParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.mjs","../../../node_modules/date-fns/setISODay.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ISODayParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/AMPMParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/MinuteParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/SecondParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers.mjs","../../../node_modules/date-fns/parse.mjs","../src/types/schema-form-builder.ts","../src/utils/formSchemaApi.ts","../src/components/SchemaFormBuilder.tsx"],"names":["isValid","useState","useCallback","jsxs","jsx","cx","forwardRef","useId","useImperativeHandle","useEffect","defaultOptions","formatLong","getDefaultOptions","match"],"mappings":"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","file":"index.mjs","sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport type { Question, FormValues, FormErrors, BookingFormProps, BookingFormClassNames } from '../types';\n\n/** Merge base classes with optional custom classes */\nconst cx = (...classes: (string | undefined)[]) => classes.filter(Boolean).join(' ');\n\n/**\n * Three-input (day/month/year) date field with local state for parts.\n * Emits a combined YYYY-MM-DD string when fully valid, or '' otherwise.\n */\nfunction DateInputGroup({\n question,\n value,\n onChange,\n inputId,\n hasError,\n errorId,\n fieldsetCls,\n legendCls,\n groupCls,\n itemCls,\n sublabelCls,\n dateInputCls,\n helpTextAbove,\n helpTextBelow,\n renderError,\n}: {\n question: Question;\n value: string;\n onChange: (value: string | number | boolean) => void;\n inputId: string;\n hasError: boolean;\n errorId: string;\n fieldsetCls: string;\n legendCls: string;\n groupCls: string;\n itemCls: string;\n sublabelCls: string;\n dateInputCls: string;\n helpTextAbove: React.ReactNode;\n helpTextBelow: React.ReactNode;\n renderError: () => React.ReactNode;\n}) {\n\n const parseValue = (raw: string) => {\n const m = raw.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (!m) return { day: '', month: '', year: '' };\n return { year: m[1], month: String(Number(m[2])), day: String(Number(m[3])) };\n };\n\n const [parts, setParts] = useState(() => parseValue(value));\n const lastEmittedRef = React.useRef<string>(value);\n\n // Sync from external value changes (but not echoes of our own emits)\n useEffect(() => {\n if (value !== lastEmittedRef.current) {\n setParts(parseValue(value));\n lastEmittedRef.current = value;\n }\n }, [value]);\n\n const buildValue = (d: string, m: string, y: string): string => {\n if (!/^\\d{1,2}$/.test(d) || !/^\\d{1,2}$/.test(m) || !/^\\d{4}$/.test(y)) return '';\n const dn = Number(d), mn = Number(m), yn = Number(y);\n const date = new Date(yn, mn - 1, dn);\n if (date.getFullYear() !== yn || date.getMonth() !== mn - 1 || date.getDate() !== dn) return '';\n return `${String(yn).padStart(4, '0')}-${String(mn).padStart(2, '0')}-${String(dn).padStart(2, '0')}`;\n };\n\n const handleSubChange = (part: 'day' | 'month' | 'year', v: string) => {\n const sanitized = v.replace(/[^\\d]/g, '');\n const max = part === 'year' ? 4 : 2;\n const next = { ...parts, [part]: sanitized.slice(0, max) };\n setParts(next);\n const combined = buildValue(next.day, next.month, next.year);\n lastEmittedRef.current = combined;\n onChange(combined);\n };\n\n const dayId = `${inputId}-day`;\n const monthId = `${inputId}-month`;\n const yearId = `${inputId}-year`;\n\n return (\n <fieldset className={fieldsetCls} aria-describedby={hasError ? errorId : undefined}>\n\n <legend className={legendCls}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </legend>\n {helpTextAbove}\n <div className={groupCls} role=\"group\">\n <div className={itemCls}>\n <label htmlFor={dayId} className={sublabelCls}>Day</label>\n <input\n id={dayId}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={2}\n value={parts.day}\n onChange={(e) => handleSubChange('day', e.target.value)}\n className={cx(dateInputCls, 'w-16')}\n aria-invalid={hasError ? true : undefined}\n aria-required={question.required || undefined}\n />\n </div>\n <div className={itemCls}>\n <label htmlFor={monthId} className={sublabelCls}>Month</label>\n <input\n id={monthId}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={2}\n value={parts.month}\n onChange={(e) => handleSubChange('month', e.target.value)}\n className={cx(dateInputCls, 'w-16')}\n aria-invalid={hasError ? true : undefined}\n aria-required={question.required || undefined}\n />\n </div>\n <div className={itemCls}>\n <label htmlFor={yearId} className={sublabelCls}>Year</label>\n <input\n id={yearId}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={4}\n value={parts.year}\n onChange={(e) => handleSubChange('year', e.target.value)}\n className={cx(dateInputCls, 'w-24')}\n aria-invalid={hasError ? true : undefined}\n aria-required={question.required || undefined}\n />\n </div>\n </div>\n {helpTextBelow}\n {renderError()}\n </fieldset>\n );\n}\n\n\n\n/**\n * Renders a single form field based on question type\n */\nfunction FormField({\n question,\n value,\n error,\n onChange,\n classNames,\n displayHelpTextBelowLabel = false,\n}: {\n question: Question;\n value: string | number | boolean | undefined;\n error?: string;\n onChange: (value: string | number | boolean) => void;\n classNames?: BookingFormClassNames;\n displayHelpTextBelowLabel?: boolean;\n}) {\n const inputId = `question-${question.id}`;\n const errorId = `${inputId}-error`;\n const hasError = !!error;\n\n // Default classes (can be overridden via classNames prop)\n const defaultFieldWrapper = 'mb-4';\n const defaultLabel = 'block text-sm font-medium mb-1 text-gray-700';\n const defaultHeading = 'text-lg font-semibold text-gray-900 mt-4 mb-2 first:mt-0';\n const defaultInput = 'w-full px-3 py-2 border rounded-md text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-offset-1 border-gray-300 focus:ring-blue-500 focus:border-blue-500';\n const defaultInputError = 'border-red-500 focus:ring-red-500';\n const defaultCheckbox = 'mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500';\n const defaultHelpText = 'mt-1 text-xs text-gray-500';\n const defaultErrorText = 'mt-1 text-xs text-red-600';\n\n const inputClasses = hasError\n ? cx(classNames?.input ?? defaultInput, classNames?.inputError ?? defaultInputError)\n : cx(classNames?.input ?? defaultInput);\n\n const labelClasses = classNames?.label ?? defaultLabel;\n const checkboxLabelClasses = cx('text-sm', classNames?.label ?? 'text-gray-700');\n\n const renderLabel = () => {\n if (question.detail_type === 'heading') return null;\n return (\n <label htmlFor={inputId} className={labelClasses}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n );\n };\n\n const renderHelpText = () => {\n if (!question.help_text) return null;\n return (\n <p\n className={classNames?.helpText ?? defaultHelpText}\n dangerouslySetInnerHTML={{ __html: question.help_text }}\n />\n );\n };\n\n const helpTextAbove = displayHelpTextBelowLabel ? renderHelpText() : null;\n const helpTextBelow = displayHelpTextBelowLabel ? null : renderHelpText();\n\n const renderError = () => {\n if (!error) return null;\n return (\n <p id={errorId} className={classNames?.errorText ?? defaultErrorText} role=\"alert\">\n {error}\n </p>\n );\n };\n\n\n const ariaProps = {\n 'aria-invalid': hasError ? true : undefined,\n 'aria-describedby': hasError ? errorId : undefined,\n 'aria-required': question.required || undefined,\n };\n\n switch (question.detail_type) {\n case 'heading':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n <h3 className={classNames?.heading ?? defaultHeading}>\n {question.name}\n </h3>\n {renderHelpText()}\n </div>\n );\n\n case 'text_field':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n {helpTextAbove}\n <input\n id={inputId}\n type=\"text\"\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={question.settings?.placeholder}\n className={inputClasses}\n {...ariaProps}\n />\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n case 'text_area':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n {helpTextAbove}\n <textarea\n id={inputId}\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={question.settings?.placeholder}\n rows={4}\n className={inputClasses}\n {...ariaProps}\n />\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n case 'select':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n {helpTextAbove}\n <select\n id={inputId}\n value={(value as string | number) ?? ''}\n onChange={(e) => onChange(e.target.value)}\n className={inputClasses}\n {...ariaProps}\n >\n <option value=\"\">Select an option</option>\n {question.options?.map((option) => (\n <option key={option.id} value={option.id}>\n {option.name}\n </option>\n ))}\n </select>\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n case 'radio':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n {helpTextAbove}\n <div\n role=\"radiogroup\"\n aria-labelledby={inputId}\n className={classNames?.radioGroup ?? 'flex flex-col gap-2 mt-1'}\n >\n {question.options?.map((option) => {\n const optionId = `${inputId}-${option.id}`;\n return (\n <div key={option.id} className=\"flex items-center gap-2\">\n <input\n id={optionId}\n type=\"radio\"\n name={inputId}\n value={option.id}\n checked={String(value ?? '') === String(option.id)}\n onChange={() => onChange(option.id)}\n className={classNames?.radio ?? 'h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500'}\n {...ariaProps}\n />\n <label htmlFor={optionId} className={classNames?.radioLabel ?? cx('text-sm', classNames?.label ?? 'text-gray-700')}>\n {option.name}\n </label>\n </div>\n );\n })}\n </div>\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n case 'date': {\n const dateInputBase = classNames?.dateInput ?? classNames?.input ?? defaultInput;\n const dateInputCls = hasError\n ? cx(dateInputBase, classNames?.inputError ?? defaultInputError)\n : dateInputBase;\n const sublabelCls =\n classNames?.dateInputLabel ?? 'block text-xs font-medium mb-1 text-gray-700';\n const itemCls = classNames?.dateInputItem ?? 'flex flex-col';\n const groupCls = classNames?.dateInputGroup ?? 'flex flex-row gap-3 items-end';\n const legendCls = classNames?.dateLegend ?? labelClasses;\n const fieldsetCls = classNames?.dateFieldset ?? (classNames?.fieldWrapper ?? defaultFieldWrapper);\n\n return (\n <DateInputGroup\n question={question}\n value={typeof value === 'string' ? value : ''}\n onChange={onChange}\n inputId={inputId}\n hasError={hasError}\n errorId={errorId}\n fieldsetCls={fieldsetCls}\n legendCls={legendCls}\n groupCls={groupCls}\n itemCls={itemCls}\n sublabelCls={sublabelCls}\n dateInputCls={dateInputCls}\n helpTextAbove={helpTextAbove}\n helpTextBelow={helpTextBelow}\n renderError={renderError}\n />\n );\n }\n\n case 'number':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n {helpTextAbove}\n <input\n id={inputId}\n type=\"number\"\n value={(value as number) ?? ''}\n onChange={(e) => onChange(e.target.value ? Number(e.target.value) : '')}\n min={question.settings?.min}\n max={question.settings?.max}\n placeholder={question.settings?.placeholder}\n className={inputClasses}\n {...ariaProps}\n />\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n case 'check':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {helpTextAbove}\n <div className=\"flex items-start gap-2\">\n <input\n id={inputId}\n type=\"checkbox\"\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n className={classNames?.checkbox ?? defaultCheckbox}\n {...ariaProps}\n />\n <label htmlFor={inputId} className={checkboxLabelClasses}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n </div>\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n\n default:\n return null;\n }\n}\n\n/**\n * BookingForm - A dynamic form component for booking questions\n *\n * @example\n * ```tsx\n * const questions: Question[] = [\n * { id: 1, name: 'Personal Details', detail_type: 'heading' },\n * { id: 2, name: 'Full Name', detail_type: 'text_field', required: true },\n * { id: 3, name: 'Email', detail_type: 'text_field', required: true },\n * ];\n *\n * <BookingForm\n * questions={questions}\n * onSubmit={(values) => console.log(values)}\n * />\n * ```\n */\nexport function BookingForm({\n questions,\n onSubmit,\n submitLabel = 'Submit',\n isAdmin = false,\n displayHelpTextBelowLabel = false,\n className = '',\n labelClassName,\n classNames: classNamesProp,\n}: BookingFormProps) {\n // Merge deprecated labelClassName into classNames for backwards compatibility\n const classNames: BookingFormClassNames = {\n ...classNamesProp,\n label: classNamesProp?.label ?? labelClassName,\n };\n const [values, setValues] = useState<FormValues>({});\n const [errors, setErrors] = useState<FormErrors>({});\n const [touched, setTouched] = useState<Record<number, boolean>>({});\n\n\n // Check if a question should be visible based on conditional settings\n const isQuestionVisible = useCallback(\n (question: Question): boolean => {\n const { settings } = question;\n if (!settings?.conditional_answers) {\n return true;\n }\n\n const conditionalAnswers = settings.conditional_answers as Record<string, unknown>;\n const conditionalQuestion = (settings as { conditional_question?: string | number })\n .conditional_question;\n\n // Build candidate strings (id + name) for a given question's current value\n const buildCandidates = (questionId: number): Set<string> => {\n const currentValue = (values as Record<string, unknown>)[String(questionId)];\n const candidates = new Set<string>();\n if (currentValue === undefined || currentValue === '' || currentValue === null) {\n return candidates;\n }\n\n const addCandidate = (v: unknown) => {\n if (v === undefined || v === null) return;\n const s = String(v).trim();\n if (s) candidates.add(s);\n };\n\n const normalizedCurrent =\n typeof currentValue === 'object' && currentValue !== null && 'id' in (currentValue as any)\n ? (currentValue as any)\n : currentValue;\n\n if (typeof normalizedCurrent === 'object' && normalizedCurrent !== null) {\n addCandidate((normalizedCurrent as any).id);\n addCandidate((normalizedCurrent as any).name);\n } else {\n addCandidate(normalizedCurrent);\n }\n\n const sourceQuestion = questions.find((q) => q.id === questionId);\n if (\n (sourceQuestion?.detail_type === 'select' || sourceQuestion?.detail_type === 'radio') &&\n sourceQuestion.options?.length\n ) {\n const currentStr = [...candidates][0] ?? '';\n const optionById = sourceQuestion.options.find((o) => String(o.id) === currentStr);\n const optionByName = sourceQuestion.options.find(\n (o) => String(o.name).trim() === currentStr\n );\n const opt = optionById ?? optionByName;\n if (opt) {\n addCandidate(opt.id);\n addCandidate(opt.name);\n }\n }\n\n return candidates;\n };\n\n const isTruthyFlag = (v: unknown): boolean => {\n if (v === undefined || v === null) return true;\n if (typeof v === 'boolean') return v;\n if (typeof v === 'number') return v !== 0;\n if (typeof v === 'string') {\n const s = v.trim().toLowerCase();\n return s !== '' && s !== '0' && s !== 'false';\n }\n return !!v;\n };\n\n // JRNI format: `conditional_question` identifies the source question,\n // and the keys of `conditional_answers` are the acceptable option ids/names\n // on that source question (value is a truthy flag).\n if (conditionalQuestion !== undefined && conditionalQuestion !== null && conditionalQuestion !== '') {\n const sourceId = Number(conditionalQuestion);\n if (!Number.isFinite(sourceId)) return true;\n const candidates = buildCandidates(sourceId);\n if (candidates.size === 0) return false;\n const entries = Object.entries(conditionalAnswers);\n if (entries.length === 0) return true;\n return entries.some(\n ([optionKey, flag]) => isTruthyFlag(flag) && candidates.has(String(optionKey).trim())\n );\n }\n\n // Legacy format: keys of `conditional_answers` are question ids.\n const conditionEntries = Object.entries(conditionalAnswers);\n if (conditionEntries.length === 0) {\n return true;\n }\n\n return conditionEntries.some(([questionIdStr, expectedAnswer]) => {\n const questionId = Number(questionIdStr);\n const candidates = buildCandidates(questionId);\n if (candidates.size === 0) return false;\n\n const matchesScalar = (expected: unknown) => {\n const expectedStr = String(expected).trim();\n return candidates.has(expectedStr);\n };\n\n if (Array.isArray(expectedAnswer)) {\n return expectedAnswer.some((v) => matchesScalar(v));\n }\n\n if (expectedAnswer && typeof expectedAnswer === 'object') {\n const expectedMap = expectedAnswer as Record<string, unknown>;\n for (const c of candidates) {\n if (Object.prototype.hasOwnProperty.call(expectedMap, c)) {\n const flag = expectedMap[c];\n return flag === undefined ? true : !!flag;\n }\n }\n return false;\n }\n\n return matchesScalar(expectedAnswer);\n });\n },\n [values, questions]\n );\n\n\n // Get visible questions\n const visibleQuestions = questions\n .filter((q) => isAdmin || !q.admin_only)\n .filter(isQuestionVisible);\n\n\n // Validate a single field\n const validateField = useCallback((question: Question, value: FormValues[number]): string | null => {\n if (question.detail_type === 'heading') return null;\n\n if (question.required) {\n if (value === undefined || value === '' || value === null) {\n return `${question.name} is required`;\n }\n if (question.detail_type === 'check' && !value) {\n return `${question.name} must be checked`;\n }\n }\n\n if (question.detail_type === 'number' && value !== '' && value !== undefined) {\n const numValue = Number(value);\n if (question.settings?.min !== undefined && numValue < question.settings.min) {\n return `Minimum value is ${question.settings.min}`;\n }\n if (question.settings?.max !== undefined && numValue > question.settings.max) {\n return `Maximum value is ${question.settings.max}`;\n }\n }\n\n return null;\n }, []);\n\n // Validate all visible fields\n const validateAll = useCallback((): boolean => {\n const newErrors: FormErrors = {};\n let isValid = true;\n\n visibleQuestions.forEach((question) => {\n const error = validateField(question, values[question.id]);\n if (error) {\n newErrors[question.id] = error;\n isValid = false;\n }\n });\n\n setErrors(newErrors);\n return isValid;\n }, [visibleQuestions, values, validateField]);\n\n // Clear errors for hidden questions\n useEffect(() => {\n const visibleIds = new Set(visibleQuestions.map((q) => q.id));\n\n setErrors((prev) => {\n let changed = false;\n const next = { ...prev };\n\n Object.keys(next).forEach((idStr) => {\n const id = Number(idStr);\n if (!visibleIds.has(id)) {\n delete next[id];\n changed = true;\n }\n });\n\n return changed ? next : prev;\n });\n }, [visibleQuestions]);\n\n const handleChange = (questionId: number, value: string | number | boolean) => {\n setValues((prev) => ({ ...prev, [questionId]: value }));\n setTouched((prev) => ({ ...prev, [questionId]: true }));\n\n // Clear error on change if touched\n if (touched[questionId]) {\n const question = questions.find((q) => q.id === questionId);\n if (question) {\n const error = validateField(question, value);\n setErrors((prev) => {\n if (error) {\n return { ...prev, [questionId]: error };\n }\n const { [questionId]: _, ...rest } = prev;\n return rest;\n });\n }\n }\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n\n // Mark all fields as touched\n const allTouched: Record<number, boolean> = {};\n visibleQuestions.forEach((q) => {\n allTouched[q.id] = true;\n });\n setTouched(allTouched);\n\n if (validateAll()) {\n // Only include visible question values\n const visibleValues: FormValues = {};\n visibleQuestions.forEach((q) => {\n if (q.detail_type !== 'heading' && values[q.id] !== undefined) {\n visibleValues[q.id] = values[q.id];\n }\n });\n onSubmit(visibleValues);\n }\n };\n\n const defaultButton = 'w-full mt-4 px-4 py-2 bg-blue-600 text-white font-medium rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors';\n\n return (\n <form onSubmit={handleSubmit} className={className} noValidate>\n {visibleQuestions.map((question) => (\n <FormField\n key={question.id}\n question={question}\n value={values[question.id]}\n error={touched[question.id] ? errors[question.id] : undefined}\n onChange={(value) => handleChange(question.id, value)}\n classNames={classNames}\n displayHelpTextBelowLabel={displayHelpTextBelowLabel}\n />\n\n ))}\n <button\n type=\"submit\"\n className={classNames?.button ?? defaultButton}\n >\n {submitLabel}\n </button>\n </form>\n );\n}\n\nexport default BookingForm;\n","/**\n * Validation helper functions for form fields\n * Each validator returns an error message string if invalid, or null if valid\n */\n\n/**\n * Validates that a value is not empty\n */\nexport function required(value: string): string | null {\n if (!value || value.trim() === '') {\n return 'This field is required';\n }\n return null;\n}\n\n/**\n * Validates email format (RFC 5322 compliant)\n */\nexport function email(value: string): string | null {\n if (!value) return null; // Let required handle empty values\n \n const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n \n if (!emailRegex.test(value)) {\n return 'Please enter a valid email address';\n }\n return null;\n}\n\n/**\n * Validates phone number format (international)\n * Accepts formats like: +44 1234 567890, 01onal234 567890, +1-234-567-8900\n */\nexport function phone(value: string): string | null {\n if (!value) return null; // Let required handle empty values\n \n // Remove all spaces, dashes, and parentheses for validation\n const cleaned = value.replace(/[\\s\\-\\(\\)]/g, '');\n \n // Check for valid phone format: optional + followed by 7-15 digits\n const phoneRegex = /^\\+?[0-9]{7,15}$/;\n \n if (!phoneRegex.test(cleaned)) {\n return 'Please enter a valid phone number';\n }\n return null;\n}\n\n/**\n * Validates UK postcode format\n * Accepts formats like: SW1A 1AA, SW1A1AA, M1 1AA, B33 8TH\n */\nexport function ukPostcode(value: string): string | null {\n if (!value) return null; // Let required handle empty values\n \n // UK postcode regex - covers all valid formats\n const postcodeRegex = /^([A-Z]{1,2}[0-9][A-Z0-9]? ?[0-9][A-Z]{2})$/i;\n \n if (!postcodeRegex.test(value.trim())) {\n return 'Please enter a valid UK postcode';\n }\n return null;\n}\n\n/**\n * Creates a minimum length validator\n * @param min - Minimum number of characters required\n */\nexport function minLen(min: number): (value: string) => string | null {\n return (value: string) => {\n if (!value) return null; // Let required handle empty values\n \n if (value.trim().length < min) {\n return `Must be at least ${min} character${min === 1 ? '' : 's'}`;\n }\n return null;\n };\n}\n\n/**\n * Combines multiple validators into one\n * Returns the first error encountered, or null if all pass\n */\nexport function compose(\n ...validators: Array<(value: string) => string | null>\n): (value: string) => string | null {\n return (value: string) => {\n for (const validator of validators) {\n const error = validator(value);\n if (error) return error;\n }\n return null;\n };\n}\n","import React, {\n useState,\n useCallback,\n useImperativeHandle,\n forwardRef,\n useId,\n} from 'react';\nimport type {\n FieldConfig,\n RegistrationFormProps,\n RegistrationFormRef,\n RegistrationFormValues,\n RegistrationFormErrors,\n} from '../types/registration';\nimport { required, email, phone, ukPostcode, compose } from '../utils/validators';\n\n/**\n * Default field configuration for the registration form.\n *\n * Field order:\n * First name, Last name, Email, Verify email, Password, Confirm password,\n * Contact number, Address 1, Address 2, Town/City, Postcode\n */\nconst DEFAULT_FIELDS: FieldConfig[] = [\n {\n name: 'firstName',\n label: 'First name',\n type: 'text',\n required: true,\n validate: required,\n },\n {\n name: 'lastName',\n label: 'Last name',\n type: 'text',\n required: true,\n validate: required,\n },\n {\n name: 'email',\n label: 'Email address',\n type: 'email',\n required: true,\n validate: compose(required, email),\n },\n {\n name: 'verifyEmail',\n label: 'Verify email address',\n type: 'email',\n required: true,\n // Cross-field validation is handled in the component\n validate: required,\n },\n {\n name: 'phone',\n label: 'Contact number',\n type: 'tel',\n required: false,\n validate: phone,\n },\n {\n name: 'password',\n label: 'Password',\n type: 'password',\n required: true,\n validate: required,\n },\n {\n name: 'confirmPassword',\n label: 'Confirm password',\n type: 'password',\n required: true,\n validate: required,\n },\n {\n name: 'address1',\n label: 'Address 1',\n type: 'text',\n required: true,\n validate: required,\n },\n {\n name: 'address2',\n label: 'Address 2',\n type: 'text',\n required: false,\n },\n {\n name: 'city',\n label: 'Town/City',\n type: 'text',\n required: true,\n validate: required,\n },\n {\n name: 'postcode',\n label: 'Postcode',\n type: 'text',\n required: true,\n validate: compose(required, ukPostcode),\n },\n];\n\n/** Fields that can be hidden via fieldSettings */\nconst HIDEABLE_FIELDS = ['address1', 'address2', 'city', 'postcode'] as const;\n\n/**\n * A reusable, accessible registration form component.\n *\n * Features:\n * - Customizable fields via props\n * - Built-in validation with blur and submit triggers\n * - Email and password confirmation with matching validation\n * - fieldSettings prop to hide address fields\n * - Checkbox field type support for custom questions\n * - Full accessibility support (ARIA attributes, keyboard navigation)\n * - Imperative handle for programmatic control (reset, setValues)\n * - Granular styling via classNames prop\n *\n * @example\n * ```tsx\n * const formRef = useRef<RegistrationFormRef>(null);\n *\n * <RegistrationForm\n * ref={formRef}\n * onSubmit={(values) => console.log(values)}\n * onChange={(values, isValid) => console.log(isValid)}\n * submitLabel=\"Register\"\n * fieldSettings={{ address2: { hidden: true }, postcode: { hidden: true } }}\n * />\n *\n * // Programmatic control\n * formRef.current?.reset();\n * formRef.current?.setValues({ email: 'test@example.com' });\n * ```\n */\nexport const RegistrationForm = forwardRef<RegistrationFormRef, RegistrationFormProps>(\n (\n {\n fields = DEFAULT_FIELDS,\n additionalFields,\n onSubmit,\n onChange,\n validateOnBlur = true,\n submitLabel = 'Submit',\n className = '',\n classNames = {},\n fieldSettings = {},\n },\n ref\n ) => {\n const formId = useId();\n const [values, setValues] = useState<RegistrationFormValues>({});\n const [errors, setErrors] = useState<RegistrationFormErrors>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n // Filter hidden fields and merge with additional fields\n const visibleFields = fields.filter((field) => {\n if ((HIDEABLE_FIELDS as readonly string[]).includes(field.name)) {\n const setting = fieldSettings[field.name as keyof typeof fieldSettings];\n if (setting?.hidden) return false;\n }\n return true;\n });\n\n const allFields = additionalFields ? [...visibleFields, ...additionalFields] : visibleFields;\n\n /**\n * Cross-field matching validation\n */\n const validateMatching = useCallback(\n (fieldName: string, value: string, currentValues: RegistrationFormValues): string | null => {\n if (fieldName === 'verifyEmail') {\n if (value && currentValues.email && value !== currentValues.email) {\n return 'Email addresses do not match';\n }\n }\n if (fieldName === 'confirmPassword') {\n if (value && currentValues.password && value !== currentValues.password) {\n return 'Passwords do not match';\n }\n }\n return null;\n },\n []\n );\n\n /**\n * Validate a single field\n */\n const validateField = useCallback(\n (field: FieldConfig, value: string, currentValues: RegistrationFormValues): string | null => {\n // Check required first\n if (field.required && (!value || value.trim() === '')) {\n return 'This field is required';\n }\n // Run custom validator if value is present\n if (field.validate && value) {\n const error = field.validate(value);\n if (error) return error;\n }\n // Cross-field matching validation\n const matchError = validateMatching(field.name, value, currentValues);\n if (matchError) return matchError;\n\n return null;\n },\n [validateMatching]\n );\n\n /**\n * Validate all fields and return whether form is valid\n */\n const validateAll = useCallback((): boolean => {\n const newErrors: RegistrationFormErrors = {};\n let isValid = true;\n\n for (const field of allFields) {\n const value = values[field.name] || '';\n const error = validateField(field, value, values);\n if (error) {\n newErrors[field.name] = error;\n isValid = false;\n }\n }\n\n setErrors(newErrors);\n return isValid;\n }, [allFields, values, validateField]);\n\n /**\n * Check if current form state is valid (without updating errors)\n */\n const checkIsValid = useCallback(\n (currentValues: RegistrationFormValues): boolean => {\n for (const field of allFields) {\n const value = currentValues[field.name] || '';\n const error = validateField(field, value, currentValues);\n if (error) return false;\n }\n return true;\n },\n [allFields, validateField]\n );\n\n /**\n * Handle input change\n */\n const handleChange = useCallback(\n (fieldName: string, value: string) => {\n const newValues = { ...values, [fieldName]: value };\n setValues(newValues);\n\n // Clear error if field was touched and is now valid\n if (touched[fieldName]) {\n const field = allFields.find((f) => f.name === fieldName);\n if (field) {\n const error = validateField(field, value, newValues);\n if (!error) {\n setErrors((prev) => {\n const next = { ...prev };\n delete next[fieldName];\n return next;\n });\n }\n }\n }\n\n // Also re-validate the paired field if it's been touched\n if (fieldName === 'email' && touched.verifyEmail) {\n const verifyField = allFields.find((f) => f.name === 'verifyEmail');\n if (verifyField) {\n const verifyError = validateField(verifyField, newValues.verifyEmail || '', newValues);\n setErrors((prev) => {\n const next = { ...prev };\n if (verifyError) {\n next.verifyEmail = verifyError;\n } else {\n delete next.verifyEmail;\n }\n return next;\n });\n }\n }\n if (fieldName === 'password' && touched.confirmPassword) {\n const confirmField = allFields.find((f) => f.name === 'confirmPassword');\n if (confirmField) {\n const confirmError = validateField(confirmField, newValues.confirmPassword || '', newValues);\n setErrors((prev) => {\n const next = { ...prev };\n if (confirmError) {\n next.confirmPassword = confirmError;\n } else {\n delete next.confirmPassword;\n }\n return next;\n });\n }\n }\n\n // Call onChange callback\n if (onChange) {\n const isValid = checkIsValid(newValues);\n onChange(newValues, isValid);\n }\n },\n [values, touched, allFields, validateField, onChange, checkIsValid]\n );\n\n /**\n * Handle checkbox change\n */\n const handleCheckboxChange = useCallback(\n (fieldName: string, checked: boolean) => {\n const value = checked ? 'true' : '';\n handleChange(fieldName, value);\n },\n [handleChange]\n );\n\n /**\n * Handle input blur\n */\n const handleBlur = useCallback(\n (fieldName: string) => {\n setTouched((prev) => ({ ...prev, [fieldName]: true }));\n\n if (validateOnBlur) {\n const field = allFields.find((f) => f.name === fieldName);\n if (field) {\n const value = values[fieldName] || '';\n const error = validateField(field, value, values);\n if (error) {\n setErrors((prev) => ({ ...prev, [fieldName]: error }));\n } else {\n setErrors((prev) => {\n const next = { ...prev };\n delete next[fieldName];\n return next;\n });\n }\n }\n }\n },\n [validateOnBlur, allFields, values, validateField]\n );\n\n /**\n * Handle form submission\n */\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n\n // Mark all fields as touched\n const allTouched: Record<string, boolean> = {};\n for (const field of allFields) {\n allTouched[field.name] = true;\n }\n setTouched(allTouched);\n\n // Validate all and submit if valid\n if (validateAll()) {\n onSubmit(values);\n }\n },\n [allFields, validateAll, onSubmit, values]\n );\n\n /**\n * Expose imperative methods via ref\n */\n useImperativeHandle(\n ref,\n () => ({\n reset: () => {\n setValues({});\n setErrors({});\n setTouched({});\n },\n setValues: (newValues: Partial<RegistrationFormValues>) => {\n setValues((prev) => {\n const merged = { ...prev };\n for (const [key, value] of Object.entries(newValues)) {\n if (value !== undefined) {\n merged[key] = value;\n }\n }\n return merged;\n });\n },\n }),\n []\n );\n\n // Default styles\n const styles = {\n fieldWrapper: classNames.fieldWrapper || 'mb-4',\n label: classNames.label || 'block text-sm font-medium mb-1',\n input: classNames.input || 'w-full px-3 py-2 border rounded-md',\n inputError: classNames.inputError || 'border-red-500',\n checkbox: classNames.checkbox || '',\n checkboxWrapper: classNames.checkboxWrapper || 'flex items-center gap-2',\n errorText: classNames.errorText || 'mt-1 text-xs text-red-600',\n button:\n classNames.button ||\n 'w-full mt-4 px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 disabled:opacity-50',\n };\n\n return (\n <form onSubmit={handleSubmit} className={className} noValidate>\n {allFields.map((field) => {\n const fieldId = `${formId}-${field.name}`;\n const errorId = `${fieldId}-error`;\n const value = values[field.name] || '';\n const error = errors[field.name];\n const isTouched = touched[field.name];\n const showError = isTouched && error;\n\n // Checkbox rendering\n if (field.type === 'check') {\n return (\n <div key={field.name} className={styles.fieldWrapper}>\n <div className={styles.checkboxWrapper}>\n <input\n id={fieldId}\n name={field.name}\n type=\"checkbox\"\n checked={value === 'true'}\n onChange={(e) => handleCheckboxChange(field.name, e.target.checked)}\n onBlur={() => handleBlur(field.name)}\n className={`${styles.checkbox} ${showError ? styles.inputError : ''}`}\n aria-invalid={showError ? 'true' : 'false'}\n aria-describedby={showError ? errorId : undefined}\n aria-required={field.required ? 'true' : 'false'}\n />\n <label htmlFor={fieldId} className={styles.label}>\n {field.label}\n {field.required && (\n <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n </div>\n {showError && (\n <p id={errorId} className={styles.errorText} role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n }\n\n return (\n <div key={field.name} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {field.label}\n {field.required && (\n <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n {field.type === 'select' && field.options ? (\n <select\n id={fieldId}\n name={field.name}\n value={value}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={() => handleBlur(field.name)}\n className={`${styles.input} ${showError ? styles.inputError : ''}`}\n aria-invalid={showError ? 'true' : 'false'}\n aria-describedby={showError ? errorId : undefined}\n aria-required={field.required ? 'true' : 'false'}\n >\n <option value=\"\">{field.placeholder || 'Select an option'}</option>\n {field.options.map((option) => (\n <option key={option.id} value={String(option.id)}>\n {option.name}\n {option.price !== undefined && option.price > 0 ? ` (+£${option.price})` : ''}\n </option>\n ))}\n </select>\n ) : (\n <input\n id={fieldId}\n name={field.name}\n type={field.type === 'select' ? 'text' : field.type}\n value={value}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={() => handleBlur(field.name)}\n placeholder={field.placeholder}\n className={`${styles.input} ${showError ? styles.inputError : ''}`}\n aria-invalid={showError ? 'true' : 'false'}\n aria-describedby={showError ? errorId : undefined}\n aria-required={field.required ? 'true' : 'false'}\n />\n )}\n {showError && (\n <p id={errorId} className={styles.errorText} role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n })}\n <button type=\"submit\" className={styles.button}>\n {submitLabel}\n </button>\n </form>\n );\n }\n);\n\nRegistrationForm.displayName = 'RegistrationForm';\n","import React, {\n useState,\n useCallback,\n useImperativeHandle,\n useEffect,\n forwardRef,\n useId,\n} from 'react';\nimport type { Question, QuestionOption, FormValues, FormErrors } from '../types';\nimport type {\n ContactDetailsFormProps,\n ContactDetailsFormRef,\n ContactDetailsValues,\n ContactDetailsFieldSettings,\n} from '../types/contact-details';\nimport { required, email as emailValidator, compose } from '../utils/validators';\n\n/** Merge base classes with optional custom classes */\nconst cx = (...classes: (string | undefined)[]) => classes.filter(Boolean).join(' ');\n\n/**\n * ContactDetailsForm — collects first name, last name, email and optional\n * dynamic questions. On submit it emits values with `q` and `answers` fields\n * matching the JRNI Update Client / Member API format.\n *\n * @example\n * ```tsx\n * <ContactDetailsForm\n * questions={[\n * { id: 2, name: 'Purpose', detail_type: 'select', required: true,\n * options: [{ id: 5, name: 'School Trip' }, { id: 6, name: 'Corporate' }] },\n * { id: 7, name: 'Group Size', detail_type: 'number', required: true },\n * ]}\n * onSubmit={(values) => console.log(values)}\n * />\n * ```\n */\nexport const ContactDetailsForm = forwardRef<ContactDetailsFormRef, ContactDetailsFormProps>(\n (\n {\n questions = [],\n onSubmit,\n onChange: _onChange,\n initialValues,\n validateOnBlur = true,\n submitLabel = 'Submit',\n className = '',\n classNames = {},\n fieldSettings = {},\n hideSubmitButton = false,\n isSubmitted = false,\n },\n ref\n ) => {\n const formId = useId();\n\n // Contact detail fields\n const [firstName, setFirstName] = useState(initialValues?.firstName || '');\n const [lastName, setLastName] = useState(initialValues?.lastName || '');\n const [emailValue, setEmailValue] = useState(initialValues?.email || '');\n\n // Contact detail errors\n const [contactErrors, setContactErrors] = useState<Record<string, string>>({});\n const [contactTouched, setContactTouched] = useState<Record<string, boolean>>({});\n\n // Question field values and errors (keyed by question id)\n const [questionValues, setQuestionValues] = useState<FormValues>(() => {\n if (!initialValues?.questions) return {};\n const init: FormValues = {};\n for (const [key, val] of Object.entries(initialValues.questions)) {\n init[Number(key)] = val;\n }\n return init;\n });\n const [questionErrors, setQuestionErrors] = useState<FormErrors>({});\n const [questionTouched, setQuestionTouched] = useState<Record<number, boolean>>({});\n\n // ── Resolve per-field settings (default: required=true, disabled=false) ──\n const getFieldRequired = (name: string) => {\n const s = fieldSettings[name as keyof ContactDetailsFieldSettings];\n return s?.required !== undefined ? s.required : true;\n };\n const getFieldDisabled = (name: string) => {\n const s = fieldSettings[name as keyof ContactDetailsFieldSettings];\n return !!s?.disabled;\n };\n\n const contactFields = [\n { name: 'firstName', label: 'First name', value: firstName, setter: setFirstName },\n { name: 'lastName', label: 'Last name', value: lastName, setter: setLastName },\n { name: 'email', label: 'Email', value: emailValue, setter: setEmailValue },\n ] as const;\n\n // ── Validation helpers ──\n\n const validateContactField = useCallback((name: string, value: string): string | null => {\n const isRequired = getFieldRequired(name);\n if (name === 'email') {\n const validators = isRequired ? compose(required, emailValidator) : emailValidator;\n return value ? validators(value) : (isRequired ? required(value) : null);\n }\n return isRequired ? required(value) : null;\n }, [fieldSettings]);\n\n const validateQuestionField = useCallback((question: Question, value: FormValues[number]): string | null => {\n if (question.detail_type === 'heading') return null;\n if (question.disabled) return null;\n if (question.required) {\n if (value === undefined || value === '' || value === null) {\n return `${question.name} is required`;\n }\n if (question.detail_type === 'check' && !value) {\n return `${question.name} must be checked`;\n }\n }\n if (question.detail_type === 'number' && value !== '' && value !== undefined) {\n const numValue = Number(value);\n if (question.settings?.min !== undefined && numValue < question.settings.min) {\n return `Minimum value is ${question.settings.min}`;\n }\n if (question.settings?.max !== undefined && numValue > question.settings.max) {\n return `Maximum value is ${question.settings.max}`;\n }\n }\n return null;\n }, []);\n\n const validateAllContacts = useCallback((): boolean => {\n const errs: Record<string, string> = {};\n let valid = true;\n for (const f of contactFields) {\n if (getFieldDisabled(f.name)) continue;\n const err = validateContactField(f.name, f.value);\n if (err) { errs[f.name] = err; valid = false; }\n }\n setContactErrors(errs);\n return valid;\n }, [firstName, lastName, emailValue, validateContactField, fieldSettings]);\n\n const validateAllQuestions = useCallback((): boolean => {\n const errs: FormErrors = {};\n let valid = true;\n for (const q of questions) {\n const err = validateQuestionField(q, questionValues[q.id]);\n if (err) { errs[q.id] = err; valid = false; }\n }\n setQuestionErrors(errs);\n return valid;\n }, [questions, questionValues, validateQuestionField]);\n\n // ── Build output ──\n\n const buildOutput = useCallback((): ContactDetailsValues => {\n const q: ContactDetailsValues['q'] = {};\n const answers: ContactDetailsValues['answers'] = [];\n\n for (const question of questions) {\n if (question.detail_type === 'heading') continue;\n const rawValue = questionValues[question.id];\n if (rawValue === undefined || rawValue === '') continue;\n\n let answer = String(rawValue);\n let answerId = 0;\n\n // For selects, resolve the option\n if (question.detail_type === 'select' && question.options?.length) {\n const option = question.options.find(\n (o: QuestionOption) => String(o.id) === String(rawValue)\n );\n if (option) {\n answer = option.name;\n answerId = typeof option.id === 'number' ? option.id : parseInt(String(option.id), 10) || 0;\n }\n }\n\n const idStr = String(question.id);\n q[idStr] = { answer, answer_id: answerId, name: question.name };\n answers.push({ question_id: question.id, name: question.name, answer, answer_id: answerId });\n }\n\n return { firstName, lastName, email: emailValue, q, answers };\n }, [firstName, lastName, emailValue, questions, questionValues]);\n\n // ── Handlers ──\n\n const handleContactChange = useCallback((name: string, value: string) => {\n const setter = name === 'firstName' ? setFirstName : name === 'lastName' ? setLastName : setEmailValue;\n setter(value);\n\n if (contactTouched[name]) {\n const err = validateContactField(name, value);\n setContactErrors(prev => {\n if (err) return { ...prev, [name]: err };\n const { [name]: _, ...rest } = prev;\n return rest;\n });\n }\n }, [contactTouched, validateContactField]);\n\n const handleContactBlur = useCallback((name: string, value: string) => {\n setContactTouched(prev => ({ ...prev, [name]: true }));\n if (validateOnBlur) {\n const err = validateContactField(name, value);\n setContactErrors(prev => {\n if (err) return { ...prev, [name]: err };\n const { [name]: _, ...rest } = prev;\n return rest;\n });\n }\n }, [validateOnBlur, validateContactField]);\n\n const handleQuestionChange = useCallback((questionId: number, value: string | number | boolean) => {\n setQuestionValues(prev => ({ ...prev, [questionId]: value }));\n setQuestionTouched(prev => ({ ...prev, [questionId]: true }));\n\n if (questionTouched[questionId]) {\n const question = questions.find(q => q.id === questionId);\n if (question) {\n const err = validateQuestionField(question, value);\n setQuestionErrors(prev => {\n if (err) return { ...prev, [questionId]: err };\n const { [questionId]: _, ...rest } = prev;\n return rest;\n });\n }\n }\n }, [questionTouched, questions, validateQuestionField]);\n\n const handleQuestionBlur = useCallback((questionId: number) => {\n setQuestionTouched(prev => ({ ...prev, [questionId]: true }));\n if (validateOnBlur) {\n const question = questions.find(q => q.id === questionId);\n if (question) {\n const err = validateQuestionField(question, questionValues[questionId]);\n setQuestionErrors(prev => {\n if (err) return { ...prev, [questionId]: err };\n const { [questionId]: _, ...rest } = prev;\n return rest;\n });\n }\n }\n }, [validateOnBlur, questions, questionValues, validateQuestionField]);\n\n const handleSubmit = useCallback((e: React.FormEvent) => {\n e.preventDefault();\n\n // Mark all touched\n const allContactTouched: Record<string, boolean> = {};\n for (const f of contactFields) allContactTouched[f.name] = true;\n setContactTouched(allContactTouched);\n\n const allQTouched: Record<number, boolean> = {};\n for (const q of questions) allQTouched[q.id] = true;\n setQuestionTouched(allQTouched);\n\n const contactValid = validateAllContacts();\n const questionsValid = validateAllQuestions();\n\n if (contactValid && questionsValid) {\n onSubmit(buildOutput());\n }\n }, [contactFields, questions, validateAllContacts, validateAllQuestions, onSubmit, buildOutput]);\n\n // ── Imperative handle ──\n\n useImperativeHandle(ref, () => ({\n reset: () => {\n setFirstName(initialValues?.firstName || '');\n setLastName(initialValues?.lastName || '');\n setEmailValue(initialValues?.email || '');\n setContactErrors({});\n setContactTouched({});\n if (initialValues?.questions) {\n const init: FormValues = {};\n for (const [key, val] of Object.entries(initialValues.questions)) {\n init[Number(key)] = val;\n }\n setQuestionValues(init);\n } else {\n setQuestionValues({});\n }\n setQuestionErrors({});\n setQuestionTouched({});\n },\n setValues: (vals) => {\n if (vals.firstName !== undefined) setFirstName(vals.firstName);\n if (vals.lastName !== undefined) setLastName(vals.lastName);\n if (vals.email !== undefined) setEmailValue(vals.email);\n },\n }), [initialValues]);\n\n // ── Styles ──\n\n const styles = {\n fieldWrapper: classNames.fieldWrapper || 'mb-4',\n label: classNames.label || 'block text-sm font-medium mb-1',\n heading: classNames.heading || 'text-lg font-semibold mt-4 mb-2 first:mt-0',\n input: classNames.input || 'w-full px-3 py-2 border rounded-md text-sm',\n inputError: classNames.inputError || 'border-red-500',\n checkbox: classNames.checkbox || 'mt-1 h-4 w-4 rounded border-gray-300',\n helpText: classNames.helpText || 'mt-1 text-xs text-gray-500',\n errorText: classNames.errorText || 'mt-1 text-xs text-red-600',\n button: classNames.button || 'w-full mt-4 px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 disabled:opacity-50',\n };\n\n const inputClasses = (hasError: boolean) =>\n hasError ? cx(styles.input, styles.inputError) : styles.input;\n\n // ── Render contact field ──\n\n const renderContactField = (name: string, label: string, value: string, type = 'text') => {\n const fieldId = `${formId}-${name}`;\n const errorId = `${fieldId}-error`;\n const isDisabled = getFieldDisabled(name);\n const isRequired = getFieldRequired(name);\n const error = (contactTouched[name] || isSubmitted) ? contactErrors[name] : undefined;\n const hasError = !!error;\n\n return (\n <div key={name} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {label}\n {isRequired && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <input\n id={fieldId}\n name={name}\n type={type}\n value={value}\n disabled={isDisabled}\n onChange={(e) => handleContactChange(name, e.target.value)}\n onBlur={() => handleContactBlur(name, name === 'firstName' ? firstName : name === 'lastName' ? lastName : emailValue)}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n aria-invalid={hasError ? 'true' : 'false'}\n aria-describedby={hasError ? errorId : undefined}\n aria-required={isRequired ? 'true' : undefined}\n />\n {hasError && (\n <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>\n )}\n </div>\n );\n };\n\n // ── Render question field ──\n\n const renderQuestionField = (question: Question) => {\n const fieldId = `${formId}-q-${question.id}`;\n const errorId = `${fieldId}-error`;\n const value = questionValues[question.id];\n const error = (questionTouched[question.id] || isSubmitted) ? questionErrors[question.id] : undefined;\n const hasError = !!error;\n const isDisabled = !!question.disabled;\n\n const ariaProps = {\n 'aria-invalid': hasError ? true as const : undefined,\n 'aria-describedby': hasError ? errorId : undefined,\n 'aria-required': question.required || undefined,\n };\n\n switch (question.detail_type) {\n case 'heading':\n return (\n <h3 key={question.id} className={styles.heading}>\n {question.name}\n </h3>\n );\n\n case 'text_field':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <input\n id={fieldId}\n type=\"text\"\n value={(value as string) || ''}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n placeholder={question.settings?.placeholder}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n />\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n case 'text_area':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <textarea\n id={fieldId}\n value={(value as string) || ''}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n placeholder={question.settings?.placeholder}\n rows={4}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n />\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n case 'select':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <select\n id={fieldId}\n value={(value as string | number) ?? ''}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n >\n <option value=\"\">Select an option</option>\n {question.options?.map((option) => (\n <option key={option.id} value={option.id}>\n {option.name}\n </option>\n ))}\n </select>\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n case 'number':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <input\n id={fieldId}\n type=\"number\"\n value={(value as number) ?? ''}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.value ? Number(e.target.value) : '')}\n onBlur={() => handleQuestionBlur(question.id)}\n min={question.settings?.min}\n max={question.settings?.max}\n placeholder={question.settings?.placeholder}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n />\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n case 'date':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <input\n id={fieldId}\n type=\"date\"\n value={(value as string) || ''}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n />\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n case 'check':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <div className=\"flex items-start gap-2\">\n <input\n id={fieldId}\n type=\"checkbox\"\n checked={!!value}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.checked)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={cx(styles.checkbox, isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n />\n <label htmlFor={fieldId} className=\"text-sm\">\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n </div>\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n default:\n return null;\n }\n };\n\n // ── Validate all fields when isSubmitted becomes true ──\n\n useEffect(() => {\n if (isSubmitted) {\n validateAllContacts();\n validateAllQuestions();\n }\n }, [isSubmitted]);\n\n // ── Auto-emit onChange when hideSubmitButton is true ──\n\n useEffect(() => {\n if (hideSubmitButton && _onChange) {\n const contactValid = !contactFields.some(f => {\n if (getFieldDisabled(f.name)) return false;\n return !!validateContactField(f.name, f.value);\n });\n const questionsValid = !questions.some(q =>\n !!validateQuestionField(q, questionValues[q.id])\n );\n _onChange(buildOutput(), contactValid && questionsValid);\n }\n }, [hideSubmitButton, firstName, lastName, emailValue, questionValues]);\n\n return (\n <form onSubmit={handleSubmit} className={className} noValidate>\n {renderContactField('firstName', 'First name', firstName)}\n {renderContactField('lastName', 'Last name', lastName)}\n {renderContactField('email', 'Email', emailValue, 'email')}\n {questions.map(renderQuestionField)}\n {!hideSubmitButton && (\n <button type=\"submit\" className={styles.button}>\n {submitLabel}\n </button>\n )}\n </form>\n );\n }\n);\n\nContactDetailsForm.displayName = 'ContactDetailsForm';\n","import React, {\n useState,\n useCallback,\n useImperativeHandle,\n forwardRef,\n useId,\n} from 'react';\nimport type {\n ResetPasswordFormProps,\n ResetPasswordFormRef,\n ResetPasswordFormValues,\n} from '../types/reset-password';\n\ninterface FieldDef {\n name: keyof ResetPasswordFormValues;\n label: string;\n}\n\nconst FIELDS: FieldDef[] = [\n { name: 'currentPassword', label: 'Current Password' },\n { name: 'newPassword', label: 'New Password' },\n { name: 'confirmNewPassword', label: 'Confirm New Password' },\n];\n\n/**\n * A reusable, accessible reset-password form component.\n *\n * Features:\n * - Three password fields: Current, New, Confirm New\n * - Validation: all required; confirm must match new password\n * - forwardRef for programmatic reset()/setValues()\n * - onChange callback with live validity\n * - Granular styling via classNames prop\n *\n * @example\n * ```tsx\n * <ResetPasswordForm\n * onSubmit={(values) => console.log(values)}\n * submitLabel=\"Change Password\"\n * />\n * ```\n */\nexport const ResetPasswordForm = forwardRef<ResetPasswordFormRef, ResetPasswordFormProps>(\n (\n {\n onSubmit,\n onChange,\n validateOnBlur = true,\n submitLabel = 'Update Password',\n className = '',\n classNames = {},\n },\n ref\n ) => {\n const formId = useId();\n const [values, setValues] = useState<ResetPasswordFormValues>({\n currentPassword: '',\n newPassword: '',\n confirmNewPassword: '',\n });\n const [errors, setErrors] = useState<Partial<Record<keyof ResetPasswordFormValues, string>>>({});\n const [touched, setTouched] = useState<Partial<Record<keyof ResetPasswordFormValues, boolean>>>({});\n\n const validateField = useCallback(\n (name: keyof ResetPasswordFormValues, val: string, allValues: ResetPasswordFormValues): string | null => {\n if (!val || val.trim() === '') return 'This field is required';\n if (name === 'confirmNewPassword' && val !== allValues.newPassword) {\n return 'Passwords do not match';\n }\n return null;\n },\n []\n );\n\n const checkIsValid = useCallback(\n (v: ResetPasswordFormValues): boolean => {\n for (const field of FIELDS) {\n if (validateField(field.name, v[field.name], v)) return false;\n }\n return true;\n },\n [validateField]\n );\n\n const handleChange = useCallback(\n (name: keyof ResetPasswordFormValues, val: string) => {\n const newValues = { ...values, [name]: val };\n setValues(newValues);\n\n // Clear error on valid input for touched fields\n if (touched[name]) {\n const error = validateField(name, val, newValues);\n if (!error) {\n setErrors((prev) => { const next = { ...prev }; delete next[name]; return next; });\n }\n }\n\n // If confirmNewPassword is touched and newPassword changes, re-validate confirm\n if (name === 'newPassword' && touched.confirmNewPassword) {\n const confirmError = validateField('confirmNewPassword', newValues.confirmNewPassword, newValues);\n if (confirmError) {\n setErrors((prev) => ({ ...prev, confirmNewPassword: confirmError }));\n } else {\n setErrors((prev) => { const next = { ...prev }; delete next.confirmNewPassword; return next; });\n }\n }\n\n onChange?.(newValues, checkIsValid(newValues));\n },\n [values, touched, validateField, onChange, checkIsValid]\n );\n\n const handleBlur = useCallback(\n (name: keyof ResetPasswordFormValues) => {\n setTouched((prev) => ({ ...prev, [name]: true }));\n if (validateOnBlur) {\n const error = validateField(name, values[name], values);\n if (error) {\n setErrors((prev) => ({ ...prev, [name]: error }));\n } else {\n setErrors((prev) => { const next = { ...prev }; delete next[name]; return next; });\n }\n }\n },\n [validateOnBlur, values, validateField]\n );\n\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n const allTouched: Record<string, boolean> = {};\n const newErrors: Partial<Record<keyof ResetPasswordFormValues, string>> = {};\n let isValid = true;\n for (const field of FIELDS) {\n allTouched[field.name] = true;\n const error = validateField(field.name, values[field.name], values);\n if (error) { newErrors[field.name] = error; isValid = false; }\n }\n setTouched(allTouched);\n setErrors(newErrors);\n if (isValid) {\n onSubmit(values);\n setValues({ currentPassword: '', newPassword: '', confirmNewPassword: '' });\n setErrors({});\n setTouched({});\n }\n },\n [values, validateField, onSubmit]\n );\n\n useImperativeHandle(ref, () => ({\n reset: () => {\n setValues({ currentPassword: '', newPassword: '', confirmNewPassword: '' });\n setErrors({});\n setTouched({});\n },\n setValues: (newVals: Partial<ResetPasswordFormValues>) => {\n setValues((prev) => {\n const merged = { ...prev };\n for (const [key, value] of Object.entries(newVals)) {\n if (value !== undefined) {\n merged[key as keyof ResetPasswordFormValues] = value;\n }\n }\n return merged;\n });\n },\n }), []);\n\n const styles = {\n fieldWrapper: classNames.fieldWrapper || 'mb-4',\n label: classNames.label || 'block text-sm font-medium mb-1',\n input: classNames.input || 'w-full px-3 py-2 border rounded-md',\n inputError: classNames.inputError || 'border-red-500',\n errorText: classNames.errorText || 'mt-1 text-xs text-red-600',\n button: classNames.button || 'w-full mt-4 px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 disabled:opacity-50',\n };\n\n return (\n <form onSubmit={handleSubmit} className={className} noValidate>\n {FIELDS.map((field) => {\n const fieldId = `${formId}-${field.name}`;\n const errorId = `${fieldId}-error`;\n const value = values[field.name];\n const error = errors[field.name];\n const isTouched = touched[field.name];\n const showError = isTouched && error;\n\n return (\n <div key={field.name} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {field.label}\n <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>\n </label>\n <input\n id={fieldId}\n name={field.name}\n type=\"password\"\n value={value}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={() => handleBlur(field.name)}\n className={`${styles.input} ${showError ? styles.inputError : ''}`}\n aria-invalid={showError ? 'true' : 'false'}\n aria-describedby={showError ? errorId : undefined}\n aria-required=\"true\"\n />\n {showError && (\n <p id={errorId} className={styles.errorText} role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n })}\n <button type=\"submit\" className={styles.button}>\n {submitLabel}\n </button>\n </form>\n );\n }\n);\n\nResetPasswordForm.displayName = 'ResetPasswordForm';\n","/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument) {\n const argStr = Object.prototype.toString.call(argument);\n\n // Clone the date\n if (\n argument instanceof Date ||\n (typeof argument === \"object\" && argStr === \"[object Date]\")\n ) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new argument.constructor(+argument);\n } else if (\n typeof argument === \"number\" ||\n argStr === \"[object Number]\" ||\n typeof argument === \"string\" ||\n argStr === \"[object String]\"\n ) {\n // TODO: Can we get rid of as?\n return new Date(argument);\n } else {\n // TODO: Can we get rid of as?\n return new Date(NaN);\n }\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from 'date-fns'\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date(date: DateType): DateType {\n * return constructFrom(\n * date, // Use contrustor from the given date\n * date.getTime() // Use the date value to create a new date\n * )\n * }\n */\nexport function constructFrom(date, value) {\n if (date instanceof Date) {\n return new date.constructor(value);\n } else {\n return new Date(value);\n }\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount) {\n const _date = toDate(date);\n if (isNaN(amount)) return constructFrom(date, NaN);\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n _date.setDate(_date.getDate() + amount);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.mjs\";\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date) {\n return startOfWeek(date, { weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date) {\n const _date = toDate(date);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { toDate } from \"../toDate.mjs\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { getISOWeekYear } from \"./getISOWeekYear.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date) {\n const year = getISOWeekYear(date);\n const fourthOfJanuary = constructFrom(date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n if (!isDate(date) && typeof date !== \"number\") {\n return false;\n }\n const _date = toDate(date);\n return !isNaN(Number(_date));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.mjs\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/* eslint-disable no-unused-vars */\n\n/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.mjs\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\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};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.mjs\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.mjs\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.mjs\";\nimport { formatLong } from \"./en-US/_lib/formatLong.mjs\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.mjs\";\nimport { localize } from \"./en-US/_lib/localize.mjs\";\nimport { match } from \"./en-US/_lib/match.mjs\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date) {\n const _date = toDate(date);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { getWeekYear } from \"./getWeekYear.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { startOfWeekYear } from \"./startOfWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport function getWeek(date, options) {\n const _date = toDate(date);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date) {\n const _date = toDate(date);\n let day = _date.getDay();\n\n if (day === 0) {\n day = 7;\n }\n\n return day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date that should be after the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is after the second date\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport function isAfter(date, dateToCompare) {\n const _date = toDate(date);\n const _dateToCompare = toDate(dateToCompare);\n return _date.getTime() > _dateToCompare.getTime();\n}\n\n// Fallback for modularized imports:\nexport default isAfter;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date that should be before the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is before the second date\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport function isBefore(date, dateToCompare) {\n const _date = toDate(date);\n const _dateToCompare = toDate(dateToCompare);\n return +_date < +_dateToCompare;\n}\n\n// Fallback for modularized imports:\nexport default isBefore;\n","import { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam DateInputType - The input `Date` type derived from the passed argument.\n * @typeParam DateOutputType - The output `Date` type derived from the passed constructor.\n *\n * @param fromDate - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(fromDate, constructor) {\n const date =\n constructor instanceof Date\n ? constructFrom(constructor, 0)\n : new constructor(0);\n date.setFullYear(\n fromDate.getFullYear(),\n fromDate.getMonth(),\n fromDate.getDate(),\n );\n date.setHours(\n fromDate.getHours(),\n fromDate.getMinutes(),\n fromDate.getSeconds(),\n fromDate.getMilliseconds(),\n );\n return date;\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n","import { transpose } from \"../../transpose.mjs\";\nimport { constructFrom } from \"../../constructFrom.mjs\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n subPriority = 0;\n\n validate(_utcDate, _options) {\n return true;\n }\n}\n\nexport class ValueSetter extends Setter {\n constructor(\n value,\n\n validateValue,\n\n setValue,\n\n priority,\n subPriority,\n ) {\n super();\n this.value = value;\n this.validateValue = validateValue;\n this.setValue = setValue;\n this.priority = priority;\n if (subPriority) {\n this.subPriority = subPriority;\n }\n }\n\n validate(date, options) {\n return this.validateValue(date, this.value, options);\n }\n\n set(date, flags, options) {\n return this.setValue(date, flags, this.value, options);\n }\n}\n\nexport class DateToSystemTimezoneSetter extends Setter {\n priority = TIMEZONE_UNIT_PRIORITY;\n subPriority = -1;\n set(date, flags) {\n if (flags.timestampIsSet) return date;\n return constructFrom(date, transpose(date, Date));\n }\n}\n","import { ValueSetter } from \"./Setter.mjs\";\n\nexport class Parser {\n run(dateString, token, match, options) {\n const result = this.parse(dateString, token, match, options);\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(\n result.value,\n this.validate,\n this.set,\n this.priority,\n this.subPriority,\n ),\n rest: result.rest,\n };\n }\n\n validate(_utcDate, _value, _options) {\n return true;\n }\n}\n","import { Parser } from \"../Parser.mjs\";\n\nexport class EraParser extends Parser {\n priority = 140;\n\n parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return (\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n\n // A, B\n case \"GGGGG\":\n return match.era(dateString, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return (\n match.era(dateString, { width: \"wide\" }) ||\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n }\n }\n\n set(date, flags, value) {\n flags.era = value;\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n","export const numericPatterns = {\n month: /^(1[0-2]|0?\\d)/, // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n minute: /^[0-5]?\\d/, // 0 to 59\n second: /^[0-5]?\\d/, // 0 to 59\n\n singleDigit: /^\\d/, // 0 to 9\n twoDigits: /^\\d{1,2}/, // 0 to 99\n threeDigits: /^\\d{1,3}/, // 0 to 999\n fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n","import {\n millisecondsInHour,\n millisecondsInMinute,\n millisecondsInSecond,\n} from \"../../constants.mjs\";\nimport { numericPatterns } from \"./constants.mjs\";\n\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest,\n };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n // Input is 'Z'\n if (matchResult[0] === \"Z\") {\n return {\n value: 0,\n rest: dateString.slice(1),\n };\n }\n\n const sign = matchResult[1] === \"+\" ? 1 : -1;\n const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n return {\n value:\n sign *\n (hours * millisecondsInHour +\n minutes * millisecondsInMinute +\n seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case \"morning\":\n return 4;\n case \"evening\":\n return 17;\n case \"pm\":\n case \"noon\":\n case \"afternoon\":\n return 12;\n case \"am\":\n case \"midnight\":\n case \"night\":\n default:\n return 0;\n }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n const isCommonEra = currentYear > 0;\n // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n let result;\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n const rangeEnd = absCurrentYear + 50;\n const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year | y | yy | yyy | yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n priority = 130;\n incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"yy\",\n });\n\n switch (token) {\n case \"y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value) {\n const currentYear = date.getFullYear();\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(normalizedTwoDigitYear, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { getWeekYear } from \"../../../getWeekYear.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"YY\",\n });\n\n switch (token) {\n case \"Y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"Yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value, options) {\n const currentYear = getWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(\n normalizedTwoDigitYear,\n 0,\n options.firstWeekContainsDate,\n );\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, options.firstWeekContainsDate);\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"R\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n const firstWeekOfYear = constructFrom(date, 0);\n firstWeekOfYear.setFullYear(value, 0, 4);\n firstWeekOfYear.setHours(0, 0, 0, 0);\n return startOfISOWeek(firstWeekOfYear);\n }\n\n incompatibleTokens = [\n \"G\",\n \"y\",\n \"Y\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\nexport class ExtendedYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"u\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class QuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n case \"QQ\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class StandAloneQuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n case \"qq\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MonthParser extends Parser {\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"L\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"M\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"MM\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // J, F, ..., D\n case \"MMMMM\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class StandAloneMonthParser extends Parser {\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"LL\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // J, F, ..., D\n case \"LLLLL\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { getWeek } from \"./getWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n const _date = toDate(date);\n const diff = getWeek(_date, options) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n","import { setWeek } from \"../../../setWeek.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"w\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"wo\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value, options) {\n return startOfWeek(setWeek(date, value, options), options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { getISOWeek } from \"./getISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week) {\n const _date = toDate(date);\n const diff = getISOWeek(_date) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n","import { setISOWeek } from \"../../../setISOWeek.mjs\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"I\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"Io\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value) {\n return startOfISOWeek(setISOWeek(date, value));\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.mjs\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n priority = 90;\n subPriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"d\":\n return parseNumericPattern(numericPatterns.date, dateString);\n case \"do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n const month = date.getMonth();\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n\n set(date, _flags, value) {\n date.setDate(value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.mjs\";\n\nexport class DayOfYearParser extends Parser {\n priority = 90;\n\n subpriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"D\":\n case \"DD\":\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n case \"Do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n\n set(date, _flags, value) {\n date.setMonth(0, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"E\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { addDays } from \"./addDays.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date);\n const currentDay = _date.getDay();\n\n const remainder = day % 7;\n const dayIndex = (remainder + 7) % 7;\n\n const delta = 7 - weekStartsOn;\n const diff =\n day < 0 || day > 6\n ? day - ((currentDay + delta) % 7)\n : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\n\n// Day of week\nexport class DayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"EEEEE\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"EEEE\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n priority = 90;\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"e\":\n case \"ee\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"eo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"eee\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"eeeee\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"eeee\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"c\":\n case \"cc\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"co\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"ccc\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // T\n case \"ccccc\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return (\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // Tuesday\n case \"cccc\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"e\",\n \"t\",\n \"T\",\n ];\n}\n","import { addDays } from \"./addDays.mjs\";\nimport { getISODay } from \"./getISODay.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day) {\n const _date = toDate(date);\n const currentDay = getISODay(_date);\n const diff = day - currentDay;\n return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n","import { setISODay } from \"../../../setISODay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => {\n if (value === 0) {\n return 7;\n }\n return value;\n };\n\n switch (token) {\n // 2\n case \"i\":\n case \"ii\": // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n case \"io\":\n return match.ordinalNumber(dateString, { unit: \"day\" });\n // Tue\n case \"iii\":\n return mapValue(\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // T\n case \"iiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tu\n case \"iiiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tuesday\n case \"iiii\":\n default:\n return mapValue(\n match.day(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n\n set(date, _flags, value) {\n date = setISODay(date, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"E\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"aaaaa\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMMidnightParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"b\":\n case \"bb\":\n case \"bbb\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"bbbbb\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"BBBBB\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1to12Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"h\":\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n case \"ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setHours(0, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0to23Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"H\":\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n case \"Ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n\n set(date, _flags, value) {\n date.setHours(value, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0To11Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"K\":\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n case \"Ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1To24Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"k\":\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n case \"ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n\n set(date, _flags, value) {\n const hours = value <= 24 ? value % 24 : value;\n date.setHours(hours, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MinuteParser extends Parser {\n priority = 60;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"m\":\n return parseNumericPattern(numericPatterns.minute, dateString);\n case \"mo\":\n return match.ordinalNumber(dateString, { unit: \"minute\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setMinutes(value, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class SecondParser extends Parser {\n priority = 50;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"s\":\n return parseNumericPattern(numericPatterns.second, dateString);\n case \"so\":\n return match.ordinalNumber(dateString, { unit: \"second\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setSeconds(value, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\nexport class FractionOfSecondParser extends Parser {\n priority = 30;\n\n parse(dateString, token) {\n const valueCallback = (value) =>\n Math.trunc(value * Math.pow(10, -token.length + 3));\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n\n set(date, _flags, value) {\n date.setMilliseconds(value);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"X\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"XX\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"XXXX\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"XXXXX\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"XXX\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"x\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"xx\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"xxxx\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"xxxxx\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"xxx\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampSecondsParser extends Parser {\n priority = 40;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampMillisecondsParser extends Parser {\n priority = 20;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { EraParser } from \"./parsers/EraParser.mjs\";\nimport { YearParser } from \"./parsers/YearParser.mjs\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.mjs\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.mjs\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.mjs\";\nimport { QuarterParser } from \"./parsers/QuarterParser.mjs\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.mjs\";\nimport { MonthParser } from \"./parsers/MonthParser.mjs\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.mjs\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.mjs\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.mjs\";\nimport { DateParser } from \"./parsers/DateParser.mjs\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.mjs\";\nimport { DayParser } from \"./parsers/DayParser.mjs\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.mjs\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.mjs\";\nimport { ISODayParser } from \"./parsers/ISODayParser.mjs\";\nimport { AMPMParser } from \"./parsers/AMPMParser.mjs\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.mjs\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.mjs\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.mjs\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.mjs\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.mjs\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.mjs\";\nimport { MinuteParser } from \"./parsers/MinuteParser.mjs\";\nimport { SecondParser } from \"./parsers/SecondParser.mjs\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.mjs\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.mjs\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.mjs\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.mjs\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.mjs\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- It's ok, we want any here\nexport const parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser(),\n};\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { getDefaultOptions } from \"./getDefaultOptions.mjs\";\nimport { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { parsers } from \"./parse/_lib/parsers.mjs\";\nimport { DateToSystemTimezoneSetter } from \"./parse/_lib/Setter.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n * and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n if (formatStr === \"\") {\n if (dateStr === \"\") {\n return toDate(referenceDate);\n } else {\n return constructFrom(referenceDate, NaN);\n }\n }\n\n const subFnOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n // If timezone isn't specified, it will be set to the system timezone\n const setters = [new DateToSystemTimezoneSetter()];\n\n const tokens = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter in longFormatters) {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp);\n\n const usedTokens = [];\n\n for (let token of tokens) {\n if (\n !options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n if (\n !options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n\n const firstCharacter = token[0];\n const parser = parsers[firstCharacter];\n if (parser) {\n const { incompatibleTokens } = parser;\n if (Array.isArray(incompatibleTokens)) {\n const incompatibleToken = usedTokens.find(\n (usedToken) =>\n incompatibleTokens.includes(usedToken.token) ||\n usedToken.token === firstCharacter,\n );\n if (incompatibleToken) {\n throw new RangeError(\n `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n );\n }\n } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n throw new RangeError(\n `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n );\n }\n\n usedTokens.push({ token: firstCharacter, fullToken: token });\n\n const parseResult = parser.run(\n dateStr,\n token,\n locale.match,\n subFnOptions,\n );\n\n if (!parseResult) {\n return constructFrom(referenceDate, NaN);\n }\n\n setters.push(parseResult.setter);\n\n dateStr = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n // Replace two single quote characters with one single quote character\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n }\n\n // Cut token from string, or, if string doesn't match the token, return Invalid Date\n if (dateStr.indexOf(token) === 0) {\n dateStr = dateStr.slice(token.length);\n } else {\n return constructFrom(referenceDate, NaN);\n }\n }\n }\n\n // Check if the remaining input contains something other than whitespace\n if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n return constructFrom(referenceDate, NaN);\n }\n\n const uniquePrioritySetters = setters\n .map((setter) => setter.priority)\n .sort((a, b) => b - a)\n .filter((priority, index, array) => array.indexOf(priority) === index)\n .map((priority) =>\n setters\n .filter((setter) => setter.priority === priority)\n .sort((a, b) => b.subPriority - a.subPriority),\n )\n .map((setterArray) => setterArray[0]);\n\n let date = toDate(referenceDate);\n\n if (isNaN(date.getTime())) {\n return constructFrom(referenceDate, NaN);\n }\n\n const flags = {};\n for (const setter of uniquePrioritySetters) {\n if (!setter.validate(date, subFnOptions)) {\n return constructFrom(referenceDate, NaN);\n }\n\n const result = setter.set(date, flags, subFnOptions);\n // Result is tuple (date, flags)\n if (Array.isArray(result)) {\n date = result[0];\n Object.assign(flags, result[1]);\n // Result is date\n } else {\n date = result;\n }\n }\n\n return constructFrom(referenceDate, date);\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n","// Types for SchemaFormBuilder — Prompts 2–3\n\nimport type { VenueResult, ExtraItemProperties, FormSchemaResponse } from '../utils/formSchemaApi';\n\n// ---------------------------------------------------------------------------\n// AppConfig\n// ---------------------------------------------------------------------------\n\n/**\n * Runtime configuration for the booking API.\n * Passed as a prop to SchemaFormBuilder and forwarded to all API calls.\n */\nexport interface AppConfig {\n /** Bearer token sent as the `clienttoken` HTTP header on all API requests. */\n blApiToken: string;\n /** The booking company ID for this council tenant. */\n company_id: string;\n /** The customer/client name identifier for schema resolution. */\n customer_name: string;\n /** Base URL of the Bookinglab API, e.g. `https://api.bookinglab.co.uk`. */\n apiBaseUrl: string;\n}\n\n// ---------------------------------------------------------------------------\n// Validation Rules\n// ---------------------------------------------------------------------------\n\n/**\n * A string validation shorthand.\n * - 'email' → standard email format\n * - 'mobile' → UK mobile number\n * - 'phone' → UK landline/contact number\n * - 'contact' → alias for phone\n * - 'length' → maxLength(255)\n */\nexport type ValidationShorthand = 'email' | 'mobile' | 'phone' | 'contact' | 'length';\n\nexport interface ValidationMinLength {\n minLength: number;\n}\n\nexport interface ValidationMaxLength {\n maxLength: number;\n}\n\nexport interface ValidationMinDate {\n /** Minimum allowed date in DD-MM-YYYY format. */\n minDate: string;\n}\n\nexport interface ValidationMaxDate {\n /** Maximum allowed date expressed as number of days from today. */\n maxDate: number;\n}\n\nexport type ValidationRule =\n | ValidationShorthand\n | ValidationMinLength\n | ValidationMaxLength\n | ValidationMinDate\n | ValidationMaxDate;\n\n// ---------------------------------------------------------------------------\n// Conditional Show Rules\n// ---------------------------------------------------------------------------\n\n/**\n * A single condition clause used in custom rule types.\n */\nexport interface ConditionClause {\n /** The field name whose current value is evaluated. */\n field: string;\n /** The expected value to compare against. Use '*' as a wildcard (any non-empty value). */\n value: string;\n /**\n * Comparison operator. Defaults to '==' if omitted.\n * Numeric operators ('>', '<', '>=', '<=') cast both sides to Number before comparing.\n */\n operator?: '==' | '!=' | '>' | '<' | '>=' | '<=';\n}\n\n/**\n * The `show` object on a field defines its conditional visibility rules.\n * Multiple rule types can coexist on a single field.\n * The final visibility is: ANY rule returning true → field is visible.\n *\n * Rule types:\n *\n * - `[fieldName]: expectedValue` Simple equality rule. Field is visible when\n * `formValues[fieldName] === expectedValue`.\n * Use '*' as expectedValue to match any non-empty value.\n *\n * - `custom` Array of ConditionClause. ALL clauses must be true (AND).\n *\n * - `custom_multiple_condition` A single group of ConditionClause. ALL must be true (AND).\n *\n * - `custom_multiple_conditions` Array of ConditionClause groups. ANY group being fully\n * true makes the rule pass (OR between groups, AND within).\n *\n * - `custom_or_condition` Array of ConditionClause. ANY single clause being true\n * passes the rule (OR logic).\n *\n * - `custom_all_lookups_successful` No value needed. Passes only when every visible AWS lookup\n * field on the current page has `lookupSuccess === true`.\n */\nexport interface ShowRules {\n /** Object format: { fieldName: \"expression\" } or array of ConditionClause. AND logic. */\n custom?: ConditionClause[] | Record<string, string>;\n /** Object format: { conditions: [{ field: value }] } or ConditionClause[]. AND logic. */\n custom_multiple_condition?: ConditionClause[] | { conditions: Record<string, string>[] };\n /** Object format: { groups: [{ conditions: [...] }] } or ConditionClause[][]. OR-of-AND. */\n custom_multiple_conditions?: ConditionClause[][] | { groups: { conditions: Record<string, string>[] }[] };\n custom_or_condition?: ConditionClause[];\n /** Value is irrelevant — presence of this key activates the all-lookups check. */\n custom_all_lookups_successful?: unknown;\n /** Any other key is treated as a simple field-name → expected-value equality rule. */\n [fieldName: string]: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Copy Data Configuration\n// ---------------------------------------------------------------------------\n\n/**\n * Declarative data copying between fields, including across pages via sessionStorage.\n * When this field is visible and the optional `answer` condition is met,\n * each `from[i]` field value is written to `to[i]`.\n */\nexport interface CopyDataConfig {\n /** Source field names (same page or a previous page stored in sessionStorage). */\n from: string[];\n /** Destination field names, index-aligned with `from`. */\n to: string[];\n /**\n * If present, only copy when this field's current value strictly equals `answer`.\n * If absent, copy whenever this field has any non-empty value.\n */\n answer?: string;\n}\n\n// ---------------------------------------------------------------------------\n// AWS Lookup Configuration\n// ---------------------------------------------------------------------------\n\nexport interface AwsLookupMatchEntry {\n /**\n * The form field name whose value provides the lookup value.\n * The field whose `field` property matches the current field name is the primary reference.\n */\n form_field: string;\n /** The DynamoDB attribute name to match against (e.g. 'home_office', 'name'). */\n dynamodb_field: string;\n}\n\nexport interface AwsLookupConfig {\n /** DynamoDB table name (environment suffix appended server-side, e.g. '-staging'). */\n aws_table: string;\n /**\n * Fields participating in the lookup validation.\n * The entry whose form_field matches this field's `field` property is the primary reference.\n * Any other entries are secondary validations (e.g. name cross-check).\n */\n match: AwsLookupMatchEntry[];\n /**\n * If present, the form control value is set to `response.reference[store_response_field]`\n * on a successful lookup instead of the default `response.reference.home_office`.\n */\n store_response_field?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Radio & Dropdown Option Types\n// ---------------------------------------------------------------------------\n\nexport interface RadioOption {\n /** The raw value stored in the form control when this option is selected. */\n value: string;\n /** Human-readable label rendered alongside the radio input. */\n title: string;\n}\n\nexport interface DropdownOption {\n value: string;\n title: string;\n /**\n * If false, this option is excluded from the rendered select.\n * Allows server-side control of available options without schema changes.\n */\n visible: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Raw Schema Field (API shape)\n// ---------------------------------------------------------------------------\n\n/**\n * The field definition exactly as returned by the API.\n * Do not mutate this shape. Hydrate into SchemaField after fetching.\n */\nexport interface RawSchemaField {\n /** Unique identifier. Maps 1:1 to a form control name. */\n field: string;\n\n /** Display label. May contain `{fieldName}` interpolation tokens. */\n title: string;\n\n type:\n | 'text'\n | 'number'\n | 'email'\n | 'date'\n | 'textarea'\n | 'radio'\n | 'dropdown'\n | 'checkbox'\n | 'heading'\n | 'submit';\n\n /**\n * The route page slug this field belongs to (e.g. 'booking-details').\n * Fields not matching the current page are skipped entirely.\n */\n page: string;\n\n required?: boolean;\n\n /**\n * Hint text displayed below the label.\n * May contain HTML — render with dangerouslySetInnerHTML.\n */\n helptext?: string;\n\n /** Array of validation rules applied to this field's form control. */\n validation?: ValidationRule[];\n\n /**\n * Conditional visibility rules. If absent or empty, the field is always visible.\n * See ShowRules for the full rule type documentation.\n */\n show?: ShowRules;\n\n // ── Radio ──────────────────────────────────────────────────────────────────\n radio_options?: RadioOption[];\n\n // ── Dropdown ───────────────────────────────────────────────────────────────\n options?: DropdownOption[];\n\n // ── Heading / display-only ─────────────────────────────────────────────────\n /**\n * Determines the visual treatment for `type === 'heading'` fields.\n * Absent → standard h3 heading.\n */\n component_type?: 'govbook-information_box' | 'govbook-warning_box' | 'body';\n\n /**\n * Rich text body content for heading variants.\n * Render with dangerouslySetInnerHTML.\n */\n component_text?: string;\n\n // ── Address lookup ─────────────────────────────────────────────────────────\n /** If true, renders a postcode input + \"Find address\" button and an address select. */\n address_lookup?: boolean;\n\n // ── AWS / DynamoDB eligibility lookup ──────────────────────────────────────\n lookup?: AwsLookupConfig;\n\n // ── Venue / resource lookup ────────────────────────────────────────────────\n /** If true, renders an autocomplete venue search input with typeahead. */\n resource_lookup?: boolean;\n /**\n * Field name whose value is used to filter venue search results by `venue_type`.\n * Only applies when `resource_lookup` is true.\n */\n filter_by?: string;\n\n // ── Booking side effects ───────────────────────────────────────────────────\n /** When this field becomes visible, emit `onCompanySet` with this company ID. */\n company_set?: string;\n /** When this field becomes visible, emit `onServiceSet` with this service ID. */\n service_set?: string;\n /** When this field becomes visible, emit `onResourceSet` with this resource ID. */\n resource_set?: string;\n /** When this field becomes visible, emit `onStaffSet` with this staff ID. */\n staff_set?: string;\n /**\n * Duration value (in minutes as a string) to add to the booking when visible.\n * Negated and re-emitted when the field becomes hidden.\n */\n add_duration?: string;\n /**\n * Appointment type identifier. Stored in sessionStorage on the `services` page.\n * Used on `booking-details` to filter fields by appointment type.\n */\n appointment_type?: string;\n\n // ── Copy data ──────────────────────────────────────────────────────────────\n copy_data?: CopyDataConfig;\n\n // ── Booker / datastore fields ──────────────────────────────────────────────\n /** When visible and non-empty, emit `onUpdateDatastore({ booker_first_name: value })`. */\n booker_first_name?: boolean | 'true';\n booker_last_name?: boolean | 'true';\n booker_email?: boolean | 'true';\n booker_phone?: boolean | 'true';\n\n // ── Extra items / fees ─────────────────────────────────────────────────────\n /**\n * Extra item ID to fetch and emit when this field is visible and has a truthy value.\n * Note: serialised as a hyphenated key in JSON — access as `field['extra-item']`.\n */\n 'extra-item'?: string;\n /** Service ID override for this field's extra item lookup. */\n 'service-id'?: string;\n /**\n * Per-resource extra item overrides. Key is resource ID, value contains `extra-item`.\n * Takes precedence over `extra-item` when a matching resource is selected.\n */\n resource_ids?: Record<string, { 'extra-item': string }>;\n\n // ── Legacy conditional fields ──────────────────────────────────────────────\n /** If true and schema type is not 'extended', use legacy trigger/trigger_value logic. */\n conditional?: boolean;\n /**\n * Pipe-separated list of field names to watch.\n * Only used when `conditional === true` on a legacy schema.\n */\n trigger?: string;\n /**\n * Pipe-separated list of expected values corresponding to `trigger` fields.\n * Each value can be `&`-joined for multi-part AND conditions within a single trigger.\n * Supports prefixes: `<`, `>`, `!` for numeric/inequality comparisons.\n * Use `*` as a wildcard to match any non-empty value.\n */\n trigger_value?: string;\n\n // ── Submit field ───────────────────────────────────────────────────────────\n /**\n * If true on a visible field, the form-level submit button becomes visible.\n * Used to gate progression in the booking journey.\n */\n continue?: boolean;\n\n /** If true, field is unconditionally hidden regardless of visibility rules. */\n hidden_field?: boolean;\n\n /** Whether to prevent dates in the future (sets `max` to today on date inputs). */\n hide_dates_in_future?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Hydrated Schema Field (runtime shape)\n// ---------------------------------------------------------------------------\n\n/**\n * Extends RawSchemaField with all mutable runtime state added during form\n * initialisation and visibility evaluation.\n * This is the type you work with throughout the component.\n */\nexport interface SchemaField extends RawSchemaField {\n // ── Computed once on init ──────────────────────────────────────────────────\n /** Number of keys in the `show` object. 0 = always visible. */\n rules_count: number;\n /** Whether this field's `page` matches the currently active route page. */\n show_on_this_page: boolean;\n /** Set to true during init when `lookup.aws_table` is present. */\n aws_lookup?: boolean;\n\n // ── Visibility state (updated each render cycle) ───────────────────────────\n /** Current computed visibility. Updated by refreshVisibility(). */\n visible: boolean;\n /** Alias for `visible` — kept for API compatibility with legacy schema paths. */\n is_visible: boolean;\n /**\n * Resolved title after `{fieldName}` tokens have been interpolated.\n * Falls back to `title` if not yet resolved.\n */\n rendered_title?: string;\n\n // ── Side-effect tracking ───────────────────────────────────────────────────\n /** Prevents `add_duration` from being emitted more than once per visible lifecycle. */\n duration_added?: boolean;\n /** Runtime company ID stored when `company_set` side-effect fires. */\n company_id?: string;\n /** Runtime service ID stored when `service_set` side-effect fires. */\n service_id?: string;\n /** Runtime resource ID stored when `resource_set` side-effect fires. */\n resource_id?: string;\n\n // ── Address lookup runtime state ───────────────────────────────────────────\n addresses?: Array<{ address: { ADDRESS: string } }>;\n addressLoading?: boolean;\n badPostcode?: boolean;\n selected_address?: string;\n\n // ── AWS lookup runtime state ───────────────────────────────────────────────\n lookupSuccess?: boolean;\n lookupError?: boolean;\n lookupUsed?: boolean;\n lookupLoading?: boolean;\n lookupResponse?: { name?: string; home_office?: string; [key: string]: unknown } | null;\n lookupNameMismatch?: boolean;\n /**\n * Set to true on secondary match fields (e.g. name input) after a successful\n * lookup. Causes the field wrapper to receive the `hidden-field` CSS class,\n * hiding the input while the verified info display is shown instead.\n */\n lookupValidated?: boolean;\n\n // ── Venue search runtime state ─────────────────────────────────────────────\n searching?: boolean;\n noResults?: boolean;\n selected_resource?: VenueResult;\n /** Display value of the currently selected venue (for read-only display). */\n answer?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Event Payloads & Component Props\n// ---------------------------------------------------------------------------\n\n/** Individual field error. */\nexport interface FieldError {\n fieldName: string;\n errors: Record<string, unknown>;\n}\n\n/** Extra item entry tracked by the form. */\nexport interface ExtraItemEntry {\n field: string;\n serviceId: string;\n extraItemId: string;\n qty: number;\n}\n\n/** Status object emitted via onFormStatus on every form value change. */\nexport interface FormSchemaStatus {\n /** True when all visible, required fields on the current page are valid. */\n status: boolean;\n /** Array of field error objects for any invalid controls. */\n errors: FieldError[];\n /** Snapshot of all current form control values keyed by field name. */\n formData: Record<string, string> | undefined;\n /**\n * Extra items currently tracked by the form (may be empty during initial load).\n * Populated by the extra-items system — see Prompt 8.\n */\n extraItems: ExtraItemEntry[];\n /**\n * Present when a field with a `service_set` side-effect just changed value.\n * The parent uses this to trigger a service selection in the booking datastore.\n */\n setService?: string;\n}\n\n/** Payload emitted via onVenueSet. */\nexport interface VenueSetPayload {\n /** The selected venue object, or null when the selection is cleared. */\n venue: VenueResult | null;\n /** The field name this venue selection belongs to. */\n field: string;\n /** Present when a venue is selected and has an associated company. */\n companyId?: string;\n /** Present when a venue is selected and has an associated resource. */\n resourceId?: string;\n}\n\n/** Payload emitted via onAwsLookupSet. */\nexport interface AwsLookupSetPayload {\n /** The field name the lookup was performed on. */\n field: string;\n /** The reference object returned on success, or null when cleared. */\n reference: { name?: string; home_office?: string; [key: string]: unknown } | null;\n success: boolean;\n}\n\n/** Payload emitted via onUpdateDatastore. */\nexport interface UpdateDatastorePayload {\n type?: 'lookupResponse';\n field?: string;\n lookupResponse?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/** Payload emitted via onFormReady. */\nexport interface FormReadyPayload {\n form_id: string;\n extra_items: ExtraItemEntry[];\n}\n\n// ---------------------------------------------------------------------------\n// Component Props\n// ---------------------------------------------------------------------------\n\n/** Props for the SchemaFormBuilder component. */\nexport interface SchemaFormBuilderProps {\n // ── Required ───────────────────────────────────────────────────────────────\n /** The schema ID used to fetch the form definition from the API. */\n formId: string;\n /** Runtime API configuration. Forwarded to all API calls. */\n appConfig: AppConfig;\n /** The current route page slug (e.g. 'booking-details'). Only fields for this page are rendered. */\n currentPage: string;\n /** The booking company ID for venue searches and extra item lookups. */\n companyId: string;\n\n // ── Optional configuration ─────────────────────────────────────────────────\n /**\n * Initial field values to pre-populate the form with.\n * Keys must match `field.field` names in the schema.\n */\n formData?: Record<string, unknown>;\n /**\n * Whether to show the submit/continue button.\n * The form also manages this internally based on `field.continue` visibility —\n * this prop provides an external override for the initial render.\n */\n showSubmit?: boolean;\n /**\n * When provided, the form watches this value. If it changes to a new\n * formId string, the form tears down and re-initialises with the new schema.\n */\n formUpdateId?: string;\n /**\n * When provided, the component uses this schema directly instead of\n * fetching from the API. Useful for testing schema implementations locally.\n * Must conform to the FormSchemaResponse shape.\n */\n initialSchema?: FormSchemaResponse;\n\n // ── Event callbacks ────────────────────────────────────────────────────────\n /** Fired when the submit button is clicked and the form is valid. */\n onFormSubmit?: (data: Record<string, string>) => void;\n /** Fired on every form value change with current validity and form data. */\n onFormStatus?: (status: FormSchemaStatus) => void;\n /** Fired on submit with the raw schema object (used for downstream schema introspection). */\n onSchema?: (schema: Record<string, unknown>) => void;\n /** Fired when a field with `company_set` becomes visible. */\n onCompanySet?: (companyId: string) => void;\n /** Fired when a field with `service_set` becomes visible. */\n onServiceSet?: (serviceId: string) => void;\n /** Fired when a field with `resource_set` becomes visible. */\n onResourceSet?: (resourceId: string) => void;\n /** Fired when a field with `staff_set` becomes visible. */\n onStaffSet?: (staffId: string) => void;\n /**\n * Fired when a field with `add_duration` becomes visible (positive string value)\n * or hidden (negated string value, e.g. '-30').\n */\n onAddDuration?: (duration: string) => void;\n /** Fired once after the form schema has been fetched and controls built. */\n onFormReady?: (payload: FormReadyPayload) => void;\n /** Fired when a booker field (name, email, phone) is populated. */\n onUpdateDatastore?: (payload: UpdateDatastorePayload) => void;\n /** Fired when an address is selected from the address lookup dropdown. */\n onAddressSet?: (address: string) => void;\n /** Fired when an AWS lookup succeeds, fails, or is cleared. */\n onAwsLookupSet?: (payload: AwsLookupSetPayload) => void;\n /** Fired when a new extra item is fetched and should be added to the booking. */\n onExtraItemSet?: (payload: { item_id: string; item: ExtraItemProperties | null }) => void;\n /** Fired when an existing extra item's quantity changes. */\n onExtraItemChanged?: (payload: { item_id: string; item: ExtraItemEntry }) => void;\n /** Fired when a venue is selected or cleared. */\n onVenueSet?: (payload: VenueSetPayload) => void;\n /** Fired when any async operation (address lookup, AWS lookup, extra item fetch) starts or ends. */\n onProcessing?: (loading: boolean) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Hydration Helper\n// ---------------------------------------------------------------------------\n\n/**\n * Hydrates a raw API field into a SchemaField by setting all initial\n * runtime state to its default values.\n */\nexport function hydrateField(raw: RawSchemaField, currentPage: string): SchemaField {\n return {\n ...raw,\n rules_count: Object.keys(raw.show ?? {}).length,\n show_on_this_page: raw.page === currentPage,\n visible: false,\n is_visible: false,\n aws_lookup: raw.lookup?.aws_table != null,\n };\n}\n","// API layer for SchemaFormBuilder\n// Pure async functions — no classes, no throwing. All return ApiResult<T>.\n\nimport type { AppConfig, RawSchemaField } from '../types/schema-form-builder';\n\n// ---------------------------------------------------------------------------\n// Result types\n// ---------------------------------------------------------------------------\n\nexport interface ApiError {\n error: true;\n message: string;\n}\n\nexport type ApiResult<T> = T | ApiError;\n\nexport function isApiError<T>(result: ApiResult<T>): result is ApiError {\n return (result as ApiError).error === true;\n}\n\n// ---------------------------------------------------------------------------\n// Response types\n// ---------------------------------------------------------------------------\n\nexport interface FormSchemaResponse {\n schema: {\n type: 'extended' | 'legacy' | string;\n form_name: string;\n fields: RawSchemaField[];\n };\n}\n\n// RawSchemaField is imported from types/schema-form-builder.ts\nexport type { RawSchemaField } from '../types/schema-form-builder';\n\nexport interface AddressLookupItem {\n DPA?: { ADDRESS: string; [key: string]: string };\n LPI?: { ADDRESS: string; [key: string]: string };\n}\n\nexport interface AwsLookupResponse {\n /** 1 = found, 2 = no data, 3 = server error */\n custom_response_code: 1 | 2 | 3;\n reference?: {\n name?: string;\n home_office?: string;\n /** Whether this reference has already been consumed */\n used?: boolean;\n [key: string]: unknown;\n };\n}\n\nexport interface ExtraItemProperties {\n /** Booking extra item data including pricing details. */\n data?: {\n pmtTyp?: string;\n [key: string]: unknown;\n };\n qty?: number;\n field?: string;\n [key: string]: unknown;\n}\n\nexport interface VenueResult {\n pretty_name?: string;\n venue_name: string;\n venue_type?: string;\n company_id?: string;\n resource_id?: string;\n description?: string;\n image?: string;\n [key: string]: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// API functions\n// ---------------------------------------------------------------------------\n\n/**\n * Fetches the form schema definition for a given form ID.\n * The server resolves the schema from company + client + form_name.\n */\nexport async function getFormSchema(\n formId: string,\n appConfig: AppConfig\n): Promise<ApiResult<FormSchemaResponse>> {\n try {\n const response = await fetch(`${appConfig.apiBaseUrl}/form/schema`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n clienttoken: appConfig.blApiToken,\n },\n body: JSON.stringify({\n company: appConfig.company_id,\n client: appConfig.customer_name,\n form_name: formId,\n }),\n });\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n return (await response.json()) as FormSchemaResponse;\n } catch (err) {\n return { error: true, message: (err as Error).message };\n }\n}\n\n/**\n * Looks up a list of UK addresses for a given postcode via Ordnance Survey.\n */\nexport async function getAddressLookup(\n postcode: string,\n appConfig: AppConfig\n): Promise<ApiResult<AddressLookupItem[]>> {\n try {\n const response = await fetch(\n `${appConfig.apiBaseUrl}/ordnance_survey/postcode/${encodeURIComponent(postcode)}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n clienttoken: appConfig.blApiToken,\n },\n }\n );\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n const data = await response.json();\n return Array.isArray(data) ? data : (data.results ?? []);\n } catch (err) {\n return { error: true, message: (err as Error).message };\n }\n}\n\n/**\n * Validates a reference number against a DynamoDB eligibility table.\n * Optionally cross-validates against a secondary field (e.g. name match).\n */\nexport async function awsLookup(\n appConfig: AppConfig,\n table: string,\n field: string,\n reference: string,\n referenceExtra?: string,\n fieldExtra?: string\n): Promise<ApiResult<AwsLookupResponse>> {\n try {\n const body: Record<string, string> = {\n client: appConfig.customer_name,\n reference,\n table,\n field,\n };\n if (referenceExtra && fieldExtra) {\n body['referenceExtra'] = fieldExtra;\n body['field_extra'] = referenceExtra;\n }\n const response = await fetch(`${appConfig.apiBaseUrl}/eligibility_reference_lookup`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n clienttoken: appConfig.blApiToken,\n },\n body: JSON.stringify(body),\n });\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n return (await response.json()) as AwsLookupResponse;\n } catch (err) {\n return { error: true, message: (err as Error).message };\n }\n}\n\n/**\n * Fetches the properties (including price/revenue code) for a booking extra item.\n */\nexport async function getExtraItemProperties(\n bookingQuestionCode: string,\n companyId: string,\n serviceId: string,\n appConfig: AppConfig\n): Promise<ApiResult<ExtraItemProperties>> {\n try {\n const response = await fetch(\n `${appConfig.apiBaseUrl}/company/${companyId}/extra-item/${bookingQuestionCode}/service/${serviceId}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n clienttoken: appConfig.blApiToken,\n },\n }\n );\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n return (await response.json()) as ExtraItemProperties;\n } catch (err) {\n return { error: true, message: (err as Error).message };\n }\n}\n\n/**\n * Searches for venues/resources by a free-text query string.\n * Results can be further filtered client-side by venue_type.\n */\nexport async function searchVenue(\n companyId: string,\n query: string,\n appConfig: AppConfig\n): Promise<ApiResult<VenueResult[]>> {\n try {\n const response = await fetch(\n `${appConfig.apiBaseUrl}/company/${companyId}/venue-lookup?search=${encodeURIComponent(query.toLowerCase())}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n 'x-company-id': companyId,\n clienttoken: appConfig.blApiToken,\n },\n }\n );\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n const data = await response.json();\n return Array.isArray(data) ? data : [];\n } catch (err) {\n return { error: true, message: (err as Error).message };\n }\n}\n","// SchemaFormBuilder — Prompt 4: Initialisation & Session Storage\n\nimport { useState, useEffect, useRef, useCallback } from 'react';\nimport { parse, isBefore, isAfter, isValid, addDays, startOfDay } from 'date-fns';\nimport type {\n SchemaFormBuilderProps,\n SchemaField,\n RawSchemaField,\n ExtraItemEntry,\n FieldError,\n ConditionClause,\n ShowRules,\n ValidationMinLength,\n ValidationMaxLength,\n ValidationMinDate,\n ValidationMaxDate,\n} from '../types/schema-form-builder';\nimport { hydrateField } from '../types/schema-form-builder';\nimport type { FormSchemaResponse, VenueResult } from '../utils/formSchemaApi';\nimport { getFormSchema, getExtraItemProperties, getAddressLookup, awsLookup, searchVenue, isApiError } from '../utils/formSchemaApi';\n\n// ---------------------------------------------------------------------------\n// Validation Types & Pure Validators\n// ---------------------------------------------------------------------------\n\nexport interface ValidationError {\n key: string;\n requiredLength?: number;\n message?: string;\n}\n\nexport type ValidatorFn = (value: string) => ValidationError | null;\n\nexport function requiredValidator(value: string): ValidationError | null {\n if (value === '' || value == null) return { key: 'required' };\n return null;\n}\n\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nexport function emailValidator(value: string): ValidationError | null {\n if (!value) return null;\n return EMAIL_REGEX.test(value) ? null : { key: 'email' };\n}\n\nconst UK_MOBILE_REGEX = /^(?:0|\\+44)7\\d{9}$/;\nexport function mobileValidator(value: string): ValidationError | null {\n if (!value) return null;\n return UK_MOBILE_REGEX.test(value) ? null : { key: 'pattern', message: 'Enter a valid UK mobile number.' };\n}\n\nconst UK_PHONE_REGEX = /^(?:0|\\+44)\\s?\\d{10}$/;\nexport function phoneValidator(value: string): ValidationError | null {\n if (!value) return null;\n return UK_PHONE_REGEX.test(value) ? null : { key: 'pattern', message: 'Enter a valid UK phone number.' };\n}\n\nexport function minLengthValidator(min: number): ValidatorFn {\n return (value: string) => {\n if (!value) return null;\n return value.length >= min ? null : { key: 'minlength', requiredLength: min };\n };\n}\n\nexport function maxLengthValidator(max: number): ValidatorFn {\n return (value: string) => {\n if (!value) return null;\n return value.length <= max ? null : { key: 'maxlength', requiredLength: max };\n };\n}\n\nexport function minDateValidator(minDateStr: string): ValidatorFn {\n return (value: string) => {\n if (!value) return null;\n const controlDate = startOfDay(new Date(value));\n const minDate = startOfDay(parse(minDateStr, 'dd-MM-yyyy', new Date()));\n if (!isValid(controlDate)) return { key: 'invalidDate', message: 'Invalid date format' };\n return isBefore(controlDate, minDate) ? { key: 'minDate', message: 'Date cannot be in the past' } : null;\n };\n}\n\nexport function maxDateValidator(noOfDays: number): ValidatorFn {\n return (value: string) => {\n if (!value) return null;\n const maxDate = startOfDay(addDays(new Date(), noOfDays));\n const controlDate = startOfDay(new Date(value));\n return isAfter(controlDate, maxDate) ? { key: 'maxDate', message: 'Date cannot be in the future' } : null;\n };\n}\n\nexport function buildValidators(field: RawSchemaField): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n if (field.required) validators.push(requiredValidator);\n if (!Array.isArray(field.validation)) return validators;\n\n for (const rule of field.validation) {\n if (typeof rule === 'string') {\n switch (rule) {\n case 'email': validators.push(emailValidator); break;\n case 'mobile': validators.push(mobileValidator); break;\n case 'phone': case 'contact': validators.push(phoneValidator); break;\n case 'length': validators.push(maxLengthValidator(255)); break;\n }\n } else if (typeof rule === 'object' && rule !== null) {\n if ('minLength' in rule) validators.push(minLengthValidator((rule as ValidationMinLength).minLength));\n if ('maxLength' in rule) validators.push(maxLengthValidator((rule as ValidationMaxLength).maxLength));\n if ('minDate' in rule) validators.push(minDateValidator((rule as ValidationMinDate).minDate));\n if ('maxDate' in rule) validators.push(maxDateValidator((rule as ValidationMaxDate).maxDate));\n }\n }\n return validators;\n}\n\nexport function getErrorMessage(error: ValidationError): string {\n switch (error.key) {\n case 'required': return 'This field is required.';\n case 'minlength': return `Minimum length is ${error.requiredLength ?? 0} characters.`;\n case 'maxlength': return `Maximum length is ${error.requiredLength ?? 0} characters.`;\n case 'email': return 'Enter a valid email address.';\n case 'pattern': return error.message ?? 'Invalid format.';\n case 'minDate': return error.message ?? 'Date cannot be in the past.';\n case 'maxDate': return error.message ?? 'Date cannot be in the future.';\n case 'invalidDate': return error.message ?? 'Enter a valid date.';\n default: return error.message ?? 'Invalid input.';\n }\n}\n\nexport function getInputType(field: SchemaField): React.HTMLInputTypeAttribute {\n if (\n field.type === 'number' &&\n Array.isArray(field.validation) &&\n field.validation.some(v => typeof v === 'string' && ['phone', 'mobile', 'contact'].includes(v))\n ) {\n return 'tel';\n }\n return field.type as React.HTMLInputTypeAttribute;\n}\n\n// ---------------------------------------------------------------------------\n// Session Storage Helpers\n// ---------------------------------------------------------------------------\n\nconst SESSION_STORAGE_KEY = 'form_builder_answers';\n\n/**\n * Returns the entire answer store from sessionStorage.\n * Returns an empty object if nothing is stored or if parsing fails.\n */\nfunction getAnswerStore(): Record<string, Record<string, unknown>> {\n try {\n const raw = sessionStorage.getItem(SESSION_STORAGE_KEY);\n return raw ? (JSON.parse(raw) as Record<string, Record<string, unknown>>) : {};\n } catch {\n return {};\n }\n}\n\n/**\n * Retrieves a single stored answer for a field in the given form.\n * Returns null if not found.\n */\nfunction getStoredAnswer(formId: string, fieldName: string): string | null {\n const store = getAnswerStore();\n const value = store?.[formId]?.[fieldName];\n return value != null ? String(value) : null;\n}\n\n/**\n * Persists a single field answer to sessionStorage.\n * Creates the formId namespace if it does not yet exist.\n */\nfunction persistAnswer(formId: string, fieldName: string, value: unknown): void {\n if (!formId) return;\n const store = getAnswerStore();\n if (!store[formId]) store[formId] = {};\n store[formId][fieldName] = value;\n try {\n sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(store));\n } catch (err) {\n console.warn('[FormBuilder] Failed to persist answer to sessionStorage:', err);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function SchemaFormBuilder(props: SchemaFormBuilderProps) {\n const {\n formId,\n appConfig,\n currentPage,\n companyId,\n formData,\n showSubmit: showSubmitProp,\n formUpdateId,\n initialSchema,\n onFormSubmit,\n onFormStatus,\n onSchema,\n onCompanySet,\n onServiceSet,\n onResourceSet,\n onStaffSet,\n onAddDuration,\n onFormReady,\n onUpdateDatastore,\n onAddressSet,\n onAwsLookupSet,\n onExtraItemSet,\n onExtraItemChanged,\n onVenueSet,\n onProcessing,\n } = props;\n\n // ── React State ──────────────────────────────────────────────────────────\n\n /** All form control values keyed by field name. */\n const [formValues, setFormValues] = useState<Record<string, string>>({});\n\n /** Hydrated schema fields for the current form. */\n const [formFields, setFormFields] = useState<SchemaField[]>([]);\n\n /** The raw schema object returned by the API. */\n const [schema, setSchema] = useState<FormSchemaResponse | null>(null);\n\n /** Whether the submit/continue button is visible. */\n const [showSubmit, setShowSubmit] = useState<boolean>(showSubmitProp ?? false);\n\n /** True while the schema is being fetched and the form is being built. */\n const [loading, setLoading] = useState<boolean>(true);\n\n /** Venue search suggestions from the last successful searchVenue call. */\n const [suggestions, setSuggestions] = useState<VenueResult[]>([]);\n\n /** Whether a venue search request is in-flight (used by venue search field). */\n const [, _setSearching] = useState<boolean>(false);\n\n /** The current text value of a venue search input. */\n const [searchText, setSearchText] = useState<string>('');\n\n /** Fields the user has interacted with (blur). */\n const [touchedFields, setTouchedFields] = useState<Set<string>>(new Set());\n\n /** Fields the user has changed. */\n const [dirtyFields, setDirtyFields] = useState<Set<string>>(new Set());\n\n // ── Refs ──────────────────────────────────────────────────────────────────\n\n /**\n * The internal service/resource/company ID registry per formId.\n * Updated when side-effect fields become visible.\n */\n const formServicesRef = useRef<\n Record<string, { service_id?: string; resource_id?: string; company_id?: string }>\n >({});\n\n /** The list of extra items currently tracked for the active booking. */\n const extraItemsRef = useRef<ExtraItemEntry[]>([]);\n\n /** Guards against concurrent async fetches for the same extra item ID. */\n const pendingExtraItemFetchesRef = useRef<Set<string>>(new Set());\n\n /** Debounce timer handle for venue search input. */\n const venueSearchTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n /** The formId the component was last initialised with. */\n const activeFormIdRef = useRef<string>('');\n\n /** Prevents double-initialisation. */\n const initialisedRef = useRef<boolean>(false);\n\n /** Cached validator functions per field name — built once during initialisation. */\n const validatorMapRef = useRef<Map<string, ValidatorFn[]>>(new Map());\n\n // ── Initialisation Guard ──────────────────────────────────────────────────\n\n useEffect(() => {\n if (initialisedRef.current && formUpdateId === activeFormIdRef.current && !initialSchema) return;\n initialisedRef.current = true;\n activeFormIdRef.current = formUpdateId ?? formId;\n initialiseForm(formUpdateId ?? formId);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formId, formUpdateId, initialSchema]);\n\n // ── Form Values Watcher → Visibility + Parent Notification ─────────────────\n\n useEffect(() => {\n if (formFields.length > 0) {\n refreshVisibility();\n }\n\n // Emit onFormStatus to parent\n if (formFields.length > 0) {\n const errors: FieldError[] = [];\n\n for (const field of formFields) {\n if (field.page !== currentPage) continue;\n if (!field.visible && !field.is_visible) continue;\n\n const value = formValues[field.field] ?? '';\n const fieldErrors = validateField(field, value);\n\n if (fieldErrors) {\n errors.push({ fieldName: field.field, errors: fieldErrors as unknown as Record<string, unknown> });\n }\n }\n\n const serviceSetField = formFields.find(\n f => f.page === currentPage && f.service_set && (f.visible || f.is_visible)\n );\n\n onFormStatus?.({\n status: errors.length === 0,\n errors,\n formData: formValues as Record<string, string>,\n extraItems: extraItemsRef.current,\n setService: serviceSetField?.service_set,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formValues]);\n\n // ── Extra Items Watcher ────────────────────────────────────────────────────\n\n useEffect(() => {\n if (!formFields.length) return;\n\n const visibleFieldsWithExtraItems = formFields.filter(\n f =>\n f.page === currentPage &&\n (f.visible || f.is_visible) &&\n (f['extra-item'] || f.resource_ids)\n );\n\n for (const field of visibleFieldsWithExtraItems) {\n void setExtraItems(field);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formFields, formValues]);\n\n // ── Cleanup ───────────────────────────────────────────────────────────────\n\n useEffect(() => {\n return () => {\n if (venueSearchTimerRef.current) {\n clearTimeout(venueSearchTimerRef.current);\n }\n };\n }, []);\n\n // ── Form Value Update Helper ──────────────────────────────────────────────\n\n const setFieldValue = useCallback(\n (fieldName: string, value: string, _options?: { emitEvent?: boolean }): void => {\n setFormValues(prev => ({ ...prev, [fieldName]: value }));\n persistAnswer(formId, fieldName, value);\n },\n [formId]\n );\n\n // ── Initialisation ────────────────────────────────────────────────────────\n\n async function initialiseForm(resolvedFormId: string): Promise<void> {\n setLoading(true);\n setFormFields([]);\n setFormValues({});\n setSchema(null);\n setShowSubmit(false);\n extraItemsRef.current = [];\n pendingExtraItemFetchesRef.current = new Set();\n formServicesRef.current[resolvedFormId] ??= {};\n\n // Step 1: Fetch schema (or use initialSchema if provided)\n let result: FormSchemaResponse;\n if (initialSchema) {\n result = initialSchema;\n } else {\n const apiResult = await getFormSchema(resolvedFormId, appConfig);\n if (isApiError(apiResult)) {\n console.error('[FormBuilder] Failed to fetch form schema:', apiResult.message);\n setLoading(false);\n return;\n }\n result = apiResult;\n }\n\n // Step 2: Strip internal-use fields\n const rawFields = result.schema.fields.filter(f => f.field !== 'haf_id');\n\n // Step 3: Hydrate fields\n const hydrated: SchemaField[] = rawFields.map(f => hydrateField(f, currentPage));\n\n // Step 4: Build initial form values\n const initialValues: Record<string, string> = {};\n\n for (const field of hydrated) {\n if (!field.show_on_this_page) continue;\n initialValues[field.field] = '';\n if (field.address_lookup) {\n initialValues[`${field.field}_postcode`] = '';\n }\n }\n\n if (formData) {\n for (const [key, value] of Object.entries(formData)) {\n if (key in initialValues) {\n initialValues[key] = String(value ?? '');\n }\n }\n }\n\n // Step 5: Pre-populate copy_data targets from sessionStorage\n const copyDataTargets = new Set<string>();\n for (const field of hydrated) {\n if (field.copy_data?.to) {\n for (const target of field.copy_data.to) {\n copyDataTargets.add(target);\n }\n }\n }\n\n if (copyDataTargets.size > 0) {\n const storedAnswers = getAnswerStore()[resolvedFormId] ?? {};\n for (const target of copyDataTargets) {\n if (target in initialValues && !initialValues[target] && storedAnswers[target] != null) {\n initialValues[target] = String(storedAnswers[target]);\n }\n }\n }\n\n // Step 6: Build validator map\n validatorMapRef.current = new Map();\n for (const field of hydrated) {\n validatorMapRef.current.set(field.field, buildValidators(field));\n }\n\n // Step 7: Commit state\n setSchema(result);\n setFormFields(hydrated);\n setFormValues(initialValues);\n setTouchedFields(new Set());\n setDirtyFields(new Set());\n\n // Step 8: Notify parent\n onFormReady?.({\n form_id: resolvedFormId,\n extra_items: extraItemsRef.current,\n });\n\n setLoading(false);\n }\n\n // ── Validation ────────────────────────────────────────────────────────────\n\n function validateField(field: SchemaField, value: string): ValidationError | null {\n if (!field.visible && !field.is_visible) return null;\n const validators = validatorMapRef.current.get(field.field) ?? buildValidators(field);\n for (const validator of validators) {\n const error = validator(value);\n if (error) return error;\n }\n return null;\n }\n\n function markAsTouched(fieldName: string): void {\n setTouchedFields(prev => new Set(prev).add(fieldName));\n }\n\n function markAsDirty(fieldName: string): void {\n setDirtyFields(prev => new Set(prev).add(fieldName));\n }\n\n function markAllAsTouched(): void {\n const allFieldNames = formFields\n .filter(f => f.show_on_this_page)\n .map(f => f.field);\n setTouchedFields(new Set(allFieldNames));\n }\n\n function shouldShowError(fieldName: string): boolean {\n return touchedFields.has(fieldName) || dirtyFields.has(fieldName);\n }\n\n // ── Visibility Engine (Extended Schema — Prompt 5) ─────────────────────────\n\n function refreshVisibility(): void {\n if (!formFields.length) return;\n\n let continueVisible = false;\n const schemaType = schema?.schema?.type ?? 'extended';\n\n const updatedFields = formFields.map(field => {\n if (field.page !== currentPage) return field;\n\n const wasVisible = field.visible;\n\n const hasShowRules =\n field.show != null && Object.keys(field.show).length > 0;\n\n let isVisible: boolean;\n\n if (schemaType === 'extended') {\n isVisible = hasShowRules\n ? evaluateExtendedConditional(field)\n : evaluateAlwaysVisible(field);\n } else {\n isVisible = evaluateLegacyConditional(field);\n }\n\n // When a field transitions from visible → hidden, clear its value\n if (!isVisible && wasVisible) {\n setFormValues(prev => {\n if (prev[field.field] === '' || prev[field.field] == null) return prev;\n const next = { ...prev, [field.field]: '' };\n return next;\n });\n }\n\n // Track whether any 'continue' field is visible (controls submit button)\n if (isVisible && field.continue === true) {\n continueVisible = true;\n }\n\n return { ...field, visible: isVisible, is_visible: isVisible };\n });\n\n setFormFields(updatedFields);\n setShowSubmit(continueVisible);\n }\n\n function evaluateAlwaysVisible(field: SchemaField): boolean {\n resolveDynamicTitle(field);\n fireVisibleSideEffects(field, true);\n\n // Appointment type filter (booking-details page only)\n if (isAppointmentTypeFiltered(field)) return false;\n\n return true;\n }\n\n function evaluateExtendedConditional(field: SchemaField): boolean {\n resolveDynamicTitle(field);\n\n const rules = field.show as ShowRules;\n const customResults: boolean[] = [];\n const simpleResults: boolean[] = [];\n\n // 1. custom_all_lookups_successful\n if ('custom_all_lookups_successful' in rules) {\n customResults.push(checkAllLookupsSuccessful(field.field));\n }\n\n // 2. custom (single AND group)\n if (rules.custom) {\n customResults.push(evaluateCustomCondition(rules.custom));\n }\n\n // 3. custom_multiple_condition (singular — single AND group)\n if (rules.custom_multiple_condition) {\n customResults.push(evaluateAndGroup(rules.custom_multiple_condition));\n }\n\n // 4. custom_multiple_conditions (plural — OR between groups, AND within)\n if (rules.custom_multiple_conditions) {\n customResults.push(evaluateOrOfAndGroups(rules.custom_multiple_conditions));\n }\n\n // 5. custom_or_condition (OR — any clause passing is sufficient)\n if (rules.custom_or_condition) {\n customResults.push(evaluateOrGroup(rules.custom_or_condition));\n }\n\n // 6. Simple field-name → expected-value rules (all other keys)\n const RESERVED_RULE_KEYS = new Set([\n 'custom',\n 'custom_multiple_condition',\n 'custom_multiple_conditions',\n 'custom_or_condition',\n 'custom_all_lookups_successful',\n ]);\n\n for (const [targetField, expectedValue] of Object.entries(rules)) {\n if (RESERVED_RULE_KEYS.has(targetField)) continue;\n simpleResults.push(evaluateSimpleRule(targetField, expectedValue as string));\n }\n\n // Simple rules use OR logic among themselves.\n // Custom rules must ALL pass (AND between custom rule types).\n // When both exist, simple OR result is AND'd with custom results.\n let isVisible: boolean;\n const simplePass = simpleResults.length === 0 || simpleResults.some(r => r);\n const customPass = customResults.length === 0 || customResults.every(r => r);\n\n if (simpleResults.length > 0 && customResults.length > 0) {\n isVisible = simplePass && customPass;\n } else if (customResults.length > 0) {\n isVisible = customPass;\n } else {\n isVisible = simplePass;\n }\n\n fireVisibleSideEffects(field, isVisible);\n\n // Appointment type filter (booking-details page only)\n if (isVisible && isAppointmentTypeFiltered(field)) return false;\n\n // Store appointment type on services page\n if (isVisible && field.appointment_type && currentPage === 'services') {\n const stored = sessionStorage.getItem('appointment_type');\n if (!stored) {\n sessionStorage.setItem('appointment_type', field.appointment_type);\n }\n }\n\n return isVisible;\n }\n\n // ── Rule Evaluators ───────────────────────────────────────────────────────\n\n function evaluateSimpleRule(targetField: string, expectedValue: string): boolean {\n const currentValue = formValues[targetField] ?? '';\n\n if (expectedValue === '*') {\n return currentValue !== '' && currentValue !== null && currentValue !== undefined;\n }\n\n // Support \"value1 OR value2 OR value3\" syntax\n if (typeof expectedValue === 'string' && expectedValue.includes(' OR ')) {\n const options = expectedValue.split(' OR ').map(s => s.trim());\n return options.some(opt => {\n if (opt === '*') return currentValue !== '' && currentValue != null;\n return String(currentValue) === opt;\n });\n }\n\n return String(currentValue) === String(expectedValue);\n }\n\n /**\n * Resolves the numeric value for comparison, handling date fields\n * by computing days-from-today.\n */\n function resolveNumericForComparison(fieldName: string, rawValue: string): number {\n // Check if this field is a date type\n const field = formFields.find(f => f.field === fieldName);\n if (field?.type === 'date' && rawValue) {\n const dateVal = new Date(rawValue);\n if (isValid(dateVal)) {\n const today = startOfDay(new Date());\n const target = startOfDay(dateVal);\n const diffMs = target.getTime() - today.getTime();\n return Math.round(diffMs / (1000 * 60 * 60 * 24));\n }\n }\n return Number(rawValue);\n }\n\n /**\n * Parses a custom expression string like \"< 29\", \"> 365\", \"> 29 and < 365\"\n * against a field's current value.\n */\n function evaluateCustomExpression(fieldName: string, expression: string): boolean {\n const rawValue = formValues[fieldName] ?? '';\n\n if (expression === '*') {\n return rawValue !== '' && rawValue != null;\n }\n\n // Handle compound \"and\" expressions: \"> 29 and < 365\"\n if (expression.includes(' and ')) {\n const parts = expression.split(' and ').map(s => s.trim());\n return parts.every(part => evaluateCustomExpression(fieldName, part));\n }\n\n // Parse operator + value: \"< 29\", \"> 365\", \"<= 10\", \">= 5\", \"== foo\", \"!= bar\"\n const match = expression.trim().match(/^([<>!=]=?)\\s*(.+)$/);\n if (match) {\n const [, operator, operand] = match;\n const numericValue = resolveNumericForComparison(fieldName, rawValue);\n const numericOperand = Number(operand.trim());\n\n switch (operator) {\n case '<': return numericValue < numericOperand;\n case '>': return numericValue > numericOperand;\n case '<=': return numericValue <= numericOperand;\n case '>=': return numericValue >= numericOperand;\n case '==': return String(rawValue) === operand.trim();\n case '!=': return String(rawValue) !== operand.trim();\n default: return false;\n }\n }\n\n // Plain string equality\n return String(rawValue) === expression.trim();\n }\n\n /**\n * Handles `custom` rule — API sends as object: { fieldName: \"expression\" }\n * e.g. { \"when_is_your_ceremony\": \"< 29\" }\n * ALL entries must pass (AND logic).\n */\n function evaluateCustomCondition(custom: unknown): boolean {\n // Handle array format (ConditionClause[])\n if (Array.isArray(custom)) {\n return custom.every((clause: ConditionClause) => evaluateClause(clause));\n }\n // Handle object format: { fieldName: expression }\n if (typeof custom === 'object' && custom !== null) {\n const entries = Object.entries(custom as Record<string, string>);\n return entries.every(([fieldName, expression]) =>\n evaluateCustomExpression(fieldName, String(expression))\n );\n }\n return false;\n }\n\n /**\n * Handles `custom_multiple_condition` — API sends as:\n * { conditions: [{ fieldName: value }, { fieldName: value }] }\n * ALL conditions must pass (AND logic).\n */\n function evaluateAndGroup(data: unknown): boolean {\n // Handle array format (ConditionClause[])\n if (Array.isArray(data)) {\n return data.every((clause: ConditionClause) => evaluateClause(clause));\n }\n // Handle object format: { conditions: [...] }\n if (typeof data === 'object' && data !== null && 'conditions' in (data as any)) {\n const conditions = (data as any).conditions as Record<string, string>[];\n return conditions.every(condObj => {\n const entries = Object.entries(condObj);\n return entries.every(([fieldName, expectedValue]) =>\n evaluateSimpleRule(fieldName, String(expectedValue))\n );\n });\n }\n return false;\n }\n\n /**\n * Handles `custom_multiple_conditions` — API sends as:\n * { groups: [{ conditions: [...] }, { conditions: [...] }] }\n * OR between groups, AND within each group.\n */\n function evaluateOrOfAndGroups(data: unknown): boolean {\n // Handle 2D array format\n if (Array.isArray(data)) {\n return data.some((group: ConditionClause[]) =>\n Array.isArray(group) && group.every((clause: ConditionClause) => evaluateClause(clause))\n );\n }\n // Handle object format: { groups: [{ conditions: [...] }, ...] }\n if (typeof data === 'object' && data !== null && 'groups' in (data as any)) {\n const groups = (data as any).groups as { conditions: Record<string, string>[] }[];\n return groups.some(group => {\n if (!group.conditions || !Array.isArray(group.conditions)) return false;\n return group.conditions.every(condObj => {\n const entries = Object.entries(condObj);\n return entries.every(([fieldName, expectedValue]) =>\n evaluateSimpleRule(fieldName, String(expectedValue))\n );\n });\n });\n }\n return false;\n }\n\n function evaluateOrGroup(clauses: ConditionClause[]): boolean {\n return clauses.some(clause => evaluateClause(clause));\n }\n\n function evaluateClause(clause: ConditionClause): boolean {\n const rawValue = formValues[clause.field] ?? '';\n const operator = clause.operator ?? '==';\n\n if (clause.value === '*') {\n return rawValue !== '' && rawValue != null;\n }\n\n switch (operator) {\n case '==':\n return String(rawValue) === String(clause.value);\n case '!=':\n return String(rawValue) !== String(clause.value);\n case '>':\n return Number(rawValue) > Number(clause.value);\n case '<':\n return Number(rawValue) < Number(clause.value);\n case '>=':\n return Number(rawValue) >= Number(clause.value);\n case '<=':\n return Number(rawValue) <= Number(clause.value);\n default:\n return false;\n }\n }\n\n // ── Visibility Helpers ────────────────────────────────────────────────────\n\n function checkAllLookupsSuccessful(excludeFieldName: string): boolean {\n const allLookupFields = formFields.filter(\n f => f.lookup?.aws_table && f.page === currentPage\n );\n\n const visibleLookupFields = allLookupFields.filter(\n f => (f.visible === true || f.is_visible === true) && f.field !== excludeFieldName\n );\n\n if (visibleLookupFields.length === 0) return false;\n\n return visibleLookupFields.every(f => f.lookupSuccess === true);\n }\n\n function resolveDynamicTitle(field: SchemaField): void {\n const TOKEN_REGEX = /\\{([^}]+)\\}/g;\n field.rendered_title = field.title.replace(TOKEN_REGEX, (_, fieldName: string) => {\n const value = formValues[fieldName];\n return value != null && value !== '' ? String(value) : '';\n });\n }\n\n function isAppointmentTypeFiltered(field: SchemaField): boolean {\n if (currentPage !== 'booking-details') return false;\n if (!field.appointment_type) return false;\n const storedType = sessionStorage.getItem('appointment_type');\n if (!storedType) return false;\n return field.appointment_type !== storedType;\n }\n\n function evaluateLegacyConditional(field: SchemaField): boolean {\n if (!field.conditional) {\n resolveDynamicTitle(field);\n fireVisibleSideEffects(field, true);\n return true;\n }\n\n if (!field.trigger || !field.trigger_value) {\n return true;\n }\n\n const triggerFields = field.trigger.split('|');\n const triggerExpressions = String(field.trigger_value).split('|');\n\n const results: boolean[] = [];\n\n triggerFields.forEach((triggerFieldName, i) => {\n const expression = triggerExpressions[i] ?? '';\n const parts = expression.split('&');\n\n for (const part of parts) {\n const trimmedPart = part.trim();\n const parentValue = formValues[triggerFieldName] ?? '';\n\n if (trimmedPart === '*') {\n results.push(parentValue !== '' && parentValue != null && parentValue !== undefined);\n continue;\n }\n\n const firstChar = trimmedPart[0];\n\n if (['<', '>', '!'].includes(firstChar)) {\n const operand = Number(trimmedPart.substring(1));\n const numericParentValue = Number(parentValue);\n\n switch (firstChar) {\n case '<':\n if (numericParentValue < operand) results.push(true);\n break;\n case '>':\n if (numericParentValue > operand) results.push(true);\n break;\n case '!':\n if (String(parentValue) !== String(operand)) results.push(true);\n break;\n }\n } else {\n results.push(String(parentValue) === String(trimmedPart));\n }\n }\n });\n\n const isVisible = results.filter(Boolean).length >= 1;\n\n fireVisibleSideEffects(field, isVisible);\n\n return isVisible;\n }\n\n // ── Booking Side Effects ────────────────────────────────────────────────\n\n const BOOKER_FIELD_KEYS = [\n 'booker_first_name',\n 'booker_last_name',\n 'booker_email',\n 'booker_phone',\n ] as const;\n\n type BookerFieldKey = typeof BOOKER_FIELD_KEYS[number];\n\n function fireVisibleSideEffects(field: SchemaField, isVisible: boolean): void {\n if (isVisible) {\n handleCompanySet(field);\n handleServiceSet(field);\n handleResourceSet(field);\n handleStaffSet(field);\n handleAddDuration(field);\n handleBookerFields(field);\n handleCopyData(field);\n handleAppointmentTypeStore(field);\n } else {\n handleRemoveDuration(field);\n }\n }\n\n function handleCompanySet(field: SchemaField): void {\n if (!field.company_set || !field.company_set.length) return;\n const formService = formServicesRef.current[formId] ??= {};\n if (formService.company_id === field.company_set) return;\n formService.company_id = field.company_set;\n field.company_id = field.company_set;\n onCompanySet?.(field.company_set);\n }\n\n function handleServiceSet(field: SchemaField): void {\n if (!field.service_set) return;\n const formService = formServicesRef.current[formId] ??= {};\n if (formService.service_id === field.service_set) return;\n formService.service_id = field.service_set;\n field.service_id = field.service_set;\n onServiceSet?.(field.service_set);\n }\n\n function handleResourceSet(field: SchemaField): void {\n if (!field.resource_set || !field.resource_set.length) return;\n const formService = formServicesRef.current[formId] ??= {};\n if (formService.resource_id === field.resource_set) return;\n formService.resource_id = field.resource_set;\n field.resource_id = field.resource_set;\n onResourceSet?.(field.resource_set);\n }\n\n function handleStaffSet(field: SchemaField): void {\n if (!field.staff_set || !field.staff_set.length) return;\n onStaffSet?.(field.staff_set);\n }\n\n function handleAddDuration(field: SchemaField): void {\n if (!field.add_duration) return;\n if (field.duration_added) return;\n field.duration_added = true;\n onAddDuration?.(field.add_duration);\n }\n\n function handleRemoveDuration(field: SchemaField): void {\n if (!field.add_duration) return;\n if (!field.duration_added) return;\n field.duration_added = false;\n onAddDuration?.(String(-Number(field.add_duration)));\n }\n\n function handleBookerFields(field: SchemaField): void {\n for (const key of BOOKER_FIELD_KEYS) {\n const isMarked = (field as unknown as Record<string, unknown>)[key] === true || (field as unknown as Record<string, unknown>)[key] === 'true';\n if (!isMarked) continue;\n const value = formValues[field.field];\n if (value) {\n onUpdateDatastore?.({ [key]: value } as Record<BookerFieldKey, string>);\n }\n }\n }\n\n function handleCopyData(field: SchemaField): void {\n const copyData = field.copy_data;\n if (!copyData?.from || !copyData?.to) return;\n\n const currentValue = formValues[field.field] ?? '';\n\n let shouldCopy: boolean;\n if (copyData.answer !== undefined && copyData.answer !== null) {\n shouldCopy = String(currentValue) === String(copyData.answer);\n } else {\n shouldCopy = currentValue !== '' && currentValue != null;\n }\n\n if (!shouldCopy) return;\n\n copyData.from.forEach((fromFieldName, index) => {\n const toFieldName = copyData.to[index];\n if (!toFieldName) return;\n\n const sourceValue = formValues[fromFieldName] ?? getStoredAnswer(formId, fromFieldName);\n if (sourceValue == null || sourceValue === '') return;\n\n if (toFieldName in formValues) {\n const existingValue = formValues[toFieldName];\n if (!existingValue) {\n setFormValues(prev => ({ ...prev, [toFieldName]: sourceValue }));\n }\n }\n\n persistAnswer(formId, toFieldName, sourceValue);\n });\n }\n\n function handleAppointmentTypeStore(field: SchemaField): void {\n if (!field.appointment_type) return;\n if (currentPage !== 'services') return;\n const existing = sessionStorage.getItem('appointment_type');\n if (!existing) {\n sessionStorage.setItem('appointment_type', field.appointment_type);\n }\n }\n\n // ── Extra Items & Fees ──────────────────────────────────────────────────\n\n /**\n * Manages the extra item lifecycle for a single field.\n * Fetches item properties from the API, tracks quantities, and emits\n * add/remove/change events to the parent.\n */\n async function setExtraItems(field: SchemaField): Promise<void> {\n if (field.page !== currentPage) return;\n if (!field.visible && !field.is_visible) return;\n\n let extraItemId = field['extra-item'] ?? '';\n const serviceId = field['service-id'] ?? '';\n\n if (field.resource_ids) {\n const activeResourceId = formServicesRef.current[formId]?.resource_id;\n if (activeResourceId) {\n const resourceEntry = field.resource_ids[activeResourceId];\n if (resourceEntry?.['extra-item']) {\n extraItemId = resourceEntry['extra-item'];\n }\n }\n }\n\n if (!extraItemId) return;\n\n const rawValue = field.type === 'heading' ? '1' : (formValues[field.field] ?? '0');\n const numericValue = Number(rawValue);\n\n let shouldBeActive: boolean;\n\n if (isNaN(numericValue)) {\n const boolResult = evaluateBooleanCondition(rawValue);\n if (boolResult !== undefined) {\n shouldBeActive = boolResult;\n } else {\n const firstShowKey = field.show ? Object.keys(field.show)[0] : null;\n shouldBeActive = firstShowKey != null\n ? String(field.show![firstShowKey as keyof ShowRules]) === String(rawValue)\n : false;\n }\n } else {\n shouldBeActive = numericValue > 0;\n }\n\n const existingEntry = extraItemsRef.current.find(\n item => item.extraItemId === extraItemId\n );\n\n if (!existingEntry) {\n // Case 1: Item is not yet tracked\n if (!shouldBeActive) return;\n\n const activeServiceId = formServicesRef.current[formId]?.service_id;\n if (!activeServiceId) {\n console.error(\n '[FormBuilder] Cannot fetch extra item — no service_id set for form:',\n formId\n );\n return;\n }\n\n if (pendingExtraItemFetchesRef.current.has(extraItemId)) {\n console.log('[FormBuilder] Skipping duplicate extra item fetch for:', extraItemId);\n return;\n }\n\n pendingExtraItemFetchesRef.current.add(extraItemId);\n onProcessing?.(true);\n\n const result = await getExtraItemProperties(\n extraItemId,\n companyId,\n activeServiceId,\n appConfig\n );\n\n pendingExtraItemFetchesRef.current.delete(extraItemId);\n\n if (isApiError(result)) {\n console.error('[FormBuilder] Failed to fetch extra item:', result.message);\n onProcessing?.(false);\n return;\n }\n\n const qty = field.type === 'heading' ? 1 : numericValue;\n\n extraItemsRef.current.push({\n field: field.field,\n serviceId,\n extraItemId,\n qty,\n });\n\n onExtraItemSet?.({\n item_id: extraItemId,\n item: { ...result, qty, field: field.field },\n });\n\n onProcessing?.(false);\n\n } else if (!shouldBeActive) {\n // Case 2: Item tracked but should be removed\n extraItemsRef.current = extraItemsRef.current.filter(\n item => item.extraItemId !== extraItemId\n );\n onExtraItemSet?.({ item_id: extraItemId, item: null });\n\n } else if (existingEntry.qty !== numericValue && field.type !== 'heading') {\n // Case 3: Quantity changed\n extraItemsRef.current = extraItemsRef.current.filter(\n item => item.extraItemId !== extraItemId\n );\n\n const updatedEntry: ExtraItemEntry = {\n field: field.field,\n serviceId,\n extraItemId,\n qty: numericValue,\n };\n\n extraItemsRef.current.push(updatedEntry);\n onExtraItemChanged?.({ item_id: extraItemId, item: updatedEntry });\n }\n // Case 4: No change → no-op\n }\n\n /**\n * Attempts to interpret a string value as a boolean.\n * Returns undefined if the value cannot be classified.\n */\n function evaluateBooleanCondition(value: string): boolean | undefined {\n const normalised = value?.toLowerCase().trim();\n if (['true', 'yes', '1'].includes(normalised)) return true;\n if (['false', 'no', '0', ''].includes(normalised)) return false;\n return undefined;\n }\n\n // ── Address Lookup ─────────────────────────────────────────────────────\n\n /**\n * UK postcode regex covering all valid Royal Mail formats including GIR 0AA.\n */\n const UK_POSTCODE_REGEX =\n /^([Gg][Ii][Rr] 0[Aa]{2}|((([A-Za-z][0-9]{1,2})|([A-Za-z][A-HJ-Ya-hj-y][0-9]{1,2})|([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-HJ-Ya-hj-y][0-9]?[A-Za-z]))\\s?[0-9][A-Za-z]{2}))$/;\n\n function isValidUkPostcode(postcode: string): boolean {\n return UK_POSTCODE_REGEX.test(postcode.trim());\n }\n\n /**\n * Applies a partial update to a single field in the formFields state array.\n */\n function updateFieldState(fieldName: string, updates: Partial<SchemaField>): void {\n setFormFields(prev =>\n prev.map(f => (f.field === fieldName ? { ...f, ...updates } : f))\n );\n }\n\n /**\n * Validates the postcode, calls the address API, and populates\n * field.addresses with the results.\n */\n async function performAddressLookup(fieldName: string): Promise<void> {\n const field = formFields.find(f => f.field === fieldName);\n if (!field) return;\n\n const postcodeKey = `${fieldName}_postcode`;\n const postcodeValue = (formValues[postcodeKey] ?? '').trim();\n\n updateFieldState(fieldName, { badPostcode: false, addresses: undefined });\n\n if (!postcodeValue) {\n updateFieldState(fieldName, { badPostcode: true });\n return;\n }\n\n if (!isValidUkPostcode(postcodeValue)) {\n console.error(`[FormBuilder] Invalid postcode format for field \"${fieldName}\": ${postcodeValue}`);\n updateFieldState(fieldName, { badPostcode: true });\n return;\n }\n\n updateFieldState(fieldName, { addressLoading: true });\n onProcessing?.(true);\n\n const result = await getAddressLookup(postcodeValue, appConfig);\n\n if (isApiError(result)) {\n console.error('[FormBuilder] Address lookup failed:', result.message);\n updateFieldState(fieldName, { addressLoading: false, badPostcode: true });\n onProcessing?.(false);\n return;\n }\n\n const addresses = result.map(item => ({\n address: item.DPA ?? item.LPI ?? { ADDRESS: '' },\n }));\n\n updateFieldState(fieldName, { addressLoading: false, addresses });\n onProcessing?.(false);\n }\n\n /**\n * Sets the selected address value on the main form control and emits\n * onAddressSet to the parent booking context.\n */\n function handleAddressSelected(event: React.ChangeEvent<HTMLSelectElement>, fieldName: string): void {\n const selectedAddress = event.target.value;\n\n setFieldValue(fieldName, selectedAddress);\n updateFieldState(fieldName, { selected_address: selectedAddress });\n onAddressSet?.(selectedAddress);\n }\n\n // ── AWS Eligibility Lookup ──────────────────────────────────────────────\n\n /**\n * Validates a reference number against a DynamoDB eligibility table.\n * Handles primary/secondary match fields, name mismatch detection,\n * and used-reference detection.\n */\n async function performAwsLookup(fieldName: string): Promise<void> {\n const field = formFields.find(f => f.field === fieldName);\n if (!field?.lookup?.aws_table) return;\n\n const lookup = field.lookup;\n const matchFields = lookup.match ?? [];\n\n updateFieldState(fieldName, {\n lookupError: false,\n lookupUsed: false,\n lookupLoading: true,\n lookupResponse: null,\n lookupNameMismatch: false,\n });\n\n let primaryReference = '';\n let primaryDynamoField = '';\n let secondaryReference = '';\n let secondaryDynamoField = '';\n\n for (const match of matchFields) {\n const { form_field, dynamodb_field } = match;\n const value = formValues[form_field] ?? getStoredAnswer(formId, form_field) ?? '';\n\n if (form_field === fieldName) {\n primaryReference = value;\n primaryDynamoField = dynamodb_field;\n } else if (!secondaryReference) {\n secondaryReference = value;\n secondaryDynamoField = dynamodb_field;\n }\n }\n\n if (!primaryReference) {\n console.error(`[FormBuilder] No reference value for field \"${fieldName}\"`);\n updateFieldState(fieldName, { lookupError: true, lookupLoading: false });\n return;\n }\n\n const result = await awsLookup(\n appConfig,\n lookup.aws_table,\n primaryDynamoField,\n primaryReference,\n secondaryReference || undefined,\n secondaryDynamoField || undefined\n );\n\n if (isApiError(result)) {\n console.error(`[FormBuilder] AWS lookup error for field \"${fieldName}\":`, result.message);\n updateFieldState(fieldName, { lookupError: true, lookupLoading: false });\n return;\n }\n\n updateFieldState(fieldName, { lookupLoading: false });\n\n if (result.custom_response_code !== 1) {\n updateFieldState(fieldName, { lookupError: true });\n return;\n }\n\n if (result.reference?.used === true) {\n updateFieldState(fieldName, { lookupUsed: true, lookupError: true });\n return;\n }\n\n if (secondaryReference && secondaryDynamoField === 'name' && result.reference?.name) {\n const responseName = result.reference.name.toLowerCase().trim();\n const enteredName = secondaryReference.toLowerCase().trim();\n if (responseName !== enteredName) {\n updateFieldState(fieldName, { lookupNameMismatch: true, lookupError: true });\n return;\n }\n }\n\n // Success: mark secondary match fields as validated\n const updatedFields = formFields.map(f => {\n const isSecondaryMatch = matchFields.some(\n m => m.form_field === f.field && m.form_field !== fieldName\n );\n return isSecondaryMatch ? { ...f, lookupValidated: true } : f;\n });\n\n const storedFieldKey = lookup.store_response_field;\n let resolvedValue: string;\n if (storedFieldKey && result.reference?.[storedFieldKey]) {\n resolvedValue = String(result.reference[storedFieldKey]);\n } else if (result.reference?.home_office) {\n resolvedValue = result.reference.home_office;\n } else {\n resolvedValue = primaryReference;\n }\n\n setFormFields(\n updatedFields.map(f =>\n f.field === fieldName\n ? {\n ...f,\n lookupSuccess: true,\n lookupError: false,\n lookupLoading: false,\n lookupResponse: result.reference ?? null,\n }\n : f\n )\n );\n\n setFieldValue(fieldName, resolvedValue);\n\n onAwsLookupSet?.({\n field: fieldName,\n reference: result.reference ?? null,\n success: true,\n });\n\n onUpdateDatastore?.({\n type: 'lookupResponse',\n field: fieldName,\n lookupResponse: result.reference as Record<string, unknown>,\n });\n\n refreshVisibility();\n }\n\n /**\n * Resets a lookup field and all its secondary match fields to initial state.\n */\n function clearAwsLookup(fieldName: string): void {\n const field = formFields.find(f => f.field === fieldName);\n if (!field) return;\n\n const matchFields = field.lookup?.match ?? [];\n\n const updatedFields = formFields.map(f => {\n const isSecondaryMatch = matchFields.some(\n m => m.form_field === f.field && m.form_field !== fieldName\n );\n if (isSecondaryMatch) {\n return { ...f, lookupValidated: false };\n }\n if (f.field === fieldName) {\n return {\n ...f,\n lookupError: false,\n lookupUsed: false,\n lookupLoading: false,\n lookupResponse: null,\n lookupSuccess: false,\n lookupNameMismatch: false,\n };\n }\n return f;\n });\n\n setFormFields(updatedFields);\n\n const secondaryMatchFieldNames = matchFields\n .filter(m => m.form_field !== fieldName)\n .map(m => m.form_field);\n\n setFormValues(prev => {\n const next = { ...prev };\n for (const name of secondaryMatchFieldNames) {\n next[name] = '';\n }\n return next;\n });\n\n setFieldValue(fieldName, '');\n\n onAwsLookupSet?.({ field: fieldName, reference: null, success: false });\n }\n\n // ── Venue Search ──────────────────────────────────────────────────────────\n\n const VENUE_SEARCH_DEBOUNCE_MS = 500;\n\n /**\n * Debounced handler for venue search input events.\n * Updates the search text and, after the debounce period, calls the API.\n */\n async function handleVenueSearchInput(\n event: React.KeyboardEvent<HTMLInputElement>,\n field: SchemaField\n ): Promise<void> {\n const IGNORED_KEYS = new Set([\n 'ArrowUp', 'ArrowDown', 'Enter', 'Escape',\n 'Tab', 'Shift', 'Control', 'Alt', 'Meta',\n ]);\n\n if (IGNORED_KEYS.has(event.key)) return;\n\n // Reset selection state when the user starts typing again\n updateFieldState(field.field, {\n selected_resource: undefined,\n searching: true,\n noResults: false,\n answer: undefined,\n });\n\n if (venueSearchTimerRef.current) {\n clearTimeout(venueSearchTimerRef.current);\n }\n\n venueSearchTimerRef.current = setTimeout(async () => {\n const query = (event.target as HTMLInputElement).value.trim();\n setSearchText(query);\n\n if (!query) {\n setSuggestions([]);\n updateFieldState(field.field, { searching: false });\n return;\n }\n\n try {\n const result = await searchVenue(companyId, query, appConfig);\n\n if (isApiError(result)) {\n console.error('[FormBuilder] Venue search failed:', result.message);\n updateFieldState(field.field, { searching: false, noResults: true });\n setSuggestions([]);\n return;\n }\n\n let venues: VenueResult[] = result;\n\n // Client-side filtering by venue_type when filter_by is configured\n if (field.filter_by) {\n const filterValue = (formValues[field.filter_by] ?? '').toLowerCase().trim();\n if (filterValue) {\n venues = venues.filter(\n v => v.venue_type?.toLowerCase().trim() === filterValue\n );\n }\n }\n\n setSuggestions(venues);\n updateFieldState(field.field, {\n searching: false,\n noResults: venues.length === 0,\n });\n } catch (err) {\n console.error('[FormBuilder] Venue search error:', err);\n setSuggestions([]);\n updateFieldState(field.field, { searching: false, noResults: true });\n }\n }, VENUE_SEARCH_DEBOUNCE_MS);\n }\n\n /**\n * Called when the user clicks or activates a suggestion in the list.\n * Sets the form value, stores the venue object on the field, and notifies the parent.\n */\n function selectVenueSuggestion(suggestion: VenueResult, field: SchemaField): void {\n setSuggestions([]);\n\n const displayName = suggestion.pretty_name ?? suggestion.venue_name;\n setSearchText(displayName);\n\n updateFieldState(field.field, {\n selected_resource: suggestion,\n answer: displayName,\n searching: false,\n noResults: false,\n });\n\n setFieldValue(field.field, displayName);\n\n onVenueSet?.({\n venue: suggestion,\n field: field.field,\n companyId: suggestion.company_id,\n resourceId: suggestion.resource_id,\n });\n }\n\n /**\n * Clears the venue selection and resets search state.\n * Emits onVenueSet with null to inform the parent the selection was removed.\n */\n function clearVenueSearch(field: SchemaField): void {\n if (venueSearchTimerRef.current) {\n clearTimeout(venueSearchTimerRef.current);\n }\n\n setSearchText('');\n setSuggestions([]);\n\n updateFieldState(field.field, {\n selected_resource: undefined,\n searching: false,\n noResults: false,\n answer: undefined,\n });\n\n setFieldValue(field.field, '');\n\n onVenueSet?.({ venue: null, field: field.field });\n }\n\n // ── Field Change Handler ─────────────────────────────────────────────────\n\n function handleFieldChange(fieldName: string, value: string): void {\n setFormValues(prev => ({ ...prev, [fieldName]: value }));\n persistAnswer(formId, fieldName, value);\n }\n\n // ── Form Errors (computed from current state) ────────────────────────────\n\n const formErrors: Record<string, boolean> = {};\n for (const field of formFields) {\n if (field.page !== currentPage) continue;\n if (!field.visible && !field.is_visible) continue;\n const value = formValues[field.field] ?? '';\n const error = validateField(field, value);\n if (error) formErrors[field.field] = true;\n }\n\n // ── Field Wrapper ─────────────────────────────────────────────────────────\n\n function getFieldWrapperClassName(field: SchemaField): string {\n const classes = ['govuk-form-group'];\n\n const isInvalid =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n if (isInvalid) {\n classes.push('govuk-form-group--error');\n }\n\n const isHidden =\n field.hidden_field ||\n (field.rules_count > 0 && !field.is_visible) ||\n field.lookupValidated;\n\n if (isHidden) {\n classes.push('hidden-field');\n }\n\n return classes.join(' ');\n }\n\n // ── Render Helpers ──────────────────────────────────────────────────────\n\n function renderLabel(field: SchemaField): React.ReactElement {\n return (\n <div className=\"govuk-label-wrapper\">\n <label className=\"govuk-label govuk-label--m\" htmlFor={field.field}>\n {field.rendered_title ?? field.title}\n {field.required && ' *'}\n </label>\n </div>\n );\n }\n\n function renderHint(field: SchemaField): React.ReactElement | null {\n if (!field.helptext) return null;\n return <div id={`${field.field}-hint`} className=\"govuk-hint\" dangerouslySetInnerHTML={{ __html: field.helptext }} />;\n }\n\n function renderErrors(field: SchemaField): React.ReactElement | null {\n if (!shouldShowError(field.field)) return null;\n const error = validateField(field, formValues[field.field] ?? '');\n if (!error) return null;\n return (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n {getErrorMessage(error)}\n </p>\n );\n }\n\n // ── Field Renderers ─────────────────────────────────────────────────────\n\n function renderField(field: SchemaField): React.ReactElement | null {\n switch (field.type) {\n case 'text':\n case 'number':\n case 'email':\n case 'date':\n return renderTextualField(field);\n case 'textarea':\n return renderTextarea(field);\n case 'radio':\n return renderRadio(field);\n case 'checkbox':\n return renderCheckbox(field);\n case 'dropdown':\n return renderDropdown(field);\n case 'heading':\n return renderHeading(field);\n case 'submit':\n return renderSubmitField(field);\n default:\n return null;\n }\n }\n\n function renderTextualField(field: SchemaField): React.ReactElement {\n return (\n <>\n {renderLabel(field)}\n {renderHint(field)}\n {renderErrors(field)}\n {field.address_lookup\n ? renderAddressLookup(field)\n : field.lookup?.aws_table\n ? renderAwsLookup(field)\n : field.resource_lookup\n ? renderVenueSearch(field)\n : renderPlainInput(field)}\n </>\n );\n }\n\n function renderPlainInput(field: SchemaField): React.ReactElement {\n const isError =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n const inputProps: React.InputHTMLAttributes<HTMLInputElement> = {\n id: field.field,\n type: getInputType(field),\n 'aria-required': field.required,\n value: formValues[field.field] ?? '',\n className: ['govuk-input', isError ? 'govuk-input--error' : ''].join(' ').trim(),\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFieldChange(field.field, e.target.value);\n markAsDirty(field.field);\n },\n onBlur: () => markAsTouched(field.field),\n };\n\n if (field.type === 'date' && field.hide_dates_in_future) {\n inputProps.max = new Date().toISOString().split('T')[0];\n }\n\n return <input {...inputProps} />;\n }\n\n function renderTextarea(field: SchemaField): React.ReactElement {\n const isError =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n return (\n <>\n {renderLabel(field)}\n {renderHint(field)}\n {renderErrors(field)}\n <textarea\n id={field.field}\n className={['govuk-textarea', isError ? 'govuk-textarea--error' : ''].join(' ').trim()}\n rows={5}\n aria-required={field.required}\n value={formValues[field.field] ?? ''}\n onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n handleFieldChange(field.field, e.target.value);\n markAsDirty(field.field);\n }}\n onBlur={() => markAsTouched(field.field)}\n />\n </>\n );\n }\n\n function renderRadio(field: SchemaField): React.ReactElement {\n const isError =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n return (\n <div className=\"govuk-form-group\">\n <fieldset className=\"govuk-fieldset\" aria-required={field.required}>\n <legend className=\"govuk-fieldset__legend govuk-fieldset__legend--m govuk-fieldset__legend--m-inverse\">\n {field.rendered_title ?? field.title}\n {field.required && ' *'}\n </legend>\n {renderHint(field)}\n {isError && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n {getErrorMessage(validateField(field, formValues[field.field] ?? '')!)}\n </p>\n )}\n <div className=\"govuk-radios\">\n {(field.radio_options ?? []).map(option => (\n <div className=\"govuk-radios__item\" key={option.value}>\n <input\n className=\"govuk-radios__input\"\n type=\"radio\"\n id={`${field.field}_${option.value}`}\n name={field.field}\n value={option.value}\n checked={formValues[field.field] === option.value}\n onChange={() => {\n handleFieldChange(field.field, option.value);\n markAsDirty(field.field);\n markAsTouched(field.field);\n }}\n />\n <label className=\"govuk-label govuk-radios__label\" htmlFor={`${field.field}_${option.value}`}>\n {option.title}\n </label>\n </div>\n ))}\n </div>\n </fieldset>\n </div>\n );\n }\n\n function renderCheckbox(field: SchemaField): React.ReactElement {\n const isError =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n return (\n <div className=\"govuk-form-group\">\n {renderHint(field)}\n {isError && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n This field is required.\n </p>\n )}\n <div className=\"govuk-checkboxes\">\n <div className=\"govuk-checkboxes__item\">\n <input\n className=\"govuk-checkboxes__input\"\n id={field.field}\n type=\"checkbox\"\n checked={formValues[field.field] === 'true'}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n handleFieldChange(field.field, String(e.target.checked));\n markAsDirty(field.field);\n markAsTouched(field.field);\n }}\n />\n <label className=\"govuk-label govuk-checkboxes__label govuk-label--m--inverse\" htmlFor={field.field}>\n {field.rendered_title ?? field.title}\n {field.required && ' *'}\n </label>\n </div>\n </div>\n </div>\n );\n }\n\n function renderDropdown(field: SchemaField): React.ReactElement {\n const isError =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n return (\n <>\n {renderLabel(field)}\n {renderHint(field)}\n {renderErrors(field)}\n <select\n id={field.field}\n className={['govuk-select govuk-select--inverse', isError ? 'govuk-select--error' : ''].join(' ').trim()}\n aria-required={field.required ? 'true' : undefined}\n value={formValues[field.field] ?? ''}\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {\n handleFieldChange(field.field, e.target.value);\n markAsDirty(field.field);\n markAsTouched(field.field);\n }}\n >\n <option value=\"\">Please select</option>\n {(field.options ?? [])\n .filter(opt => opt.visible)\n .map(opt => (\n <option key={opt.value} value={opt.value}>{opt.title}</option>\n ))}\n </select>\n </>\n );\n }\n\n function renderHeading(field: SchemaField): React.ReactElement | null {\n const componentType = field.component_type;\n\n if (componentType === 'govbook-warning_box') {\n return (\n <div className=\"warning-box\">\n <div className=\"content\">\n <span className=\"warning-box__title\">{field.rendered_title ?? field.title}</span>\n <span className=\"warning-box__message\" dangerouslySetInnerHTML={{ __html: field.component_text ?? '' }} />\n </div>\n </div>\n );\n }\n\n if (componentType === 'govbook-information_box') {\n return (\n <div className=\"information-box\">\n <div className=\"content\">\n <span className=\"information-box__title\">{field.rendered_title ?? field.title}</span>\n <span className=\"information-box__message\" dangerouslySetInnerHTML={{ __html: field.component_text ?? '' }} />\n </div>\n </div>\n );\n }\n\n if (componentType === 'body') {\n return <div className=\"govuk-body govuk-body--inverse\" dangerouslySetInnerHTML={{ __html: field.component_text ?? '' }} />;\n }\n\n return (\n <>\n <h3 className=\"govuk-heading-m govuk-heading-m--inverse\">{field.rendered_title ?? field.title}</h3>\n {renderHint(field)}\n </>\n );\n }\n\n function renderSubmitField(field: SchemaField): React.ReactElement | null {\n return (\n <>\n {renderHint(field)}\n {showSubmit && (\n <div>\n <button type=\"button\" className=\"nhsuk-button govuk-button\" onClick={handleSubmit}>\n {field.rendered_title ?? field.title}\n </button>\n </div>\n )}\n </>\n );\n }\n\n // ── Address Lookup Renderer ─────────────────────────────────────────────\n\n function renderAddressLookup(field: SchemaField): React.ReactElement {\n return (\n <div className=\"address-lookup\">\n <div className=\"govuk-input__wrapper\">\n <div className=\"govuk-form-group\">\n <input\n id={`${field.field}_postcode`}\n type=\"text\"\n value={formValues[`${field.field}_postcode`] ?? ''}\n onChange={e => handleFieldChange(`${field.field}_postcode`, e.target.value)}\n className={['govuk-input', field.badPostcode ? 'govuk-input--error' : ''].join(' ').trim()}\n />\n </div>\n <button\n type=\"button\"\n className=\"govuk-button govuk-button--secondary\"\n disabled={field.addressLoading}\n onClick={() => performAddressLookup(field.field)}\n >\n {field.addressLoading ? 'Searching...' : 'Find address'}\n </button>\n </div>\n\n {field.badPostcode && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n Please enter a valid UK postcode.\n </p>\n )}\n\n {field.addresses && field.addresses.length > 0 && (\n <div className=\"govuk-form-group\">\n <label className=\"govuk-label\" htmlFor={`${field.field}_select`}>Select address below</label>\n <select\n id={`${field.field}_select`}\n className=\"govuk-select\"\n onChange={e => handleAddressSelected(e, field.field)}\n >\n <option value=\"\">Select address</option>\n {field.addresses.map((item, idx) => (\n <option key={idx} value={item.address.ADDRESS}>{item.address.ADDRESS}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n );\n }\n\n // ── AWS Lookup Renderer ─────────────────────────────────────────────────\n\n function renderAwsLookup(field: SchemaField): React.ReactElement {\n return (\n <div className=\"aws-lookup\">\n {!field.lookupSuccess && (\n <>\n <div className=\"govuk-input__wrapper\">\n <input\n id={field.field}\n type={field.type}\n aria-required={field.required}\n value={formValues[field.field] ?? ''}\n onChange={e => handleFieldChange(field.field, e.target.value)}\n className={['govuk-input', field.lookupError || formErrors[field.field] ? 'govuk-input--error' : ''].join(' ').trim()}\n />\n </div>\n <div className=\"govuk-button-group\">\n <button\n type=\"button\"\n className=\"govuk-button govuk-button--secondary lookup-reference\"\n disabled={field.lookupLoading}\n onClick={() => performAwsLookup(field.field)}\n >\n {field.lookupLoading ? 'Checking...' : 'Check reference'}\n </button>\n </div>\n </>\n )}\n\n {field.lookupLoading && <div className=\"govuk-hint\">Checking reference...</div>}\n\n {field.lookupError && !field.lookupUsed && !field.lookupNameMismatch && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n Reference not found. Please check and try again.\n </p>\n )}\n {field.lookupUsed && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n This reference has already been used.\n </p>\n )}\n {field.lookupNameMismatch && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n The name does not match the reference. Please check and try again.\n </p>\n )}\n\n {field.lookupSuccess && field.lookupResponse && (\n <div className=\"govuk-inset-text\">\n <p className=\"govuk-body\"><strong>Reference verified</strong></p>\n {field.lookupResponse.name && <p className=\"govuk-body\">Name: {field.lookupResponse.name}</p>}\n {field.lookupResponse.home_office && <p className=\"govuk-body\">Reference: {field.lookupResponse.home_office}</p>}\n <button type=\"button\" className=\"govuk-button govuk-button--secondary\" onClick={() => clearAwsLookup(field.field)}>\n Clear\n </button>\n </div>\n )}\n </div>\n );\n }\n\n // ── Venue Search Renderer ───────────────────────────────────────────────\n\n function renderVenueSearch(field: SchemaField): React.ReactElement {\n return (\n <div className=\"govuk-form-group resource-lookup\">\n <div className=\"govuk-input__wrapper\">\n <input\n id={field.field}\n type=\"text\"\n className=\"govuk-input govuk-input--with-clear\"\n value={searchText}\n placeholder=\"Start typing to search...\"\n autoComplete=\"off\"\n onChange={() => {}}\n onKeyDown={e => handleVenueSearchInput(e, field)}\n />\n {searchText && (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"govuk-input__suffix\"\n aria-label=\"Clear search\"\n onClick={() => clearVenueSearch(field)}\n onKeyDown={e => { if (e.key === 'Enter' || e.key === ' ') clearVenueSearch(field); }}\n >\n <b aria-hidden=\"true\">×</b>\n </div>\n )}\n </div>\n\n {field.searching && <span className=\"govuk-hint\">Searching…</span>}\n {field.noResults && <span className=\"govuk-hint\">No results found</span>}\n\n {suggestions.length > 0 && (\n <ul className=\"resource-suggestions\" role=\"listbox\">\n {suggestions.map((suggestion, idx) => (\n <li\n key={idx}\n role=\"option\"\n tabIndex={0}\n className=\"resource-suggestion\"\n onClick={() => selectVenueSuggestion(suggestion, field)}\n onKeyDown={e => { if (e.key === 'Enter') selectVenueSuggestion(suggestion, field); }}\n >\n {suggestion.pretty_name ?? suggestion.venue_name}\n </li>\n ))}\n </ul>\n )}\n\n {field.answer && field.selected_resource?.description && (\n <div className=\"selected-venue-detail\">\n <p className=\"govuk-label govuk-fieldset__legend--m pt-3\">Description</p>\n <p>{field.selected_resource.description}</p>\n {field.selected_resource.image && (\n <img className=\"selected-venue\" src={field.selected_resource.image} alt=\"\" />\n )}\n </div>\n )}\n </div>\n );\n }\n\n // ── Submit Handler ──────────────────────────────────────────────────────\n\n function handleSubmit(): void {\n const isFormValid = formFields\n .filter(f => f.show_on_this_page && (f.visible || f.is_visible))\n .every(f => validateField(f, formValues[f.field] ?? '') === null);\n\n if (!isFormValid) {\n markAllAsTouched();\n return;\n }\n\n onFormSubmit?.(formValues as Record<string, string>);\n onSchema?.(schema as unknown as Record<string, unknown>);\n }\n\n // ── Render ────────────────────────────────────────────────────────────────\n\n if (loading) {\n return <div className=\"govuk-body\">Loading form...</div>;\n }\n\n if (!formFields.length) {\n return null;\n }\n\n return (\n <form className=\"govuk-form\" onSubmit={e => { e.preventDefault(); handleSubmit(); }}>\n {formFields\n .filter(field => field.show_on_this_page)\n .map((field, index) => (\n <div key={field.field || index} className={getFieldWrapperClassName(field)}>\n {(field.is_visible || !field.rules_count) && renderField(field)}\n </div>\n ))}\n\n {showSubmit && (\n <button type=\"submit\" className=\"nhsuk-button govuk-button\">\n Continue\n </button>\n )}\n </form>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/BookingForm.tsx","../src/utils/validators.ts","../src/components/RegistrationForm.tsx","../src/components/ContactDetailsForm.tsx","../src/components/ResetPasswordForm.tsx","../../../node_modules/date-fns/toDate.mjs","../../../node_modules/date-fns/constructFrom.mjs","../../../node_modules/date-fns/addDays.mjs","../../../node_modules/date-fns/constants.mjs","../../../node_modules/date-fns/_lib/defaultOptions.mjs","../../../node_modules/date-fns/startOfWeek.mjs","../../../node_modules/date-fns/startOfISOWeek.mjs","../../../node_modules/date-fns/getISOWeekYear.mjs","../../../node_modules/date-fns/startOfDay.mjs","../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.mjs","../../../node_modules/date-fns/startOfISOWeekYear.mjs","../../../node_modules/date-fns/isDate.mjs","../../../node_modules/date-fns/isValid.mjs","../../../node_modules/date-fns/locale/en-US/_lib/formatDistance.mjs","../../../node_modules/date-fns/locale/_lib/buildFormatLongFn.mjs","../../../node_modules/date-fns/locale/en-US/_lib/formatLong.mjs","../../../node_modules/date-fns/locale/en-US/_lib/formatRelative.mjs","../../../node_modules/date-fns/locale/_lib/buildLocalizeFn.mjs","../../../node_modules/date-fns/locale/en-US/_lib/localize.mjs","../../../node_modules/date-fns/locale/_lib/buildMatchFn.mjs","../../../node_modules/date-fns/locale/_lib/buildMatchPatternFn.mjs","../../../node_modules/date-fns/locale/en-US/_lib/match.mjs","../../../node_modules/date-fns/locale/en-US.mjs","../../../node_modules/date-fns/getISOWeek.mjs","../../../node_modules/date-fns/getWeekYear.mjs","../../../node_modules/date-fns/startOfWeekYear.mjs","../../../node_modules/date-fns/getWeek.mjs","../../../node_modules/date-fns/_lib/format/longFormatters.mjs","../../../node_modules/date-fns/_lib/protectedTokens.mjs","../../../node_modules/date-fns/getDefaultOptions.mjs","../../../node_modules/date-fns/getISODay.mjs","../../../node_modules/date-fns/isAfter.mjs","../../../node_modules/date-fns/isBefore.mjs","../../../node_modules/date-fns/transpose.mjs","../../../node_modules/date-fns/parse/_lib/Setter.mjs","../../../node_modules/date-fns/parse/_lib/Parser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/EraParser.mjs","../../../node_modules/date-fns/parse/_lib/constants.mjs","../../../node_modules/date-fns/parse/_lib/utils.mjs","../../../node_modules/date-fns/parse/_lib/parsers/YearParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/QuarterParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/MonthParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.mjs","../../../node_modules/date-fns/setWeek.mjs","../../../node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.mjs","../../../node_modules/date-fns/setISOWeek.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/DateParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.mjs","../../../node_modules/date-fns/setDay.mjs","../../../node_modules/date-fns/parse/_lib/parsers/DayParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/LocalDayParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.mjs","../../../node_modules/date-fns/setISODay.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ISODayParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/AMPMParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/MinuteParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/SecondParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.mjs","../../../node_modules/date-fns/parse/_lib/parsers.mjs","../../../node_modules/date-fns/parse.mjs","../src/types/schema-form-builder.ts","../src/utils/formSchemaApi.ts","../src/components/SchemaFormBuilder.tsx"],"names":["isValid","useState","useCallback","jsxs","jsx","cx","forwardRef","useId","useImperativeHandle","useEffect","defaultOptions","formatLong","getDefaultOptions","match"],"mappings":"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","file":"index.mjs","sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport type { Question, FormValues, FormErrors, BookingFormProps, BookingFormClassNames } from '../types';\n\n/** Merge base classes with optional custom classes */\nconst cx = (...classes: (string | undefined)[]) => classes.filter(Boolean).join(' ');\n\n/**\n * Three-input (day/month/year) date field with local state for parts.\n * Emits a combined YYYY-MM-DD string when fully valid, or '' otherwise.\n */\nfunction DateInputGroup({\n question,\n value,\n onChange,\n inputId,\n hasError,\n errorId,\n fieldsetCls,\n legendCls,\n groupCls,\n itemCls,\n sublabelCls,\n dateInputCls,\n dayInputCls,\n monthInputCls,\n yearInputCls,\n helpTextAbove,\n helpTextBelow,\n renderError,\n}: {\n question: Question;\n value: string;\n onChange: (value: string | number | boolean) => void;\n inputId: string;\n hasError: boolean;\n errorId: string;\n fieldsetCls: string;\n legendCls: string;\n groupCls: string;\n itemCls: string;\n sublabelCls: string;\n dateInputCls: string;\n dayInputCls?: string;\n monthInputCls?: string;\n yearInputCls?: string;\n helpTextAbove: React.ReactNode;\n helpTextBelow: React.ReactNode;\n renderError: () => React.ReactNode;\n}) {\n\n const parseValue = (raw: string) => {\n const m = raw.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (!m) return { day: '', month: '', year: '' };\n return { year: m[1], month: String(Number(m[2])), day: String(Number(m[3])) };\n };\n\n const [parts, setParts] = useState(() => parseValue(value));\n const lastEmittedRef = React.useRef<string>(value);\n\n // Sync from external value changes (but not echoes of our own emits)\n useEffect(() => {\n if (value !== lastEmittedRef.current) {\n setParts(parseValue(value));\n lastEmittedRef.current = value;\n }\n }, [value]);\n\n const buildValue = (d: string, m: string, y: string): string => {\n if (!/^\\d{1,2}$/.test(d) || !/^\\d{1,2}$/.test(m) || !/^\\d{4}$/.test(y)) return '';\n const dn = Number(d), mn = Number(m), yn = Number(y);\n const date = new Date(yn, mn - 1, dn);\n if (date.getFullYear() !== yn || date.getMonth() !== mn - 1 || date.getDate() !== dn) return '';\n return `${String(yn).padStart(4, '0')}-${String(mn).padStart(2, '0')}-${String(dn).padStart(2, '0')}`;\n };\n\n const handleSubChange = (part: 'day' | 'month' | 'year', v: string) => {\n const sanitized = v.replace(/[^\\d]/g, '');\n const max = part === 'year' ? 4 : 2;\n const next = { ...parts, [part]: sanitized.slice(0, max) };\n setParts(next);\n const combined = buildValue(next.day, next.month, next.year);\n lastEmittedRef.current = combined;\n onChange(combined);\n };\n\n const dayId = `${inputId}-day`;\n const monthId = `${inputId}-month`;\n const yearId = `${inputId}-year`;\n\n return (\n <fieldset className={fieldsetCls} aria-describedby={hasError ? errorId : undefined}>\n\n <legend className={legendCls}>\n {question.name}\n {question.required && <span className=\"ml-1\" style={{ color: \"#DD2D1D\" }} aria-hidden=\"true\">*</span>}\n </legend>\n {helpTextAbove}\n <div className={groupCls} role=\"group\">\n <div className={itemCls}>\n <label htmlFor={dayId} className={sublabelCls}>Day</label>\n <input\n id={dayId}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={2}\n value={parts.day}\n onChange={(e) => handleSubChange('day', e.target.value)}\n className={cx(dayInputCls ?? dateInputCls, 'w-16')}\n aria-invalid={hasError ? true : undefined}\n aria-required={question.required || undefined}\n />\n </div>\n <div className={itemCls}>\n <label htmlFor={monthId} className={sublabelCls}>Month</label>\n <input\n id={monthId}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={2}\n value={parts.month}\n onChange={(e) => handleSubChange('month', e.target.value)}\n className={cx(monthInputCls ?? dateInputCls, 'w-16')}\n aria-invalid={hasError ? true : undefined}\n aria-required={question.required || undefined}\n />\n </div>\n <div className={itemCls}>\n <label htmlFor={yearId} className={sublabelCls}>Year</label>\n <input\n id={yearId}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={4}\n value={parts.year}\n onChange={(e) => handleSubChange('year', e.target.value)}\n className={cx(yearInputCls ?? dateInputCls, 'w-24')}\n aria-invalid={hasError ? true : undefined}\n aria-required={question.required || undefined}\n />\n </div>\n </div>\n {helpTextBelow}\n {renderError()}\n </fieldset>\n );\n}\n\n\n\n/**\n * Renders a single form field based on question type\n */\nfunction FormField({\n question,\n value,\n error,\n onChange,\n classNames,\n displayHelpTextBelowLabel = false,\n}: {\n question: Question;\n value: string | number | boolean | undefined;\n error?: string;\n onChange: (value: string | number | boolean) => void;\n classNames?: BookingFormClassNames;\n displayHelpTextBelowLabel?: boolean;\n}) {\n const inputId = `question-${question.id}`;\n const errorId = `${inputId}-error`;\n const hasError = !!error;\n\n // Default classes (can be overridden via classNames prop)\n const defaultFieldWrapper = 'mb-4';\n const defaultLabel = 'block text-sm font-medium mb-1 text-gray-700';\n const defaultHeading = 'text-lg font-semibold text-gray-900 mt-4 mb-2 first:mt-0';\n const defaultInput = 'w-full px-3 py-2 border rounded-md text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-offset-1 border-gray-300 focus:ring-blue-500 focus:border-blue-500';\n const defaultInputError = 'border-red-500 focus:ring-red-500';\n const defaultCheckbox = 'mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500';\n const defaultHelpText = 'mt-1 text-xs text-gray-500';\n const defaultErrorText = 'mt-1 text-xs text-red-600';\n\n const inputClasses = hasError\n ? cx(classNames?.input ?? defaultInput, classNames?.inputError ?? defaultInputError)\n : cx(classNames?.input ?? defaultInput);\n\n const labelClasses = classNames?.label ?? defaultLabel;\n const checkboxLabelClasses = cx('text-sm', classNames?.label ?? 'text-gray-700');\n\n const renderLabel = () => {\n if (question.detail_type === 'heading') return null;\n return (\n <label htmlFor={inputId} className={labelClasses}>\n {question.name}\n {question.required && <span className=\"ml-1\" style={{ color: \"#DD2D1D\" }} aria-hidden=\"true\">*</span>}\n </label>\n );\n };\n\n const renderHelpText = () => {\n if (!question.help_text) return null;\n return (\n <p\n className={classNames?.helpText ?? defaultHelpText}\n dangerouslySetInnerHTML={{ __html: question.help_text }}\n />\n );\n };\n\n const helpTextAbove = displayHelpTextBelowLabel ? renderHelpText() : null;\n const helpTextBelow = displayHelpTextBelowLabel ? null : renderHelpText();\n\n const renderError = () => {\n if (!error) return null;\n return (\n <p id={errorId} className={classNames?.errorText ?? defaultErrorText} role=\"alert\">\n {error}\n </p>\n );\n };\n\n\n const ariaProps = {\n 'aria-invalid': hasError ? true : undefined,\n 'aria-describedby': hasError ? errorId : undefined,\n 'aria-required': question.required || undefined,\n };\n\n switch (question.detail_type) {\n case 'heading':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n <h3 className={classNames?.heading ?? defaultHeading}>\n {question.name}\n </h3>\n {renderHelpText()}\n </div>\n );\n\n case 'text_field':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n {helpTextAbove}\n <input\n id={inputId}\n type=\"text\"\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={question.settings?.placeholder}\n className={inputClasses}\n {...ariaProps}\n />\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n case 'text_area':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n {helpTextAbove}\n <textarea\n id={inputId}\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={question.settings?.placeholder}\n rows={4}\n className={inputClasses}\n {...ariaProps}\n />\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n case 'select':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n {helpTextAbove}\n <select\n id={inputId}\n value={(value as string | number) ?? ''}\n onChange={(e) => onChange(e.target.value)}\n className={inputClasses}\n {...ariaProps}\n >\n <option value=\"\">Select an option</option>\n {question.options?.map((option) => (\n <option key={option.id} value={option.id}>\n {option.name}\n </option>\n ))}\n </select>\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n case 'radio':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n {helpTextAbove}\n <div\n role=\"radiogroup\"\n aria-labelledby={inputId}\n className={classNames?.radioGroup ?? 'flex flex-col gap-2 mt-1'}\n >\n {question.options?.map((option) => {\n const optionId = `${inputId}-${option.id}`;\n return (\n <div key={option.id} className=\"flex items-center gap-2\">\n <input\n id={optionId}\n type=\"radio\"\n name={inputId}\n value={option.id}\n checked={String(value ?? '') === String(option.id)}\n onChange={() => onChange(option.id)}\n className={classNames?.radio ?? 'h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500'}\n {...ariaProps}\n />\n <label htmlFor={optionId} className={classNames?.radioLabel ?? cx('text-sm', classNames?.label ?? 'text-gray-700')}>\n {option.name}\n </label>\n </div>\n );\n })}\n </div>\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n case 'date': {\n const dateInputBase = classNames?.dateInput ?? classNames?.input ?? defaultInput;\n const dateInputCls = hasError\n ? cx(dateInputBase, classNames?.inputError ?? defaultInputError)\n : dateInputBase;\n const sublabelCls =\n classNames?.dateInputLabel ?? 'block text-xs font-medium mb-1 text-gray-700';\n const itemCls = classNames?.dateInputItem ?? 'flex flex-col';\n const groupCls = classNames?.dateInputGroup ?? 'flex flex-row gap-3 items-end';\n const legendCls = classNames?.dateLegend ?? labelClasses;\n const fieldsetCls = classNames?.dateFieldset ?? (classNames?.fieldWrapper ?? defaultFieldWrapper);\n const wrapPerInput = (cls?: string) =>\n cls === undefined\n ? undefined\n : hasError\n ? cx(cls, classNames?.inputError ?? defaultInputError)\n : cls;\n const dayInputCls = wrapPerInput(classNames?.dateInputDay);\n const monthInputCls = wrapPerInput(classNames?.dateInputMonth);\n const yearInputCls = wrapPerInput(classNames?.dateInputYear);\n\n return (\n <DateInputGroup\n question={question}\n value={typeof value === 'string' ? value : ''}\n onChange={onChange}\n inputId={inputId}\n hasError={hasError}\n errorId={errorId}\n fieldsetCls={fieldsetCls}\n legendCls={legendCls}\n groupCls={groupCls}\n itemCls={itemCls}\n sublabelCls={sublabelCls}\n dateInputCls={dateInputCls}\n dayInputCls={dayInputCls}\n monthInputCls={monthInputCls}\n yearInputCls={yearInputCls}\n helpTextAbove={helpTextAbove}\n helpTextBelow={helpTextBelow}\n renderError={renderError}\n />\n );\n }\n\n case 'number':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n {helpTextAbove}\n <input\n id={inputId}\n type=\"number\"\n value={(value as number) ?? ''}\n onChange={(e) => onChange(e.target.value ? Number(e.target.value) : '')}\n min={question.settings?.min}\n max={question.settings?.max}\n placeholder={question.settings?.placeholder}\n className={inputClasses}\n {...ariaProps}\n />\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n case 'check':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {helpTextAbove}\n <div className=\"flex items-start gap-2\">\n <input\n id={inputId}\n type=\"checkbox\"\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n className={classNames?.checkbox ?? defaultCheckbox}\n {...ariaProps}\n />\n <label htmlFor={inputId} className={checkboxLabelClasses}>\n {question.name}\n {question.required && <span className=\"ml-1\" style={{ color: \"#DD2D1D\" }} aria-hidden=\"true\">*</span>}\n </label>\n </div>\n {helpTextBelow}\n {renderError()}\n </div>\n );\n\n\n default:\n return null;\n }\n}\n\n/**\n * BookingForm - A dynamic form component for booking questions\n *\n * @example\n * ```tsx\n * const questions: Question[] = [\n * { id: 1, name: 'Personal Details', detail_type: 'heading' },\n * { id: 2, name: 'Full Name', detail_type: 'text_field', required: true },\n * { id: 3, name: 'Email', detail_type: 'text_field', required: true },\n * ];\n *\n * <BookingForm\n * questions={questions}\n * onSubmit={(values) => console.log(values)}\n * />\n * ```\n */\nexport function BookingForm({\n questions,\n onSubmit,\n submitLabel = 'Submit',\n isAdmin = false,\n displayHelpTextBelowLabel = false,\n className = '',\n labelClassName,\n classNames: classNamesProp,\n}: BookingFormProps) {\n // Merge deprecated labelClassName into classNames for backwards compatibility\n const classNames: BookingFormClassNames = {\n ...classNamesProp,\n label: classNamesProp?.label ?? labelClassName,\n };\n const [values, setValues] = useState<FormValues>({});\n const [errors, setErrors] = useState<FormErrors>({});\n const [touched, setTouched] = useState<Record<number, boolean>>({});\n\n\n // Check if a question should be visible based on conditional settings\n const isQuestionVisible = useCallback(\n (question: Question): boolean => {\n const { settings } = question;\n if (!settings?.conditional_answers) {\n return true;\n }\n\n const conditionalAnswers = settings.conditional_answers as Record<string, unknown>;\n const conditionalQuestion = (settings as { conditional_question?: string | number })\n .conditional_question;\n\n // Build candidate strings (id + name) for a given question's current value\n const buildCandidates = (questionId: number): Set<string> => {\n const currentValue = (values as Record<string, unknown>)[String(questionId)];\n const candidates = new Set<string>();\n if (currentValue === undefined || currentValue === '' || currentValue === null) {\n return candidates;\n }\n\n const addCandidate = (v: unknown) => {\n if (v === undefined || v === null) return;\n const s = String(v).trim();\n if (s) candidates.add(s);\n };\n\n const normalizedCurrent =\n typeof currentValue === 'object' && currentValue !== null && 'id' in (currentValue as any)\n ? (currentValue as any)\n : currentValue;\n\n if (typeof normalizedCurrent === 'object' && normalizedCurrent !== null) {\n addCandidate((normalizedCurrent as any).id);\n addCandidate((normalizedCurrent as any).name);\n } else {\n addCandidate(normalizedCurrent);\n }\n\n const sourceQuestion = questions.find((q) => q.id === questionId);\n if (\n (sourceQuestion?.detail_type === 'select' || sourceQuestion?.detail_type === 'radio') &&\n sourceQuestion.options?.length\n ) {\n const currentStr = [...candidates][0] ?? '';\n const optionById = sourceQuestion.options.find((o) => String(o.id) === currentStr);\n const optionByName = sourceQuestion.options.find(\n (o) => String(o.name).trim() === currentStr\n );\n const opt = optionById ?? optionByName;\n if (opt) {\n addCandidate(opt.id);\n addCandidate(opt.name);\n }\n }\n\n return candidates;\n };\n\n const isTruthyFlag = (v: unknown): boolean => {\n if (v === undefined || v === null) return true;\n if (typeof v === 'boolean') return v;\n if (typeof v === 'number') return v !== 0;\n if (typeof v === 'string') {\n const s = v.trim().toLowerCase();\n return s !== '' && s !== '0' && s !== 'false';\n }\n return !!v;\n };\n\n // JRNI format: `conditional_question` identifies the source question,\n // and the keys of `conditional_answers` are the acceptable option ids/names\n // on that source question (value is a truthy flag).\n if (conditionalQuestion !== undefined && conditionalQuestion !== null && conditionalQuestion !== '') {\n const sourceId = Number(conditionalQuestion);\n if (!Number.isFinite(sourceId)) return true;\n const candidates = buildCandidates(sourceId);\n if (candidates.size === 0) return false;\n const entries = Object.entries(conditionalAnswers);\n if (entries.length === 0) return true;\n return entries.some(\n ([optionKey, flag]) => isTruthyFlag(flag) && candidates.has(String(optionKey).trim())\n );\n }\n\n // Legacy format: keys of `conditional_answers` are question ids.\n const conditionEntries = Object.entries(conditionalAnswers);\n if (conditionEntries.length === 0) {\n return true;\n }\n\n return conditionEntries.some(([questionIdStr, expectedAnswer]) => {\n const questionId = Number(questionIdStr);\n const candidates = buildCandidates(questionId);\n if (candidates.size === 0) return false;\n\n const matchesScalar = (expected: unknown) => {\n const expectedStr = String(expected).trim();\n return candidates.has(expectedStr);\n };\n\n if (Array.isArray(expectedAnswer)) {\n return expectedAnswer.some((v) => matchesScalar(v));\n }\n\n if (expectedAnswer && typeof expectedAnswer === 'object') {\n const expectedMap = expectedAnswer as Record<string, unknown>;\n for (const c of candidates) {\n if (Object.prototype.hasOwnProperty.call(expectedMap, c)) {\n const flag = expectedMap[c];\n return flag === undefined ? true : !!flag;\n }\n }\n return false;\n }\n\n return matchesScalar(expectedAnswer);\n });\n },\n [values, questions]\n );\n\n\n // Get visible questions\n const visibleQuestions = questions\n .filter((q) => isAdmin || !q.admin_only)\n .filter(isQuestionVisible);\n\n\n // Validate a single field\n const validateField = useCallback((question: Question, value: FormValues[number]): string | null => {\n if (question.detail_type === 'heading') return null;\n\n if (question.required) {\n if (value === undefined || value === '' || value === null) {\n return `${question.name} is required`;\n }\n if (question.detail_type === 'check' && !value) {\n return `${question.name} must be checked`;\n }\n }\n\n if (question.detail_type === 'number' && value !== '' && value !== undefined) {\n const numValue = Number(value);\n if (question.settings?.min !== undefined && numValue < question.settings.min) {\n return `Minimum value is ${question.settings.min}`;\n }\n if (question.settings?.max !== undefined && numValue > question.settings.max) {\n return `Maximum value is ${question.settings.max}`;\n }\n }\n\n if (\n question.detail_type === 'date' &&\n question.dateLimiter?.enabled &&\n typeof value === 'string' &&\n value !== ''\n ) {\n const toDatePart = (iso?: string): string | null => {\n if (!iso || typeof iso !== 'string') return null;\n const m = iso.match(/^(\\d{4}-\\d{2}-\\d{2})/);\n return m ? m[1] : null;\n };\n const min = toDatePart(question.dateLimiter.minimumDate);\n const max = toDatePart(question.dateLimiter.maximumDate);\n const v = value;\n const outOfRange = (min && v < min) || (max && v > max);\n if (outOfRange) {\n if (question.dateLimiter.errorText) return question.dateLimiter.errorText;\n if (min && max) return `Date must be between ${min} and ${max}`;\n if (min) return `Date must be on or after ${min}`;\n if (max) return `Date must be on or before ${max}`;\n return 'Date is outside the allowed range';\n }\n }\n\n\n return null;\n }, []);\n\n // Validate all visible fields\n const validateAll = useCallback((): boolean => {\n const newErrors: FormErrors = {};\n let isValid = true;\n\n visibleQuestions.forEach((question) => {\n const error = validateField(question, values[question.id]);\n if (error) {\n newErrors[question.id] = error;\n isValid = false;\n }\n });\n\n setErrors(newErrors);\n return isValid;\n }, [visibleQuestions, values, validateField]);\n\n // Clear errors for hidden questions\n useEffect(() => {\n const visibleIds = new Set(visibleQuestions.map((q) => q.id));\n\n setErrors((prev) => {\n let changed = false;\n const next = { ...prev };\n\n Object.keys(next).forEach((idStr) => {\n const id = Number(idStr);\n if (!visibleIds.has(id)) {\n delete next[id];\n changed = true;\n }\n });\n\n return changed ? next : prev;\n });\n }, [visibleQuestions]);\n\n const handleChange = (questionId: number, value: string | number | boolean) => {\n setValues((prev) => ({ ...prev, [questionId]: value }));\n setTouched((prev) => ({ ...prev, [questionId]: true }));\n\n // Clear error on change if touched\n if (touched[questionId]) {\n const question = questions.find((q) => q.id === questionId);\n if (question) {\n const error = validateField(question, value);\n setErrors((prev) => {\n if (error) {\n return { ...prev, [questionId]: error };\n }\n const { [questionId]: _, ...rest } = prev;\n return rest;\n });\n }\n }\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n\n // Mark all fields as touched\n const allTouched: Record<number, boolean> = {};\n visibleQuestions.forEach((q) => {\n allTouched[q.id] = true;\n });\n setTouched(allTouched);\n\n if (validateAll()) {\n // Only include visible question values\n const visibleValues: FormValues = {};\n visibleQuestions.forEach((q) => {\n if (q.detail_type !== 'heading' && values[q.id] !== undefined) {\n visibleValues[q.id] = values[q.id];\n }\n });\n onSubmit(visibleValues);\n }\n };\n\n const defaultButton = 'w-full mt-4 px-4 py-2 bg-blue-600 text-white font-medium rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors';\n\n return (\n <form onSubmit={handleSubmit} className={className} noValidate>\n {visibleQuestions.map((question) => (\n <FormField\n key={question.id}\n question={question}\n value={values[question.id]}\n error={touched[question.id] ? errors[question.id] : undefined}\n onChange={(value) => handleChange(question.id, value)}\n classNames={classNames}\n displayHelpTextBelowLabel={displayHelpTextBelowLabel}\n />\n\n ))}\n <button\n type=\"submit\"\n className={classNames?.button ?? defaultButton}\n >\n {submitLabel}\n </button>\n </form>\n );\n}\n\nexport default BookingForm;\n","/**\n * Validation helper functions for form fields\n * Each validator returns an error message string if invalid, or null if valid\n */\n\n/**\n * Validates that a value is not empty\n */\nexport function required(value: string): string | null {\n if (!value || value.trim() === '') {\n return 'This field is required';\n }\n return null;\n}\n\n/**\n * Validates email format (RFC 5322 compliant)\n */\nexport function email(value: string): string | null {\n if (!value) return null; // Let required handle empty values\n \n const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n \n if (!emailRegex.test(value)) {\n return 'Please enter a valid email address';\n }\n return null;\n}\n\n/**\n * Validates phone number format (international)\n * Accepts formats like: +44 1234 567890, 01onal234 567890, +1-234-567-8900\n */\nexport function phone(value: string): string | null {\n if (!value) return null; // Let required handle empty values\n \n // Remove all spaces, dashes, and parentheses for validation\n const cleaned = value.replace(/[\\s\\-\\(\\)]/g, '');\n \n // Check for valid phone format: optional + followed by 7-15 digits\n const phoneRegex = /^\\+?[0-9]{7,15}$/;\n \n if (!phoneRegex.test(cleaned)) {\n return 'Please enter a valid phone number';\n }\n return null;\n}\n\n/**\n * Validates UK postcode format\n * Accepts formats like: SW1A 1AA, SW1A1AA, M1 1AA, B33 8TH\n */\nexport function ukPostcode(value: string): string | null {\n if (!value) return null; // Let required handle empty values\n \n // UK postcode regex - covers all valid formats\n const postcodeRegex = /^([A-Z]{1,2}[0-9][A-Z0-9]? ?[0-9][A-Z]{2})$/i;\n \n if (!postcodeRegex.test(value.trim())) {\n return 'Please enter a valid UK postcode';\n }\n return null;\n}\n\n/**\n * Creates a minimum length validator\n * @param min - Minimum number of characters required\n */\nexport function minLen(min: number): (value: string) => string | null {\n return (value: string) => {\n if (!value) return null; // Let required handle empty values\n \n if (value.trim().length < min) {\n return `Must be at least ${min} character${min === 1 ? '' : 's'}`;\n }\n return null;\n };\n}\n\n/**\n * Combines multiple validators into one\n * Returns the first error encountered, or null if all pass\n */\nexport function compose(\n ...validators: Array<(value: string) => string | null>\n): (value: string) => string | null {\n return (value: string) => {\n for (const validator of validators) {\n const error = validator(value);\n if (error) return error;\n }\n return null;\n };\n}\n","import React, {\n useState,\n useCallback,\n useImperativeHandle,\n forwardRef,\n useId,\n} from 'react';\nimport type {\n FieldConfig,\n RegistrationFormProps,\n RegistrationFormRef,\n RegistrationFormValues,\n RegistrationFormErrors,\n} from '../types/registration';\nimport { required, email, phone, ukPostcode, compose } from '../utils/validators';\n\n/**\n * Default field configuration for the registration form.\n *\n * Field order:\n * First name, Last name, Email, Verify email, Password, Confirm password,\n * Contact number, Address 1, Address 2, Town/City, Postcode\n */\nconst DEFAULT_FIELDS: FieldConfig[] = [\n {\n name: 'firstName',\n label: 'First name',\n type: 'text',\n required: true,\n validate: required,\n },\n {\n name: 'lastName',\n label: 'Last name',\n type: 'text',\n required: true,\n validate: required,\n },\n {\n name: 'email',\n label: 'Email address',\n type: 'email',\n required: true,\n validate: compose(required, email),\n },\n {\n name: 'verifyEmail',\n label: 'Verify email address',\n type: 'email',\n required: true,\n // Cross-field validation is handled in the component\n validate: required,\n },\n {\n name: 'phone',\n label: 'Contact number',\n type: 'tel',\n required: false,\n validate: phone,\n },\n {\n name: 'password',\n label: 'Password',\n type: 'password',\n required: true,\n validate: required,\n },\n {\n name: 'confirmPassword',\n label: 'Confirm password',\n type: 'password',\n required: true,\n validate: required,\n },\n {\n name: 'address1',\n label: 'Address 1',\n type: 'text',\n required: true,\n validate: required,\n },\n {\n name: 'address2',\n label: 'Address 2',\n type: 'text',\n required: false,\n },\n {\n name: 'city',\n label: 'Town/City',\n type: 'text',\n required: true,\n validate: required,\n },\n {\n name: 'postcode',\n label: 'Postcode',\n type: 'text',\n required: true,\n validate: compose(required, ukPostcode),\n },\n];\n\n/** Fields that can be hidden via fieldSettings */\nconst HIDEABLE_FIELDS = ['address1', 'address2', 'city', 'postcode'] as const;\n\n/**\n * A reusable, accessible registration form component.\n *\n * Features:\n * - Customizable fields via props\n * - Built-in validation with blur and submit triggers\n * - Email and password confirmation with matching validation\n * - fieldSettings prop to hide address fields\n * - Checkbox field type support for custom questions\n * - Full accessibility support (ARIA attributes, keyboard navigation)\n * - Imperative handle for programmatic control (reset, setValues)\n * - Granular styling via classNames prop\n *\n * @example\n * ```tsx\n * const formRef = useRef<RegistrationFormRef>(null);\n *\n * <RegistrationForm\n * ref={formRef}\n * onSubmit={(values) => console.log(values)}\n * onChange={(values, isValid) => console.log(isValid)}\n * submitLabel=\"Register\"\n * fieldSettings={{ address2: { hidden: true }, postcode: { hidden: true } }}\n * />\n *\n * // Programmatic control\n * formRef.current?.reset();\n * formRef.current?.setValues({ email: 'test@example.com' });\n * ```\n */\nexport const RegistrationForm = forwardRef<RegistrationFormRef, RegistrationFormProps>(\n (\n {\n fields = DEFAULT_FIELDS,\n additionalFields,\n onSubmit,\n onChange,\n validateOnBlur = true,\n submitLabel = 'Submit',\n className = '',\n classNames = {},\n fieldSettings = {},\n },\n ref\n ) => {\n const formId = useId();\n const [values, setValues] = useState<RegistrationFormValues>({});\n const [errors, setErrors] = useState<RegistrationFormErrors>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n // Filter hidden fields and merge with additional fields\n const visibleFields = fields.filter((field) => {\n if ((HIDEABLE_FIELDS as readonly string[]).includes(field.name)) {\n const setting = fieldSettings[field.name as keyof typeof fieldSettings];\n if (setting?.hidden) return false;\n }\n return true;\n });\n\n const allFields = additionalFields ? [...visibleFields, ...additionalFields] : visibleFields;\n\n /**\n * Cross-field matching validation\n */\n const validateMatching = useCallback(\n (fieldName: string, value: string, currentValues: RegistrationFormValues): string | null => {\n if (fieldName === 'verifyEmail') {\n if (value && currentValues.email && value !== currentValues.email) {\n return 'Email addresses do not match';\n }\n }\n if (fieldName === 'confirmPassword') {\n if (value && currentValues.password && value !== currentValues.password) {\n return 'Passwords do not match';\n }\n }\n return null;\n },\n []\n );\n\n /**\n * Validate a single field\n */\n const validateField = useCallback(\n (field: FieldConfig, value: string, currentValues: RegistrationFormValues): string | null => {\n // Check required first\n if (field.required && (!value || value.trim() === '')) {\n return 'This field is required';\n }\n // Run custom validator if value is present\n if (field.validate && value) {\n const error = field.validate(value);\n if (error) return error;\n }\n // Cross-field matching validation\n const matchError = validateMatching(field.name, value, currentValues);\n if (matchError) return matchError;\n\n return null;\n },\n [validateMatching]\n );\n\n /**\n * Validate all fields and return whether form is valid\n */\n const validateAll = useCallback((): boolean => {\n const newErrors: RegistrationFormErrors = {};\n let isValid = true;\n\n for (const field of allFields) {\n const value = values[field.name] || '';\n const error = validateField(field, value, values);\n if (error) {\n newErrors[field.name] = error;\n isValid = false;\n }\n }\n\n setErrors(newErrors);\n return isValid;\n }, [allFields, values, validateField]);\n\n /**\n * Check if current form state is valid (without updating errors)\n */\n const checkIsValid = useCallback(\n (currentValues: RegistrationFormValues): boolean => {\n for (const field of allFields) {\n const value = currentValues[field.name] || '';\n const error = validateField(field, value, currentValues);\n if (error) return false;\n }\n return true;\n },\n [allFields, validateField]\n );\n\n /**\n * Handle input change\n */\n const handleChange = useCallback(\n (fieldName: string, value: string) => {\n const newValues = { ...values, [fieldName]: value };\n setValues(newValues);\n\n // Clear error if field was touched and is now valid\n if (touched[fieldName]) {\n const field = allFields.find((f) => f.name === fieldName);\n if (field) {\n const error = validateField(field, value, newValues);\n if (!error) {\n setErrors((prev) => {\n const next = { ...prev };\n delete next[fieldName];\n return next;\n });\n }\n }\n }\n\n // Also re-validate the paired field if it's been touched\n if (fieldName === 'email' && touched.verifyEmail) {\n const verifyField = allFields.find((f) => f.name === 'verifyEmail');\n if (verifyField) {\n const verifyError = validateField(verifyField, newValues.verifyEmail || '', newValues);\n setErrors((prev) => {\n const next = { ...prev };\n if (verifyError) {\n next.verifyEmail = verifyError;\n } else {\n delete next.verifyEmail;\n }\n return next;\n });\n }\n }\n if (fieldName === 'password' && touched.confirmPassword) {\n const confirmField = allFields.find((f) => f.name === 'confirmPassword');\n if (confirmField) {\n const confirmError = validateField(confirmField, newValues.confirmPassword || '', newValues);\n setErrors((prev) => {\n const next = { ...prev };\n if (confirmError) {\n next.confirmPassword = confirmError;\n } else {\n delete next.confirmPassword;\n }\n return next;\n });\n }\n }\n\n // Call onChange callback\n if (onChange) {\n const isValid = checkIsValid(newValues);\n onChange(newValues, isValid);\n }\n },\n [values, touched, allFields, validateField, onChange, checkIsValid]\n );\n\n /**\n * Handle checkbox change\n */\n const handleCheckboxChange = useCallback(\n (fieldName: string, checked: boolean) => {\n const value = checked ? 'true' : '';\n handleChange(fieldName, value);\n },\n [handleChange]\n );\n\n /**\n * Handle input blur\n */\n const handleBlur = useCallback(\n (fieldName: string) => {\n setTouched((prev) => ({ ...prev, [fieldName]: true }));\n\n if (validateOnBlur) {\n const field = allFields.find((f) => f.name === fieldName);\n if (field) {\n const value = values[fieldName] || '';\n const error = validateField(field, value, values);\n if (error) {\n setErrors((prev) => ({ ...prev, [fieldName]: error }));\n } else {\n setErrors((prev) => {\n const next = { ...prev };\n delete next[fieldName];\n return next;\n });\n }\n }\n }\n },\n [validateOnBlur, allFields, values, validateField]\n );\n\n /**\n * Handle form submission\n */\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n\n // Mark all fields as touched\n const allTouched: Record<string, boolean> = {};\n for (const field of allFields) {\n allTouched[field.name] = true;\n }\n setTouched(allTouched);\n\n // Validate all and submit if valid\n if (validateAll()) {\n onSubmit(values);\n }\n },\n [allFields, validateAll, onSubmit, values]\n );\n\n /**\n * Expose imperative methods via ref\n */\n useImperativeHandle(\n ref,\n () => ({\n reset: () => {\n setValues({});\n setErrors({});\n setTouched({});\n },\n setValues: (newValues: Partial<RegistrationFormValues>) => {\n setValues((prev) => {\n const merged = { ...prev };\n for (const [key, value] of Object.entries(newValues)) {\n if (value !== undefined) {\n merged[key] = value;\n }\n }\n return merged;\n });\n },\n }),\n []\n );\n\n // Default styles\n const styles = {\n fieldWrapper: classNames.fieldWrapper || 'mb-4',\n label: classNames.label || 'block text-sm font-medium mb-1',\n input: classNames.input || 'w-full px-3 py-2 border rounded-md',\n inputError: classNames.inputError || 'border-red-500',\n checkbox: classNames.checkbox || '',\n checkboxWrapper: classNames.checkboxWrapper || 'flex items-center gap-2',\n errorText: classNames.errorText || 'mt-1 text-xs text-red-600',\n button:\n classNames.button ||\n 'w-full mt-4 px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 disabled:opacity-50',\n };\n\n return (\n <form onSubmit={handleSubmit} className={className} noValidate>\n {allFields.map((field) => {\n const fieldId = `${formId}-${field.name}`;\n const errorId = `${fieldId}-error`;\n const value = values[field.name] || '';\n const error = errors[field.name];\n const isTouched = touched[field.name];\n const showError = isTouched && error;\n\n // Checkbox rendering\n if (field.type === 'check') {\n return (\n <div key={field.name} className={styles.fieldWrapper}>\n <div className={styles.checkboxWrapper}>\n <input\n id={fieldId}\n name={field.name}\n type=\"checkbox\"\n checked={value === 'true'}\n onChange={(e) => handleCheckboxChange(field.name, e.target.checked)}\n onBlur={() => handleBlur(field.name)}\n className={`${styles.checkbox} ${showError ? styles.inputError : ''}`}\n aria-invalid={showError ? 'true' : 'false'}\n aria-describedby={showError ? errorId : undefined}\n aria-required={field.required ? 'true' : 'false'}\n />\n <label htmlFor={fieldId} className={styles.label}>\n {field.label}\n {field.required && (\n <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n </div>\n {showError && (\n <p id={errorId} className={styles.errorText} role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n }\n\n return (\n <div key={field.name} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {field.label}\n {field.required && (\n <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n {field.type === 'select' && field.options ? (\n <select\n id={fieldId}\n name={field.name}\n value={value}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={() => handleBlur(field.name)}\n className={`${styles.input} ${showError ? styles.inputError : ''}`}\n aria-invalid={showError ? 'true' : 'false'}\n aria-describedby={showError ? errorId : undefined}\n aria-required={field.required ? 'true' : 'false'}\n >\n <option value=\"\">{field.placeholder || 'Select an option'}</option>\n {field.options.map((option) => (\n <option key={option.id} value={String(option.id)}>\n {option.name}\n {option.price !== undefined && option.price > 0 ? ` (+£${option.price})` : ''}\n </option>\n ))}\n </select>\n ) : (\n <input\n id={fieldId}\n name={field.name}\n type={field.type === 'select' ? 'text' : field.type}\n value={value}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={() => handleBlur(field.name)}\n placeholder={field.placeholder}\n className={`${styles.input} ${showError ? styles.inputError : ''}`}\n aria-invalid={showError ? 'true' : 'false'}\n aria-describedby={showError ? errorId : undefined}\n aria-required={field.required ? 'true' : 'false'}\n />\n )}\n {showError && (\n <p id={errorId} className={styles.errorText} role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n })}\n <button type=\"submit\" className={styles.button}>\n {submitLabel}\n </button>\n </form>\n );\n }\n);\n\nRegistrationForm.displayName = 'RegistrationForm';\n","import React, {\n useState,\n useCallback,\n useImperativeHandle,\n useEffect,\n forwardRef,\n useId,\n} from 'react';\nimport type { Question, QuestionOption, FormValues, FormErrors } from '../types';\nimport type {\n ContactDetailsFormProps,\n ContactDetailsFormRef,\n ContactDetailsValues,\n ContactDetailsFieldSettings,\n} from '../types/contact-details';\nimport { required, email as emailValidator, compose } from '../utils/validators';\n\n/** Merge base classes with optional custom classes */\nconst cx = (...classes: (string | undefined)[]) => classes.filter(Boolean).join(' ');\n\n/**\n * ContactDetailsForm — collects first name, last name, email and optional\n * dynamic questions. On submit it emits values with `q` and `answers` fields\n * matching the JRNI Update Client / Member API format.\n *\n * @example\n * ```tsx\n * <ContactDetailsForm\n * questions={[\n * { id: 2, name: 'Purpose', detail_type: 'select', required: true,\n * options: [{ id: 5, name: 'School Trip' }, { id: 6, name: 'Corporate' }] },\n * { id: 7, name: 'Group Size', detail_type: 'number', required: true },\n * ]}\n * onSubmit={(values) => console.log(values)}\n * />\n * ```\n */\nexport const ContactDetailsForm = forwardRef<ContactDetailsFormRef, ContactDetailsFormProps>(\n (\n {\n questions = [],\n onSubmit,\n onChange: _onChange,\n initialValues,\n validateOnBlur = true,\n submitLabel = 'Submit',\n className = '',\n classNames = {},\n fieldSettings = {},\n hideSubmitButton = false,\n isSubmitted = false,\n },\n ref\n ) => {\n const formId = useId();\n\n // Contact detail fields\n const [firstName, setFirstName] = useState(initialValues?.firstName || '');\n const [lastName, setLastName] = useState(initialValues?.lastName || '');\n const [emailValue, setEmailValue] = useState(initialValues?.email || '');\n\n // Contact detail errors\n const [contactErrors, setContactErrors] = useState<Record<string, string>>({});\n const [contactTouched, setContactTouched] = useState<Record<string, boolean>>({});\n\n // Question field values and errors (keyed by question id)\n const [questionValues, setQuestionValues] = useState<FormValues>(() => {\n if (!initialValues?.questions) return {};\n const init: FormValues = {};\n for (const [key, val] of Object.entries(initialValues.questions)) {\n init[Number(key)] = val;\n }\n return init;\n });\n const [questionErrors, setQuestionErrors] = useState<FormErrors>({});\n const [questionTouched, setQuestionTouched] = useState<Record<number, boolean>>({});\n\n // ── Resolve per-field settings (default: required=true, disabled=false) ──\n const getFieldRequired = (name: string) => {\n const s = fieldSettings[name as keyof ContactDetailsFieldSettings];\n return s?.required !== undefined ? s.required : true;\n };\n const getFieldDisabled = (name: string) => {\n const s = fieldSettings[name as keyof ContactDetailsFieldSettings];\n return !!s?.disabled;\n };\n\n const contactFields = [\n { name: 'firstName', label: 'First name', value: firstName, setter: setFirstName },\n { name: 'lastName', label: 'Last name', value: lastName, setter: setLastName },\n { name: 'email', label: 'Email', value: emailValue, setter: setEmailValue },\n ] as const;\n\n // ── Validation helpers ──\n\n const validateContactField = useCallback((name: string, value: string): string | null => {\n const isRequired = getFieldRequired(name);\n if (name === 'email') {\n const validators = isRequired ? compose(required, emailValidator) : emailValidator;\n return value ? validators(value) : (isRequired ? required(value) : null);\n }\n return isRequired ? required(value) : null;\n }, [fieldSettings]);\n\n const validateQuestionField = useCallback((question: Question, value: FormValues[number]): string | null => {\n if (question.detail_type === 'heading') return null;\n if (question.disabled) return null;\n if (question.required) {\n if (value === undefined || value === '' || value === null) {\n return `${question.name} is required`;\n }\n if (question.detail_type === 'check' && !value) {\n return `${question.name} must be checked`;\n }\n }\n if (question.detail_type === 'number' && value !== '' && value !== undefined) {\n const numValue = Number(value);\n if (question.settings?.min !== undefined && numValue < question.settings.min) {\n return `Minimum value is ${question.settings.min}`;\n }\n if (question.settings?.max !== undefined && numValue > question.settings.max) {\n return `Maximum value is ${question.settings.max}`;\n }\n }\n return null;\n }, []);\n\n const validateAllContacts = useCallback((): boolean => {\n const errs: Record<string, string> = {};\n let valid = true;\n for (const f of contactFields) {\n if (getFieldDisabled(f.name)) continue;\n const err = validateContactField(f.name, f.value);\n if (err) { errs[f.name] = err; valid = false; }\n }\n setContactErrors(errs);\n return valid;\n }, [firstName, lastName, emailValue, validateContactField, fieldSettings]);\n\n const validateAllQuestions = useCallback((): boolean => {\n const errs: FormErrors = {};\n let valid = true;\n for (const q of questions) {\n const err = validateQuestionField(q, questionValues[q.id]);\n if (err) { errs[q.id] = err; valid = false; }\n }\n setQuestionErrors(errs);\n return valid;\n }, [questions, questionValues, validateQuestionField]);\n\n // ── Build output ──\n\n const buildOutput = useCallback((): ContactDetailsValues => {\n const q: ContactDetailsValues['q'] = {};\n const answers: ContactDetailsValues['answers'] = [];\n\n for (const question of questions) {\n if (question.detail_type === 'heading') continue;\n const rawValue = questionValues[question.id];\n if (rawValue === undefined || rawValue === '') continue;\n\n let answer = String(rawValue);\n let answerId = 0;\n\n // For selects, resolve the option\n if (question.detail_type === 'select' && question.options?.length) {\n const option = question.options.find(\n (o: QuestionOption) => String(o.id) === String(rawValue)\n );\n if (option) {\n answer = option.name;\n answerId = typeof option.id === 'number' ? option.id : parseInt(String(option.id), 10) || 0;\n }\n }\n\n const idStr = String(question.id);\n q[idStr] = { answer, answer_id: answerId, name: question.name };\n answers.push({ question_id: question.id, name: question.name, answer, answer_id: answerId });\n }\n\n return { firstName, lastName, email: emailValue, q, answers };\n }, [firstName, lastName, emailValue, questions, questionValues]);\n\n // ── Handlers ──\n\n const handleContactChange = useCallback((name: string, value: string) => {\n const setter = name === 'firstName' ? setFirstName : name === 'lastName' ? setLastName : setEmailValue;\n setter(value);\n\n if (contactTouched[name]) {\n const err = validateContactField(name, value);\n setContactErrors(prev => {\n if (err) return { ...prev, [name]: err };\n const { [name]: _, ...rest } = prev;\n return rest;\n });\n }\n }, [contactTouched, validateContactField]);\n\n const handleContactBlur = useCallback((name: string, value: string) => {\n setContactTouched(prev => ({ ...prev, [name]: true }));\n if (validateOnBlur) {\n const err = validateContactField(name, value);\n setContactErrors(prev => {\n if (err) return { ...prev, [name]: err };\n const { [name]: _, ...rest } = prev;\n return rest;\n });\n }\n }, [validateOnBlur, validateContactField]);\n\n const handleQuestionChange = useCallback((questionId: number, value: string | number | boolean) => {\n setQuestionValues(prev => ({ ...prev, [questionId]: value }));\n setQuestionTouched(prev => ({ ...prev, [questionId]: true }));\n\n if (questionTouched[questionId]) {\n const question = questions.find(q => q.id === questionId);\n if (question) {\n const err = validateQuestionField(question, value);\n setQuestionErrors(prev => {\n if (err) return { ...prev, [questionId]: err };\n const { [questionId]: _, ...rest } = prev;\n return rest;\n });\n }\n }\n }, [questionTouched, questions, validateQuestionField]);\n\n const handleQuestionBlur = useCallback((questionId: number) => {\n setQuestionTouched(prev => ({ ...prev, [questionId]: true }));\n if (validateOnBlur) {\n const question = questions.find(q => q.id === questionId);\n if (question) {\n const err = validateQuestionField(question, questionValues[questionId]);\n setQuestionErrors(prev => {\n if (err) return { ...prev, [questionId]: err };\n const { [questionId]: _, ...rest } = prev;\n return rest;\n });\n }\n }\n }, [validateOnBlur, questions, questionValues, validateQuestionField]);\n\n const handleSubmit = useCallback((e: React.FormEvent) => {\n e.preventDefault();\n\n // Mark all touched\n const allContactTouched: Record<string, boolean> = {};\n for (const f of contactFields) allContactTouched[f.name] = true;\n setContactTouched(allContactTouched);\n\n const allQTouched: Record<number, boolean> = {};\n for (const q of questions) allQTouched[q.id] = true;\n setQuestionTouched(allQTouched);\n\n const contactValid = validateAllContacts();\n const questionsValid = validateAllQuestions();\n\n if (contactValid && questionsValid) {\n onSubmit(buildOutput());\n }\n }, [contactFields, questions, validateAllContacts, validateAllQuestions, onSubmit, buildOutput]);\n\n // ── Imperative handle ──\n\n useImperativeHandle(ref, () => ({\n reset: () => {\n setFirstName(initialValues?.firstName || '');\n setLastName(initialValues?.lastName || '');\n setEmailValue(initialValues?.email || '');\n setContactErrors({});\n setContactTouched({});\n if (initialValues?.questions) {\n const init: FormValues = {};\n for (const [key, val] of Object.entries(initialValues.questions)) {\n init[Number(key)] = val;\n }\n setQuestionValues(init);\n } else {\n setQuestionValues({});\n }\n setQuestionErrors({});\n setQuestionTouched({});\n },\n setValues: (vals) => {\n if (vals.firstName !== undefined) setFirstName(vals.firstName);\n if (vals.lastName !== undefined) setLastName(vals.lastName);\n if (vals.email !== undefined) setEmailValue(vals.email);\n },\n }), [initialValues]);\n\n // ── Styles ──\n\n const styles = {\n fieldWrapper: classNames.fieldWrapper || 'mb-4',\n label: classNames.label || 'block text-sm font-medium mb-1',\n heading: classNames.heading || 'text-lg font-semibold mt-4 mb-2 first:mt-0',\n input: classNames.input || 'w-full px-3 py-2 border rounded-md text-sm',\n inputError: classNames.inputError || 'border-red-500',\n checkbox: classNames.checkbox || 'mt-1 h-4 w-4 rounded border-gray-300',\n helpText: classNames.helpText || 'mt-1 text-xs text-gray-500',\n errorText: classNames.errorText || 'mt-1 text-xs text-red-600',\n button: classNames.button || 'w-full mt-4 px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 disabled:opacity-50',\n };\n\n const inputClasses = (hasError: boolean) =>\n hasError ? cx(styles.input, styles.inputError) : styles.input;\n\n // ── Render contact field ──\n\n const renderContactField = (name: string, label: string, value: string, type = 'text') => {\n const fieldId = `${formId}-${name}`;\n const errorId = `${fieldId}-error`;\n const isDisabled = getFieldDisabled(name);\n const isRequired = getFieldRequired(name);\n const error = (contactTouched[name] || isSubmitted) ? contactErrors[name] : undefined;\n const hasError = !!error;\n\n return (\n <div key={name} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {label}\n {isRequired && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <input\n id={fieldId}\n name={name}\n type={type}\n value={value}\n disabled={isDisabled}\n onChange={(e) => handleContactChange(name, e.target.value)}\n onBlur={() => handleContactBlur(name, name === 'firstName' ? firstName : name === 'lastName' ? lastName : emailValue)}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n aria-invalid={hasError ? 'true' : 'false'}\n aria-describedby={hasError ? errorId : undefined}\n aria-required={isRequired ? 'true' : undefined}\n />\n {hasError && (\n <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>\n )}\n </div>\n );\n };\n\n // ── Render question field ──\n\n const renderQuestionField = (question: Question) => {\n const fieldId = `${formId}-q-${question.id}`;\n const errorId = `${fieldId}-error`;\n const value = questionValues[question.id];\n const error = (questionTouched[question.id] || isSubmitted) ? questionErrors[question.id] : undefined;\n const hasError = !!error;\n const isDisabled = !!question.disabled;\n\n const ariaProps = {\n 'aria-invalid': hasError ? true as const : undefined,\n 'aria-describedby': hasError ? errorId : undefined,\n 'aria-required': question.required || undefined,\n };\n\n switch (question.detail_type) {\n case 'heading':\n return (\n <h3 key={question.id} className={styles.heading}>\n {question.name}\n </h3>\n );\n\n case 'text_field':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <input\n id={fieldId}\n type=\"text\"\n value={(value as string) || ''}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n placeholder={question.settings?.placeholder}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n />\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n case 'text_area':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <textarea\n id={fieldId}\n value={(value as string) || ''}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n placeholder={question.settings?.placeholder}\n rows={4}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n />\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n case 'select':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <select\n id={fieldId}\n value={(value as string | number) ?? ''}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n >\n <option value=\"\">Select an option</option>\n {question.options?.map((option) => (\n <option key={option.id} value={option.id}>\n {option.name}\n </option>\n ))}\n </select>\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n case 'number':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <input\n id={fieldId}\n type=\"number\"\n value={(value as number) ?? ''}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.value ? Number(e.target.value) : '')}\n onBlur={() => handleQuestionBlur(question.id)}\n min={question.settings?.min}\n max={question.settings?.max}\n placeholder={question.settings?.placeholder}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n />\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n case 'date':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n <input\n id={fieldId}\n type=\"date\"\n value={(value as string) || ''}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={cx(inputClasses(hasError), isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n />\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n case 'check':\n return (\n <div key={question.id} className={styles.fieldWrapper}>\n <div className=\"flex items-start gap-2\">\n <input\n id={fieldId}\n type=\"checkbox\"\n checked={!!value}\n disabled={isDisabled}\n onChange={(e) => handleQuestionChange(question.id, e.target.checked)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={cx(styles.checkbox, isDisabled ? 'opacity-50 cursor-not-allowed' : '')}\n {...ariaProps}\n />\n <label htmlFor={fieldId} className=\"text-sm\">\n {question.name}\n {question.required && <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>}\n </label>\n </div>\n {question.help_text && <p className={styles.helpText}>{question.help_text}</p>}\n {hasError && <p id={errorId} className={styles.errorText} role=\"alert\">{error}</p>}\n </div>\n );\n\n default:\n return null;\n }\n };\n\n // ── Validate all fields when isSubmitted becomes true ──\n\n useEffect(() => {\n if (isSubmitted) {\n validateAllContacts();\n validateAllQuestions();\n }\n }, [isSubmitted]);\n\n // ── Auto-emit onChange when hideSubmitButton is true ──\n\n useEffect(() => {\n if (hideSubmitButton && _onChange) {\n const contactValid = !contactFields.some(f => {\n if (getFieldDisabled(f.name)) return false;\n return !!validateContactField(f.name, f.value);\n });\n const questionsValid = !questions.some(q =>\n !!validateQuestionField(q, questionValues[q.id])\n );\n _onChange(buildOutput(), contactValid && questionsValid);\n }\n }, [hideSubmitButton, firstName, lastName, emailValue, questionValues]);\n\n return (\n <form onSubmit={handleSubmit} className={className} noValidate>\n {renderContactField('firstName', 'First name', firstName)}\n {renderContactField('lastName', 'Last name', lastName)}\n {renderContactField('email', 'Email', emailValue, 'email')}\n {questions.map(renderQuestionField)}\n {!hideSubmitButton && (\n <button type=\"submit\" className={styles.button}>\n {submitLabel}\n </button>\n )}\n </form>\n );\n }\n);\n\nContactDetailsForm.displayName = 'ContactDetailsForm';\n","import React, {\n useState,\n useCallback,\n useImperativeHandle,\n forwardRef,\n useId,\n} from 'react';\nimport type {\n ResetPasswordFormProps,\n ResetPasswordFormRef,\n ResetPasswordFormValues,\n} from '../types/reset-password';\n\ninterface FieldDef {\n name: keyof ResetPasswordFormValues;\n label: string;\n}\n\nconst FIELDS: FieldDef[] = [\n { name: 'currentPassword', label: 'Current Password' },\n { name: 'newPassword', label: 'New Password' },\n { name: 'confirmNewPassword', label: 'Confirm New Password' },\n];\n\n/**\n * A reusable, accessible reset-password form component.\n *\n * Features:\n * - Three password fields: Current, New, Confirm New\n * - Validation: all required; confirm must match new password\n * - forwardRef for programmatic reset()/setValues()\n * - onChange callback with live validity\n * - Granular styling via classNames prop\n *\n * @example\n * ```tsx\n * <ResetPasswordForm\n * onSubmit={(values) => console.log(values)}\n * submitLabel=\"Change Password\"\n * />\n * ```\n */\nexport const ResetPasswordForm = forwardRef<ResetPasswordFormRef, ResetPasswordFormProps>(\n (\n {\n onSubmit,\n onChange,\n validateOnBlur = true,\n submitLabel = 'Update Password',\n className = '',\n classNames = {},\n },\n ref\n ) => {\n const formId = useId();\n const [values, setValues] = useState<ResetPasswordFormValues>({\n currentPassword: '',\n newPassword: '',\n confirmNewPassword: '',\n });\n const [errors, setErrors] = useState<Partial<Record<keyof ResetPasswordFormValues, string>>>({});\n const [touched, setTouched] = useState<Partial<Record<keyof ResetPasswordFormValues, boolean>>>({});\n\n const validateField = useCallback(\n (name: keyof ResetPasswordFormValues, val: string, allValues: ResetPasswordFormValues): string | null => {\n if (!val || val.trim() === '') return 'This field is required';\n if (name === 'confirmNewPassword' && val !== allValues.newPassword) {\n return 'Passwords do not match';\n }\n return null;\n },\n []\n );\n\n const checkIsValid = useCallback(\n (v: ResetPasswordFormValues): boolean => {\n for (const field of FIELDS) {\n if (validateField(field.name, v[field.name], v)) return false;\n }\n return true;\n },\n [validateField]\n );\n\n const handleChange = useCallback(\n (name: keyof ResetPasswordFormValues, val: string) => {\n const newValues = { ...values, [name]: val };\n setValues(newValues);\n\n // Clear error on valid input for touched fields\n if (touched[name]) {\n const error = validateField(name, val, newValues);\n if (!error) {\n setErrors((prev) => { const next = { ...prev }; delete next[name]; return next; });\n }\n }\n\n // If confirmNewPassword is touched and newPassword changes, re-validate confirm\n if (name === 'newPassword' && touched.confirmNewPassword) {\n const confirmError = validateField('confirmNewPassword', newValues.confirmNewPassword, newValues);\n if (confirmError) {\n setErrors((prev) => ({ ...prev, confirmNewPassword: confirmError }));\n } else {\n setErrors((prev) => { const next = { ...prev }; delete next.confirmNewPassword; return next; });\n }\n }\n\n onChange?.(newValues, checkIsValid(newValues));\n },\n [values, touched, validateField, onChange, checkIsValid]\n );\n\n const handleBlur = useCallback(\n (name: keyof ResetPasswordFormValues) => {\n setTouched((prev) => ({ ...prev, [name]: true }));\n if (validateOnBlur) {\n const error = validateField(name, values[name], values);\n if (error) {\n setErrors((prev) => ({ ...prev, [name]: error }));\n } else {\n setErrors((prev) => { const next = { ...prev }; delete next[name]; return next; });\n }\n }\n },\n [validateOnBlur, values, validateField]\n );\n\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n const allTouched: Record<string, boolean> = {};\n const newErrors: Partial<Record<keyof ResetPasswordFormValues, string>> = {};\n let isValid = true;\n for (const field of FIELDS) {\n allTouched[field.name] = true;\n const error = validateField(field.name, values[field.name], values);\n if (error) { newErrors[field.name] = error; isValid = false; }\n }\n setTouched(allTouched);\n setErrors(newErrors);\n if (isValid) {\n onSubmit(values);\n setValues({ currentPassword: '', newPassword: '', confirmNewPassword: '' });\n setErrors({});\n setTouched({});\n }\n },\n [values, validateField, onSubmit]\n );\n\n useImperativeHandle(ref, () => ({\n reset: () => {\n setValues({ currentPassword: '', newPassword: '', confirmNewPassword: '' });\n setErrors({});\n setTouched({});\n },\n setValues: (newVals: Partial<ResetPasswordFormValues>) => {\n setValues((prev) => {\n const merged = { ...prev };\n for (const [key, value] of Object.entries(newVals)) {\n if (value !== undefined) {\n merged[key as keyof ResetPasswordFormValues] = value;\n }\n }\n return merged;\n });\n },\n }), []);\n\n const styles = {\n fieldWrapper: classNames.fieldWrapper || 'mb-4',\n label: classNames.label || 'block text-sm font-medium mb-1',\n input: classNames.input || 'w-full px-3 py-2 border rounded-md',\n inputError: classNames.inputError || 'border-red-500',\n errorText: classNames.errorText || 'mt-1 text-xs text-red-600',\n button: classNames.button || 'w-full mt-4 px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 disabled:opacity-50',\n };\n\n return (\n <form onSubmit={handleSubmit} className={className} noValidate>\n {FIELDS.map((field) => {\n const fieldId = `${formId}-${field.name}`;\n const errorId = `${fieldId}-error`;\n const value = values[field.name];\n const error = errors[field.name];\n const isTouched = touched[field.name];\n const showError = isTouched && error;\n\n return (\n <div key={field.name} className={styles.fieldWrapper}>\n <label htmlFor={fieldId} className={styles.label}>\n {field.label}\n <span className=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>\n </label>\n <input\n id={fieldId}\n name={field.name}\n type=\"password\"\n value={value}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={() => handleBlur(field.name)}\n className={`${styles.input} ${showError ? styles.inputError : ''}`}\n aria-invalid={showError ? 'true' : 'false'}\n aria-describedby={showError ? errorId : undefined}\n aria-required=\"true\"\n />\n {showError && (\n <p id={errorId} className={styles.errorText} role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n })}\n <button type=\"submit\" className={styles.button}>\n {submitLabel}\n </button>\n </form>\n );\n }\n);\n\nResetPasswordForm.displayName = 'ResetPasswordForm';\n","/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument) {\n const argStr = Object.prototype.toString.call(argument);\n\n // Clone the date\n if (\n argument instanceof Date ||\n (typeof argument === \"object\" && argStr === \"[object Date]\")\n ) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new argument.constructor(+argument);\n } else if (\n typeof argument === \"number\" ||\n argStr === \"[object Number]\" ||\n typeof argument === \"string\" ||\n argStr === \"[object String]\"\n ) {\n // TODO: Can we get rid of as?\n return new Date(argument);\n } else {\n // TODO: Can we get rid of as?\n return new Date(NaN);\n }\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from 'date-fns'\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date(date: DateType): DateType {\n * return constructFrom(\n * date, // Use contrustor from the given date\n * date.getTime() // Use the date value to create a new date\n * )\n * }\n */\nexport function constructFrom(date, value) {\n if (date instanceof Date) {\n return new date.constructor(value);\n } else {\n return new Date(value);\n }\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount) {\n const _date = toDate(date);\n if (isNaN(amount)) return constructFrom(date, NaN);\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n _date.setDate(_date.getDate() + amount);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.mjs\";\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date) {\n return startOfWeek(date, { weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date) {\n const _date = toDate(date);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { toDate } from \"../toDate.mjs\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { getISOWeekYear } from \"./getISOWeekYear.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date) {\n const year = getISOWeekYear(date);\n const fourthOfJanuary = constructFrom(date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n if (!isDate(date) && typeof date !== \"number\") {\n return false;\n }\n const _date = toDate(date);\n return !isNaN(Number(_date));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.mjs\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/* eslint-disable no-unused-vars */\n\n/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.mjs\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\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};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.mjs\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.mjs\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.mjs\";\nimport { formatLong } from \"./en-US/_lib/formatLong.mjs\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.mjs\";\nimport { localize } from \"./en-US/_lib/localize.mjs\";\nimport { match } from \"./en-US/_lib/match.mjs\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date) {\n const _date = toDate(date);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { getWeekYear } from \"./getWeekYear.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { startOfWeekYear } from \"./startOfWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport function getWeek(date, options) {\n const _date = toDate(date);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date) {\n const _date = toDate(date);\n let day = _date.getDay();\n\n if (day === 0) {\n day = 7;\n }\n\n return day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date that should be after the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is after the second date\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport function isAfter(date, dateToCompare) {\n const _date = toDate(date);\n const _dateToCompare = toDate(dateToCompare);\n return _date.getTime() > _dateToCompare.getTime();\n}\n\n// Fallback for modularized imports:\nexport default isAfter;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date that should be before the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is before the second date\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport function isBefore(date, dateToCompare) {\n const _date = toDate(date);\n const _dateToCompare = toDate(dateToCompare);\n return +_date < +_dateToCompare;\n}\n\n// Fallback for modularized imports:\nexport default isBefore;\n","import { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam DateInputType - The input `Date` type derived from the passed argument.\n * @typeParam DateOutputType - The output `Date` type derived from the passed constructor.\n *\n * @param fromDate - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(fromDate, constructor) {\n const date =\n constructor instanceof Date\n ? constructFrom(constructor, 0)\n : new constructor(0);\n date.setFullYear(\n fromDate.getFullYear(),\n fromDate.getMonth(),\n fromDate.getDate(),\n );\n date.setHours(\n fromDate.getHours(),\n fromDate.getMinutes(),\n fromDate.getSeconds(),\n fromDate.getMilliseconds(),\n );\n return date;\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n","import { transpose } from \"../../transpose.mjs\";\nimport { constructFrom } from \"../../constructFrom.mjs\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n subPriority = 0;\n\n validate(_utcDate, _options) {\n return true;\n }\n}\n\nexport class ValueSetter extends Setter {\n constructor(\n value,\n\n validateValue,\n\n setValue,\n\n priority,\n subPriority,\n ) {\n super();\n this.value = value;\n this.validateValue = validateValue;\n this.setValue = setValue;\n this.priority = priority;\n if (subPriority) {\n this.subPriority = subPriority;\n }\n }\n\n validate(date, options) {\n return this.validateValue(date, this.value, options);\n }\n\n set(date, flags, options) {\n return this.setValue(date, flags, this.value, options);\n }\n}\n\nexport class DateToSystemTimezoneSetter extends Setter {\n priority = TIMEZONE_UNIT_PRIORITY;\n subPriority = -1;\n set(date, flags) {\n if (flags.timestampIsSet) return date;\n return constructFrom(date, transpose(date, Date));\n }\n}\n","import { ValueSetter } from \"./Setter.mjs\";\n\nexport class Parser {\n run(dateString, token, match, options) {\n const result = this.parse(dateString, token, match, options);\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(\n result.value,\n this.validate,\n this.set,\n this.priority,\n this.subPriority,\n ),\n rest: result.rest,\n };\n }\n\n validate(_utcDate, _value, _options) {\n return true;\n }\n}\n","import { Parser } from \"../Parser.mjs\";\n\nexport class EraParser extends Parser {\n priority = 140;\n\n parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return (\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n\n // A, B\n case \"GGGGG\":\n return match.era(dateString, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return (\n match.era(dateString, { width: \"wide\" }) ||\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n }\n }\n\n set(date, flags, value) {\n flags.era = value;\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n","export const numericPatterns = {\n month: /^(1[0-2]|0?\\d)/, // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n minute: /^[0-5]?\\d/, // 0 to 59\n second: /^[0-5]?\\d/, // 0 to 59\n\n singleDigit: /^\\d/, // 0 to 9\n twoDigits: /^\\d{1,2}/, // 0 to 99\n threeDigits: /^\\d{1,3}/, // 0 to 999\n fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n","import {\n millisecondsInHour,\n millisecondsInMinute,\n millisecondsInSecond,\n} from \"../../constants.mjs\";\nimport { numericPatterns } from \"./constants.mjs\";\n\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest,\n };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n // Input is 'Z'\n if (matchResult[0] === \"Z\") {\n return {\n value: 0,\n rest: dateString.slice(1),\n };\n }\n\n const sign = matchResult[1] === \"+\" ? 1 : -1;\n const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n return {\n value:\n sign *\n (hours * millisecondsInHour +\n minutes * millisecondsInMinute +\n seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case \"morning\":\n return 4;\n case \"evening\":\n return 17;\n case \"pm\":\n case \"noon\":\n case \"afternoon\":\n return 12;\n case \"am\":\n case \"midnight\":\n case \"night\":\n default:\n return 0;\n }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n const isCommonEra = currentYear > 0;\n // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n let result;\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n const rangeEnd = absCurrentYear + 50;\n const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year | y | yy | yyy | yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n priority = 130;\n incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"yy\",\n });\n\n switch (token) {\n case \"y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value) {\n const currentYear = date.getFullYear();\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(normalizedTwoDigitYear, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { getWeekYear } from \"../../../getWeekYear.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"YY\",\n });\n\n switch (token) {\n case \"Y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"Yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value, options) {\n const currentYear = getWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(\n normalizedTwoDigitYear,\n 0,\n options.firstWeekContainsDate,\n );\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, options.firstWeekContainsDate);\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"R\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n const firstWeekOfYear = constructFrom(date, 0);\n firstWeekOfYear.setFullYear(value, 0, 4);\n firstWeekOfYear.setHours(0, 0, 0, 0);\n return startOfISOWeek(firstWeekOfYear);\n }\n\n incompatibleTokens = [\n \"G\",\n \"y\",\n \"Y\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\nexport class ExtendedYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"u\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class QuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n case \"QQ\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class StandAloneQuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n case \"qq\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MonthParser extends Parser {\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"L\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"M\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"MM\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // J, F, ..., D\n case \"MMMMM\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class StandAloneMonthParser extends Parser {\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"LL\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // J, F, ..., D\n case \"LLLLL\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { getWeek } from \"./getWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n const _date = toDate(date);\n const diff = getWeek(_date, options) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n","import { setWeek } from \"../../../setWeek.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"w\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"wo\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value, options) {\n return startOfWeek(setWeek(date, value, options), options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { getISOWeek } from \"./getISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week) {\n const _date = toDate(date);\n const diff = getISOWeek(_date) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n","import { setISOWeek } from \"../../../setISOWeek.mjs\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"I\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"Io\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value) {\n return startOfISOWeek(setISOWeek(date, value));\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.mjs\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n priority = 90;\n subPriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"d\":\n return parseNumericPattern(numericPatterns.date, dateString);\n case \"do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n const month = date.getMonth();\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n\n set(date, _flags, value) {\n date.setDate(value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.mjs\";\n\nexport class DayOfYearParser extends Parser {\n priority = 90;\n\n subpriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"D\":\n case \"DD\":\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n case \"Do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n\n set(date, _flags, value) {\n date.setMonth(0, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"E\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { addDays } from \"./addDays.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date);\n const currentDay = _date.getDay();\n\n const remainder = day % 7;\n const dayIndex = (remainder + 7) % 7;\n\n const delta = 7 - weekStartsOn;\n const diff =\n day < 0 || day > 6\n ? day - ((currentDay + delta) % 7)\n : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\n\n// Day of week\nexport class DayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"EEEEE\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"EEEE\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n priority = 90;\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"e\":\n case \"ee\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"eo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"eee\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"eeeee\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"eeee\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"c\":\n case \"cc\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"co\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"ccc\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // T\n case \"ccccc\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return (\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // Tuesday\n case \"cccc\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"e\",\n \"t\",\n \"T\",\n ];\n}\n","import { addDays } from \"./addDays.mjs\";\nimport { getISODay } from \"./getISODay.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day) {\n const _date = toDate(date);\n const currentDay = getISODay(_date);\n const diff = day - currentDay;\n return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n","import { setISODay } from \"../../../setISODay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => {\n if (value === 0) {\n return 7;\n }\n return value;\n };\n\n switch (token) {\n // 2\n case \"i\":\n case \"ii\": // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n case \"io\":\n return match.ordinalNumber(dateString, { unit: \"day\" });\n // Tue\n case \"iii\":\n return mapValue(\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // T\n case \"iiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tu\n case \"iiiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tuesday\n case \"iiii\":\n default:\n return mapValue(\n match.day(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n\n set(date, _flags, value) {\n date = setISODay(date, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"E\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"aaaaa\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMMidnightParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"b\":\n case \"bb\":\n case \"bbb\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"bbbbb\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"BBBBB\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1to12Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"h\":\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n case \"ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setHours(0, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0to23Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"H\":\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n case \"Ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n\n set(date, _flags, value) {\n date.setHours(value, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0To11Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"K\":\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n case \"Ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1To24Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"k\":\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n case \"ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n\n set(date, _flags, value) {\n const hours = value <= 24 ? value % 24 : value;\n date.setHours(hours, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MinuteParser extends Parser {\n priority = 60;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"m\":\n return parseNumericPattern(numericPatterns.minute, dateString);\n case \"mo\":\n return match.ordinalNumber(dateString, { unit: \"minute\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setMinutes(value, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class SecondParser extends Parser {\n priority = 50;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"s\":\n return parseNumericPattern(numericPatterns.second, dateString);\n case \"so\":\n return match.ordinalNumber(dateString, { unit: \"second\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setSeconds(value, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\nexport class FractionOfSecondParser extends Parser {\n priority = 30;\n\n parse(dateString, token) {\n const valueCallback = (value) =>\n Math.trunc(value * Math.pow(10, -token.length + 3));\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n\n set(date, _flags, value) {\n date.setMilliseconds(value);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"X\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"XX\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"XXXX\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"XXXXX\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"XXX\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"x\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"xx\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"xxxx\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"xxxxx\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"xxx\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampSecondsParser extends Parser {\n priority = 40;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampMillisecondsParser extends Parser {\n priority = 20;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { EraParser } from \"./parsers/EraParser.mjs\";\nimport { YearParser } from \"./parsers/YearParser.mjs\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.mjs\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.mjs\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.mjs\";\nimport { QuarterParser } from \"./parsers/QuarterParser.mjs\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.mjs\";\nimport { MonthParser } from \"./parsers/MonthParser.mjs\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.mjs\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.mjs\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.mjs\";\nimport { DateParser } from \"./parsers/DateParser.mjs\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.mjs\";\nimport { DayParser } from \"./parsers/DayParser.mjs\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.mjs\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.mjs\";\nimport { ISODayParser } from \"./parsers/ISODayParser.mjs\";\nimport { AMPMParser } from \"./parsers/AMPMParser.mjs\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.mjs\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.mjs\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.mjs\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.mjs\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.mjs\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.mjs\";\nimport { MinuteParser } from \"./parsers/MinuteParser.mjs\";\nimport { SecondParser } from \"./parsers/SecondParser.mjs\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.mjs\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.mjs\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.mjs\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.mjs\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.mjs\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- It's ok, we want any here\nexport const parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser(),\n};\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { getDefaultOptions } from \"./getDefaultOptions.mjs\";\nimport { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { parsers } from \"./parse/_lib/parsers.mjs\";\nimport { DateToSystemTimezoneSetter } from \"./parse/_lib/Setter.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n * and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n if (formatStr === \"\") {\n if (dateStr === \"\") {\n return toDate(referenceDate);\n } else {\n return constructFrom(referenceDate, NaN);\n }\n }\n\n const subFnOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n // If timezone isn't specified, it will be set to the system timezone\n const setters = [new DateToSystemTimezoneSetter()];\n\n const tokens = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter in longFormatters) {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp);\n\n const usedTokens = [];\n\n for (let token of tokens) {\n if (\n !options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n if (\n !options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n\n const firstCharacter = token[0];\n const parser = parsers[firstCharacter];\n if (parser) {\n const { incompatibleTokens } = parser;\n if (Array.isArray(incompatibleTokens)) {\n const incompatibleToken = usedTokens.find(\n (usedToken) =>\n incompatibleTokens.includes(usedToken.token) ||\n usedToken.token === firstCharacter,\n );\n if (incompatibleToken) {\n throw new RangeError(\n `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n );\n }\n } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n throw new RangeError(\n `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n );\n }\n\n usedTokens.push({ token: firstCharacter, fullToken: token });\n\n const parseResult = parser.run(\n dateStr,\n token,\n locale.match,\n subFnOptions,\n );\n\n if (!parseResult) {\n return constructFrom(referenceDate, NaN);\n }\n\n setters.push(parseResult.setter);\n\n dateStr = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n // Replace two single quote characters with one single quote character\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n }\n\n // Cut token from string, or, if string doesn't match the token, return Invalid Date\n if (dateStr.indexOf(token) === 0) {\n dateStr = dateStr.slice(token.length);\n } else {\n return constructFrom(referenceDate, NaN);\n }\n }\n }\n\n // Check if the remaining input contains something other than whitespace\n if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n return constructFrom(referenceDate, NaN);\n }\n\n const uniquePrioritySetters = setters\n .map((setter) => setter.priority)\n .sort((a, b) => b - a)\n .filter((priority, index, array) => array.indexOf(priority) === index)\n .map((priority) =>\n setters\n .filter((setter) => setter.priority === priority)\n .sort((a, b) => b.subPriority - a.subPriority),\n )\n .map((setterArray) => setterArray[0]);\n\n let date = toDate(referenceDate);\n\n if (isNaN(date.getTime())) {\n return constructFrom(referenceDate, NaN);\n }\n\n const flags = {};\n for (const setter of uniquePrioritySetters) {\n if (!setter.validate(date, subFnOptions)) {\n return constructFrom(referenceDate, NaN);\n }\n\n const result = setter.set(date, flags, subFnOptions);\n // Result is tuple (date, flags)\n if (Array.isArray(result)) {\n date = result[0];\n Object.assign(flags, result[1]);\n // Result is date\n } else {\n date = result;\n }\n }\n\n return constructFrom(referenceDate, date);\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n","// Types for SchemaFormBuilder — Prompts 2–3\n\nimport type { VenueResult, ExtraItemProperties, FormSchemaResponse } from '../utils/formSchemaApi';\n\n// ---------------------------------------------------------------------------\n// AppConfig\n// ---------------------------------------------------------------------------\n\n/**\n * Runtime configuration for the booking API.\n * Passed as a prop to SchemaFormBuilder and forwarded to all API calls.\n */\nexport interface AppConfig {\n /** Bearer token sent as the `clienttoken` HTTP header on all API requests. */\n blApiToken: string;\n /** The booking company ID for this council tenant. */\n company_id: string;\n /** The customer/client name identifier for schema resolution. */\n customer_name: string;\n /** Base URL of the Bookinglab API, e.g. `https://api.bookinglab.co.uk`. */\n apiBaseUrl: string;\n}\n\n// ---------------------------------------------------------------------------\n// Validation Rules\n// ---------------------------------------------------------------------------\n\n/**\n * A string validation shorthand.\n * - 'email' → standard email format\n * - 'mobile' → UK mobile number\n * - 'phone' → UK landline/contact number\n * - 'contact' → alias for phone\n * - 'length' → maxLength(255)\n */\nexport type ValidationShorthand = 'email' | 'mobile' | 'phone' | 'contact' | 'length';\n\nexport interface ValidationMinLength {\n minLength: number;\n}\n\nexport interface ValidationMaxLength {\n maxLength: number;\n}\n\nexport interface ValidationMinDate {\n /** Minimum allowed date in DD-MM-YYYY format. */\n minDate: string;\n}\n\nexport interface ValidationMaxDate {\n /** Maximum allowed date expressed as number of days from today. */\n maxDate: number;\n}\n\nexport type ValidationRule =\n | ValidationShorthand\n | ValidationMinLength\n | ValidationMaxLength\n | ValidationMinDate\n | ValidationMaxDate;\n\n// ---------------------------------------------------------------------------\n// Conditional Show Rules\n// ---------------------------------------------------------------------------\n\n/**\n * A single condition clause used in custom rule types.\n */\nexport interface ConditionClause {\n /** The field name whose current value is evaluated. */\n field: string;\n /** The expected value to compare against. Use '*' as a wildcard (any non-empty value). */\n value: string;\n /**\n * Comparison operator. Defaults to '==' if omitted.\n * Numeric operators ('>', '<', '>=', '<=') cast both sides to Number before comparing.\n */\n operator?: '==' | '!=' | '>' | '<' | '>=' | '<=';\n}\n\n/**\n * The `show` object on a field defines its conditional visibility rules.\n * Multiple rule types can coexist on a single field.\n * The final visibility is: ANY rule returning true → field is visible.\n *\n * Rule types:\n *\n * - `[fieldName]: expectedValue` Simple equality rule. Field is visible when\n * `formValues[fieldName] === expectedValue`.\n * Use '*' as expectedValue to match any non-empty value.\n *\n * - `custom` Array of ConditionClause. ALL clauses must be true (AND).\n *\n * - `custom_multiple_condition` A single group of ConditionClause. ALL must be true (AND).\n *\n * - `custom_multiple_conditions` Array of ConditionClause groups. ANY group being fully\n * true makes the rule pass (OR between groups, AND within).\n *\n * - `custom_or_condition` Array of ConditionClause. ANY single clause being true\n * passes the rule (OR logic).\n *\n * - `custom_all_lookups_successful` No value needed. Passes only when every visible AWS lookup\n * field on the current page has `lookupSuccess === true`.\n */\nexport interface ShowRules {\n /** Object format: { fieldName: \"expression\" } or array of ConditionClause. AND logic. */\n custom?: ConditionClause[] | Record<string, string>;\n /** Object format: { conditions: [{ field: value }] } or ConditionClause[]. AND logic. */\n custom_multiple_condition?: ConditionClause[] | { conditions: Record<string, string>[] };\n /** Object format: { groups: [{ conditions: [...] }] } or ConditionClause[][]. OR-of-AND. */\n custom_multiple_conditions?: ConditionClause[][] | { groups: { conditions: Record<string, string>[] }[] };\n custom_or_condition?: ConditionClause[];\n /** Value is irrelevant — presence of this key activates the all-lookups check. */\n custom_all_lookups_successful?: unknown;\n /** Any other key is treated as a simple field-name → expected-value equality rule. */\n [fieldName: string]: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Copy Data Configuration\n// ---------------------------------------------------------------------------\n\n/**\n * Declarative data copying between fields, including across pages via sessionStorage.\n * When this field is visible and the optional `answer` condition is met,\n * each `from[i]` field value is written to `to[i]`.\n */\nexport interface CopyDataConfig {\n /** Source field names (same page or a previous page stored in sessionStorage). */\n from: string[];\n /** Destination field names, index-aligned with `from`. */\n to: string[];\n /**\n * If present, only copy when this field's current value strictly equals `answer`.\n * If absent, copy whenever this field has any non-empty value.\n */\n answer?: string;\n}\n\n// ---------------------------------------------------------------------------\n// AWS Lookup Configuration\n// ---------------------------------------------------------------------------\n\nexport interface AwsLookupMatchEntry {\n /**\n * The form field name whose value provides the lookup value.\n * The field whose `field` property matches the current field name is the primary reference.\n */\n form_field: string;\n /** The DynamoDB attribute name to match against (e.g. 'home_office', 'name'). */\n dynamodb_field: string;\n}\n\nexport interface AwsLookupConfig {\n /** DynamoDB table name (environment suffix appended server-side, e.g. '-staging'). */\n aws_table: string;\n /**\n * Fields participating in the lookup validation.\n * The entry whose form_field matches this field's `field` property is the primary reference.\n * Any other entries are secondary validations (e.g. name cross-check).\n */\n match: AwsLookupMatchEntry[];\n /**\n * If present, the form control value is set to `response.reference[store_response_field]`\n * on a successful lookup instead of the default `response.reference.home_office`.\n */\n store_response_field?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Radio & Dropdown Option Types\n// ---------------------------------------------------------------------------\n\nexport interface RadioOption {\n /** The raw value stored in the form control when this option is selected. */\n value: string;\n /** Human-readable label rendered alongside the radio input. */\n title: string;\n}\n\nexport interface DropdownOption {\n value: string;\n title: string;\n /**\n * If false, this option is excluded from the rendered select.\n * Allows server-side control of available options without schema changes.\n */\n visible: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Raw Schema Field (API shape)\n// ---------------------------------------------------------------------------\n\n/**\n * The field definition exactly as returned by the API.\n * Do not mutate this shape. Hydrate into SchemaField after fetching.\n */\nexport interface RawSchemaField {\n /** Unique identifier. Maps 1:1 to a form control name. */\n field: string;\n\n /** Display label. May contain `{fieldName}` interpolation tokens. */\n title: string;\n\n type:\n | 'text'\n | 'number'\n | 'email'\n | 'date'\n | 'textarea'\n | 'radio'\n | 'dropdown'\n | 'checkbox'\n | 'heading'\n | 'submit';\n\n /**\n * The route page slug this field belongs to (e.g. 'booking-details').\n * Fields not matching the current page are skipped entirely.\n */\n page: string;\n\n required?: boolean;\n\n /**\n * Hint text displayed below the label.\n * May contain HTML — render with dangerouslySetInnerHTML.\n */\n helptext?: string;\n\n /** Array of validation rules applied to this field's form control. */\n validation?: ValidationRule[];\n\n /**\n * Conditional visibility rules. If absent or empty, the field is always visible.\n * See ShowRules for the full rule type documentation.\n */\n show?: ShowRules;\n\n // ── Radio ──────────────────────────────────────────────────────────────────\n radio_options?: RadioOption[];\n\n // ── Dropdown ───────────────────────────────────────────────────────────────\n options?: DropdownOption[];\n\n // ── Heading / display-only ─────────────────────────────────────────────────\n /**\n * Determines the visual treatment for `type === 'heading'` fields.\n * Absent → standard h3 heading.\n */\n component_type?: 'govbook-information_box' | 'govbook-warning_box' | 'body';\n\n /**\n * Rich text body content for heading variants.\n * Render with dangerouslySetInnerHTML.\n */\n component_text?: string;\n\n // ── Address lookup ─────────────────────────────────────────────────────────\n /** If true, renders a postcode input + \"Find address\" button and an address select. */\n address_lookup?: boolean;\n\n // ── AWS / DynamoDB eligibility lookup ──────────────────────────────────────\n lookup?: AwsLookupConfig;\n\n // ── Venue / resource lookup ────────────────────────────────────────────────\n /** If true, renders an autocomplete venue search input with typeahead. */\n resource_lookup?: boolean;\n /**\n * Field name whose value is used to filter venue search results by `venue_type`.\n * Only applies when `resource_lookup` is true.\n */\n filter_by?: string;\n\n // ── Booking side effects ───────────────────────────────────────────────────\n /** When this field becomes visible, emit `onCompanySet` with this company ID. */\n company_set?: string;\n /** When this field becomes visible, emit `onServiceSet` with this service ID. */\n service_set?: string;\n /** When this field becomes visible, emit `onResourceSet` with this resource ID. */\n resource_set?: string;\n /** When this field becomes visible, emit `onStaffSet` with this staff ID. */\n staff_set?: string;\n /**\n * Duration value (in minutes as a string) to add to the booking when visible.\n * Negated and re-emitted when the field becomes hidden.\n */\n add_duration?: string;\n /**\n * Appointment type identifier. Stored in sessionStorage on the `services` page.\n * Used on `booking-details` to filter fields by appointment type.\n */\n appointment_type?: string;\n\n // ── Copy data ──────────────────────────────────────────────────────────────\n copy_data?: CopyDataConfig;\n\n // ── Booker / datastore fields ──────────────────────────────────────────────\n /** When visible and non-empty, emit `onUpdateDatastore({ booker_first_name: value })`. */\n booker_first_name?: boolean | 'true';\n booker_last_name?: boolean | 'true';\n booker_email?: boolean | 'true';\n booker_phone?: boolean | 'true';\n\n // ── Extra items / fees ─────────────────────────────────────────────────────\n /**\n * Extra item ID to fetch and emit when this field is visible and has a truthy value.\n * Note: serialised as a hyphenated key in JSON — access as `field['extra-item']`.\n */\n 'extra-item'?: string;\n /** Service ID override for this field's extra item lookup. */\n 'service-id'?: string;\n /**\n * Per-resource extra item overrides. Key is resource ID, value contains `extra-item`.\n * Takes precedence over `extra-item` when a matching resource is selected.\n */\n resource_ids?: Record<string, { 'extra-item': string }>;\n\n // ── Legacy conditional fields ──────────────────────────────────────────────\n /** If true and schema type is not 'extended', use legacy trigger/trigger_value logic. */\n conditional?: boolean;\n /**\n * Pipe-separated list of field names to watch.\n * Only used when `conditional === true` on a legacy schema.\n */\n trigger?: string;\n /**\n * Pipe-separated list of expected values corresponding to `trigger` fields.\n * Each value can be `&`-joined for multi-part AND conditions within a single trigger.\n * Supports prefixes: `<`, `>`, `!` for numeric/inequality comparisons.\n * Use `*` as a wildcard to match any non-empty value.\n */\n trigger_value?: string;\n\n // ── Submit field ───────────────────────────────────────────────────────────\n /**\n * If true on a visible field, the form-level submit button becomes visible.\n * Used to gate progression in the booking journey.\n */\n continue?: boolean;\n\n /** If true, field is unconditionally hidden regardless of visibility rules. */\n hidden_field?: boolean;\n\n /** Whether to prevent dates in the future (sets `max` to today on date inputs). */\n hide_dates_in_future?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Hydrated Schema Field (runtime shape)\n// ---------------------------------------------------------------------------\n\n/**\n * Extends RawSchemaField with all mutable runtime state added during form\n * initialisation and visibility evaluation.\n * This is the type you work with throughout the component.\n */\nexport interface SchemaField extends RawSchemaField {\n // ── Computed once on init ──────────────────────────────────────────────────\n /** Number of keys in the `show` object. 0 = always visible. */\n rules_count: number;\n /** Whether this field's `page` matches the currently active route page. */\n show_on_this_page: boolean;\n /** Set to true during init when `lookup.aws_table` is present. */\n aws_lookup?: boolean;\n\n // ── Visibility state (updated each render cycle) ───────────────────────────\n /** Current computed visibility. Updated by refreshVisibility(). */\n visible: boolean;\n /** Alias for `visible` — kept for API compatibility with legacy schema paths. */\n is_visible: boolean;\n /**\n * Resolved title after `{fieldName}` tokens have been interpolated.\n * Falls back to `title` if not yet resolved.\n */\n rendered_title?: string;\n\n // ── Side-effect tracking ───────────────────────────────────────────────────\n /** Prevents `add_duration` from being emitted more than once per visible lifecycle. */\n duration_added?: boolean;\n /** Runtime company ID stored when `company_set` side-effect fires. */\n company_id?: string;\n /** Runtime service ID stored when `service_set` side-effect fires. */\n service_id?: string;\n /** Runtime resource ID stored when `resource_set` side-effect fires. */\n resource_id?: string;\n\n // ── Address lookup runtime state ───────────────────────────────────────────\n addresses?: Array<{ address: { ADDRESS: string } }>;\n addressLoading?: boolean;\n badPostcode?: boolean;\n selected_address?: string;\n\n // ── AWS lookup runtime state ───────────────────────────────────────────────\n lookupSuccess?: boolean;\n lookupError?: boolean;\n lookupUsed?: boolean;\n lookupLoading?: boolean;\n lookupResponse?: { name?: string; home_office?: string; [key: string]: unknown } | null;\n lookupNameMismatch?: boolean;\n /**\n * Set to true on secondary match fields (e.g. name input) after a successful\n * lookup. Causes the field wrapper to receive the `hidden-field` CSS class,\n * hiding the input while the verified info display is shown instead.\n */\n lookupValidated?: boolean;\n\n // ── Venue search runtime state ─────────────────────────────────────────────\n searching?: boolean;\n noResults?: boolean;\n selected_resource?: VenueResult;\n /** Display value of the currently selected venue (for read-only display). */\n answer?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Event Payloads & Component Props\n// ---------------------------------------------------------------------------\n\n/** Individual field error. */\nexport interface FieldError {\n fieldName: string;\n errors: Record<string, unknown>;\n}\n\n/** Extra item entry tracked by the form. */\nexport interface ExtraItemEntry {\n field: string;\n serviceId: string;\n extraItemId: string;\n qty: number;\n}\n\n/** Status object emitted via onFormStatus on every form value change. */\nexport interface FormSchemaStatus {\n /** True when all visible, required fields on the current page are valid. */\n status: boolean;\n /** Array of field error objects for any invalid controls. */\n errors: FieldError[];\n /** Snapshot of all current form control values keyed by field name. */\n formData: Record<string, string> | undefined;\n /**\n * Extra items currently tracked by the form (may be empty during initial load).\n * Populated by the extra-items system — see Prompt 8.\n */\n extraItems: ExtraItemEntry[];\n /**\n * Present when a field with a `service_set` side-effect just changed value.\n * The parent uses this to trigger a service selection in the booking datastore.\n */\n setService?: string;\n}\n\n/** Payload emitted via onVenueSet. */\nexport interface VenueSetPayload {\n /** The selected venue object, or null when the selection is cleared. */\n venue: VenueResult | null;\n /** The field name this venue selection belongs to. */\n field: string;\n /** Present when a venue is selected and has an associated company. */\n companyId?: string;\n /** Present when a venue is selected and has an associated resource. */\n resourceId?: string;\n}\n\n/** Payload emitted via onAwsLookupSet. */\nexport interface AwsLookupSetPayload {\n /** The field name the lookup was performed on. */\n field: string;\n /** The reference object returned on success, or null when cleared. */\n reference: { name?: string; home_office?: string; [key: string]: unknown } | null;\n success: boolean;\n}\n\n/** Payload emitted via onUpdateDatastore. */\nexport interface UpdateDatastorePayload {\n type?: 'lookupResponse';\n field?: string;\n lookupResponse?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/** Payload emitted via onFormReady. */\nexport interface FormReadyPayload {\n form_id: string;\n extra_items: ExtraItemEntry[];\n}\n\n// ---------------------------------------------------------------------------\n// Component Props\n// ---------------------------------------------------------------------------\n\n/** Props for the SchemaFormBuilder component. */\nexport interface SchemaFormBuilderProps {\n // ── Required ───────────────────────────────────────────────────────────────\n /** The schema ID used to fetch the form definition from the API. */\n formId: string;\n /** Runtime API configuration. Forwarded to all API calls. */\n appConfig: AppConfig;\n /** The current route page slug (e.g. 'booking-details'). Only fields for this page are rendered. */\n currentPage: string;\n /** The booking company ID for venue searches and extra item lookups. */\n companyId: string;\n\n // ── Optional configuration ─────────────────────────────────────────────────\n /**\n * Initial field values to pre-populate the form with.\n * Keys must match `field.field` names in the schema.\n */\n formData?: Record<string, unknown>;\n /**\n * Whether to show the submit/continue button.\n * The form also manages this internally based on `field.continue` visibility —\n * this prop provides an external override for the initial render.\n */\n showSubmit?: boolean;\n /**\n * When provided, the form watches this value. If it changes to a new\n * formId string, the form tears down and re-initialises with the new schema.\n */\n formUpdateId?: string;\n /**\n * When provided, the component uses this schema directly instead of\n * fetching from the API. Useful for testing schema implementations locally.\n * Must conform to the FormSchemaResponse shape.\n */\n initialSchema?: FormSchemaResponse;\n\n // ── Event callbacks ────────────────────────────────────────────────────────\n /** Fired when the submit button is clicked and the form is valid. */\n onFormSubmit?: (data: Record<string, string>) => void;\n /** Fired on every form value change with current validity and form data. */\n onFormStatus?: (status: FormSchemaStatus) => void;\n /** Fired on submit with the raw schema object (used for downstream schema introspection). */\n onSchema?: (schema: Record<string, unknown>) => void;\n /** Fired when a field with `company_set` becomes visible. */\n onCompanySet?: (companyId: string) => void;\n /** Fired when a field with `service_set` becomes visible. */\n onServiceSet?: (serviceId: string) => void;\n /** Fired when a field with `resource_set` becomes visible. */\n onResourceSet?: (resourceId: string) => void;\n /** Fired when a field with `staff_set` becomes visible. */\n onStaffSet?: (staffId: string) => void;\n /**\n * Fired when a field with `add_duration` becomes visible (positive string value)\n * or hidden (negated string value, e.g. '-30').\n */\n onAddDuration?: (duration: string) => void;\n /** Fired once after the form schema has been fetched and controls built. */\n onFormReady?: (payload: FormReadyPayload) => void;\n /** Fired when a booker field (name, email, phone) is populated. */\n onUpdateDatastore?: (payload: UpdateDatastorePayload) => void;\n /** Fired when an address is selected from the address lookup dropdown. */\n onAddressSet?: (address: string) => void;\n /** Fired when an AWS lookup succeeds, fails, or is cleared. */\n onAwsLookupSet?: (payload: AwsLookupSetPayload) => void;\n /** Fired when a new extra item is fetched and should be added to the booking. */\n onExtraItemSet?: (payload: { item_id: string; item: ExtraItemProperties | null }) => void;\n /** Fired when an existing extra item's quantity changes. */\n onExtraItemChanged?: (payload: { item_id: string; item: ExtraItemEntry }) => void;\n /** Fired when a venue is selected or cleared. */\n onVenueSet?: (payload: VenueSetPayload) => void;\n /** Fired when any async operation (address lookup, AWS lookup, extra item fetch) starts or ends. */\n onProcessing?: (loading: boolean) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Hydration Helper\n// ---------------------------------------------------------------------------\n\n/**\n * Hydrates a raw API field into a SchemaField by setting all initial\n * runtime state to its default values.\n */\nexport function hydrateField(raw: RawSchemaField, currentPage: string): SchemaField {\n return {\n ...raw,\n rules_count: Object.keys(raw.show ?? {}).length,\n show_on_this_page: raw.page === currentPage,\n visible: false,\n is_visible: false,\n aws_lookup: raw.lookup?.aws_table != null,\n };\n}\n","// API layer for SchemaFormBuilder\n// Pure async functions — no classes, no throwing. All return ApiResult<T>.\n\nimport type { AppConfig, RawSchemaField } from '../types/schema-form-builder';\n\n// ---------------------------------------------------------------------------\n// Result types\n// ---------------------------------------------------------------------------\n\nexport interface ApiError {\n error: true;\n message: string;\n}\n\nexport type ApiResult<T> = T | ApiError;\n\nexport function isApiError<T>(result: ApiResult<T>): result is ApiError {\n return (result as ApiError).error === true;\n}\n\n// ---------------------------------------------------------------------------\n// Response types\n// ---------------------------------------------------------------------------\n\nexport interface FormSchemaResponse {\n schema: {\n type: 'extended' | 'legacy' | string;\n form_name: string;\n fields: RawSchemaField[];\n };\n}\n\n// RawSchemaField is imported from types/schema-form-builder.ts\nexport type { RawSchemaField } from '../types/schema-form-builder';\n\nexport interface AddressLookupItem {\n DPA?: { ADDRESS: string; [key: string]: string };\n LPI?: { ADDRESS: string; [key: string]: string };\n}\n\nexport interface AwsLookupResponse {\n /** 1 = found, 2 = no data, 3 = server error */\n custom_response_code: 1 | 2 | 3;\n reference?: {\n name?: string;\n home_office?: string;\n /** Whether this reference has already been consumed */\n used?: boolean;\n [key: string]: unknown;\n };\n}\n\nexport interface ExtraItemProperties {\n /** Booking extra item data including pricing details. */\n data?: {\n pmtTyp?: string;\n [key: string]: unknown;\n };\n qty?: number;\n field?: string;\n [key: string]: unknown;\n}\n\nexport interface VenueResult {\n pretty_name?: string;\n venue_name: string;\n venue_type?: string;\n company_id?: string;\n resource_id?: string;\n description?: string;\n image?: string;\n [key: string]: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// API functions\n// ---------------------------------------------------------------------------\n\n/**\n * Fetches the form schema definition for a given form ID.\n * The server resolves the schema from company + client + form_name.\n */\nexport async function getFormSchema(\n formId: string,\n appConfig: AppConfig\n): Promise<ApiResult<FormSchemaResponse>> {\n try {\n const response = await fetch(`${appConfig.apiBaseUrl}/form/schema`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n clienttoken: appConfig.blApiToken,\n },\n body: JSON.stringify({\n company: appConfig.company_id,\n client: appConfig.customer_name,\n form_name: formId,\n }),\n });\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n return (await response.json()) as FormSchemaResponse;\n } catch (err) {\n return { error: true, message: (err as Error).message };\n }\n}\n\n/**\n * Looks up a list of UK addresses for a given postcode via Ordnance Survey.\n */\nexport async function getAddressLookup(\n postcode: string,\n appConfig: AppConfig\n): Promise<ApiResult<AddressLookupItem[]>> {\n try {\n const response = await fetch(\n `${appConfig.apiBaseUrl}/ordnance_survey/postcode/${encodeURIComponent(postcode)}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n clienttoken: appConfig.blApiToken,\n },\n }\n );\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n const data = await response.json();\n return Array.isArray(data) ? data : (data.results ?? []);\n } catch (err) {\n return { error: true, message: (err as Error).message };\n }\n}\n\n/**\n * Validates a reference number against a DynamoDB eligibility table.\n * Optionally cross-validates against a secondary field (e.g. name match).\n */\nexport async function awsLookup(\n appConfig: AppConfig,\n table: string,\n field: string,\n reference: string,\n referenceExtra?: string,\n fieldExtra?: string\n): Promise<ApiResult<AwsLookupResponse>> {\n try {\n const body: Record<string, string> = {\n client: appConfig.customer_name,\n reference,\n table,\n field,\n };\n if (referenceExtra && fieldExtra) {\n body['referenceExtra'] = fieldExtra;\n body['field_extra'] = referenceExtra;\n }\n const response = await fetch(`${appConfig.apiBaseUrl}/eligibility_reference_lookup`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n clienttoken: appConfig.blApiToken,\n },\n body: JSON.stringify(body),\n });\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n return (await response.json()) as AwsLookupResponse;\n } catch (err) {\n return { error: true, message: (err as Error).message };\n }\n}\n\n/**\n * Fetches the properties (including price/revenue code) for a booking extra item.\n */\nexport async function getExtraItemProperties(\n bookingQuestionCode: string,\n companyId: string,\n serviceId: string,\n appConfig: AppConfig\n): Promise<ApiResult<ExtraItemProperties>> {\n try {\n const response = await fetch(\n `${appConfig.apiBaseUrl}/company/${companyId}/extra-item/${bookingQuestionCode}/service/${serviceId}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n clienttoken: appConfig.blApiToken,\n },\n }\n );\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n return (await response.json()) as ExtraItemProperties;\n } catch (err) {\n return { error: true, message: (err as Error).message };\n }\n}\n\n/**\n * Searches for venues/resources by a free-text query string.\n * Results can be further filtered client-side by venue_type.\n */\nexport async function searchVenue(\n companyId: string,\n query: string,\n appConfig: AppConfig\n): Promise<ApiResult<VenueResult[]>> {\n try {\n const response = await fetch(\n `${appConfig.apiBaseUrl}/company/${companyId}/venue-lookup?search=${encodeURIComponent(query.toLowerCase())}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n 'x-company-id': companyId,\n clienttoken: appConfig.blApiToken,\n },\n }\n );\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n const data = await response.json();\n return Array.isArray(data) ? data : [];\n } catch (err) {\n return { error: true, message: (err as Error).message };\n }\n}\n","// SchemaFormBuilder — Prompt 4: Initialisation & Session Storage\n\nimport { useState, useEffect, useRef, useCallback } from 'react';\nimport { parse, isBefore, isAfter, isValid, addDays, startOfDay } from 'date-fns';\nimport type {\n SchemaFormBuilderProps,\n SchemaField,\n RawSchemaField,\n ExtraItemEntry,\n FieldError,\n ConditionClause,\n ShowRules,\n ValidationMinLength,\n ValidationMaxLength,\n ValidationMinDate,\n ValidationMaxDate,\n} from '../types/schema-form-builder';\nimport { hydrateField } from '../types/schema-form-builder';\nimport type { FormSchemaResponse, VenueResult } from '../utils/formSchemaApi';\nimport { getFormSchema, getExtraItemProperties, getAddressLookup, awsLookup, searchVenue, isApiError } from '../utils/formSchemaApi';\n\n// ---------------------------------------------------------------------------\n// Validation Types & Pure Validators\n// ---------------------------------------------------------------------------\n\nexport interface ValidationError {\n key: string;\n requiredLength?: number;\n message?: string;\n}\n\nexport type ValidatorFn = (value: string) => ValidationError | null;\n\nexport function requiredValidator(value: string): ValidationError | null {\n if (value === '' || value == null) return { key: 'required' };\n return null;\n}\n\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nexport function emailValidator(value: string): ValidationError | null {\n if (!value) return null;\n return EMAIL_REGEX.test(value) ? null : { key: 'email' };\n}\n\nconst UK_MOBILE_REGEX = /^(?:0|\\+44)7\\d{9}$/;\nexport function mobileValidator(value: string): ValidationError | null {\n if (!value) return null;\n return UK_MOBILE_REGEX.test(value) ? null : { key: 'pattern', message: 'Enter a valid UK mobile number.' };\n}\n\nconst UK_PHONE_REGEX = /^(?:0|\\+44)\\s?\\d{10}$/;\nexport function phoneValidator(value: string): ValidationError | null {\n if (!value) return null;\n return UK_PHONE_REGEX.test(value) ? null : { key: 'pattern', message: 'Enter a valid UK phone number.' };\n}\n\nexport function minLengthValidator(min: number): ValidatorFn {\n return (value: string) => {\n if (!value) return null;\n return value.length >= min ? null : { key: 'minlength', requiredLength: min };\n };\n}\n\nexport function maxLengthValidator(max: number): ValidatorFn {\n return (value: string) => {\n if (!value) return null;\n return value.length <= max ? null : { key: 'maxlength', requiredLength: max };\n };\n}\n\nexport function minDateValidator(minDateStr: string): ValidatorFn {\n return (value: string) => {\n if (!value) return null;\n const controlDate = startOfDay(new Date(value));\n const minDate = startOfDay(parse(minDateStr, 'dd-MM-yyyy', new Date()));\n if (!isValid(controlDate)) return { key: 'invalidDate', message: 'Invalid date format' };\n return isBefore(controlDate, minDate) ? { key: 'minDate', message: 'Date cannot be in the past' } : null;\n };\n}\n\nexport function maxDateValidator(noOfDays: number): ValidatorFn {\n return (value: string) => {\n if (!value) return null;\n const maxDate = startOfDay(addDays(new Date(), noOfDays));\n const controlDate = startOfDay(new Date(value));\n return isAfter(controlDate, maxDate) ? { key: 'maxDate', message: 'Date cannot be in the future' } : null;\n };\n}\n\nexport function buildValidators(field: RawSchemaField): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n if (field.required) validators.push(requiredValidator);\n if (!Array.isArray(field.validation)) return validators;\n\n for (const rule of field.validation) {\n if (typeof rule === 'string') {\n switch (rule) {\n case 'email': validators.push(emailValidator); break;\n case 'mobile': validators.push(mobileValidator); break;\n case 'phone': case 'contact': validators.push(phoneValidator); break;\n case 'length': validators.push(maxLengthValidator(255)); break;\n }\n } else if (typeof rule === 'object' && rule !== null) {\n if ('minLength' in rule) validators.push(minLengthValidator((rule as ValidationMinLength).minLength));\n if ('maxLength' in rule) validators.push(maxLengthValidator((rule as ValidationMaxLength).maxLength));\n if ('minDate' in rule) validators.push(minDateValidator((rule as ValidationMinDate).minDate));\n if ('maxDate' in rule) validators.push(maxDateValidator((rule as ValidationMaxDate).maxDate));\n }\n }\n return validators;\n}\n\nexport function getErrorMessage(error: ValidationError): string {\n switch (error.key) {\n case 'required': return 'This field is required.';\n case 'minlength': return `Minimum length is ${error.requiredLength ?? 0} characters.`;\n case 'maxlength': return `Maximum length is ${error.requiredLength ?? 0} characters.`;\n case 'email': return 'Enter a valid email address.';\n case 'pattern': return error.message ?? 'Invalid format.';\n case 'minDate': return error.message ?? 'Date cannot be in the past.';\n case 'maxDate': return error.message ?? 'Date cannot be in the future.';\n case 'invalidDate': return error.message ?? 'Enter a valid date.';\n default: return error.message ?? 'Invalid input.';\n }\n}\n\nexport function getInputType(field: SchemaField): React.HTMLInputTypeAttribute {\n if (\n field.type === 'number' &&\n Array.isArray(field.validation) &&\n field.validation.some(v => typeof v === 'string' && ['phone', 'mobile', 'contact'].includes(v))\n ) {\n return 'tel';\n }\n return field.type as React.HTMLInputTypeAttribute;\n}\n\n// ---------------------------------------------------------------------------\n// Session Storage Helpers\n// ---------------------------------------------------------------------------\n\nconst SESSION_STORAGE_KEY = 'form_builder_answers';\n\n/**\n * Returns the entire answer store from sessionStorage.\n * Returns an empty object if nothing is stored or if parsing fails.\n */\nfunction getAnswerStore(): Record<string, Record<string, unknown>> {\n try {\n const raw = sessionStorage.getItem(SESSION_STORAGE_KEY);\n return raw ? (JSON.parse(raw) as Record<string, Record<string, unknown>>) : {};\n } catch {\n return {};\n }\n}\n\n/**\n * Retrieves a single stored answer for a field in the given form.\n * Returns null if not found.\n */\nfunction getStoredAnswer(formId: string, fieldName: string): string | null {\n const store = getAnswerStore();\n const value = store?.[formId]?.[fieldName];\n return value != null ? String(value) : null;\n}\n\n/**\n * Persists a single field answer to sessionStorage.\n * Creates the formId namespace if it does not yet exist.\n */\nfunction persistAnswer(formId: string, fieldName: string, value: unknown): void {\n if (!formId) return;\n const store = getAnswerStore();\n if (!store[formId]) store[formId] = {};\n store[formId][fieldName] = value;\n try {\n sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(store));\n } catch (err) {\n console.warn('[FormBuilder] Failed to persist answer to sessionStorage:', err);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function SchemaFormBuilder(props: SchemaFormBuilderProps) {\n const {\n formId,\n appConfig,\n currentPage,\n companyId,\n formData,\n showSubmit: showSubmitProp,\n formUpdateId,\n initialSchema,\n onFormSubmit,\n onFormStatus,\n onSchema,\n onCompanySet,\n onServiceSet,\n onResourceSet,\n onStaffSet,\n onAddDuration,\n onFormReady,\n onUpdateDatastore,\n onAddressSet,\n onAwsLookupSet,\n onExtraItemSet,\n onExtraItemChanged,\n onVenueSet,\n onProcessing,\n } = props;\n\n // ── React State ──────────────────────────────────────────────────────────\n\n /** All form control values keyed by field name. */\n const [formValues, setFormValues] = useState<Record<string, string>>({});\n\n /** Hydrated schema fields for the current form. */\n const [formFields, setFormFields] = useState<SchemaField[]>([]);\n\n /** The raw schema object returned by the API. */\n const [schema, setSchema] = useState<FormSchemaResponse | null>(null);\n\n /** Whether the submit/continue button is visible. */\n const [showSubmit, setShowSubmit] = useState<boolean>(showSubmitProp ?? false);\n\n /** True while the schema is being fetched and the form is being built. */\n const [loading, setLoading] = useState<boolean>(true);\n\n /** Venue search suggestions from the last successful searchVenue call. */\n const [suggestions, setSuggestions] = useState<VenueResult[]>([]);\n\n /** Whether a venue search request is in-flight (used by venue search field). */\n const [, _setSearching] = useState<boolean>(false);\n\n /** The current text value of a venue search input. */\n const [searchText, setSearchText] = useState<string>('');\n\n /** Fields the user has interacted with (blur). */\n const [touchedFields, setTouchedFields] = useState<Set<string>>(new Set());\n\n /** Fields the user has changed. */\n const [dirtyFields, setDirtyFields] = useState<Set<string>>(new Set());\n\n // ── Refs ──────────────────────────────────────────────────────────────────\n\n /**\n * The internal service/resource/company ID registry per formId.\n * Updated when side-effect fields become visible.\n */\n const formServicesRef = useRef<\n Record<string, { service_id?: string; resource_id?: string; company_id?: string }>\n >({});\n\n /** The list of extra items currently tracked for the active booking. */\n const extraItemsRef = useRef<ExtraItemEntry[]>([]);\n\n /** Guards against concurrent async fetches for the same extra item ID. */\n const pendingExtraItemFetchesRef = useRef<Set<string>>(new Set());\n\n /** Debounce timer handle for venue search input. */\n const venueSearchTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n /** The formId the component was last initialised with. */\n const activeFormIdRef = useRef<string>('');\n\n /** Prevents double-initialisation. */\n const initialisedRef = useRef<boolean>(false);\n\n /** Cached validator functions per field name — built once during initialisation. */\n const validatorMapRef = useRef<Map<string, ValidatorFn[]>>(new Map());\n\n // ── Initialisation Guard ──────────────────────────────────────────────────\n\n useEffect(() => {\n if (initialisedRef.current && formUpdateId === activeFormIdRef.current && !initialSchema) return;\n initialisedRef.current = true;\n activeFormIdRef.current = formUpdateId ?? formId;\n initialiseForm(formUpdateId ?? formId);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formId, formUpdateId, initialSchema]);\n\n // ── Form Values Watcher → Visibility + Parent Notification ─────────────────\n\n useEffect(() => {\n if (formFields.length > 0) {\n refreshVisibility();\n }\n\n // Emit onFormStatus to parent\n if (formFields.length > 0) {\n const errors: FieldError[] = [];\n\n for (const field of formFields) {\n if (field.page !== currentPage) continue;\n if (!field.visible && !field.is_visible) continue;\n\n const value = formValues[field.field] ?? '';\n const fieldErrors = validateField(field, value);\n\n if (fieldErrors) {\n errors.push({ fieldName: field.field, errors: fieldErrors as unknown as Record<string, unknown> });\n }\n }\n\n const serviceSetField = formFields.find(\n f => f.page === currentPage && f.service_set && (f.visible || f.is_visible)\n );\n\n onFormStatus?.({\n status: errors.length === 0,\n errors,\n formData: formValues as Record<string, string>,\n extraItems: extraItemsRef.current,\n setService: serviceSetField?.service_set,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formValues]);\n\n // ── Extra Items Watcher ────────────────────────────────────────────────────\n\n useEffect(() => {\n if (!formFields.length) return;\n\n const visibleFieldsWithExtraItems = formFields.filter(\n f =>\n f.page === currentPage &&\n (f.visible || f.is_visible) &&\n (f['extra-item'] || f.resource_ids)\n );\n\n for (const field of visibleFieldsWithExtraItems) {\n void setExtraItems(field);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formFields, formValues]);\n\n // ── Cleanup ───────────────────────────────────────────────────────────────\n\n useEffect(() => {\n return () => {\n if (venueSearchTimerRef.current) {\n clearTimeout(venueSearchTimerRef.current);\n }\n };\n }, []);\n\n // ── Form Value Update Helper ──────────────────────────────────────────────\n\n const setFieldValue = useCallback(\n (fieldName: string, value: string, _options?: { emitEvent?: boolean }): void => {\n setFormValues(prev => ({ ...prev, [fieldName]: value }));\n persistAnswer(formId, fieldName, value);\n },\n [formId]\n );\n\n // ── Initialisation ────────────────────────────────────────────────────────\n\n async function initialiseForm(resolvedFormId: string): Promise<void> {\n setLoading(true);\n setFormFields([]);\n setFormValues({});\n setSchema(null);\n setShowSubmit(false);\n extraItemsRef.current = [];\n pendingExtraItemFetchesRef.current = new Set();\n formServicesRef.current[resolvedFormId] ??= {};\n\n // Step 1: Fetch schema (or use initialSchema if provided)\n let result: FormSchemaResponse;\n if (initialSchema) {\n result = initialSchema;\n } else {\n const apiResult = await getFormSchema(resolvedFormId, appConfig);\n if (isApiError(apiResult)) {\n console.error('[FormBuilder] Failed to fetch form schema:', apiResult.message);\n setLoading(false);\n return;\n }\n result = apiResult;\n }\n\n // Step 2: Strip internal-use fields\n const rawFields = result.schema.fields.filter(f => f.field !== 'haf_id');\n\n // Step 3: Hydrate fields\n const hydrated: SchemaField[] = rawFields.map(f => hydrateField(f, currentPage));\n\n // Step 4: Build initial form values\n const initialValues: Record<string, string> = {};\n\n for (const field of hydrated) {\n if (!field.show_on_this_page) continue;\n initialValues[field.field] = '';\n if (field.address_lookup) {\n initialValues[`${field.field}_postcode`] = '';\n }\n }\n\n if (formData) {\n for (const [key, value] of Object.entries(formData)) {\n if (key in initialValues) {\n initialValues[key] = String(value ?? '');\n }\n }\n }\n\n // Step 5: Pre-populate copy_data targets from sessionStorage\n const copyDataTargets = new Set<string>();\n for (const field of hydrated) {\n if (field.copy_data?.to) {\n for (const target of field.copy_data.to) {\n copyDataTargets.add(target);\n }\n }\n }\n\n if (copyDataTargets.size > 0) {\n const storedAnswers = getAnswerStore()[resolvedFormId] ?? {};\n for (const target of copyDataTargets) {\n if (target in initialValues && !initialValues[target] && storedAnswers[target] != null) {\n initialValues[target] = String(storedAnswers[target]);\n }\n }\n }\n\n // Step 6: Build validator map\n validatorMapRef.current = new Map();\n for (const field of hydrated) {\n validatorMapRef.current.set(field.field, buildValidators(field));\n }\n\n // Step 7: Commit state\n setSchema(result);\n setFormFields(hydrated);\n setFormValues(initialValues);\n setTouchedFields(new Set());\n setDirtyFields(new Set());\n\n // Step 8: Notify parent\n onFormReady?.({\n form_id: resolvedFormId,\n extra_items: extraItemsRef.current,\n });\n\n setLoading(false);\n }\n\n // ── Validation ────────────────────────────────────────────────────────────\n\n function validateField(field: SchemaField, value: string): ValidationError | null {\n if (!field.visible && !field.is_visible) return null;\n const validators = validatorMapRef.current.get(field.field) ?? buildValidators(field);\n for (const validator of validators) {\n const error = validator(value);\n if (error) return error;\n }\n return null;\n }\n\n function markAsTouched(fieldName: string): void {\n setTouchedFields(prev => new Set(prev).add(fieldName));\n }\n\n function markAsDirty(fieldName: string): void {\n setDirtyFields(prev => new Set(prev).add(fieldName));\n }\n\n function markAllAsTouched(): void {\n const allFieldNames = formFields\n .filter(f => f.show_on_this_page)\n .map(f => f.field);\n setTouchedFields(new Set(allFieldNames));\n }\n\n function shouldShowError(fieldName: string): boolean {\n return touchedFields.has(fieldName) || dirtyFields.has(fieldName);\n }\n\n // ── Visibility Engine (Extended Schema — Prompt 5) ─────────────────────────\n\n function refreshVisibility(): void {\n if (!formFields.length) return;\n\n let continueVisible = false;\n const schemaType = schema?.schema?.type ?? 'extended';\n\n const updatedFields = formFields.map(field => {\n if (field.page !== currentPage) return field;\n\n const wasVisible = field.visible;\n\n const hasShowRules =\n field.show != null && Object.keys(field.show).length > 0;\n\n let isVisible: boolean;\n\n if (schemaType === 'extended') {\n isVisible = hasShowRules\n ? evaluateExtendedConditional(field)\n : evaluateAlwaysVisible(field);\n } else {\n isVisible = evaluateLegacyConditional(field);\n }\n\n // When a field transitions from visible → hidden, clear its value\n if (!isVisible && wasVisible) {\n setFormValues(prev => {\n if (prev[field.field] === '' || prev[field.field] == null) return prev;\n const next = { ...prev, [field.field]: '' };\n return next;\n });\n }\n\n // Track whether any 'continue' field is visible (controls submit button)\n if (isVisible && field.continue === true) {\n continueVisible = true;\n }\n\n return { ...field, visible: isVisible, is_visible: isVisible };\n });\n\n setFormFields(updatedFields);\n setShowSubmit(continueVisible);\n }\n\n function evaluateAlwaysVisible(field: SchemaField): boolean {\n resolveDynamicTitle(field);\n fireVisibleSideEffects(field, true);\n\n // Appointment type filter (booking-details page only)\n if (isAppointmentTypeFiltered(field)) return false;\n\n return true;\n }\n\n function evaluateExtendedConditional(field: SchemaField): boolean {\n resolveDynamicTitle(field);\n\n const rules = field.show as ShowRules;\n const customResults: boolean[] = [];\n const simpleResults: boolean[] = [];\n\n // 1. custom_all_lookups_successful\n if ('custom_all_lookups_successful' in rules) {\n customResults.push(checkAllLookupsSuccessful(field.field));\n }\n\n // 2. custom (single AND group)\n if (rules.custom) {\n customResults.push(evaluateCustomCondition(rules.custom));\n }\n\n // 3. custom_multiple_condition (singular — single AND group)\n if (rules.custom_multiple_condition) {\n customResults.push(evaluateAndGroup(rules.custom_multiple_condition));\n }\n\n // 4. custom_multiple_conditions (plural — OR between groups, AND within)\n if (rules.custom_multiple_conditions) {\n customResults.push(evaluateOrOfAndGroups(rules.custom_multiple_conditions));\n }\n\n // 5. custom_or_condition (OR — any clause passing is sufficient)\n if (rules.custom_or_condition) {\n customResults.push(evaluateOrGroup(rules.custom_or_condition));\n }\n\n // 6. Simple field-name → expected-value rules (all other keys)\n const RESERVED_RULE_KEYS = new Set([\n 'custom',\n 'custom_multiple_condition',\n 'custom_multiple_conditions',\n 'custom_or_condition',\n 'custom_all_lookups_successful',\n ]);\n\n for (const [targetField, expectedValue] of Object.entries(rules)) {\n if (RESERVED_RULE_KEYS.has(targetField)) continue;\n simpleResults.push(evaluateSimpleRule(targetField, expectedValue as string));\n }\n\n // Simple rules use OR logic among themselves.\n // Custom rules must ALL pass (AND between custom rule types).\n // When both exist, simple OR result is AND'd with custom results.\n let isVisible: boolean;\n const simplePass = simpleResults.length === 0 || simpleResults.some(r => r);\n const customPass = customResults.length === 0 || customResults.every(r => r);\n\n if (simpleResults.length > 0 && customResults.length > 0) {\n isVisible = simplePass && customPass;\n } else if (customResults.length > 0) {\n isVisible = customPass;\n } else {\n isVisible = simplePass;\n }\n\n fireVisibleSideEffects(field, isVisible);\n\n // Appointment type filter (booking-details page only)\n if (isVisible && isAppointmentTypeFiltered(field)) return false;\n\n // Store appointment type on services page\n if (isVisible && field.appointment_type && currentPage === 'services') {\n const stored = sessionStorage.getItem('appointment_type');\n if (!stored) {\n sessionStorage.setItem('appointment_type', field.appointment_type);\n }\n }\n\n return isVisible;\n }\n\n // ── Rule Evaluators ───────────────────────────────────────────────────────\n\n function evaluateSimpleRule(targetField: string, expectedValue: string): boolean {\n const currentValue = formValues[targetField] ?? '';\n\n if (expectedValue === '*') {\n return currentValue !== '' && currentValue !== null && currentValue !== undefined;\n }\n\n // Support \"value1 OR value2 OR value3\" syntax\n if (typeof expectedValue === 'string' && expectedValue.includes(' OR ')) {\n const options = expectedValue.split(' OR ').map(s => s.trim());\n return options.some(opt => {\n if (opt === '*') return currentValue !== '' && currentValue != null;\n return String(currentValue) === opt;\n });\n }\n\n return String(currentValue) === String(expectedValue);\n }\n\n /**\n * Resolves the numeric value for comparison, handling date fields\n * by computing days-from-today.\n */\n function resolveNumericForComparison(fieldName: string, rawValue: string): number {\n // Check if this field is a date type\n const field = formFields.find(f => f.field === fieldName);\n if (field?.type === 'date' && rawValue) {\n const dateVal = new Date(rawValue);\n if (isValid(dateVal)) {\n const today = startOfDay(new Date());\n const target = startOfDay(dateVal);\n const diffMs = target.getTime() - today.getTime();\n return Math.round(diffMs / (1000 * 60 * 60 * 24));\n }\n }\n return Number(rawValue);\n }\n\n /**\n * Parses a custom expression string like \"< 29\", \"> 365\", \"> 29 and < 365\"\n * against a field's current value.\n */\n function evaluateCustomExpression(fieldName: string, expression: string): boolean {\n const rawValue = formValues[fieldName] ?? '';\n\n if (expression === '*') {\n return rawValue !== '' && rawValue != null;\n }\n\n // Handle compound \"and\" expressions: \"> 29 and < 365\"\n if (expression.includes(' and ')) {\n const parts = expression.split(' and ').map(s => s.trim());\n return parts.every(part => evaluateCustomExpression(fieldName, part));\n }\n\n // Parse operator + value: \"< 29\", \"> 365\", \"<= 10\", \">= 5\", \"== foo\", \"!= bar\"\n const match = expression.trim().match(/^([<>!=]=?)\\s*(.+)$/);\n if (match) {\n const [, operator, operand] = match;\n const numericValue = resolveNumericForComparison(fieldName, rawValue);\n const numericOperand = Number(operand.trim());\n\n switch (operator) {\n case '<': return numericValue < numericOperand;\n case '>': return numericValue > numericOperand;\n case '<=': return numericValue <= numericOperand;\n case '>=': return numericValue >= numericOperand;\n case '==': return String(rawValue) === operand.trim();\n case '!=': return String(rawValue) !== operand.trim();\n default: return false;\n }\n }\n\n // Plain string equality\n return String(rawValue) === expression.trim();\n }\n\n /**\n * Handles `custom` rule — API sends as object: { fieldName: \"expression\" }\n * e.g. { \"when_is_your_ceremony\": \"< 29\" }\n * ALL entries must pass (AND logic).\n */\n function evaluateCustomCondition(custom: unknown): boolean {\n // Handle array format (ConditionClause[])\n if (Array.isArray(custom)) {\n return custom.every((clause: ConditionClause) => evaluateClause(clause));\n }\n // Handle object format: { fieldName: expression }\n if (typeof custom === 'object' && custom !== null) {\n const entries = Object.entries(custom as Record<string, string>);\n return entries.every(([fieldName, expression]) =>\n evaluateCustomExpression(fieldName, String(expression))\n );\n }\n return false;\n }\n\n /**\n * Handles `custom_multiple_condition` — API sends as:\n * { conditions: [{ fieldName: value }, { fieldName: value }] }\n * ALL conditions must pass (AND logic).\n */\n function evaluateAndGroup(data: unknown): boolean {\n // Handle array format (ConditionClause[])\n if (Array.isArray(data)) {\n return data.every((clause: ConditionClause) => evaluateClause(clause));\n }\n // Handle object format: { conditions: [...] }\n if (typeof data === 'object' && data !== null && 'conditions' in (data as any)) {\n const conditions = (data as any).conditions as Record<string, string>[];\n return conditions.every(condObj => {\n const entries = Object.entries(condObj);\n return entries.every(([fieldName, expectedValue]) =>\n evaluateSimpleRule(fieldName, String(expectedValue))\n );\n });\n }\n return false;\n }\n\n /**\n * Handles `custom_multiple_conditions` — API sends as:\n * { groups: [{ conditions: [...] }, { conditions: [...] }] }\n * OR between groups, AND within each group.\n */\n function evaluateOrOfAndGroups(data: unknown): boolean {\n // Handle 2D array format\n if (Array.isArray(data)) {\n return data.some((group: ConditionClause[]) =>\n Array.isArray(group) && group.every((clause: ConditionClause) => evaluateClause(clause))\n );\n }\n // Handle object format: { groups: [{ conditions: [...] }, ...] }\n if (typeof data === 'object' && data !== null && 'groups' in (data as any)) {\n const groups = (data as any).groups as { conditions: Record<string, string>[] }[];\n return groups.some(group => {\n if (!group.conditions || !Array.isArray(group.conditions)) return false;\n return group.conditions.every(condObj => {\n const entries = Object.entries(condObj);\n return entries.every(([fieldName, expectedValue]) =>\n evaluateSimpleRule(fieldName, String(expectedValue))\n );\n });\n });\n }\n return false;\n }\n\n function evaluateOrGroup(clauses: ConditionClause[]): boolean {\n return clauses.some(clause => evaluateClause(clause));\n }\n\n function evaluateClause(clause: ConditionClause): boolean {\n const rawValue = formValues[clause.field] ?? '';\n const operator = clause.operator ?? '==';\n\n if (clause.value === '*') {\n return rawValue !== '' && rawValue != null;\n }\n\n switch (operator) {\n case '==':\n return String(rawValue) === String(clause.value);\n case '!=':\n return String(rawValue) !== String(clause.value);\n case '>':\n return Number(rawValue) > Number(clause.value);\n case '<':\n return Number(rawValue) < Number(clause.value);\n case '>=':\n return Number(rawValue) >= Number(clause.value);\n case '<=':\n return Number(rawValue) <= Number(clause.value);\n default:\n return false;\n }\n }\n\n // ── Visibility Helpers ────────────────────────────────────────────────────\n\n function checkAllLookupsSuccessful(excludeFieldName: string): boolean {\n const allLookupFields = formFields.filter(\n f => f.lookup?.aws_table && f.page === currentPage\n );\n\n const visibleLookupFields = allLookupFields.filter(\n f => (f.visible === true || f.is_visible === true) && f.field !== excludeFieldName\n );\n\n if (visibleLookupFields.length === 0) return false;\n\n return visibleLookupFields.every(f => f.lookupSuccess === true);\n }\n\n function resolveDynamicTitle(field: SchemaField): void {\n const TOKEN_REGEX = /\\{([^}]+)\\}/g;\n field.rendered_title = field.title.replace(TOKEN_REGEX, (_, fieldName: string) => {\n const value = formValues[fieldName];\n return value != null && value !== '' ? String(value) : '';\n });\n }\n\n function isAppointmentTypeFiltered(field: SchemaField): boolean {\n if (currentPage !== 'booking-details') return false;\n if (!field.appointment_type) return false;\n const storedType = sessionStorage.getItem('appointment_type');\n if (!storedType) return false;\n return field.appointment_type !== storedType;\n }\n\n function evaluateLegacyConditional(field: SchemaField): boolean {\n if (!field.conditional) {\n resolveDynamicTitle(field);\n fireVisibleSideEffects(field, true);\n return true;\n }\n\n if (!field.trigger || !field.trigger_value) {\n return true;\n }\n\n const triggerFields = field.trigger.split('|');\n const triggerExpressions = String(field.trigger_value).split('|');\n\n const results: boolean[] = [];\n\n triggerFields.forEach((triggerFieldName, i) => {\n const expression = triggerExpressions[i] ?? '';\n const parts = expression.split('&');\n\n for (const part of parts) {\n const trimmedPart = part.trim();\n const parentValue = formValues[triggerFieldName] ?? '';\n\n if (trimmedPart === '*') {\n results.push(parentValue !== '' && parentValue != null && parentValue !== undefined);\n continue;\n }\n\n const firstChar = trimmedPart[0];\n\n if (['<', '>', '!'].includes(firstChar)) {\n const operand = Number(trimmedPart.substring(1));\n const numericParentValue = Number(parentValue);\n\n switch (firstChar) {\n case '<':\n if (numericParentValue < operand) results.push(true);\n break;\n case '>':\n if (numericParentValue > operand) results.push(true);\n break;\n case '!':\n if (String(parentValue) !== String(operand)) results.push(true);\n break;\n }\n } else {\n results.push(String(parentValue) === String(trimmedPart));\n }\n }\n });\n\n const isVisible = results.filter(Boolean).length >= 1;\n\n fireVisibleSideEffects(field, isVisible);\n\n return isVisible;\n }\n\n // ── Booking Side Effects ────────────────────────────────────────────────\n\n const BOOKER_FIELD_KEYS = [\n 'booker_first_name',\n 'booker_last_name',\n 'booker_email',\n 'booker_phone',\n ] as const;\n\n type BookerFieldKey = typeof BOOKER_FIELD_KEYS[number];\n\n function fireVisibleSideEffects(field: SchemaField, isVisible: boolean): void {\n if (isVisible) {\n handleCompanySet(field);\n handleServiceSet(field);\n handleResourceSet(field);\n handleStaffSet(field);\n handleAddDuration(field);\n handleBookerFields(field);\n handleCopyData(field);\n handleAppointmentTypeStore(field);\n } else {\n handleRemoveDuration(field);\n }\n }\n\n function handleCompanySet(field: SchemaField): void {\n if (!field.company_set || !field.company_set.length) return;\n const formService = formServicesRef.current[formId] ??= {};\n if (formService.company_id === field.company_set) return;\n formService.company_id = field.company_set;\n field.company_id = field.company_set;\n onCompanySet?.(field.company_set);\n }\n\n function handleServiceSet(field: SchemaField): void {\n if (!field.service_set) return;\n const formService = formServicesRef.current[formId] ??= {};\n if (formService.service_id === field.service_set) return;\n formService.service_id = field.service_set;\n field.service_id = field.service_set;\n onServiceSet?.(field.service_set);\n }\n\n function handleResourceSet(field: SchemaField): void {\n if (!field.resource_set || !field.resource_set.length) return;\n const formService = formServicesRef.current[formId] ??= {};\n if (formService.resource_id === field.resource_set) return;\n formService.resource_id = field.resource_set;\n field.resource_id = field.resource_set;\n onResourceSet?.(field.resource_set);\n }\n\n function handleStaffSet(field: SchemaField): void {\n if (!field.staff_set || !field.staff_set.length) return;\n onStaffSet?.(field.staff_set);\n }\n\n function handleAddDuration(field: SchemaField): void {\n if (!field.add_duration) return;\n if (field.duration_added) return;\n field.duration_added = true;\n onAddDuration?.(field.add_duration);\n }\n\n function handleRemoveDuration(field: SchemaField): void {\n if (!field.add_duration) return;\n if (!field.duration_added) return;\n field.duration_added = false;\n onAddDuration?.(String(-Number(field.add_duration)));\n }\n\n function handleBookerFields(field: SchemaField): void {\n for (const key of BOOKER_FIELD_KEYS) {\n const isMarked = (field as unknown as Record<string, unknown>)[key] === true || (field as unknown as Record<string, unknown>)[key] === 'true';\n if (!isMarked) continue;\n const value = formValues[field.field];\n if (value) {\n onUpdateDatastore?.({ [key]: value } as Record<BookerFieldKey, string>);\n }\n }\n }\n\n function handleCopyData(field: SchemaField): void {\n const copyData = field.copy_data;\n if (!copyData?.from || !copyData?.to) return;\n\n const currentValue = formValues[field.field] ?? '';\n\n let shouldCopy: boolean;\n if (copyData.answer !== undefined && copyData.answer !== null) {\n shouldCopy = String(currentValue) === String(copyData.answer);\n } else {\n shouldCopy = currentValue !== '' && currentValue != null;\n }\n\n if (!shouldCopy) return;\n\n copyData.from.forEach((fromFieldName, index) => {\n const toFieldName = copyData.to[index];\n if (!toFieldName) return;\n\n const sourceValue = formValues[fromFieldName] ?? getStoredAnswer(formId, fromFieldName);\n if (sourceValue == null || sourceValue === '') return;\n\n if (toFieldName in formValues) {\n const existingValue = formValues[toFieldName];\n if (!existingValue) {\n setFormValues(prev => ({ ...prev, [toFieldName]: sourceValue }));\n }\n }\n\n persistAnswer(formId, toFieldName, sourceValue);\n });\n }\n\n function handleAppointmentTypeStore(field: SchemaField): void {\n if (!field.appointment_type) return;\n if (currentPage !== 'services') return;\n const existing = sessionStorage.getItem('appointment_type');\n if (!existing) {\n sessionStorage.setItem('appointment_type', field.appointment_type);\n }\n }\n\n // ── Extra Items & Fees ──────────────────────────────────────────────────\n\n /**\n * Manages the extra item lifecycle for a single field.\n * Fetches item properties from the API, tracks quantities, and emits\n * add/remove/change events to the parent.\n */\n async function setExtraItems(field: SchemaField): Promise<void> {\n if (field.page !== currentPage) return;\n if (!field.visible && !field.is_visible) return;\n\n let extraItemId = field['extra-item'] ?? '';\n const serviceId = field['service-id'] ?? '';\n\n if (field.resource_ids) {\n const activeResourceId = formServicesRef.current[formId]?.resource_id;\n if (activeResourceId) {\n const resourceEntry = field.resource_ids[activeResourceId];\n if (resourceEntry?.['extra-item']) {\n extraItemId = resourceEntry['extra-item'];\n }\n }\n }\n\n if (!extraItemId) return;\n\n const rawValue = field.type === 'heading' ? '1' : (formValues[field.field] ?? '0');\n const numericValue = Number(rawValue);\n\n let shouldBeActive: boolean;\n\n if (isNaN(numericValue)) {\n const boolResult = evaluateBooleanCondition(rawValue);\n if (boolResult !== undefined) {\n shouldBeActive = boolResult;\n } else {\n const firstShowKey = field.show ? Object.keys(field.show)[0] : null;\n shouldBeActive = firstShowKey != null\n ? String(field.show![firstShowKey as keyof ShowRules]) === String(rawValue)\n : false;\n }\n } else {\n shouldBeActive = numericValue > 0;\n }\n\n const existingEntry = extraItemsRef.current.find(\n item => item.extraItemId === extraItemId\n );\n\n if (!existingEntry) {\n // Case 1: Item is not yet tracked\n if (!shouldBeActive) return;\n\n const activeServiceId = formServicesRef.current[formId]?.service_id;\n if (!activeServiceId) {\n console.error(\n '[FormBuilder] Cannot fetch extra item — no service_id set for form:',\n formId\n );\n return;\n }\n\n if (pendingExtraItemFetchesRef.current.has(extraItemId)) {\n console.log('[FormBuilder] Skipping duplicate extra item fetch for:', extraItemId);\n return;\n }\n\n pendingExtraItemFetchesRef.current.add(extraItemId);\n onProcessing?.(true);\n\n const result = await getExtraItemProperties(\n extraItemId,\n companyId,\n activeServiceId,\n appConfig\n );\n\n pendingExtraItemFetchesRef.current.delete(extraItemId);\n\n if (isApiError(result)) {\n console.error('[FormBuilder] Failed to fetch extra item:', result.message);\n onProcessing?.(false);\n return;\n }\n\n const qty = field.type === 'heading' ? 1 : numericValue;\n\n extraItemsRef.current.push({\n field: field.field,\n serviceId,\n extraItemId,\n qty,\n });\n\n onExtraItemSet?.({\n item_id: extraItemId,\n item: { ...result, qty, field: field.field },\n });\n\n onProcessing?.(false);\n\n } else if (!shouldBeActive) {\n // Case 2: Item tracked but should be removed\n extraItemsRef.current = extraItemsRef.current.filter(\n item => item.extraItemId !== extraItemId\n );\n onExtraItemSet?.({ item_id: extraItemId, item: null });\n\n } else if (existingEntry.qty !== numericValue && field.type !== 'heading') {\n // Case 3: Quantity changed\n extraItemsRef.current = extraItemsRef.current.filter(\n item => item.extraItemId !== extraItemId\n );\n\n const updatedEntry: ExtraItemEntry = {\n field: field.field,\n serviceId,\n extraItemId,\n qty: numericValue,\n };\n\n extraItemsRef.current.push(updatedEntry);\n onExtraItemChanged?.({ item_id: extraItemId, item: updatedEntry });\n }\n // Case 4: No change → no-op\n }\n\n /**\n * Attempts to interpret a string value as a boolean.\n * Returns undefined if the value cannot be classified.\n */\n function evaluateBooleanCondition(value: string): boolean | undefined {\n const normalised = value?.toLowerCase().trim();\n if (['true', 'yes', '1'].includes(normalised)) return true;\n if (['false', 'no', '0', ''].includes(normalised)) return false;\n return undefined;\n }\n\n // ── Address Lookup ─────────────────────────────────────────────────────\n\n /**\n * UK postcode regex covering all valid Royal Mail formats including GIR 0AA.\n */\n const UK_POSTCODE_REGEX =\n /^([Gg][Ii][Rr] 0[Aa]{2}|((([A-Za-z][0-9]{1,2})|([A-Za-z][A-HJ-Ya-hj-y][0-9]{1,2})|([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-HJ-Ya-hj-y][0-9]?[A-Za-z]))\\s?[0-9][A-Za-z]{2}))$/;\n\n function isValidUkPostcode(postcode: string): boolean {\n return UK_POSTCODE_REGEX.test(postcode.trim());\n }\n\n /**\n * Applies a partial update to a single field in the formFields state array.\n */\n function updateFieldState(fieldName: string, updates: Partial<SchemaField>): void {\n setFormFields(prev =>\n prev.map(f => (f.field === fieldName ? { ...f, ...updates } : f))\n );\n }\n\n /**\n * Validates the postcode, calls the address API, and populates\n * field.addresses with the results.\n */\n async function performAddressLookup(fieldName: string): Promise<void> {\n const field = formFields.find(f => f.field === fieldName);\n if (!field) return;\n\n const postcodeKey = `${fieldName}_postcode`;\n const postcodeValue = (formValues[postcodeKey] ?? '').trim();\n\n updateFieldState(fieldName, { badPostcode: false, addresses: undefined });\n\n if (!postcodeValue) {\n updateFieldState(fieldName, { badPostcode: true });\n return;\n }\n\n if (!isValidUkPostcode(postcodeValue)) {\n console.error(`[FormBuilder] Invalid postcode format for field \"${fieldName}\": ${postcodeValue}`);\n updateFieldState(fieldName, { badPostcode: true });\n return;\n }\n\n updateFieldState(fieldName, { addressLoading: true });\n onProcessing?.(true);\n\n const result = await getAddressLookup(postcodeValue, appConfig);\n\n if (isApiError(result)) {\n console.error('[FormBuilder] Address lookup failed:', result.message);\n updateFieldState(fieldName, { addressLoading: false, badPostcode: true });\n onProcessing?.(false);\n return;\n }\n\n const addresses = result.map(item => ({\n address: item.DPA ?? item.LPI ?? { ADDRESS: '' },\n }));\n\n updateFieldState(fieldName, { addressLoading: false, addresses });\n onProcessing?.(false);\n }\n\n /**\n * Sets the selected address value on the main form control and emits\n * onAddressSet to the parent booking context.\n */\n function handleAddressSelected(event: React.ChangeEvent<HTMLSelectElement>, fieldName: string): void {\n const selectedAddress = event.target.value;\n\n setFieldValue(fieldName, selectedAddress);\n updateFieldState(fieldName, { selected_address: selectedAddress });\n onAddressSet?.(selectedAddress);\n }\n\n // ── AWS Eligibility Lookup ──────────────────────────────────────────────\n\n /**\n * Validates a reference number against a DynamoDB eligibility table.\n * Handles primary/secondary match fields, name mismatch detection,\n * and used-reference detection.\n */\n async function performAwsLookup(fieldName: string): Promise<void> {\n const field = formFields.find(f => f.field === fieldName);\n if (!field?.lookup?.aws_table) return;\n\n const lookup = field.lookup;\n const matchFields = lookup.match ?? [];\n\n updateFieldState(fieldName, {\n lookupError: false,\n lookupUsed: false,\n lookupLoading: true,\n lookupResponse: null,\n lookupNameMismatch: false,\n });\n\n let primaryReference = '';\n let primaryDynamoField = '';\n let secondaryReference = '';\n let secondaryDynamoField = '';\n\n for (const match of matchFields) {\n const { form_field, dynamodb_field } = match;\n const value = formValues[form_field] ?? getStoredAnswer(formId, form_field) ?? '';\n\n if (form_field === fieldName) {\n primaryReference = value;\n primaryDynamoField = dynamodb_field;\n } else if (!secondaryReference) {\n secondaryReference = value;\n secondaryDynamoField = dynamodb_field;\n }\n }\n\n if (!primaryReference) {\n console.error(`[FormBuilder] No reference value for field \"${fieldName}\"`);\n updateFieldState(fieldName, { lookupError: true, lookupLoading: false });\n return;\n }\n\n const result = await awsLookup(\n appConfig,\n lookup.aws_table,\n primaryDynamoField,\n primaryReference,\n secondaryReference || undefined,\n secondaryDynamoField || undefined\n );\n\n if (isApiError(result)) {\n console.error(`[FormBuilder] AWS lookup error for field \"${fieldName}\":`, result.message);\n updateFieldState(fieldName, { lookupError: true, lookupLoading: false });\n return;\n }\n\n updateFieldState(fieldName, { lookupLoading: false });\n\n if (result.custom_response_code !== 1) {\n updateFieldState(fieldName, { lookupError: true });\n return;\n }\n\n if (result.reference?.used === true) {\n updateFieldState(fieldName, { lookupUsed: true, lookupError: true });\n return;\n }\n\n if (secondaryReference && secondaryDynamoField === 'name' && result.reference?.name) {\n const responseName = result.reference.name.toLowerCase().trim();\n const enteredName = secondaryReference.toLowerCase().trim();\n if (responseName !== enteredName) {\n updateFieldState(fieldName, { lookupNameMismatch: true, lookupError: true });\n return;\n }\n }\n\n // Success: mark secondary match fields as validated\n const updatedFields = formFields.map(f => {\n const isSecondaryMatch = matchFields.some(\n m => m.form_field === f.field && m.form_field !== fieldName\n );\n return isSecondaryMatch ? { ...f, lookupValidated: true } : f;\n });\n\n const storedFieldKey = lookup.store_response_field;\n let resolvedValue: string;\n if (storedFieldKey && result.reference?.[storedFieldKey]) {\n resolvedValue = String(result.reference[storedFieldKey]);\n } else if (result.reference?.home_office) {\n resolvedValue = result.reference.home_office;\n } else {\n resolvedValue = primaryReference;\n }\n\n setFormFields(\n updatedFields.map(f =>\n f.field === fieldName\n ? {\n ...f,\n lookupSuccess: true,\n lookupError: false,\n lookupLoading: false,\n lookupResponse: result.reference ?? null,\n }\n : f\n )\n );\n\n setFieldValue(fieldName, resolvedValue);\n\n onAwsLookupSet?.({\n field: fieldName,\n reference: result.reference ?? null,\n success: true,\n });\n\n onUpdateDatastore?.({\n type: 'lookupResponse',\n field: fieldName,\n lookupResponse: result.reference as Record<string, unknown>,\n });\n\n refreshVisibility();\n }\n\n /**\n * Resets a lookup field and all its secondary match fields to initial state.\n */\n function clearAwsLookup(fieldName: string): void {\n const field = formFields.find(f => f.field === fieldName);\n if (!field) return;\n\n const matchFields = field.lookup?.match ?? [];\n\n const updatedFields = formFields.map(f => {\n const isSecondaryMatch = matchFields.some(\n m => m.form_field === f.field && m.form_field !== fieldName\n );\n if (isSecondaryMatch) {\n return { ...f, lookupValidated: false };\n }\n if (f.field === fieldName) {\n return {\n ...f,\n lookupError: false,\n lookupUsed: false,\n lookupLoading: false,\n lookupResponse: null,\n lookupSuccess: false,\n lookupNameMismatch: false,\n };\n }\n return f;\n });\n\n setFormFields(updatedFields);\n\n const secondaryMatchFieldNames = matchFields\n .filter(m => m.form_field !== fieldName)\n .map(m => m.form_field);\n\n setFormValues(prev => {\n const next = { ...prev };\n for (const name of secondaryMatchFieldNames) {\n next[name] = '';\n }\n return next;\n });\n\n setFieldValue(fieldName, '');\n\n onAwsLookupSet?.({ field: fieldName, reference: null, success: false });\n }\n\n // ── Venue Search ──────────────────────────────────────────────────────────\n\n const VENUE_SEARCH_DEBOUNCE_MS = 500;\n\n /**\n * Debounced handler for venue search input events.\n * Updates the search text and, after the debounce period, calls the API.\n */\n async function handleVenueSearchInput(\n event: React.KeyboardEvent<HTMLInputElement>,\n field: SchemaField\n ): Promise<void> {\n const IGNORED_KEYS = new Set([\n 'ArrowUp', 'ArrowDown', 'Enter', 'Escape',\n 'Tab', 'Shift', 'Control', 'Alt', 'Meta',\n ]);\n\n if (IGNORED_KEYS.has(event.key)) return;\n\n // Reset selection state when the user starts typing again\n updateFieldState(field.field, {\n selected_resource: undefined,\n searching: true,\n noResults: false,\n answer: undefined,\n });\n\n if (venueSearchTimerRef.current) {\n clearTimeout(venueSearchTimerRef.current);\n }\n\n venueSearchTimerRef.current = setTimeout(async () => {\n const query = (event.target as HTMLInputElement).value.trim();\n setSearchText(query);\n\n if (!query) {\n setSuggestions([]);\n updateFieldState(field.field, { searching: false });\n return;\n }\n\n try {\n const result = await searchVenue(companyId, query, appConfig);\n\n if (isApiError(result)) {\n console.error('[FormBuilder] Venue search failed:', result.message);\n updateFieldState(field.field, { searching: false, noResults: true });\n setSuggestions([]);\n return;\n }\n\n let venues: VenueResult[] = result;\n\n // Client-side filtering by venue_type when filter_by is configured\n if (field.filter_by) {\n const filterValue = (formValues[field.filter_by] ?? '').toLowerCase().trim();\n if (filterValue) {\n venues = venues.filter(\n v => v.venue_type?.toLowerCase().trim() === filterValue\n );\n }\n }\n\n setSuggestions(venues);\n updateFieldState(field.field, {\n searching: false,\n noResults: venues.length === 0,\n });\n } catch (err) {\n console.error('[FormBuilder] Venue search error:', err);\n setSuggestions([]);\n updateFieldState(field.field, { searching: false, noResults: true });\n }\n }, VENUE_SEARCH_DEBOUNCE_MS);\n }\n\n /**\n * Called when the user clicks or activates a suggestion in the list.\n * Sets the form value, stores the venue object on the field, and notifies the parent.\n */\n function selectVenueSuggestion(suggestion: VenueResult, field: SchemaField): void {\n setSuggestions([]);\n\n const displayName = suggestion.pretty_name ?? suggestion.venue_name;\n setSearchText(displayName);\n\n updateFieldState(field.field, {\n selected_resource: suggestion,\n answer: displayName,\n searching: false,\n noResults: false,\n });\n\n setFieldValue(field.field, displayName);\n\n onVenueSet?.({\n venue: suggestion,\n field: field.field,\n companyId: suggestion.company_id,\n resourceId: suggestion.resource_id,\n });\n }\n\n /**\n * Clears the venue selection and resets search state.\n * Emits onVenueSet with null to inform the parent the selection was removed.\n */\n function clearVenueSearch(field: SchemaField): void {\n if (venueSearchTimerRef.current) {\n clearTimeout(venueSearchTimerRef.current);\n }\n\n setSearchText('');\n setSuggestions([]);\n\n updateFieldState(field.field, {\n selected_resource: undefined,\n searching: false,\n noResults: false,\n answer: undefined,\n });\n\n setFieldValue(field.field, '');\n\n onVenueSet?.({ venue: null, field: field.field });\n }\n\n // ── Field Change Handler ─────────────────────────────────────────────────\n\n function handleFieldChange(fieldName: string, value: string): void {\n setFormValues(prev => ({ ...prev, [fieldName]: value }));\n persistAnswer(formId, fieldName, value);\n }\n\n // ── Form Errors (computed from current state) ────────────────────────────\n\n const formErrors: Record<string, boolean> = {};\n for (const field of formFields) {\n if (field.page !== currentPage) continue;\n if (!field.visible && !field.is_visible) continue;\n const value = formValues[field.field] ?? '';\n const error = validateField(field, value);\n if (error) formErrors[field.field] = true;\n }\n\n // ── Field Wrapper ─────────────────────────────────────────────────────────\n\n function getFieldWrapperClassName(field: SchemaField): string {\n const classes = ['govuk-form-group'];\n\n const isInvalid =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n if (isInvalid) {\n classes.push('govuk-form-group--error');\n }\n\n const isHidden =\n field.hidden_field ||\n (field.rules_count > 0 && !field.is_visible) ||\n field.lookupValidated;\n\n if (isHidden) {\n classes.push('hidden-field');\n }\n\n return classes.join(' ');\n }\n\n // ── Render Helpers ──────────────────────────────────────────────────────\n\n function renderLabel(field: SchemaField): React.ReactElement {\n return (\n <div className=\"govuk-label-wrapper\">\n <label className=\"govuk-label govuk-label--m\" htmlFor={field.field}>\n {field.rendered_title ?? field.title}\n {field.required && ' *'}\n </label>\n </div>\n );\n }\n\n function renderHint(field: SchemaField): React.ReactElement | null {\n if (!field.helptext) return null;\n return <div id={`${field.field}-hint`} className=\"govuk-hint\" dangerouslySetInnerHTML={{ __html: field.helptext }} />;\n }\n\n function renderErrors(field: SchemaField): React.ReactElement | null {\n if (!shouldShowError(field.field)) return null;\n const error = validateField(field, formValues[field.field] ?? '');\n if (!error) return null;\n return (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n {getErrorMessage(error)}\n </p>\n );\n }\n\n // ── Field Renderers ─────────────────────────────────────────────────────\n\n function renderField(field: SchemaField): React.ReactElement | null {\n switch (field.type) {\n case 'text':\n case 'number':\n case 'email':\n case 'date':\n return renderTextualField(field);\n case 'textarea':\n return renderTextarea(field);\n case 'radio':\n return renderRadio(field);\n case 'checkbox':\n return renderCheckbox(field);\n case 'dropdown':\n return renderDropdown(field);\n case 'heading':\n return renderHeading(field);\n case 'submit':\n return renderSubmitField(field);\n default:\n return null;\n }\n }\n\n function renderTextualField(field: SchemaField): React.ReactElement {\n return (\n <>\n {renderLabel(field)}\n {renderHint(field)}\n {renderErrors(field)}\n {field.address_lookup\n ? renderAddressLookup(field)\n : field.lookup?.aws_table\n ? renderAwsLookup(field)\n : field.resource_lookup\n ? renderVenueSearch(field)\n : renderPlainInput(field)}\n </>\n );\n }\n\n function renderPlainInput(field: SchemaField): React.ReactElement {\n const isError =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n const inputProps: React.InputHTMLAttributes<HTMLInputElement> = {\n id: field.field,\n type: getInputType(field),\n 'aria-required': field.required,\n value: formValues[field.field] ?? '',\n className: ['govuk-input', isError ? 'govuk-input--error' : ''].join(' ').trim(),\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFieldChange(field.field, e.target.value);\n markAsDirty(field.field);\n },\n onBlur: () => markAsTouched(field.field),\n };\n\n if (field.type === 'date' && field.hide_dates_in_future) {\n inputProps.max = new Date().toISOString().split('T')[0];\n }\n\n return <input {...inputProps} />;\n }\n\n function renderTextarea(field: SchemaField): React.ReactElement {\n const isError =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n return (\n <>\n {renderLabel(field)}\n {renderHint(field)}\n {renderErrors(field)}\n <textarea\n id={field.field}\n className={['govuk-textarea', isError ? 'govuk-textarea--error' : ''].join(' ').trim()}\n rows={5}\n aria-required={field.required}\n value={formValues[field.field] ?? ''}\n onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n handleFieldChange(field.field, e.target.value);\n markAsDirty(field.field);\n }}\n onBlur={() => markAsTouched(field.field)}\n />\n </>\n );\n }\n\n function renderRadio(field: SchemaField): React.ReactElement {\n const isError =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n return (\n <div className=\"govuk-form-group\">\n <fieldset className=\"govuk-fieldset\" aria-required={field.required}>\n <legend className=\"govuk-fieldset__legend govuk-fieldset__legend--m govuk-fieldset__legend--m-inverse\">\n {field.rendered_title ?? field.title}\n {field.required && ' *'}\n </legend>\n {renderHint(field)}\n {isError && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n {getErrorMessage(validateField(field, formValues[field.field] ?? '')!)}\n </p>\n )}\n <div className=\"govuk-radios\">\n {(field.radio_options ?? []).map(option => (\n <div className=\"govuk-radios__item\" key={option.value}>\n <input\n className=\"govuk-radios__input\"\n type=\"radio\"\n id={`${field.field}_${option.value}`}\n name={field.field}\n value={option.value}\n checked={formValues[field.field] === option.value}\n onChange={() => {\n handleFieldChange(field.field, option.value);\n markAsDirty(field.field);\n markAsTouched(field.field);\n }}\n />\n <label className=\"govuk-label govuk-radios__label\" htmlFor={`${field.field}_${option.value}`}>\n {option.title}\n </label>\n </div>\n ))}\n </div>\n </fieldset>\n </div>\n );\n }\n\n function renderCheckbox(field: SchemaField): React.ReactElement {\n const isError =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n return (\n <div className=\"govuk-form-group\">\n {renderHint(field)}\n {isError && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n This field is required.\n </p>\n )}\n <div className=\"govuk-checkboxes\">\n <div className=\"govuk-checkboxes__item\">\n <input\n className=\"govuk-checkboxes__input\"\n id={field.field}\n type=\"checkbox\"\n checked={formValues[field.field] === 'true'}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n handleFieldChange(field.field, String(e.target.checked));\n markAsDirty(field.field);\n markAsTouched(field.field);\n }}\n />\n <label className=\"govuk-label govuk-checkboxes__label govuk-label--m--inverse\" htmlFor={field.field}>\n {field.rendered_title ?? field.title}\n {field.required && ' *'}\n </label>\n </div>\n </div>\n </div>\n );\n }\n\n function renderDropdown(field: SchemaField): React.ReactElement {\n const isError =\n shouldShowError(field.field) &&\n validateField(field, formValues[field.field] ?? '') != null;\n\n return (\n <>\n {renderLabel(field)}\n {renderHint(field)}\n {renderErrors(field)}\n <select\n id={field.field}\n className={['govuk-select govuk-select--inverse', isError ? 'govuk-select--error' : ''].join(' ').trim()}\n aria-required={field.required ? 'true' : undefined}\n value={formValues[field.field] ?? ''}\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {\n handleFieldChange(field.field, e.target.value);\n markAsDirty(field.field);\n markAsTouched(field.field);\n }}\n >\n <option value=\"\">Please select</option>\n {(field.options ?? [])\n .filter(opt => opt.visible)\n .map(opt => (\n <option key={opt.value} value={opt.value}>{opt.title}</option>\n ))}\n </select>\n </>\n );\n }\n\n function renderHeading(field: SchemaField): React.ReactElement | null {\n const componentType = field.component_type;\n\n if (componentType === 'govbook-warning_box') {\n return (\n <div className=\"warning-box\">\n <div className=\"content\">\n <span className=\"warning-box__title\">{field.rendered_title ?? field.title}</span>\n <span className=\"warning-box__message\" dangerouslySetInnerHTML={{ __html: field.component_text ?? '' }} />\n </div>\n </div>\n );\n }\n\n if (componentType === 'govbook-information_box') {\n return (\n <div className=\"information-box\">\n <div className=\"content\">\n <span className=\"information-box__title\">{field.rendered_title ?? field.title}</span>\n <span className=\"information-box__message\" dangerouslySetInnerHTML={{ __html: field.component_text ?? '' }} />\n </div>\n </div>\n );\n }\n\n if (componentType === 'body') {\n return <div className=\"govuk-body govuk-body--inverse\" dangerouslySetInnerHTML={{ __html: field.component_text ?? '' }} />;\n }\n\n return (\n <>\n <h3 className=\"govuk-heading-m govuk-heading-m--inverse\">{field.rendered_title ?? field.title}</h3>\n {renderHint(field)}\n </>\n );\n }\n\n function renderSubmitField(field: SchemaField): React.ReactElement | null {\n return (\n <>\n {renderHint(field)}\n {showSubmit && (\n <div>\n <button type=\"button\" className=\"nhsuk-button govuk-button\" onClick={handleSubmit}>\n {field.rendered_title ?? field.title}\n </button>\n </div>\n )}\n </>\n );\n }\n\n // ── Address Lookup Renderer ─────────────────────────────────────────────\n\n function renderAddressLookup(field: SchemaField): React.ReactElement {\n return (\n <div className=\"address-lookup\">\n <div className=\"govuk-input__wrapper\">\n <div className=\"govuk-form-group\">\n <input\n id={`${field.field}_postcode`}\n type=\"text\"\n value={formValues[`${field.field}_postcode`] ?? ''}\n onChange={e => handleFieldChange(`${field.field}_postcode`, e.target.value)}\n className={['govuk-input', field.badPostcode ? 'govuk-input--error' : ''].join(' ').trim()}\n />\n </div>\n <button\n type=\"button\"\n className=\"govuk-button govuk-button--secondary\"\n disabled={field.addressLoading}\n onClick={() => performAddressLookup(field.field)}\n >\n {field.addressLoading ? 'Searching...' : 'Find address'}\n </button>\n </div>\n\n {field.badPostcode && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n Please enter a valid UK postcode.\n </p>\n )}\n\n {field.addresses && field.addresses.length > 0 && (\n <div className=\"govuk-form-group\">\n <label className=\"govuk-label\" htmlFor={`${field.field}_select`}>Select address below</label>\n <select\n id={`${field.field}_select`}\n className=\"govuk-select\"\n onChange={e => handleAddressSelected(e, field.field)}\n >\n <option value=\"\">Select address</option>\n {field.addresses.map((item, idx) => (\n <option key={idx} value={item.address.ADDRESS}>{item.address.ADDRESS}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n );\n }\n\n // ── AWS Lookup Renderer ─────────────────────────────────────────────────\n\n function renderAwsLookup(field: SchemaField): React.ReactElement {\n return (\n <div className=\"aws-lookup\">\n {!field.lookupSuccess && (\n <>\n <div className=\"govuk-input__wrapper\">\n <input\n id={field.field}\n type={field.type}\n aria-required={field.required}\n value={formValues[field.field] ?? ''}\n onChange={e => handleFieldChange(field.field, e.target.value)}\n className={['govuk-input', field.lookupError || formErrors[field.field] ? 'govuk-input--error' : ''].join(' ').trim()}\n />\n </div>\n <div className=\"govuk-button-group\">\n <button\n type=\"button\"\n className=\"govuk-button govuk-button--secondary lookup-reference\"\n disabled={field.lookupLoading}\n onClick={() => performAwsLookup(field.field)}\n >\n {field.lookupLoading ? 'Checking...' : 'Check reference'}\n </button>\n </div>\n </>\n )}\n\n {field.lookupLoading && <div className=\"govuk-hint\">Checking reference...</div>}\n\n {field.lookupError && !field.lookupUsed && !field.lookupNameMismatch && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n Reference not found. Please check and try again.\n </p>\n )}\n {field.lookupUsed && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n This reference has already been used.\n </p>\n )}\n {field.lookupNameMismatch && (\n <p className=\"govuk-error-message\">\n <span className=\"govuk-visually-hidden\">Error:</span>\n The name does not match the reference. Please check and try again.\n </p>\n )}\n\n {field.lookupSuccess && field.lookupResponse && (\n <div className=\"govuk-inset-text\">\n <p className=\"govuk-body\"><strong>Reference verified</strong></p>\n {field.lookupResponse.name && <p className=\"govuk-body\">Name: {field.lookupResponse.name}</p>}\n {field.lookupResponse.home_office && <p className=\"govuk-body\">Reference: {field.lookupResponse.home_office}</p>}\n <button type=\"button\" className=\"govuk-button govuk-button--secondary\" onClick={() => clearAwsLookup(field.field)}>\n Clear\n </button>\n </div>\n )}\n </div>\n );\n }\n\n // ── Venue Search Renderer ───────────────────────────────────────────────\n\n function renderVenueSearch(field: SchemaField): React.ReactElement {\n return (\n <div className=\"govuk-form-group resource-lookup\">\n <div className=\"govuk-input__wrapper\">\n <input\n id={field.field}\n type=\"text\"\n className=\"govuk-input govuk-input--with-clear\"\n value={searchText}\n placeholder=\"Start typing to search...\"\n autoComplete=\"off\"\n onChange={() => {}}\n onKeyDown={e => handleVenueSearchInput(e, field)}\n />\n {searchText && (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"govuk-input__suffix\"\n aria-label=\"Clear search\"\n onClick={() => clearVenueSearch(field)}\n onKeyDown={e => { if (e.key === 'Enter' || e.key === ' ') clearVenueSearch(field); }}\n >\n <b aria-hidden=\"true\">×</b>\n </div>\n )}\n </div>\n\n {field.searching && <span className=\"govuk-hint\">Searching…</span>}\n {field.noResults && <span className=\"govuk-hint\">No results found</span>}\n\n {suggestions.length > 0 && (\n <ul className=\"resource-suggestions\" role=\"listbox\">\n {suggestions.map((suggestion, idx) => (\n <li\n key={idx}\n role=\"option\"\n tabIndex={0}\n className=\"resource-suggestion\"\n onClick={() => selectVenueSuggestion(suggestion, field)}\n onKeyDown={e => { if (e.key === 'Enter') selectVenueSuggestion(suggestion, field); }}\n >\n {suggestion.pretty_name ?? suggestion.venue_name}\n </li>\n ))}\n </ul>\n )}\n\n {field.answer && field.selected_resource?.description && (\n <div className=\"selected-venue-detail\">\n <p className=\"govuk-label govuk-fieldset__legend--m pt-3\">Description</p>\n <p>{field.selected_resource.description}</p>\n {field.selected_resource.image && (\n <img className=\"selected-venue\" src={field.selected_resource.image} alt=\"\" />\n )}\n </div>\n )}\n </div>\n );\n }\n\n // ── Submit Handler ──────────────────────────────────────────────────────\n\n function handleSubmit(): void {\n const isFormValid = formFields\n .filter(f => f.show_on_this_page && (f.visible || f.is_visible))\n .every(f => validateField(f, formValues[f.field] ?? '') === null);\n\n if (!isFormValid) {\n markAllAsTouched();\n return;\n }\n\n onFormSubmit?.(formValues as Record<string, string>);\n onSchema?.(schema as unknown as Record<string, unknown>);\n }\n\n // ── Render ────────────────────────────────────────────────────────────────\n\n if (loading) {\n return <div className=\"govuk-body\">Loading form...</div>;\n }\n\n if (!formFields.length) {\n return null;\n }\n\n return (\n <form className=\"govuk-form\" onSubmit={e => { e.preventDefault(); handleSubmit(); }}>\n {formFields\n .filter(field => field.show_on_this_page)\n .map((field, index) => (\n <div key={field.field || index} className={getFieldWrapperClassName(field)}>\n {(field.is_visible || !field.rules_count) && renderField(field)}\n </div>\n ))}\n\n {showSubmit && (\n <button type=\"submit\" className=\"nhsuk-button govuk-button\">\n Continue\n </button>\n )}\n </form>\n );\n}\n"]}