@bookinglab/booking-ui-react 1.6.1 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -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"],"names":["jsxs","jsx","useState","useCallback","useEffect","forwardRef","useId","useImperativeHandle","cx"],"mappings":"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","file":"index.js","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 * Renders a single form field based on question type\n */\nfunction FormField({\n question,\n value,\n error,\n onChange,\n classNames,\n}: {\n question: Question;\n value: string | number | boolean | undefined;\n error?: string;\n onChange: (value: string | number | boolean) => void;\n classNames?: BookingFormClassNames;\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 <p className={classNames?.helpText ?? defaultHelpText}>{question.help_text}</p>;\n };\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 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 <h3 className={classNames?.heading ?? defaultHeading}>\n {question.name}\n </h3>\n );\n\n case 'text_field':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\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 {renderHelpText()}\n {renderError()}\n </div>\n );\n\n case 'text_area':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\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 {renderHelpText()}\n {renderError()}\n </div>\n );\n\n case 'select':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\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 {renderHelpText()}\n {renderError()}\n </div>\n );\n\n case 'date':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n <input\n id={inputId}\n type=\"date\"\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n min={question.settings?.min?.toString()}\n max={question.settings?.max?.toString()}\n className={inputClasses}\n {...ariaProps}\n />\n {renderHelpText()}\n {renderError()}\n </div>\n );\n\n case 'number':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\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 {renderHelpText()}\n {renderError()}\n </div>\n );\n\n case 'check':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\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 {renderHelpText()}\n {renderError()}\n </div>\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 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 // Check all conditions in conditional_answers\n // Each entry is { questionId: expectedAnswerValue }\n const conditionEntries = Object.entries(settings.conditional_answers as Record<string, unknown>);\n if (conditionEntries.length === 0) {\n return true;\n }\n\n // Question is visible if ANY condition is met\n return conditionEntries.some(([questionIdStr, expectedAnswer]) => {\n const questionId = Number(questionIdStr);\n const currentValue = (values as Record<string, unknown>)[String(questionId)];\n\n if (currentValue === undefined || currentValue === '' || currentValue === null) {\n return false;\n }\n\n // Selects typically store the option id (as string), but allow `{ id, name }` objects too\n const normalizedCurrent =\n typeof currentValue === 'object' && currentValue !== null && 'id' in (currentValue as any)\n ? (currentValue as any)\n : currentValue;\n\n // Build a set of candidate strings for comparison.\n // For select questions we support matching by BOTH option id and option name.\n const candidates = new Set<string>();\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 sourceQuestion = questions.find((q) => q.id === questionId);\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 if (sourceQuestion?.detail_type === 'select' && sourceQuestion.options?.length) {\n // Try to resolve the selected option via id or name.\n const currentStr = [...candidates][0] ?? '';\n const optionById = sourceQuestion.options.find((o) => String(o.id) === currentStr);\n const optionByName = sourceQuestion.options.find((o) => String(o.name).trim() === currentStr);\n const opt = optionById ?? optionByName;\n if (opt) {\n addCandidate(opt.id);\n addCandidate(opt.name);\n }\n }\n\n const matchesScalar = (expected: unknown) => {\n const expectedStr = String(expected).trim();\n return candidates.has(expectedStr);\n };\n\n // Support multiple expected formats:\n // - scalar: \"Consultation\" / \"1\" / 1 / true\n // - array: [\"Consultation\", \"Follow-up\"]\n // - map/object: { \"Consultation\": true }\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 // Get visible questions\n const visibleQuestions = questions.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 />\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 */\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: 'password',\n label: 'Password',\n type: 'password',\n required: false,\n },\n {\n name: 'phone',\n label: 'Contact number',\n type: 'tel',\n required: false,\n validate: phone,\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/**\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 * - 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 * />\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 },\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 // Merge fields with additional fields\n const allFields = additionalFields ? [...fields, ...additionalFields] : fields;\n\n /**\n * Validate a single field\n */\n const validateField = useCallback(\n (field: FieldConfig, value: string): 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 return field.validate(value);\n }\n return null;\n },\n []\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);\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);\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);\n if (!error) {\n setErrors((prev) => {\n const next = { ...prev };\n delete next[fieldName];\n return next;\n });\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 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);\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 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 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 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 },\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.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] ? 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] ? questionErrors[question.id] : undefined;\n const hasError = !!error;\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 onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n placeholder={question.settings?.placeholder}\n className={inputClasses(hasError)}\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 onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n placeholder={question.settings?.placeholder}\n rows={4}\n className={inputClasses(hasError)}\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 onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={inputClasses(hasError)}\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 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={inputClasses(hasError)}\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 onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={inputClasses(hasError)}\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 onChange={(e) => handleQuestionChange(question.id, e.target.checked)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={styles.checkbox}\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 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 <button type=\"submit\" className={styles.button}>\n {submitLabel}\n </button>\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"]}
1
+ {"version":3,"sources":["../src/components/BookingForm.tsx","../src/utils/validators.ts","../src/components/RegistrationForm.tsx","../src/components/ContactDetailsForm.tsx","../src/components/ResetPasswordForm.tsx"],"names":["jsxs","jsx","useState","useCallback","useEffect","forwardRef","useId","useImperativeHandle","cx"],"mappings":";;;;;;AAIA,IAAM,EAAA,GAAK,IAAI,OAAA,KAAoC,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAKnF,SAAS,SAAA,CAAU;AAAA,EACjB,QAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,OAAA,GAAU,CAAA,SAAA,EAAY,QAAA,CAAS,EAAE,CAAA,CAAA;AACvC,EAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,MAAA,CAAA;AAC1B,EAAA,MAAM,QAAA,GAAW,CAAC,CAAC,KAAA;AAGnB,EAAA,MAAM,mBAAA,GAAsB,MAAA;AAC5B,EAAA,MAAM,YAAA,GAAe,8CAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,0DAAA;AACvB,EAAA,MAAM,YAAA,GAAe,4KAAA;AACrB,EAAA,MAAM,iBAAA,GAAoB,mCAAA;AAC1B,EAAA,MAAM,eAAA,GAAkB,wEAAA;AACxB,EAAA,MAAM,eAAA,GAAkB,4BAAA;AACxB,EAAA,MAAM,gBAAA,GAAmB,2BAAA;AAEzB,EAAA,MAAM,YAAA,GAAe,QAAA,GACjB,EAAA,CAAG,UAAA,EAAY,KAAA,IAAS,YAAA,EAAc,UAAA,EAAY,UAAA,IAAc,iBAAiB,CAAA,GACjF,EAAA,CAAG,UAAA,EAAY,SAAS,YAAY,CAAA;AAExC,EAAA,MAAM,YAAA,GAAe,YAAY,KAAA,IAAS,YAAA;AAC1C,EAAA,MAAM,oBAAA,GAAuB,EAAA,CAAG,SAAA,EAAW,UAAA,EAAY,SAAS,eAAe,CAAA;AAE/E,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,QAAA,CAAS,WAAA,KAAgB,SAAA,EAAW,OAAO,IAAA;AAC/C,IAAA,uBACEA,eAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,WAAW,YAAA,EACjC,QAAA,EAAA;AAAA,MAAA,QAAA,CAAS,IAAA;AAAA,MACT,QAAA,CAAS,4BAAYC,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EAAoB,aAAA,EAAY,QAAO,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EAChF,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,IAAI,CAAC,QAAA,CAAS,SAAA,EAAW,OAAO,IAAA;AAChC,IAAA,sCAAQ,GAAA,EAAA,EAAE,SAAA,EAAW,YAAY,QAAA,IAAY,eAAA,EAAkB,mBAAS,SAAA,EAAU,CAAA;AAAA,EACpF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,IAAA,uBACEA,cAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,YAAY,SAAA,IAAa,gBAAA,EAAkB,IAAA,EAAK,OAAA,EACxE,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,cAAA,EAAgB,WAAW,IAAA,GAAO,MAAA;AAAA,IAClC,kBAAA,EAAoB,WAAW,OAAA,GAAU,MAAA;AAAA,IACzC,eAAA,EAAiB,SAAS,QAAA,IAAY;AAAA,GACxC;AAEA,EAAA,QAAQ,SAAS,WAAA;AAAa,IAC5B,KAAK,SAAA;AACH,MAAA,sCACG,IAAA,EAAA,EAAG,SAAA,EAAW,YAAY,OAAA,IAAW,cAAA,EACnC,mBAAS,IAAA,EACZ,CAAA;AAAA,IAGJ,KAAK,YAAA;AACH,MAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,UAAA,EAAY,gBAAgB,mBAAA,EACzC,QAAA,EAAA;AAAA,QAAA,WAAA,EAAY;AAAA,wBACbC,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,IAAA,EAAK,MAAA;AAAA,YACL,OAAQ,KAAA,IAAoB,EAAA;AAAA,YAC5B,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,WAAA,EAAa,SAAS,QAAA,EAAU,WAAA;AAAA,YAChC,SAAA,EAAW,YAAA;AAAA,YACV,GAAG;AAAA;AAAA,SACN;AAAA,QACC,cAAA,EAAe;AAAA,QACf,WAAA;AAAY,OAAA,EACf,CAAA;AAAA,IAGJ,KAAK,WAAA;AACH,MAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,UAAA,EAAY,gBAAgB,mBAAA,EACzC,QAAA,EAAA;AAAA,QAAA,WAAA,EAAY;AAAA,wBACbC,cAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,OAAQ,KAAA,IAAoB,EAAA;AAAA,YAC5B,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,WAAA,EAAa,SAAS,QAAA,EAAU,WAAA;AAAA,YAChC,IAAA,EAAM,CAAA;AAAA,YACN,SAAA,EAAW,YAAA;AAAA,YACV,GAAG;AAAA;AAAA,SACN;AAAA,QACC,cAAA,EAAe;AAAA,QACf,WAAA;AAAY,OAAA,EACf,CAAA;AAAA,IAGJ,KAAK,QAAA;AACH,MAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,UAAA,EAAY,gBAAgB,mBAAA,EACzC,QAAA,EAAA;AAAA,QAAA,WAAA,EAAY;AAAA,wBACbA,eAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,OAAQ,KAAA,IAA6B,EAAA;AAAA,YACrC,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,SAAA,EAAW,YAAA;AAAA,YACV,GAAG,SAAA;AAAA,YAEJ,QAAA,EAAA;AAAA,8BAAAC,cAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAG,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,cAChC,QAAA,CAAS,OAAA,EAAS,GAAA,CAAI,CAAC,2BACtBA,cAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,MAAA,CAAO,EAAA,EACnC,QAAA,EAAA,MAAA,CAAO,IAAA,EAAA,EADG,MAAA,CAAO,EAEpB,CACD;AAAA;AAAA;AAAA,SACH;AAAA,QACC,cAAA,EAAe;AAAA,QACf,WAAA;AAAY,OAAA,EACf,CAAA;AAAA,IAGJ,KAAK,MAAA;AACH,MAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,UAAA,EAAY,gBAAgB,mBAAA,EACzC,QAAA,EAAA;AAAA,QAAA,WAAA,EAAY;AAAA,wBACbC,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,IAAA,EAAK,MAAA;AAAA,YACL,OAAQ,KAAA,IAAoB,EAAA;AAAA,YAC5B,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,GAAA,EAAK,QAAA,CAAS,QAAA,EAAU,GAAA,EAAK,QAAA,EAAS;AAAA,YACtC,GAAA,EAAK,QAAA,CAAS,QAAA,EAAU,GAAA,EAAK,QAAA,EAAS;AAAA,YACtC,SAAA,EAAW,YAAA;AAAA,YACV,GAAG;AAAA;AAAA,SACN;AAAA,QACC,cAAA,EAAe;AAAA,QACf,WAAA;AAAY,OAAA,EACf,CAAA;AAAA,IAGJ,KAAK,QAAA;AACH,MAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,UAAA,EAAY,gBAAgB,mBAAA,EACzC,QAAA,EAAA;AAAA,QAAA,WAAA,EAAY;AAAA,wBACbC,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,IAAA,EAAK,QAAA;AAAA,YACL,OAAQ,KAAA,IAAoB,EAAA;AAAA,YAC5B,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,GAAI,EAAE,CAAA;AAAA,YACtE,GAAA,EAAK,SAAS,QAAA,EAAU,GAAA;AAAA,YACxB,GAAA,EAAK,SAAS,QAAA,EAAU,GAAA;AAAA,YACxB,WAAA,EAAa,SAAS,QAAA,EAAU,WAAA;AAAA,YAChC,SAAA,EAAW,YAAA;AAAA,YACV,GAAG;AAAA;AAAA,SACN;AAAA,QACC,cAAA,EAAe;AAAA,QACf,WAAA;AAAY,OAAA,EACf,CAAA;AAAA,IAGJ,KAAK,OAAA;AACH,MAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,UAAA,EAAY,gBAAgB,mBAAA,EAC1C,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,OAAA;AAAA,cACJ,IAAA,EAAK,UAAA;AAAA,cACL,OAAA,EAAS,CAAC,CAAC,KAAA;AAAA,cACX,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,cAC1C,SAAA,EAAW,YAAY,QAAA,IAAY,eAAA;AAAA,cAClC,GAAG;AAAA;AAAA,WACN;AAAA,0BACAD,eAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,WAAW,oBAAA,EACjC,QAAA,EAAA;AAAA,YAAA,QAAA,CAAS,IAAA;AAAA,YACT,QAAA,CAAS,4BAAYC,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EAAoB,aAAA,EAAY,QAAO,QAAA,EAAA,GAAA,EAAC;AAAA,WAAA,EAChF;AAAA,SAAA,EACF,CAAA;AAAA,QACC,cAAA,EAAe;AAAA,QACf,WAAA;AAAY,OAAA,EACf,CAAA;AAAA,IAGJ;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAmBO,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,SAAA,GAAY,EAAA;AAAA,EACZ,cAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAqB;AAEnB,EAAA,MAAM,UAAA,GAAoC;AAAA,IACxC,GAAG,cAAA;AAAA,IACH,KAAA,EAAO,gBAAgB,KAAA,IAAS;AAAA,GAClC;AACA,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,cAAA,CAAqB,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAA,CAAqB,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,cAAA,CAAkC,EAAE,CAAA;AAIlE,EAAA,MAAM,iBAAA,GAAoBC,iBAAA;AAAA,IACxB,CAAC,QAAA,KAAgC;AAC/B,MAAA,MAAM,EAAE,UAAS,GAAI,QAAA;AACrB,MAAA,IAAI,CAAC,UAAU,mBAAA,EAAqB;AAClC,QAAA,OAAO,IAAA;AAAA,MACT;AAIA,MAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,mBAA8C,CAAA;AAC/F,MAAA,IAAI,gBAAA,CAAiB,WAAW,CAAA,EAAG;AACjC,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,OAAO,iBAAiB,IAAA,CAAK,CAAC,CAAC,aAAA,EAAe,cAAc,CAAA,KAAM;AAChE,QAAA,MAAM,UAAA,GAAa,OAAO,aAAa,CAAA;AACvC,QAAA,MAAM,YAAA,GAAgB,MAAA,CAAmC,MAAA,CAAO,UAAU,CAAC,CAAA;AAE3E,QAAA,IAAI,YAAA,KAAiB,MAAA,IAAa,YAAA,KAAiB,EAAA,IAAM,iBAAiB,IAAA,EAAM;AAC9E,UAAA,OAAO,KAAA;AAAA,QACT;AAGA,QAAA,MAAM,iBAAA,GACJ,OAAO,YAAA,KAAiB,QAAA,IAAY,iBAAiB,IAAA,IAAQ,IAAA,IAAS,eACjE,YAAA,GACD,YAAA;AAIN,QAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AAEnC,QAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAe;AACnC,UAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAA,EAAM;AACnC,UAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,EAAK;AACzB,UAAA,IAAI,CAAA,EAAG,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA;AAAA,QACzB,CAAA;AAEA,QAAA,MAAM,iBAAiB,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,UAAU,CAAA;AAEhE,QAAA,IAAI,OAAO,iBAAA,KAAsB,QAAA,IAAY,iBAAA,KAAsB,IAAA,EAAM;AACvE,UAAA,YAAA,CAAc,kBAA0B,EAAE,CAAA;AAC1C,UAAA,YAAA,CAAc,kBAA0B,IAAI,CAAA;AAAA,QAC9C,CAAA,MAAO;AACL,UAAA,YAAA,CAAa,iBAAiB,CAAA;AAAA,QAChC;AAEA,QAAA,IAAI,cAAA,EAAgB,WAAA,KAAgB,QAAA,IAAY,cAAA,CAAe,SAAS,MAAA,EAAQ;AAE9E,UAAA,MAAM,aAAa,CAAC,GAAG,UAAU,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AACzC,UAAA,MAAM,UAAA,GAAa,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAM,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA,KAAM,UAAU,CAAA;AACjF,UAAA,MAAM,YAAA,GAAe,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,EAAK,KAAM,UAAU,CAAA;AAC5F,UAAA,MAAM,MAAM,UAAA,IAAc,YAAA;AAC1B,UAAA,IAAI,GAAA,EAAK;AACP,YAAA,YAAA,CAAa,IAAI,EAAE,CAAA;AACnB,YAAA,YAAA,CAAa,IAAI,IAAI,CAAA;AAAA,UACvB;AAAA,QACF;AAEA,QAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,KAAsB;AAC3C,UAAA,MAAM,WAAA,GAAc,MAAA,CAAO,QAAQ,CAAA,CAAE,IAAA,EAAK;AAC1C,UAAA,OAAO,UAAA,CAAW,IAAI,WAAW,CAAA;AAAA,QACnC,CAAA;AAMA,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,cAAc,CAAA,EAAG;AACjC,UAAA,OAAO,eAAe,IAAA,CAAK,CAAC,CAAA,KAAM,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,QACpD;AAEA,QAAA,IAAI,cAAA,IAAkB,OAAO,cAAA,KAAmB,QAAA,EAAU;AACxD,UAAA,MAAM,WAAA,GAAc,cAAA;AACpB,UAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,YAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,WAAA,EAAa,CAAC,CAAA,EAAG;AACxD,cAAA,MAAM,IAAA,GAAO,YAAY,CAAC,CAAA;AAC1B,cAAA,OAAO,IAAA,KAAS,MAAA,GAAY,IAAA,GAAO,CAAC,CAAC,IAAA;AAAA,YACvC;AAAA,UACF;AACA,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,OAAO,cAAc,cAAc,CAAA;AAAA,MACrC,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,QAAQ,SAAS;AAAA,GACpB;AAGA,EAAA,MAAM,gBAAA,GAAmB,SAAA,CAAU,MAAA,CAAO,iBAAiB,CAAA;AAI3D,EAAA,MAAM,aAAA,GAAgBA,iBAAA,CAAY,CAAC,QAAA,EAAoB,KAAA,KAA6C;AAClG,IAAA,IAAI,QAAA,CAAS,WAAA,KAAgB,SAAA,EAAW,OAAO,IAAA;AAE/C,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,EAAA,IAAM,UAAU,IAAA,EAAM;AACzD,QAAA,OAAO,CAAA,EAAG,SAAS,IAAI,CAAA,YAAA,CAAA;AAAA,MACzB;AACA,MAAA,IAAI,QAAA,CAAS,WAAA,KAAgB,OAAA,IAAW,CAAC,KAAA,EAAO;AAC9C,QAAA,OAAO,CAAA,EAAG,SAAS,IAAI,CAAA,gBAAA,CAAA;AAAA,MACzB;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,WAAA,KAAgB,QAAA,IAAY,KAAA,KAAU,EAAA,IAAM,UAAU,MAAA,EAAW;AAC5E,MAAA,MAAM,QAAA,GAAW,OAAO,KAAK,CAAA;AAC7B,MAAA,IAAI,SAAS,QAAA,EAAU,GAAA,KAAQ,UAAa,QAAA,GAAW,QAAA,CAAS,SAAS,GAAA,EAAK;AAC5E,QAAA,OAAO,CAAA,iBAAA,EAAoB,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,CAAA;AAAA,MAClD;AACA,MAAA,IAAI,SAAS,QAAA,EAAU,GAAA,KAAQ,UAAa,QAAA,GAAW,QAAA,CAAS,SAAS,GAAA,EAAK;AAC5E,QAAA,OAAO,CAAA,iBAAA,EAAoB,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,WAAA,GAAcA,kBAAY,MAAe;AAC7C,IAAA,MAAM,YAAwB,EAAC;AAC/B,IAAA,IAAI,OAAA,GAAU,IAAA;AAEd,IAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,QAAA,KAAa;AACrC,MAAA,MAAM,QAAQ,aAAA,CAAc,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,EAAE,CAAC,CAAA;AACzD,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,GAAI,KAAA;AACzB,QAAA,OAAA,GAAU,KAAA;AAAA,MACZ;AAAA,IACF,CAAC,CAAA;AAED,IAAA,SAAA,CAAU,SAAS,CAAA;AACnB,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,EAAG,CAAC,gBAAA,EAAkB,MAAA,EAAQ,aAAa,CAAC,CAAA;AAG5C,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,gBAAA,CAAiB,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AAE5D,IAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAClB,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AAEvB,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,KAAA,KAAU;AACnC,QAAA,MAAM,EAAA,GAAK,OAAO,KAAK,CAAA;AACvB,QAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA,EAAG;AACvB,UAAA,OAAO,KAAK,EAAE,CAAA;AACd,UAAA,OAAA,GAAU,IAAA;AAAA,QACZ;AAAA,MACF,CAAC,CAAA;AAED,MAAA,OAAO,UAAU,IAAA,GAAO,IAAA;AAAA,IAC1B,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,MAAM,YAAA,GAAe,CAAC,UAAA,EAAoB,KAAA,KAAqC;AAC7E,IAAA,SAAA,CAAU,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,KAAA,EAAM,CAAE,CAAA;AACtD,IAAA,UAAA,CAAW,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,IAAA,EAAK,CAAE,CAAA;AAGtD,IAAA,IAAI,OAAA,CAAQ,UAAU,CAAA,EAAG;AACvB,MAAA,MAAM,WAAW,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,UAAU,CAAA;AAC1D,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,QAAA,EAAU,KAAK,CAAA;AAC3C,QAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAClB,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,OAAO,EAAE,GAAG,IAAA,EAAM,CAAC,UAAU,GAAG,KAAA,EAAM;AAAA,UACxC;AACA,UAAA,MAAM,EAAE,CAAC,UAAU,GAAG,CAAA,EAAG,GAAG,MAAK,GAAI,IAAA;AACrC,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAuB;AAC3C,IAAA,CAAA,CAAE,cAAA,EAAe;AAGjB,IAAA,MAAM,aAAsC,EAAC;AAC7C,IAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC9B,MAAA,UAAA,CAAW,CAAA,CAAE,EAAE,CAAA,GAAI,IAAA;AAAA,IACrB,CAAC,CAAA;AACD,IAAA,UAAA,CAAW,UAAU,CAAA;AAErB,IAAA,IAAI,aAAY,EAAG;AAEjB,MAAA,MAAM,gBAA4B,EAAC;AACnC,MAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC9B,QAAA,IAAI,EAAE,WAAA,KAAgB,SAAA,IAAa,OAAO,CAAA,CAAE,EAAE,MAAM,MAAA,EAAW;AAC7D,UAAA,aAAA,CAAc,CAAA,CAAE,EAAE,CAAA,GAAI,MAAA,CAAO,EAAE,EAAE,CAAA;AAAA,QACnC;AAAA,MACF,CAAC,CAAA;AACD,MAAA,QAAA,CAAS,aAAa,CAAA;AAAA,IACxB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,iLAAA;AAEtB,EAAA,uCACG,MAAA,EAAA,EAAK,QAAA,EAAU,YAAA,EAAc,SAAA,EAAsB,YAAU,IAAA,EAC3D,QAAA,EAAA;AAAA,IAAA,gBAAA,CAAiB,GAAA,CAAI,CAAC,QAAA,qBACrBH,cAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QAEC,QAAA;AAAA,QACA,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,QACzB,KAAA,EAAO,QAAQ,QAAA,CAAS,EAAE,IAAI,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA,GAAI,MAAA;AAAA,QACpD,UAAU,CAAC,KAAA,KAAU,YAAA,CAAa,QAAA,CAAS,IAAI,KAAK,CAAA;AAAA,QACpD;AAAA,OAAA;AAAA,MALK,QAAA,CAAS;AAAA,KAOjB,CAAA;AAAA,oBACDA,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,YAAY,MAAA,IAAU,aAAA;AAAA,QAEhC,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;;;ACvcO,SAAS,SAAS,KAAA,EAA8B;AACrD,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACjC,IAAA,OAAO,wBAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,MAAM,KAAA,EAA8B;AAClD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,EAAA,MAAM,UAAA,GAAa,sIAAA;AAEnB,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,EAAG;AAC3B,IAAA,OAAO,oCAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,MAAM,KAAA,EAA8B;AAClD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAGnB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA;AAG/C,EAAA,MAAM,UAAA,GAAa,kBAAA;AAEnB,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA,EAAG;AAC7B,IAAA,OAAO,mCAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,WAAW,KAAA,EAA8B;AACvD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAGnB,EAAA,MAAM,aAAA,GAAgB,8CAAA;AAEtB,EAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA,EAAG;AACrC,IAAA,OAAO,kCAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,OAAO,GAAA,EAA+C;AACpE,EAAA,OAAO,CAAC,KAAA,KAAkB;AACxB,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,IAAI,KAAA,CAAM,IAAA,EAAK,CAAE,MAAA,GAAS,GAAA,EAAK;AAC7B,MAAA,OAAO,oBAAoB,GAAG,CAAA,UAAA,EAAa,GAAA,KAAQ,CAAA,GAAI,KAAK,GAAG,CAAA,CAAA;AAAA,IACjE;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACF;AAMO,SAAS,WACX,UAAA,EAC+B;AAClC,EAAA,OAAO,CAAC,KAAA,KAAkB;AACxB,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,MAAA,IAAI,OAAO,OAAO,KAAA;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACF;ACtEA,IAAM,cAAA,GAAgC;AAAA,EACpC;AAAA,IACE,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,YAAA;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,eAAA;AAAA,IACP,IAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,KAAK;AAAA,GACnC;AAAA,EACA;AAAA,IACE,IAAA,EAAM,aAAA;AAAA,IACN,KAAA,EAAO,sBAAA;AAAA,IACP,IAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA;AAAA,IAEV,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,gBAAA;AAAA,IACP,IAAA,EAAM,KAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,IAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,iBAAA;AAAA,IACN,KAAA,EAAO,kBAAA;AAAA,IACP,IAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,UAAU;AAAA;AAE1C,CAAA;AAGA,IAAM,eAAA,GAAkB,CAAC,UAAA,EAAY,UAAA,EAAY,QAAQ,UAAU,CAAA;AAgC5D,IAAM,gBAAA,GAAmBI,gBAAA;AAAA,EAC9B,CACE;AAAA,IACE,MAAA,GAAS,cAAA;AAAA,IACT,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA,GAAiB,IAAA;AAAA,IACjB,WAAA,GAAc,QAAA;AAAA,IACd,SAAA,GAAY,EAAA;AAAA,IACZ,aAAa,EAAC;AAAA,IACd,gBAAgB;AAAC,KAEnB,GAAA,KACG;AACH,IAAA,MAAM,SAASC,WAAA,EAAM;AACrB,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIJ,cAAAA,CAAiC,EAAE,CAAA;AAC/D,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAAA,CAAiC,EAAE,CAAA;AAC/D,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,cAAAA,CAAkC,EAAE,CAAA;AAGlE,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AAC7C,MAAA,IAAK,eAAA,CAAsC,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAG;AAC/D,QAAA,MAAM,OAAA,GAAU,aAAA,CAAc,KAAA,CAAM,IAAkC,CAAA;AACtE,QAAA,IAAI,OAAA,EAAS,QAAQ,OAAO,KAAA;AAAA,MAC9B;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAM,YAAY,gBAAA,GAAmB,CAAC,GAAG,aAAA,EAAe,GAAG,gBAAgB,CAAA,GAAI,aAAA;AAK/E,IAAA,MAAM,gBAAA,GAAmBC,iBAAAA;AAAA,MACvB,CAAC,SAAA,EAAmB,KAAA,EAAe,aAAA,KAAyD;AAC1F,QAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,UAAA,IAAI,KAAA,IAAS,aAAA,CAAc,KAAA,IAAS,KAAA,KAAU,cAAc,KAAA,EAAO;AACjE,YAAA,OAAO,8BAAA;AAAA,UACT;AAAA,QACF;AACA,QAAA,IAAI,cAAc,iBAAA,EAAmB;AACnC,UAAA,IAAI,KAAA,IAAS,aAAA,CAAc,QAAA,IAAY,KAAA,KAAU,cAAc,QAAA,EAAU;AACvE,YAAA,OAAO,wBAAA;AAAA,UACT;AAAA,QACF;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,MACA;AAAC,KACH;AAKA,IAAA,MAAM,aAAA,GAAgBA,iBAAAA;AAAA,MACpB,CAAC,KAAA,EAAoB,KAAA,EAAe,aAAA,KAAyD;AAE3F,QAAA,IAAI,MAAM,QAAA,KAAa,CAAC,SAAS,KAAA,CAAM,IAAA,OAAW,EAAA,CAAA,EAAK;AACrD,UAAA,OAAO,wBAAA;AAAA,QACT;AAEA,QAAA,IAAI,KAAA,CAAM,YAAY,KAAA,EAAO;AAC3B,UAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA;AAClC,UAAA,IAAI,OAAO,OAAO,KAAA;AAAA,QACpB;AAEA,QAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,CAAM,IAAA,EAAM,OAAO,aAAa,CAAA;AACpE,QAAA,IAAI,YAAY,OAAO,UAAA;AAEvB,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,MACA,CAAC,gBAAgB;AAAA,KACnB;AAKA,IAAA,MAAM,WAAA,GAAcA,kBAAY,MAAe;AAC7C,MAAA,MAAM,YAAoC,EAAC;AAC3C,MAAA,IAAI,OAAA,GAAU,IAAA;AAEd,MAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,IAAK,EAAA;AACpC,QAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,EAAO,KAAA,EAAO,MAAM,CAAA;AAChD,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AACxB,UAAA,OAAA,GAAU,KAAA;AAAA,QACZ;AAAA,MACF;AAEA,MAAA,SAAA,CAAU,SAAS,CAAA;AACnB,MAAA,OAAO,OAAA;AAAA,IACT,CAAA,EAAG,CAAC,SAAA,EAAW,MAAA,EAAQ,aAAa,CAAC,CAAA;AAKrC,IAAA,MAAM,YAAA,GAAeA,iBAAAA;AAAA,MACnB,CAAC,aAAA,KAAmD;AAClD,QAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,UAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA,IAAK,EAAA;AAC3C,UAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,EAAO,KAAA,EAAO,aAAa,CAAA;AACvD,UAAA,IAAI,OAAO,OAAO,KAAA;AAAA,QACpB;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,MACA,CAAC,WAAW,aAAa;AAAA,KAC3B;AAKA,IAAA,MAAM,YAAA,GAAeA,iBAAAA;AAAA,MACnB,CAAC,WAAmB,KAAA,KAAkB;AACpC,QAAA,MAAM,YAAY,EAAE,GAAG,QAAQ,CAAC,SAAS,GAAG,KAAA,EAAM;AAClD,QAAA,SAAA,CAAU,SAAS,CAAA;AAGnB,QAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,UAAA,MAAM,QAAQ,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,SAAS,CAAA;AACxD,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,EAAO,KAAA,EAAO,SAAS,CAAA;AACnD,YAAA,IAAI,CAAC,KAAA,EAAO;AACV,cAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAClB,gBAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AACvB,gBAAA,OAAO,KAAK,SAAS,CAAA;AACrB,gBAAA,OAAO,IAAA;AAAA,cACT,CAAC,CAAA;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAGA,QAAA,IAAI,SAAA,KAAc,OAAA,IAAW,OAAA,CAAQ,WAAA,EAAa;AAChD,UAAA,MAAM,cAAc,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,aAAa,CAAA;AAClE,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,MAAM,cAAc,aAAA,CAAc,WAAA,EAAa,SAAA,CAAU,WAAA,IAAe,IAAI,SAAS,CAAA;AACrF,YAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAClB,cAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AACvB,cAAA,IAAI,WAAA,EAAa;AACf,gBAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,cACrB,CAAA,MAAO;AACL,gBAAA,OAAO,IAAA,CAAK,WAAA;AAAA,cACd;AACA,cAAA,OAAO,IAAA;AAAA,YACT,CAAC,CAAA;AAAA,UACH;AAAA,QACF;AACA,QAAA,IAAI,SAAA,KAAc,UAAA,IAAc,OAAA,CAAQ,eAAA,EAAiB;AACvD,UAAA,MAAM,eAAe,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,iBAAiB,CAAA;AACvE,UAAA,IAAI,YAAA,EAAc;AAChB,YAAA,MAAM,eAAe,aAAA,CAAc,YAAA,EAAc,SAAA,CAAU,eAAA,IAAmB,IAAI,SAAS,CAAA;AAC3F,YAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAClB,cAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AACvB,cAAA,IAAI,YAAA,EAAc;AAChB,gBAAA,IAAA,CAAK,eAAA,GAAkB,YAAA;AAAA,cACzB,CAAA,MAAO;AACL,gBAAA,OAAO,IAAA,CAAK,eAAA;AAAA,cACd;AACA,cAAA,OAAO,IAAA;AAAA,YACT,CAAC,CAAA;AAAA,UACH;AAAA,QACF;AAGA,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,MAAM,OAAA,GAAU,aAAa,SAAS,CAAA;AACtC,UAAA,QAAA,CAAS,WAAW,OAAO,CAAA;AAAA,QAC7B;AAAA,MACF,CAAA;AAAA,MACA,CAAC,MAAA,EAAQ,OAAA,EAAS,SAAA,EAAW,aAAA,EAAe,UAAU,YAAY;AAAA,KACpE;AAKA,IAAA,MAAM,oBAAA,GAAuBA,iBAAAA;AAAA,MAC3B,CAAC,WAAmB,OAAA,KAAqB;AACvC,QAAA,MAAM,KAAA,GAAQ,UAAU,MAAA,GAAS,EAAA;AACjC,QAAA,YAAA,CAAa,WAAW,KAAK,CAAA;AAAA,MAC/B,CAAA;AAAA,MACA,CAAC,YAAY;AAAA,KACf;AAKA,IAAA,MAAM,UAAA,GAAaA,iBAAAA;AAAA,MACjB,CAAC,SAAA,KAAsB;AACrB,QAAA,UAAA,CAAW,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAA,EAAK,CAAE,CAAA;AAErD,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,QAAQ,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,SAAS,CAAA;AACxD,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,SAAS,CAAA,IAAK,EAAA;AACnC,YAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,EAAO,KAAA,EAAO,MAAM,CAAA;AAChD,YAAA,IAAI,KAAA,EAAO;AACT,cAAA,SAAA,CAAU,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,KAAA,EAAM,CAAE,CAAA;AAAA,YACvD,CAAA,MAAO;AACL,cAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAClB,gBAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AACvB,gBAAA,OAAO,KAAK,SAAS,CAAA;AACrB,gBAAA,OAAO,IAAA;AAAA,cACT,CAAC,CAAA;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,CAAC,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAa;AAAA,KACnD;AAKA,IAAA,MAAM,YAAA,GAAeA,iBAAAA;AAAA,MACnB,CAAC,CAAA,KAAuB;AACtB,QAAA,CAAA,CAAE,cAAA,EAAe;AAGjB,QAAA,MAAM,aAAsC,EAAC;AAC7C,QAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,UAAA,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAAA,QAC3B;AACA,QAAA,UAAA,CAAW,UAAU,CAAA;AAGrB,QAAA,IAAI,aAAY,EAAG;AACjB,UAAA,QAAA,CAAS,MAAM,CAAA;AAAA,QACjB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,SAAA,EAAW,WAAA,EAAa,QAAA,EAAU,MAAM;AAAA,KAC3C;AAKA,IAAAI,yBAAA;AAAA,MACE,GAAA;AAAA,MACA,OAAO;AAAA,QACL,OAAO,MAAM;AACX,UAAA,SAAA,CAAU,EAAE,CAAA;AACZ,UAAA,SAAA,CAAU,EAAE,CAAA;AACZ,UAAA,UAAA,CAAW,EAAE,CAAA;AAAA,QACf,CAAA;AAAA,QACA,SAAA,EAAW,CAAC,SAAA,KAA+C;AACzD,UAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAClB,YAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,EAAK;AACzB,YAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AACpD,cAAA,IAAI,UAAU,MAAA,EAAW;AACvB,gBAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,cAChB;AAAA,YACF;AACA,YAAA,OAAO,MAAA;AAAA,UACT,CAAC,CAAA;AAAA,QACH;AAAA,OACF,CAAA;AAAA,MACA;AAAC,KACH;AAGA,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,YAAA,EAAc,WAAW,YAAA,IAAgB,MAAA;AAAA,MACzC,KAAA,EAAO,WAAW,KAAA,IAAS,gCAAA;AAAA,MAC3B,KAAA,EAAO,WAAW,KAAA,IAAS,oCAAA;AAAA,MAC3B,UAAA,EAAY,WAAW,UAAA,IAAc,gBAAA;AAAA,MACrC,QAAA,EAAU,WAAW,QAAA,IAAY,EAAA;AAAA,MACjC,eAAA,EAAiB,WAAW,eAAA,IAAmB,yBAAA;AAAA,MAC/C,SAAA,EAAW,WAAW,SAAA,IAAa,2BAAA;AAAA,MACnC,MAAA,EACE,WAAW,MAAA,IACX;AAAA,KACJ;AAEA,IAAA,uBACEP,eAAAA,CAAC,MAAA,EAAA,EAAK,UAAU,YAAA,EAAc,SAAA,EAAsB,YAAU,IAAA,EAC3D,QAAA,EAAA;AAAA,MAAA,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,KAAU;AACxB,QAAA,MAAM,OAAA,GAAU,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA,CAAA;AACvC,QAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,MAAA,CAAA;AAC1B,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,IAAK,EAAA;AACpC,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AACpC,QAAA,MAAM,YAAY,SAAA,IAAa,KAAA;AAG/B,QAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,UAAA,uBACEA,eAAAA,CAAC,KAAA,EAAA,EAAqB,SAAA,EAAW,OAAO,YAAA,EACtC,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,eAAA,EACrB,QAAA,EAAA;AAAA,8BAAAC,cAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAI,OAAA;AAAA,kBACJ,MAAM,KAAA,CAAM,IAAA;AAAA,kBACZ,IAAA,EAAK,UAAA;AAAA,kBACL,SAAS,KAAA,KAAU,MAAA;AAAA,kBACnB,QAAA,EAAU,CAAC,CAAA,KAAM,oBAAA,CAAqB,MAAM,IAAA,EAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,kBAClE,MAAA,EAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAAA,kBACnC,SAAA,EAAW,GAAG,MAAA,CAAO,QAAQ,IAAI,SAAA,GAAY,MAAA,CAAO,aAAa,EAAE,CAAA,CAAA;AAAA,kBACnE,cAAA,EAAc,YAAY,MAAA,GAAS,OAAA;AAAA,kBACnC,kBAAA,EAAkB,YAAY,OAAA,GAAU,MAAA;AAAA,kBACxC,eAAA,EAAe,KAAA,CAAM,QAAA,GAAW,MAAA,GAAS;AAAA;AAAA,eAC3C;AAAA,8BACAD,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAS,OAAA,EAAS,SAAA,EAAW,OAAO,KAAA,EACxC,QAAA,EAAA;AAAA,gBAAA,KAAA,CAAM,KAAA;AAAA,gBACN,KAAA,CAAM,4BACLC,cAAAA,CAAC,UAAK,SAAA,EAAU,mBAAA,EAAoB,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,GAAA,EAEvD;AAAA,eAAA,EAEJ;AAAA,aAAA,EACF,CAAA;AAAA,YACC,SAAA,oBACCA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,OAAA,EAC/C,QAAA,EAAA,KAAA,EACH;AAAA,WAAA,EAAA,EA1BM,MAAM,IA4BhB,CAAA;AAAA,QAEJ;AAEA,QAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAqB,SAAA,EAAW,OAAO,YAAA,EACtC,QAAA,EAAA;AAAA,0BAAAA,gBAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,OAAO,KAAA,EACxC,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,KAAA;AAAA,YACN,KAAA,CAAM,4BACLC,cAAAA,CAAC,UAAK,SAAA,EAAU,mBAAA,EAAoB,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,GAAA,EAEvD;AAAA,WAAA,EAEJ,CAAA;AAAA,UACC,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,KAAA,CAAM,0BAChCD,eAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,OAAA;AAAA,cACJ,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,KAAA;AAAA,cACA,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,MAAM,IAAA,EAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACxD,MAAA,EAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAAA,cACnC,SAAA,EAAW,GAAG,MAAA,CAAO,KAAK,IAAI,SAAA,GAAY,MAAA,CAAO,aAAa,EAAE,CAAA,CAAA;AAAA,cAChE,cAAA,EAAc,YAAY,MAAA,GAAS,OAAA;AAAA,cACnC,kBAAA,EAAkB,YAAY,OAAA,GAAU,MAAA;AAAA,cACxC,eAAA,EAAe,KAAA,CAAM,QAAA,GAAW,MAAA,GAAS,OAAA;AAAA,cAEzC,QAAA,EAAA;AAAA,gCAAAC,eAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAI,QAAA,EAAA,KAAA,CAAM,eAAe,kBAAA,EAAmB,CAAA;AAAA,gBACzD,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBAClBD,eAAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,EAC5C,QAAA,EAAA;AAAA,kBAAA,MAAA,CAAO,IAAA;AAAA,kBACP,MAAA,CAAO,UAAU,MAAA,IAAa,MAAA,CAAO,QAAQ,CAAA,GAAI,CAAA,OAAA,EAAO,MAAA,CAAO,KAAK,CAAA,CAAA,CAAA,GAAM;AAAA,iBAAA,EAAA,EAFhE,MAAA,CAAO,EAGpB,CACD;AAAA;AAAA;AAAA,8BAGHC,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,OAAA;AAAA,cACJ,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,IAAA,EAAM,KAAA,CAAM,IAAA,KAAS,QAAA,GAAW,SAAS,KAAA,CAAM,IAAA;AAAA,cAC/C,KAAA;AAAA,cACA,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,MAAM,IAAA,EAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACxD,MAAA,EAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAAA,cACnC,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,SAAA,EAAW,GAAG,MAAA,CAAO,KAAK,IAAI,SAAA,GAAY,MAAA,CAAO,aAAa,EAAE,CAAA,CAAA;AAAA,cAChE,cAAA,EAAc,YAAY,MAAA,GAAS,OAAA;AAAA,cACnC,kBAAA,EAAkB,YAAY,OAAA,GAAU,MAAA;AAAA,cACxC,eAAA,EAAe,KAAA,CAAM,QAAA,GAAW,MAAA,GAAS;AAAA;AAAA,WAC3C;AAAA,UAED,SAAA,oBACCA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,OAAA,EAC/C,QAAA,EAAA,KAAA,EACH;AAAA,SAAA,EAAA,EA/CM,MAAM,IAiDhB,CAAA;AAAA,MAEJ,CAAC,CAAA;AAAA,sBACDA,eAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAW,MAAA,CAAO,QACrC,QAAA,EAAA,WAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;AClf/B,IAAMO,GAAAA,GAAK,IAAI,OAAA,KAAoC,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAmB5E,IAAM,kBAAA,GAAqBH,gBAAAA;AAAA,EAChC,CACE;AAAA,IACE,YAAY,EAAC;AAAA,IACb,QAAA;AAAA,IACA,QAAA,EAAU,SAAA;AAAA,IACV,aAAA;AAAA,IACA,cAAA,GAAiB,IAAA;AAAA,IACjB,WAAA,GAAc,QAAA;AAAA,IACd,SAAA,GAAY,EAAA;AAAA,IACZ,aAAa,EAAC;AAAA,IACd,gBAAgB;AAAC,KAEnB,GAAA,KACG;AACH,IAAA,MAAM,SAASC,WAAAA,EAAM;AAGrB,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,IAAIJ,cAAAA,CAAS,aAAA,EAAe,aAAa,EAAE,CAAA;AACzE,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,IAAIA,cAAAA,CAAS,aAAA,EAAe,YAAY,EAAE,CAAA;AACtE,IAAA,MAAM,CAAC,UAAA,EAAY,aAAa,IAAIA,cAAAA,CAAS,aAAA,EAAe,SAAS,EAAE,CAAA;AAGvE,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,cAAAA,CAAiC,EAAE,CAAA;AAC7E,IAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,cAAAA,CAAkC,EAAE,CAAA;AAGhF,IAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAqB,MAAM;AACrE,MAAA,IAAI,CAAC,aAAA,EAAe,SAAA,EAAW,OAAO,EAAC;AACvC,MAAA,MAAM,OAAmB,EAAC;AAC1B,MAAA,KAAA,MAAW,CAAC,KAAK,GAAG,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,SAAS,CAAA,EAAG;AAChE,QAAA,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA,GAAI,GAAA;AAAA,MACtB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,cAAAA,CAAqB,EAAE,CAAA;AACnE,IAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,cAAAA,CAAkC,EAAE,CAAA;AAGlF,IAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAiB;AACzC,MAAA,MAAM,CAAA,GAAI,cAAc,IAAyC,CAAA;AACjE,MAAA,OAAO,CAAA,EAAG,QAAA,KAAa,MAAA,GAAY,CAAA,CAAE,QAAA,GAAW,IAAA;AAAA,IAClD,CAAA;AACA,IAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAiB;AACzC,MAAA,MAAM,CAAA,GAAI,cAAc,IAAyC,CAAA;AACjE,MAAA,OAAO,CAAC,CAAC,CAAA,EAAG,QAAA;AAAA,IACd,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,EAAE,MAAM,WAAA,EAAa,KAAA,EAAO,cAAc,KAAA,EAAO,SAAA,EAAW,QAAQ,YAAA,EAAa;AAAA,MACjF,EAAE,MAAM,UAAA,EAAY,KAAA,EAAO,aAAa,KAAA,EAAO,QAAA,EAAU,QAAQ,WAAA,EAAY;AAAA,MAC7E,EAAE,MAAM,OAAA,EAAS,KAAA,EAAO,SAAS,KAAA,EAAO,UAAA,EAAY,QAAQ,aAAA;AAAc,KAC5E;AAIA,IAAA,MAAM,oBAAA,GAAuBC,iBAAAA,CAAY,CAAC,IAAA,EAAc,KAAA,KAAiC;AACvF,MAAA,MAAM,UAAA,GAAa,iBAAiB,IAAI,CAAA;AACxC,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA,MAAM,UAAA,GAAa,UAAA,GAAa,OAAA,CAAQ,QAAA,EAAU,KAAc,CAAA,GAAI,KAAA;AACpE,QAAA,OAAO,QAAQ,UAAA,CAAW,KAAK,IAAK,UAAA,GAAa,QAAA,CAAS,KAAK,CAAA,GAAI,IAAA;AAAA,MACrE;AACA,MAAA,OAAO,UAAA,GAAa,QAAA,CAAS,KAAK,CAAA,GAAI,IAAA;AAAA,IACxC,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,IAAA,MAAM,qBAAA,GAAwBA,iBAAAA,CAAY,CAAC,QAAA,EAAoB,KAAA,KAA6C;AAC1G,MAAA,IAAI,QAAA,CAAS,WAAA,KAAgB,SAAA,EAAW,OAAO,IAAA;AAC/C,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,EAAA,IAAM,UAAU,IAAA,EAAM;AACzD,UAAA,OAAO,CAAA,EAAG,SAAS,IAAI,CAAA,YAAA,CAAA;AAAA,QACzB;AACA,QAAA,IAAI,QAAA,CAAS,WAAA,KAAgB,OAAA,IAAW,CAAC,KAAA,EAAO;AAC9C,UAAA,OAAO,CAAA,EAAG,SAAS,IAAI,CAAA,gBAAA,CAAA;AAAA,QACzB;AAAA,MACF;AACA,MAAA,IAAI,SAAS,WAAA,KAAgB,QAAA,IAAY,KAAA,KAAU,EAAA,IAAM,UAAU,MAAA,EAAW;AAC5E,QAAA,MAAM,QAAA,GAAW,OAAO,KAAK,CAAA;AAC7B,QAAA,IAAI,SAAS,QAAA,EAAU,GAAA,KAAQ,UAAa,QAAA,GAAW,QAAA,CAAS,SAAS,GAAA,EAAK;AAC5E,UAAA,OAAO,CAAA,iBAAA,EAAoB,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,CAAA;AAAA,QAClD;AACA,QAAA,IAAI,SAAS,QAAA,EAAU,GAAA,KAAQ,UAAa,QAAA,GAAW,QAAA,CAAS,SAAS,GAAA,EAAK;AAC5E,UAAA,OAAO,CAAA,iBAAA,EAAoB,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,CAAA;AAAA,QAClD;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,mBAAA,GAAsBA,kBAAY,MAAe;AACrD,MAAA,MAAM,OAA+B,EAAC;AACtC,MAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,MAAA,KAAA,MAAW,KAAK,aAAA,EAAe;AAC7B,QAAA,IAAI,gBAAA,CAAiB,CAAA,CAAE,IAAI,CAAA,EAAG;AAC9B,QAAA,MAAM,GAAA,GAAM,oBAAA,CAAqB,CAAA,CAAE,IAAA,EAAM,EAAE,KAAK,CAAA;AAChD,QAAA,IAAI,GAAA,EAAK;AAAE,UAAA,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,GAAI,GAAA;AAAK,UAAA,KAAA,GAAQ,KAAA;AAAA,QAAO;AAAA,MAChD;AACA,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,OAAO,KAAA;AAAA,IACT,GAAG,CAAC,SAAA,EAAW,UAAU,UAAA,EAAY,oBAAA,EAAsB,aAAa,CAAC,CAAA;AAEzE,IAAA,MAAM,oBAAA,GAAuBA,kBAAY,MAAe;AACtD,MAAA,MAAM,OAAmB,EAAC;AAC1B,MAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,MAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,QAAA,MAAM,MAAM,qBAAA,CAAsB,CAAA,EAAG,cAAA,CAAe,CAAA,CAAE,EAAE,CAAC,CAAA;AACzD,QAAA,IAAI,GAAA,EAAK;AAAE,UAAA,IAAA,CAAK,CAAA,CAAE,EAAE,CAAA,GAAI,GAAA;AAAK,UAAA,KAAA,GAAQ,KAAA;AAAA,QAAO;AAAA,MAC9C;AACA,MAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,MAAA,OAAO,KAAA;AAAA,IACT,CAAA,EAAG,CAAC,SAAA,EAAW,cAAA,EAAgB,qBAAqB,CAAC,CAAA;AAIrD,IAAA,MAAM,WAAA,GAAcA,kBAAY,MAA4B;AAC1D,MAAA,MAAM,IAA+B,EAAC;AACtC,MAAA,MAAM,UAA2C,EAAC;AAElD,MAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,QAAA,IAAI,QAAA,CAAS,gBAAgB,SAAA,EAAW;AACxC,QAAA,MAAM,QAAA,GAAW,cAAA,CAAe,QAAA,CAAS,EAAE,CAAA;AAC3C,QAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,EAAA,EAAI;AAE/C,QAAA,IAAI,MAAA,GAAS,OAAO,QAAQ,CAAA;AAC5B,QAAA,IAAI,QAAA,GAAW,CAAA;AAGf,QAAA,IAAI,QAAA,CAAS,WAAA,KAAgB,QAAA,IAAY,QAAA,CAAS,SAAS,MAAA,EAAQ;AACjE,UAAA,MAAM,MAAA,GAAS,SAAS,OAAA,CAAQ,IAAA;AAAA,YAC9B,CAAC,CAAA,KAAsB,MAAA,CAAO,EAAE,EAAE,CAAA,KAAM,OAAO,QAAQ;AAAA,WACzD;AACA,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA,MAAA,GAAS,MAAA,CAAO,IAAA;AAChB,YAAA,QAAA,GAAW,OAAO,MAAA,CAAO,EAAA,KAAO,QAAA,GAAW,MAAA,CAAO,EAAA,GAAK,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,EAAG,EAAE,CAAA,IAAK,CAAA;AAAA,UAC5F;AAAA,QACF;AAEA,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAChC,QAAA,CAAA,CAAE,KAAK,IAAI,EAAE,MAAA,EAAQ,WAAW,QAAA,EAAU,IAAA,EAAM,SAAS,IAAA,EAAK;AAC9D,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,WAAA,EAAa,QAAA,CAAS,EAAA,EAAI,IAAA,EAAM,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,CAAA;AAAA,MAC7F;AAEA,MAAA,OAAO,EAAE,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,UAAA,EAAY,GAAG,OAAA,EAAQ;AAAA,IAC9D,GAAG,CAAC,SAAA,EAAW,UAAU,UAAA,EAAY,SAAA,EAAW,cAAc,CAAC,CAAA;AAI/D,IAAA,MAAM,mBAAA,GAAsBA,iBAAAA,CAAY,CAAC,IAAA,EAAc,KAAA,KAAkB;AACvE,MAAA,MAAM,SAAS,IAAA,KAAS,WAAA,GAAc,YAAA,GAAe,IAAA,KAAS,aAAa,WAAA,GAAc,aAAA;AACzF,MAAA,MAAA,CAAO,KAAK,CAAA;AAEZ,MAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACxB,QAAA,MAAM,GAAA,GAAM,oBAAA,CAAqB,IAAA,EAAM,KAAK,CAAA;AAC5C,QAAA,gBAAA,CAAiB,CAAA,IAAA,KAAQ;AACvB,UAAA,IAAI,GAAA,SAAY,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,GAAA,EAAI;AACvC,UAAA,MAAM,EAAE,CAAC,IAAI,GAAG,CAAA,EAAG,GAAG,MAAK,GAAI,IAAA;AAC/B,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA,EAAG,CAAC,cAAA,EAAgB,oBAAoB,CAAC,CAAA;AAEzC,IAAA,MAAM,iBAAA,GAAoBA,iBAAAA,CAAY,CAAC,IAAA,EAAc,KAAA,KAAkB;AACrE,MAAA,iBAAA,CAAkB,CAAA,IAAA,MAAS,EAAE,GAAG,IAAA,EAAM,CAAC,IAAI,GAAG,MAAK,CAAE,CAAA;AACrD,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,MAAM,GAAA,GAAM,oBAAA,CAAqB,IAAA,EAAM,KAAK,CAAA;AAC5C,QAAA,gBAAA,CAAiB,CAAA,IAAA,KAAQ;AACvB,UAAA,IAAI,GAAA,SAAY,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,GAAA,EAAI;AACvC,UAAA,MAAM,EAAE,CAAC,IAAI,GAAG,CAAA,EAAG,GAAG,MAAK,GAAI,IAAA;AAC/B,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA,EAAG,CAAC,cAAA,EAAgB,oBAAoB,CAAC,CAAA;AAEzC,IAAA,MAAM,oBAAA,GAAuBA,iBAAAA,CAAY,CAAC,UAAA,EAAoB,KAAA,KAAqC;AACjG,MAAA,iBAAA,CAAkB,CAAA,IAAA,MAAS,EAAE,GAAG,IAAA,EAAM,CAAC,UAAU,GAAG,OAAM,CAAE,CAAA;AAC5D,MAAA,kBAAA,CAAmB,CAAA,IAAA,MAAS,EAAE,GAAG,IAAA,EAAM,CAAC,UAAU,GAAG,MAAK,CAAE,CAAA;AAE5D,MAAA,IAAI,eAAA,CAAgB,UAAU,CAAA,EAAG;AAC/B,QAAA,MAAM,WAAW,SAAA,CAAU,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,UAAU,CAAA;AACxD,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,QAAA,EAAU,KAAK,CAAA;AACjD,UAAA,iBAAA,CAAkB,CAAA,IAAA,KAAQ;AACxB,YAAA,IAAI,GAAA,SAAY,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,GAAA,EAAI;AAC7C,YAAA,MAAM,EAAE,CAAC,UAAU,GAAG,CAAA,EAAG,GAAG,MAAK,GAAI,IAAA;AACrC,YAAA,OAAO,IAAA;AAAA,UACT,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAA,EAAG,CAAC,eAAA,EAAiB,SAAA,EAAW,qBAAqB,CAAC,CAAA;AAEtD,IAAA,MAAM,kBAAA,GAAqBA,iBAAAA,CAAY,CAAC,UAAA,KAAuB;AAC7D,MAAA,kBAAA,CAAmB,CAAA,IAAA,MAAS,EAAE,GAAG,IAAA,EAAM,CAAC,UAAU,GAAG,MAAK,CAAE,CAAA;AAC5D,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,MAAM,WAAW,SAAA,CAAU,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,UAAU,CAAA;AACxD,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,QAAA,EAAU,cAAA,CAAe,UAAU,CAAC,CAAA;AACtE,UAAA,iBAAA,CAAkB,CAAA,IAAA,KAAQ;AACxB,YAAA,IAAI,GAAA,SAAY,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,GAAA,EAAI;AAC7C,YAAA,MAAM,EAAE,CAAC,UAAU,GAAG,CAAA,EAAG,GAAG,MAAK,GAAI,IAAA;AACrC,YAAA,OAAO,IAAA;AAAA,UACT,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF,GAAG,CAAC,cAAA,EAAgB,SAAA,EAAW,cAAA,EAAgB,qBAAqB,CAAC,CAAA;AAErE,IAAA,MAAM,YAAA,GAAeA,iBAAAA,CAAY,CAAC,CAAA,KAAuB;AACvD,MAAA,CAAA,CAAE,cAAA,EAAe;AAGjB,MAAA,MAAM,oBAA6C,EAAC;AACpD,MAAA,KAAA,MAAW,CAAA,IAAK,aAAA,EAAe,iBAAA,CAAkB,CAAA,CAAE,IAAI,CAAA,GAAI,IAAA;AAC3D,MAAA,iBAAA,CAAkB,iBAAiB,CAAA;AAEnC,MAAA,MAAM,cAAuC,EAAC;AAC9C,MAAA,KAAA,MAAW,CAAA,IAAK,SAAA,EAAW,WAAA,CAAY,CAAA,CAAE,EAAE,CAAA,GAAI,IAAA;AAC/C,MAAA,kBAAA,CAAmB,WAAW,CAAA;AAE9B,MAAA,MAAM,eAAe,mBAAA,EAAoB;AACzC,MAAA,MAAM,iBAAiB,oBAAA,EAAqB;AAE5C,MAAA,IAAI,gBAAgB,cAAA,EAAgB;AAClC,QAAA,QAAA,CAAS,aAAa,CAAA;AAAA,MACxB;AAAA,IACF,CAAA,EAAG,CAAC,aAAA,EAAe,SAAA,EAAW,qBAAqB,oBAAA,EAAsB,QAAA,EAAU,WAAW,CAAC,CAAA;AAI/F,IAAAI,yBAAAA,CAAoB,KAAK,OAAO;AAAA,MAC9B,OAAO,MAAM;AACX,QAAA,YAAA,CAAa,aAAA,EAAe,aAAa,EAAE,CAAA;AAC3C,QAAA,WAAA,CAAY,aAAA,EAAe,YAAY,EAAE,CAAA;AACzC,QAAA,aAAA,CAAc,aAAA,EAAe,SAAS,EAAE,CAAA;AACxC,QAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,QAAA,iBAAA,CAAkB,EAAE,CAAA;AACpB,QAAA,IAAI,eAAe,SAAA,EAAW;AAC5B,UAAA,MAAM,OAAmB,EAAC;AAC1B,UAAA,KAAA,MAAW,CAAC,KAAK,GAAG,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,SAAS,CAAA,EAAG;AAChE,YAAA,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA,GAAI,GAAA;AAAA,UACtB;AACA,UAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,QACxB,CAAA,MAAO;AACL,UAAA,iBAAA,CAAkB,EAAE,CAAA;AAAA,QACtB;AACA,QAAA,iBAAA,CAAkB,EAAE,CAAA;AACpB,QAAA,kBAAA,CAAmB,EAAE,CAAA;AAAA,MACvB,CAAA;AAAA,MACA,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,QAAA,IAAI,IAAA,CAAK,SAAA,KAAc,MAAA,EAAW,YAAA,CAAa,KAAK,SAAS,CAAA;AAC7D,QAAA,IAAI,IAAA,CAAK,QAAA,KAAa,MAAA,EAAW,WAAA,CAAY,KAAK,QAAQ,CAAA;AAC1D,QAAA,IAAI,IAAA,CAAK,KAAA,KAAU,MAAA,EAAW,aAAA,CAAc,KAAK,KAAK,CAAA;AAAA,MACxD;AAAA,KACF,CAAA,EAAI,CAAC,aAAa,CAAC,CAAA;AAInB,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,YAAA,EAAc,WAAW,YAAA,IAAgB,MAAA;AAAA,MACzC,KAAA,EAAO,WAAW,KAAA,IAAS,gCAAA;AAAA,MAC3B,OAAA,EAAS,WAAW,OAAA,IAAW,4CAAA;AAAA,MAC/B,KAAA,EAAO,WAAW,KAAA,IAAS,4CAAA;AAAA,MAC3B,UAAA,EAAY,WAAW,UAAA,IAAc,gBAAA;AAAA,MACrC,QAAA,EAAU,WAAW,QAAA,IAAY,sCAAA;AAAA,MACjC,QAAA,EAAU,WAAW,QAAA,IAAY,4BAAA;AAAA,MACjC,SAAA,EAAW,WAAW,SAAA,IAAa,2BAAA;AAAA,MACnC,MAAA,EAAQ,WAAW,MAAA,IAAU;AAAA,KAC/B;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KACpB,QAAA,GAAWC,GAAAA,CAAG,OAAO,KAAA,EAAO,MAAA,CAAO,UAAU,CAAA,GAAI,MAAA,CAAO,KAAA;AAI1D,IAAA,MAAM,qBAAqB,CAAC,IAAA,EAAc,KAAA,EAAe,KAAA,EAAe,OAAO,MAAA,KAAW;AACxF,MAAA,MAAM,OAAA,GAAU,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACjC,MAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,MAAA,CAAA;AAC1B,MAAA,MAAM,UAAA,GAAa,iBAAiB,IAAI,CAAA;AACxC,MAAA,MAAM,UAAA,GAAa,iBAAiB,IAAI,CAAA;AACxC,MAAA,MAAM,QAAQ,cAAA,CAAe,IAAI,CAAA,GAAI,aAAA,CAAc,IAAI,CAAA,GAAI,MAAA;AAC3D,MAAA,MAAM,QAAA,GAAW,CAAC,CAAC,KAAA;AAEnB,MAAA,uBACER,eAAAA,CAAC,KAAA,EAAA,EAAe,SAAA,EAAW,OAAO,YAAA,EAChC,QAAA,EAAA;AAAA,wBAAAA,gBAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,OAAO,KAAA,EACxC,QAAA,EAAA;AAAA,UAAA,KAAA;AAAA,UACA,UAAA,oBAAcC,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EAAoB,aAAA,EAAY,QAAO,QAAA,EAAA,GAAA,EAAC;AAAA,SAAA,EACzE,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,IAAA;AAAA,YACA,IAAA;AAAA,YACA,KAAA;AAAA,YACA,QAAA,EAAU,UAAA;AAAA,YACV,UAAU,CAAC,CAAA,KAAM,oBAAoB,IAAA,EAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACzD,MAAA,EAAQ,MAAM,iBAAA,CAAkB,IAAA,EAAM,IAAA,KAAS,cAAc,SAAA,GAAY,IAAA,KAAS,UAAA,GAAa,QAAA,GAAW,UAAU,CAAA;AAAA,YACpH,WAAWO,GAAAA,CAAG,YAAA,CAAa,QAAQ,CAAA,EAAG,UAAA,GAAa,kCAAkC,EAAE,CAAA;AAAA,YACvF,cAAA,EAAc,WAAW,MAAA,GAAS,OAAA;AAAA,YAClC,kBAAA,EAAkB,WAAW,OAAA,GAAU,MAAA;AAAA,YACvC,eAAA,EAAe,aAAa,MAAA,GAAS;AAAA;AAAA,SACvC;AAAA,QACC,QAAA,oBACCP,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM;AAAA,OAAA,EAAA,EAnB3D,IAqBV,CAAA;AAAA,IAEJ,CAAA;AAIA,IAAA,MAAM,mBAAA,GAAsB,CAAC,QAAA,KAAuB;AAClD,MAAA,MAAM,OAAA,GAAU,CAAA,EAAG,MAAM,CAAA,GAAA,EAAM,SAAS,EAAE,CAAA,CAAA;AAC1C,MAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,MAAA,CAAA;AAC1B,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,QAAA,CAAS,EAAE,CAAA;AACxC,MAAA,MAAM,KAAA,GAAQ,gBAAgB,QAAA,CAAS,EAAE,IAAI,cAAA,CAAe,QAAA,CAAS,EAAE,CAAA,GAAI,MAAA;AAC3E,MAAA,MAAM,QAAA,GAAW,CAAC,CAAC,KAAA;AAEnB,MAAA,MAAM,SAAA,GAAY;AAAA,QAChB,cAAA,EAAgB,WAAW,IAAA,GAAgB,MAAA;AAAA,QAC3C,kBAAA,EAAoB,WAAW,OAAA,GAAU,MAAA;AAAA,QACzC,eAAA,EAAiB,SAAS,QAAA,IAAY;AAAA,OACxC;AAEA,MAAA,QAAQ,SAAS,WAAA;AAAa,QAC5B,KAAK,SAAA;AACH,UAAA,uBACEA,eAAC,IAAA,EAAA,EAAqB,SAAA,EAAW,OAAO,OAAA,EACrC,QAAA,EAAA,QAAA,CAAS,IAAA,EAAA,EADH,QAAA,CAAS,EAElB,CAAA;AAAA,QAGJ,KAAK,YAAA;AACH,UAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAsB,SAAA,EAAW,OAAO,YAAA,EACvC,QAAA,EAAA;AAAA,4BAAAA,gBAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,OAAO,KAAA,EACxC,QAAA,EAAA;AAAA,cAAA,QAAA,CAAS,IAAA;AAAA,cACT,QAAA,CAAS,4BAAYC,cAAAA,CAAC,UAAK,SAAA,EAAU,mBAAA,EAAoB,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,GAAA,EAAC;AAAA,aAAA,EAChF,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,OAAA;AAAA,gBACJ,IAAA,EAAK,MAAA;AAAA,gBACL,OAAQ,KAAA,IAAoB,EAAA;AAAA,gBAC5B,QAAA,EAAU,CAAC,CAAA,KAAM,oBAAA,CAAqB,SAAS,EAAA,EAAI,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACjE,MAAA,EAAQ,MAAM,kBAAA,CAAmB,QAAA,CAAS,EAAE,CAAA;AAAA,gBAC5C,WAAA,EAAa,SAAS,QAAA,EAAU,WAAA;AAAA,gBAChC,SAAA,EAAW,aAAa,QAAQ,CAAA;AAAA,gBAC/B,GAAG;AAAA;AAAA,aACN;AAAA,YACC,QAAA,CAAS,6BAAaA,cAAAA,CAAC,OAAE,SAAA,EAAW,MAAA,CAAO,QAAA,EAAW,QAAA,EAAA,QAAA,CAAS,SAAA,EAAU,CAAA;AAAA,YACzE,QAAA,oBAAYA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EAAA,EAhBtE,SAAS,EAiBnB,CAAA;AAAA,QAGJ,KAAK,WAAA;AACH,UAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAsB,SAAA,EAAW,OAAO,YAAA,EACvC,QAAA,EAAA;AAAA,4BAAAA,gBAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,OAAO,KAAA,EACxC,QAAA,EAAA;AAAA,cAAA,QAAA,CAAS,IAAA;AAAA,cACT,QAAA,CAAS,4BAAYC,cAAAA,CAAC,UAAK,SAAA,EAAU,mBAAA,EAAoB,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,GAAA,EAAC;AAAA,aAAA,EAChF,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,OAAA;AAAA,gBACJ,OAAQ,KAAA,IAAoB,EAAA;AAAA,gBAC5B,QAAA,EAAU,CAAC,CAAA,KAAM,oBAAA,CAAqB,SAAS,EAAA,EAAI,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACjE,MAAA,EAAQ,MAAM,kBAAA,CAAmB,QAAA,CAAS,EAAE,CAAA;AAAA,gBAC5C,WAAA,EAAa,SAAS,QAAA,EAAU,WAAA;AAAA,gBAChC,IAAA,EAAM,CAAA;AAAA,gBACN,SAAA,EAAW,aAAa,QAAQ,CAAA;AAAA,gBAC/B,GAAG;AAAA;AAAA,aACN;AAAA,YACC,QAAA,CAAS,6BAAaA,cAAAA,CAAC,OAAE,SAAA,EAAW,MAAA,CAAO,QAAA,EAAW,QAAA,EAAA,QAAA,CAAS,SAAA,EAAU,CAAA;AAAA,YACzE,QAAA,oBAAYA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EAAA,EAhBtE,SAAS,EAiBnB,CAAA;AAAA,QAGJ,KAAK,QAAA;AACH,UAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAsB,SAAA,EAAW,OAAO,YAAA,EACvC,QAAA,EAAA;AAAA,4BAAAA,gBAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,OAAO,KAAA,EACxC,QAAA,EAAA;AAAA,cAAA,QAAA,CAAS,IAAA;AAAA,cACT,QAAA,CAAS,4BAAYC,cAAAA,CAAC,UAAK,SAAA,EAAU,mBAAA,EAAoB,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,GAAA,EAAC;AAAA,aAAA,EAChF,CAAA;AAAA,4BACAD,eAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,OAAA;AAAA,gBACJ,OAAQ,KAAA,IAA6B,EAAA;AAAA,gBACrC,QAAA,EAAU,CAAC,CAAA,KAAM,oBAAA,CAAqB,SAAS,EAAA,EAAI,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACjE,MAAA,EAAQ,MAAM,kBAAA,CAAmB,QAAA,CAAS,EAAE,CAAA;AAAA,gBAC5C,SAAA,EAAW,aAAa,QAAQ,CAAA;AAAA,gBAC/B,GAAG,SAAA;AAAA,gBAEJ,QAAA,EAAA;AAAA,kCAAAC,cAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAG,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,kBAChC,QAAA,CAAS,OAAA,EAAS,GAAA,CAAI,CAAC,2BACtBA,cAAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,OAAO,EAAA,EACnC,QAAA,EAAA,MAAA,CAAO,IAAA,EAAA,EADG,MAAA,CAAO,EAEpB,CACD;AAAA;AAAA;AAAA,aACH;AAAA,YACC,QAAA,CAAS,6BAAaA,cAAAA,CAAC,OAAE,SAAA,EAAW,MAAA,CAAO,QAAA,EAAW,QAAA,EAAA,QAAA,CAAS,SAAA,EAAU,CAAA;AAAA,YACzE,QAAA,oBAAYA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EAAA,EArBtE,SAAS,EAsBnB,CAAA;AAAA,QAGJ,KAAK,QAAA;AACH,UAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAsB,SAAA,EAAW,OAAO,YAAA,EACvC,QAAA,EAAA;AAAA,4BAAAA,gBAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,OAAO,KAAA,EACxC,QAAA,EAAA;AAAA,cAAA,QAAA,CAAS,IAAA;AAAA,cACT,QAAA,CAAS,4BAAYC,cAAAA,CAAC,UAAK,SAAA,EAAU,mBAAA,EAAoB,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,GAAA,EAAC;AAAA,aAAA,EAChF,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,OAAA;AAAA,gBACJ,IAAA,EAAK,QAAA;AAAA,gBACL,OAAQ,KAAA,IAAoB,EAAA;AAAA,gBAC5B,QAAA,EAAU,CAAC,CAAA,KAAM,oBAAA,CAAqB,SAAS,EAAA,EAAI,CAAA,CAAE,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,IAAI,EAAE,CAAA;AAAA,gBAC/F,MAAA,EAAQ,MAAM,kBAAA,CAAmB,QAAA,CAAS,EAAE,CAAA;AAAA,gBAC5C,GAAA,EAAK,SAAS,QAAA,EAAU,GAAA;AAAA,gBACxB,GAAA,EAAK,SAAS,QAAA,EAAU,GAAA;AAAA,gBACxB,WAAA,EAAa,SAAS,QAAA,EAAU,WAAA;AAAA,gBAChC,SAAA,EAAW,aAAa,QAAQ,CAAA;AAAA,gBAC/B,GAAG;AAAA;AAAA,aACN;AAAA,YACC,QAAA,CAAS,6BAAaA,cAAAA,CAAC,OAAE,SAAA,EAAW,MAAA,CAAO,QAAA,EAAW,QAAA,EAAA,QAAA,CAAS,SAAA,EAAU,CAAA;AAAA,YACzE,QAAA,oBAAYA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EAAA,EAlBtE,SAAS,EAmBnB,CAAA;AAAA,QAGJ,KAAK,MAAA;AACH,UAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAsB,SAAA,EAAW,OAAO,YAAA,EACvC,QAAA,EAAA;AAAA,4BAAAA,gBAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,OAAO,KAAA,EACxC,QAAA,EAAA;AAAA,cAAA,QAAA,CAAS,IAAA;AAAA,cACT,QAAA,CAAS,4BAAYC,cAAAA,CAAC,UAAK,SAAA,EAAU,mBAAA,EAAoB,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,GAAA,EAAC;AAAA,aAAA,EAChF,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,OAAA;AAAA,gBACJ,IAAA,EAAK,MAAA;AAAA,gBACL,OAAQ,KAAA,IAAoB,EAAA;AAAA,gBAC5B,QAAA,EAAU,CAAC,CAAA,KAAM,oBAAA,CAAqB,SAAS,EAAA,EAAI,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACjE,MAAA,EAAQ,MAAM,kBAAA,CAAmB,QAAA,CAAS,EAAE,CAAA;AAAA,gBAC5C,SAAA,EAAW,aAAa,QAAQ,CAAA;AAAA,gBAC/B,GAAG;AAAA;AAAA,aACN;AAAA,YACC,QAAA,CAAS,6BAAaA,cAAAA,CAAC,OAAE,SAAA,EAAW,MAAA,CAAO,QAAA,EAAW,QAAA,EAAA,QAAA,CAAS,SAAA,EAAU,CAAA;AAAA,YACzE,QAAA,oBAAYA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EAAA,EAftE,SAAS,EAgBnB,CAAA;AAAA,QAGJ,KAAK,OAAA;AACH,UAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAsB,SAAA,EAAW,OAAO,YAAA,EACvC,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,8BAAAC,cAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAI,OAAA;AAAA,kBACJ,IAAA,EAAK,UAAA;AAAA,kBACL,OAAA,EAAS,CAAC,CAAC,KAAA;AAAA,kBACX,QAAA,EAAU,CAAC,CAAA,KAAM,oBAAA,CAAqB,SAAS,EAAA,EAAI,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,kBACnE,MAAA,EAAQ,MAAM,kBAAA,CAAmB,QAAA,CAAS,EAAE,CAAA;AAAA,kBAC5C,WAAW,MAAA,CAAO,QAAA;AAAA,kBACjB,GAAG;AAAA;AAAA,eACN;AAAA,8BACAD,eAAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,WAAU,SAAA,EAChC,QAAA,EAAA;AAAA,gBAAA,QAAA,CAAS,IAAA;AAAA,gBACT,QAAA,CAAS,4BAAYC,cAAAA,CAAC,UAAK,SAAA,EAAU,mBAAA,EAAoB,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,GAAA,EAAC;AAAA,eAAA,EAChF;AAAA,aAAA,EACF,CAAA;AAAA,YACC,QAAA,CAAS,6BAAaA,cAAAA,CAAC,OAAE,SAAA,EAAW,MAAA,CAAO,QAAA,EAAW,QAAA,EAAA,QAAA,CAAS,SAAA,EAAU,CAAA;AAAA,YACzE,QAAA,oBAAYA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EAAA,EAjBtE,SAAS,EAkBnB,CAAA;AAAA,QAGJ;AACE,UAAA,OAAO,IAAA;AAAA;AACX,IACF,CAAA;AAEA,IAAA,uBACED,eAAAA,CAAC,MAAA,EAAA,EAAK,UAAU,YAAA,EAAc,SAAA,EAAsB,YAAU,IAAA,EAC3D,QAAA,EAAA;AAAA,MAAA,kBAAA,CAAmB,WAAA,EAAa,cAAc,SAAS,CAAA;AAAA,MACvD,kBAAA,CAAmB,UAAA,EAAY,WAAA,EAAa,QAAQ,CAAA;AAAA,MACpD,kBAAA,CAAmB,OAAA,EAAS,OAAA,EAAS,UAAA,EAAY,OAAO,CAAA;AAAA,MACxD,SAAA,CAAU,IAAI,mBAAmB,CAAA;AAAA,sBAClCC,eAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAW,MAAA,CAAO,QACrC,QAAA,EAAA,WAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;ACvfjC,IAAM,MAAA,GAAqB;AAAA,EACzB,EAAE,IAAA,EAAM,iBAAA,EAAmB,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACrD,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,cAAA,EAAe;AAAA,EAC7C,EAAE,IAAA,EAAM,oBAAA,EAAsB,KAAA,EAAO,sBAAA;AACvC,CAAA;AAoBO,IAAM,iBAAA,GAAoBI,gBAAAA;AAAA,EAC/B,CACE;AAAA,IACE,QAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA,GAAiB,IAAA;AAAA,IACjB,WAAA,GAAc,iBAAA;AAAA,IACd,SAAA,GAAY,EAAA;AAAA,IACZ,aAAa;AAAC,KAEhB,GAAA,KACG;AACH,IAAA,MAAM,SAASC,WAAAA,EAAM;AACrB,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIJ,cAAAA,CAAkC;AAAA,MAC5D,eAAA,EAAiB,EAAA;AAAA,MACjB,WAAA,EAAa,EAAA;AAAA,MACb,kBAAA,EAAoB;AAAA,KACrB,CAAA;AACD,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAAA,CAAiE,EAAE,CAAA;AAC/F,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,cAAAA,CAAkE,EAAE,CAAA;AAElG,IAAA,MAAM,aAAA,GAAgBC,iBAAAA;AAAA,MACpB,CAAC,IAAA,EAAqC,GAAA,EAAa,SAAA,KAAsD;AACvG,QAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,IAAA,EAAK,KAAM,IAAI,OAAO,wBAAA;AACtC,QAAA,IAAI,IAAA,KAAS,oBAAA,IAAwB,GAAA,KAAQ,SAAA,CAAU,WAAA,EAAa;AAClE,UAAA,OAAO,wBAAA;AAAA,QACT;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,MACA;AAAC,KACH;AAEA,IAAA,MAAM,YAAA,GAAeA,iBAAAA;AAAA,MACnB,CAAC,CAAA,KAAwC;AACvC,QAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,IAAI,aAAA,CAAc,MAAM,IAAA,EAAM,CAAA,CAAE,MAAM,IAAI,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,QAC1D;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,MACA,CAAC,aAAa;AAAA,KAChB;AAEA,IAAA,MAAM,YAAA,GAAeA,iBAAAA;AAAA,MACnB,CAAC,MAAqC,GAAA,KAAgB;AACpD,QAAA,MAAM,YAAY,EAAE,GAAG,QAAQ,CAAC,IAAI,GAAG,GAAA,EAAI;AAC3C,QAAA,SAAA,CAAU,SAAS,CAAA;AAGnB,QAAA,IAAI,OAAA,CAAQ,IAAI,CAAA,EAAG;AACjB,UAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,EAAM,GAAA,EAAK,SAAS,CAAA;AAChD,UAAA,IAAI,CAAC,KAAA,EAAO;AACV,YAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAAE,cAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AAAG,cAAA,OAAO,KAAK,IAAI,CAAA;AAAG,cAAA,OAAO,IAAA;AAAA,YAAM,CAAC,CAAA;AAAA,UACnF;AAAA,QACF;AAGA,QAAA,IAAI,IAAA,KAAS,aAAA,IAAiB,OAAA,CAAQ,kBAAA,EAAoB;AACxD,UAAA,MAAM,YAAA,GAAe,aAAA,CAAc,oBAAA,EAAsB,SAAA,CAAU,oBAAoB,SAAS,CAAA;AAChG,UAAA,IAAI,YAAA,EAAc;AAChB,YAAA,SAAA,CAAU,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,kBAAA,EAAoB,cAAa,CAAE,CAAA;AAAA,UACrE,CAAA,MAAO;AACL,YAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAAE,cAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AAAG,cAAA,OAAO,IAAA,CAAK,kBAAA;AAAoB,cAAA,OAAO,IAAA;AAAA,YAAM,CAAC,CAAA;AAAA,UAChG;AAAA,QACF;AAEA,QAAA,QAAA,GAAW,SAAA,EAAW,YAAA,CAAa,SAAS,CAAC,CAAA;AAAA,MAC/C,CAAA;AAAA,MACA,CAAC,MAAA,EAAQ,OAAA,EAAS,aAAA,EAAe,UAAU,YAAY;AAAA,KACzD;AAEA,IAAA,MAAM,UAAA,GAAaA,iBAAAA;AAAA,MACjB,CAAC,IAAA,KAAwC;AACvC,QAAA,UAAA,CAAW,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,IAAA,EAAK,CAAE,CAAA;AAChD,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,QAAQ,aAAA,CAAc,IAAA,EAAM,MAAA,CAAO,IAAI,GAAG,MAAM,CAAA;AACtD,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,SAAA,CAAU,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,KAAA,EAAM,CAAE,CAAA;AAAA,UAClD,CAAA,MAAO;AACL,YAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAAE,cAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AAAG,cAAA,OAAO,KAAK,IAAI,CAAA;AAAG,cAAA,OAAO,IAAA;AAAA,YAAM,CAAC,CAAA;AAAA,UACnF;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,CAAC,cAAA,EAAgB,MAAA,EAAQ,aAAa;AAAA,KACxC;AAEA,IAAA,MAAM,YAAA,GAAeA,iBAAAA;AAAA,MACnB,CAAC,CAAA,KAAuB;AACtB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAM,aAAsC,EAAC;AAC7C,QAAA,MAAM,YAAoE,EAAC;AAC3E,QAAA,IAAI,OAAA,GAAU,IAAA;AACd,QAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AACzB,UAAA,MAAM,KAAA,GAAQ,cAAc,KAAA,CAAM,IAAA,EAAM,OAAO,KAAA,CAAM,IAAI,GAAG,MAAM,CAAA;AAClE,UAAA,IAAI,KAAA,EAAO;AAAE,YAAA,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAAO,YAAA,OAAA,GAAU,KAAA;AAAA,UAAO;AAAA,QAC/D;AACA,QAAA,UAAA,CAAW,UAAU,CAAA;AACrB,QAAA,SAAA,CAAU,SAAS,CAAA;AACnB,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,QAAA,CAAS,MAAM,CAAA;AACf,UAAA,SAAA,CAAU,EAAE,eAAA,EAAiB,EAAA,EAAI,aAAa,EAAA,EAAI,kBAAA,EAAoB,IAAI,CAAA;AAC1E,UAAA,SAAA,CAAU,EAAE,CAAA;AACZ,UAAA,UAAA,CAAW,EAAE,CAAA;AAAA,QACf;AAAA,MACF,CAAA;AAAA,MACA,CAAC,MAAA,EAAQ,aAAA,EAAe,QAAQ;AAAA,KAClC;AAEA,IAAAI,yBAAAA,CAAoB,KAAK,OAAO;AAAA,MAC9B,OAAO,MAAM;AACX,QAAA,SAAA,CAAU,EAAE,eAAA,EAAiB,EAAA,EAAI,aAAa,EAAA,EAAI,kBAAA,EAAoB,IAAI,CAAA;AAC1E,QAAA,SAAA,CAAU,EAAE,CAAA;AACZ,QAAA,UAAA,CAAW,EAAE,CAAA;AAAA,MACf,CAAA;AAAA,MACA,SAAA,EAAW,CAAC,OAAA,KAA8C;AACxD,QAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAClB,UAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,EAAK;AACzB,UAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,YAAA,IAAI,UAAU,MAAA,EAAW;AACvB,cAAA,MAAA,CAAO,GAAoC,CAAA,GAAI,KAAA;AAAA,YACjD;AAAA,UACF;AACA,UAAA,OAAO,MAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,KACF,CAAA,EAAI,EAAE,CAAA;AAEN,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,YAAA,EAAc,WAAW,YAAA,IAAgB,MAAA;AAAA,MACzC,KAAA,EAAO,WAAW,KAAA,IAAS,gCAAA;AAAA,MAC3B,KAAA,EAAO,WAAW,KAAA,IAAS,oCAAA;AAAA,MAC3B,UAAA,EAAY,WAAW,UAAA,IAAc,gBAAA;AAAA,MACrC,SAAA,EAAW,WAAW,SAAA,IAAa,2BAAA;AAAA,MACnC,MAAA,EAAQ,WAAW,MAAA,IAAU;AAAA,KAC/B;AAEA,IAAA,uBACEP,eAAAA,CAAC,MAAA,EAAA,EAAK,UAAU,YAAA,EAAc,SAAA,EAAsB,YAAU,IAAA,EAC3D,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACrB,QAAA,MAAM,OAAA,GAAU,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA,CAAA;AACvC,QAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,MAAA,CAAA;AAC1B,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AACpC,QAAA,MAAM,YAAY,SAAA,IAAa,KAAA;AAE/B,QAAA,uBACEA,eAAAA,CAAC,KAAA,EAAA,EAAqB,SAAA,EAAW,OAAO,YAAA,EACtC,QAAA,EAAA;AAAA,0BAAAA,gBAAC,OAAA,EAAA,EAAM,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,OAAO,KAAA,EACxC,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,KAAA;AAAA,4BACPC,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EAAoB,aAAA,EAAY,QAAO,QAAA,EAAA,GAAA,EAAC;AAAA,WAAA,EAC1D,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,OAAA;AAAA,cACJ,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,IAAA,EAAK,UAAA;AAAA,cACL,KAAA;AAAA,cACA,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,MAAM,IAAA,EAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACxD,MAAA,EAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAAA,cACnC,SAAA,EAAW,GAAG,MAAA,CAAO,KAAK,IAAI,SAAA,GAAY,MAAA,CAAO,aAAa,EAAE,CAAA,CAAA;AAAA,cAChE,cAAA,EAAc,YAAY,MAAA,GAAS,OAAA;AAAA,cACnC,kBAAA,EAAkB,YAAY,OAAA,GAAU,MAAA;AAAA,cACxC,eAAA,EAAc;AAAA;AAAA,WAChB;AAAA,UACC,SAAA,oBACCA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,OAAA,EAC/C,QAAA,EAAA,KAAA,EACH;AAAA,SAAA,EAAA,EApBM,MAAM,IAsBhB,CAAA;AAAA,MAEJ,CAAC,CAAA;AAAA,sBACDA,eAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAW,MAAA,CAAO,QACrC,QAAA,EAAA,WAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA","file":"index.js","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 * Renders a single form field based on question type\n */\nfunction FormField({\n question,\n value,\n error,\n onChange,\n classNames,\n}: {\n question: Question;\n value: string | number | boolean | undefined;\n error?: string;\n onChange: (value: string | number | boolean) => void;\n classNames?: BookingFormClassNames;\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 <p className={classNames?.helpText ?? defaultHelpText}>{question.help_text}</p>;\n };\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 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 <h3 className={classNames?.heading ?? defaultHeading}>\n {question.name}\n </h3>\n );\n\n case 'text_field':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\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 {renderHelpText()}\n {renderError()}\n </div>\n );\n\n case 'text_area':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\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 {renderHelpText()}\n {renderError()}\n </div>\n );\n\n case 'select':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\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 {renderHelpText()}\n {renderError()}\n </div>\n );\n\n case 'date':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\n <input\n id={inputId}\n type=\"date\"\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n min={question.settings?.min?.toString()}\n max={question.settings?.max?.toString()}\n className={inputClasses}\n {...ariaProps}\n />\n {renderHelpText()}\n {renderError()}\n </div>\n );\n\n case 'number':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\n {renderLabel()}\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 {renderHelpText()}\n {renderError()}\n </div>\n );\n\n case 'check':\n return (\n <div className={classNames?.fieldWrapper ?? defaultFieldWrapper}>\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 {renderHelpText()}\n {renderError()}\n </div>\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 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 // Check all conditions in conditional_answers\n // Each entry is { questionId: expectedAnswerValue }\n const conditionEntries = Object.entries(settings.conditional_answers as Record<string, unknown>);\n if (conditionEntries.length === 0) {\n return true;\n }\n\n // Question is visible if ANY condition is met\n return conditionEntries.some(([questionIdStr, expectedAnswer]) => {\n const questionId = Number(questionIdStr);\n const currentValue = (values as Record<string, unknown>)[String(questionId)];\n\n if (currentValue === undefined || currentValue === '' || currentValue === null) {\n return false;\n }\n\n // Selects typically store the option id (as string), but allow `{ id, name }` objects too\n const normalizedCurrent =\n typeof currentValue === 'object' && currentValue !== null && 'id' in (currentValue as any)\n ? (currentValue as any)\n : currentValue;\n\n // Build a set of candidate strings for comparison.\n // For select questions we support matching by BOTH option id and option name.\n const candidates = new Set<string>();\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 sourceQuestion = questions.find((q) => q.id === questionId);\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 if (sourceQuestion?.detail_type === 'select' && sourceQuestion.options?.length) {\n // Try to resolve the selected option via id or name.\n const currentStr = [...candidates][0] ?? '';\n const optionById = sourceQuestion.options.find((o) => String(o.id) === currentStr);\n const optionByName = sourceQuestion.options.find((o) => String(o.name).trim() === currentStr);\n const opt = optionById ?? optionByName;\n if (opt) {\n addCandidate(opt.id);\n addCandidate(opt.name);\n }\n }\n\n const matchesScalar = (expected: unknown) => {\n const expectedStr = String(expected).trim();\n return candidates.has(expectedStr);\n };\n\n // Support multiple expected formats:\n // - scalar: \"Consultation\" / \"1\" / 1 / true\n // - array: [\"Consultation\", \"Follow-up\"]\n // - map/object: { \"Consultation\": true }\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 // Get visible questions\n const visibleQuestions = questions.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 />\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 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 },\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.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] ? 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] ? questionErrors[question.id] : undefined;\n const hasError = !!error;\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 onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n placeholder={question.settings?.placeholder}\n className={inputClasses(hasError)}\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 onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n placeholder={question.settings?.placeholder}\n rows={4}\n className={inputClasses(hasError)}\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 onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={inputClasses(hasError)}\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 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={inputClasses(hasError)}\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 onChange={(e) => handleQuestionChange(question.id, e.target.value)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={inputClasses(hasError)}\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 onChange={(e) => handleQuestionChange(question.id, e.target.checked)}\n onBlur={() => handleQuestionBlur(question.id)}\n className={styles.checkbox}\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 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 <button type=\"submit\" className={styles.button}>\n {submitLabel}\n </button>\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"]}