@getcredify/credify-insurance-widget 1.7.2 → 1.10.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/credify-insurance-widget.css +1 -1
- package/dist/iframe/assets/iframe-BJWx1o2P.css +1 -0
- package/dist/iframe/assets/iframe-nZxuu7aJ.js +88 -0
- package/dist/iframe/assets/iframe-nZxuu7aJ.js.map +1 -0
- package/dist/iframe/iframe.html +2 -2
- package/dist/index.es.js +7186 -1112
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +40 -2
- package/dist/index.umd.js.map +1 -1
- package/package.json +3 -2
- package/dist/iframe/assets/iframe-5Q3mEx6K.js +0 -50
- package/dist/iframe/assets/iframe-5Q3mEx6K.js.map +0 -1
- package/dist/iframe/assets/iframe-CcbXvutI.css +0 -1
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/components/Field.tsx","../src/components/TextInput.tsx","../src/components/NumericInput.tsx","../src/components/EmailInput.tsx","../src/components/TelInput.tsx","../src/components/UrlInput.tsx","../src/components/PasswordInput.tsx","../src/components/TextArea.tsx","../src/components/DateInput.tsx","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/SelectInput.tsx","../src/components/AddressAutocomplete.tsx","../src/utils/form.ts","../src/components/FormRenderer.tsx","../src/utils/gtm.ts","../src/components/FormWizard.tsx","../src/utils/storage.ts","../src/utils/api.ts","../src/components/Rates.tsx","../src/utils/quoteToFormValues.ts","../src/components/Widget.tsx","../src/internal/WidgetController.tsx","../src/widget.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nexport type FieldProps = {\n id: string;\n label: string;\n hint?: string;\n error?: string;\n required?: boolean;\n className?: string;\n children: ReactNode;\n};\n\nexport function Field({ id, label, hint, error, required, className, children }: FieldProps) {\n return (\n <div className={className}>\n <label htmlFor={id} className=\"form-label\">\n {label} {required && <span className=\"text-red-600\">*</span>}\n </label>\n {children}\n {hint && !error && (\n <p id={`${id}-hint`} className=\"mt-1 text-sm text-slate-500\">\n {hint}\n </p>\n )}\n {error && (\n <p id={`${id}-error`} className=\"mt-1 text-sm text-red-600\">\n {error}\n </p>\n )}\n </div>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id'>;\n\nexport function TextInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n className={`form-input ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n required={required}\n {...rest}\n type=\"text\"\n />\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type'>;\n\nexport function NumericInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n type=\"number\"\n className={`form-input ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n required={required}\n {...rest}\n />\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type'>;\n\nexport function EmailInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n type=\"email\"\n className={`form-input ${error ? 'input-error' : ''}`}\n inputMode=\"email\"\n autoComplete=\"email\"\n required={required}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n {...rest}\n />\n </Field>\n );\n}\n","import { useState, useEffect, useRef } from 'react';\nimport type { InputHTMLAttributes, ChangeEvent } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> &\n Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type' | 'value' | 'onChange'> & {\n value?: string;\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n };\n\n/**\n * Formats a phone number string to (XXX) XXX - XXXX format\n * Only formats if there are 10 digits (US phone number)\n */\nfunction formatPhoneNumber(value: string): string {\n // Remove all non-digit characters\n const digits = value.replace(/\\D/g, '');\n\n // If we have 10 digits, format as (XXX) XXX - XXXX\n if (digits.length === 10) {\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)} - ${digits.slice(6)}`;\n }\n\n // If we have more than 10 digits, format the first 10\n if (digits.length > 10) {\n const tenDigits = digits.slice(0, 10);\n return `(${tenDigits.slice(0, 3)}) ${tenDigits.slice(3, 6)} - ${tenDigits.slice(6)}`;\n }\n\n // Partial formatting as user types\n if (digits.length >= 6) {\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)} - ${digits.slice(6)}`;\n }\n if (digits.length >= 3) {\n return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;\n }\n if (digits.length > 0) {\n return `(${digits}`;\n }\n\n return digits;\n}\n\n/**\n * Extracts only digits from a phone number string\n */\nfunction extractDigits(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\nexport function TelInput({ id, label, hint, error, required, className, value = '', onChange, ...rest }: Props) {\n const [displayValue, setDisplayValue] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n const cursorPositionRef = useRef<number>(0);\n\n // Update display value when prop value changes\n useEffect(() => {\n if (!value) {\n setDisplayValue('');\n return;\n }\n\n // Extract digits, handling cases where value might include +1 or just be digits\n let digits = extractDigits(value);\n\n // If value starts with +1 or 1, remove the leading 1 (country code)\n if (digits.length === 11 && digits.startsWith('1')) {\n digits = digits.slice(1);\n }\n\n // Limit to 10 digits for US phone numbers\n const limitedDigits = digits.slice(0, 10);\n setDisplayValue(formatPhoneNumber(limitedDigits));\n }, [value]);\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const inputValue = input.value;\n\n // Save cursor position before formatting\n cursorPositionRef.current = input.selectionStart || 0;\n\n // Extract digits from input\n const digits = extractDigits(inputValue);\n\n // Limit to 10 digits for US phone numbers\n const limitedDigits = digits.slice(0, 10);\n\n // Format the display value\n const formatted = formatPhoneNumber(limitedDigits);\n setDisplayValue(formatted);\n\n // Create a synthetic event with the unformatted digits (with +1 prefix)\n // The actual stored value will be +1 followed by the 10 digits\n const rawValue = limitedDigits.length === 10 ? `+1${limitedDigits}` : limitedDigits;\n\n // Create a new event with the raw value\n const syntheticEvent = {\n ...e,\n currentTarget: {\n ...e.currentTarget,\n value: rawValue\n },\n target: {\n ...e.target,\n value: rawValue\n }\n } as ChangeEvent<HTMLInputElement>;\n\n // Call the original onChange with the raw value\n onChange?.(syntheticEvent);\n\n // Restore cursor position after a short delay to allow React to update\n setTimeout(() => {\n if (inputRef.current) {\n // Calculate new cursor position based on formatting\n const beforeCursor = inputValue.slice(0, cursorPositionRef.current);\n const digitsBeforeCursor = extractDigits(beforeCursor);\n const formattedBeforeCursor = formatPhoneNumber(digitsBeforeCursor);\n // Position cursor at the end of the formatted text that corresponds to the digits before cursor\n const newPosition = Math.min(formattedBeforeCursor.length, formatted.length);\n inputRef.current.setSelectionRange(newPosition, newPosition);\n }\n }, 0);\n };\n\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <div\n className={`tel-input-wrapper flex items-center border rounded-lg transition-colors w-full relative ${\n error ? 'border-red-500 error' : 'border-[var(--accent-color)] focus-within:border-[var(--primary-color)]'\n }`}\n >\n <label\n htmlFor={id}\n className=\"px-3 py-3 text-slate-700 font-medium border-r border-[var(--accent-color)] bg-slate-50 flex-shrink-0 relative z-0 rounded-l-lg\"\n >\n +1\n </label>\n <input\n ref={inputRef}\n id={id}\n type=\"tel\"\n className={`flex-1 px-4 py-3 border-0 rounded-r-lg outline-none bg-transparent text-[var(--text-primary)] text-base ${\n error ? 'input-error' : ''\n }`}\n inputMode=\"tel\"\n autoComplete=\"tel\"\n required={required}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n value={displayValue}\n onChange={handleChange}\n {...rest}\n />\n </div>\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type'>;\n\nexport function UrlInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n type=\"url\"\n className={`form-input ${error ? 'input-error' : ''}`}\n inputMode=\"url\"\n autoComplete=\"url\"\n required={required}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n {...rest}\n />\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type'>;\n\nexport function PasswordInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n type=\"password\"\n className={`form-input ${error ? 'input-error' : ''}`}\n autoComplete=\"current-password\"\n required={required}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n {...rest}\n />\n </Field>\n );\n}\n","import type { TextareaHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'id'>;\n\nexport function TextArea({ id, label, hint, error, required, className, rows = 4, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <textarea\n id={id}\n rows={rows}\n className={`form-input ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n required={required}\n {...rest}\n />\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type'>;\n\nexport function DateInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n type=\"date\"\n className={`form-input ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n required={required}\n {...rest}\n />\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\n\ntype Props = {\n id: string;\n label: string;\n className?: string;\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'id'>;\n\nexport function Checkbox({ id, label, className, ...rest }: Props) {\n return (\n <label className={`checkbox-card ${className || ''}`} htmlFor={id}>\n <input id={id} type=\"checkbox\" className=\"checkbox-input\" {...rest} />\n <span className=\"checkbox-label\">{label}</span>\n </label>\n );\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react';\n\nexport function Radio({\n name,\n value,\n checked,\n onChange,\n children\n}: {\n name: string;\n value: string;\n checked?: boolean;\n onChange?: InputHTMLAttributes<HTMLInputElement>['onChange'];\n children: ReactNode;\n}) {\n return (\n <label className=\"radio-card\">\n <input className=\"radio-input\" type=\"radio\" name={name} value={value} checked={checked} onChange={onChange} />\n <span className=\"radio-label\">{children}</span>\n </label>\n );\n}\n\nexport function RadioGroup({\n legend,\n children,\n className,\n legendClassName // NEW\n}: {\n legend: string;\n className?: string; // still applies to <fieldset>\n legendClassName?: string; // NEW: applies to <legend>\n children: ReactNode;\n}) {\n return (\n <fieldset className={className}>\n <legend className={`mb-4 text-base font-medium ${legendClassName || ''}`} style={{ color: 'var(--text-primary)' }}>\n {legend}\n </legend>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">{children}</div>\n </fieldset>\n );\n}\n","import type { SelectHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\nexport type SelectOption = {\n value: string;\n label: string;\n disabled?: boolean;\n};\n\ntype Props = Omit<FieldProps, 'children'> &\n Omit<SelectHTMLAttributes<HTMLSelectElement>, 'id'> & {\n /** If provided, renders a disabled first option prompting selection */\n placeholder?: string;\n /** Provide options as data (or pass custom children instead) */\n options?: SelectOption[];\n };\n\nexport function SelectInput({ id, label, hint, error, required, className, placeholder, options, children, ...rest }: Props) {\n const describedBy = [hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined;\n\n const hasCustomChildren = !!children;\n\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <select\n id={id}\n className={`form-input select-caret ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n required={required}\n {...rest}\n >\n {placeholder && (\n <option value=\"\" disabled selected={!('value' in rest)}>\n {placeholder}\n </option>\n )}\n\n {hasCustomChildren\n ? children\n : options?.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n </Field>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\n// cspell:disable-next-line\nconst GOOGLE_MAPS_API_KEY = 'AIzaSyDjLdKLxoa-maLNGAyq_I_2r_Fe_TzFikw';\n\ntype AddressComponents = {\n streetNumber?: string;\n streetName?: string;\n city?: string;\n state?: string;\n zipCode?: string;\n country?: string;\n fullAddress?: string;\n};\n\ntype Props = Omit<FieldProps, 'children'> &\n Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type' | 'onChange'> & {\n onChange?: (value: string, components?: AddressComponents) => void;\n onPlaceSelect?: (place: google.maps.places.PlaceResult) => void;\n };\n\n// Load Google Maps script dynamically\nfunction loadGoogleMapsScript(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if script is already loaded\n if (window.google?.maps?.places) {\n resolve();\n return;\n }\n\n // Check if script is already being loaded\n const existingScript = document.querySelector('script[src*=\"maps.googleapis.com\"]');\n if (existingScript) {\n existingScript.addEventListener('load', () => resolve());\n existingScript.addEventListener('error', () => reject(new Error('Failed to load Google Maps script')));\n return;\n }\n\n // Create and load the script\n const script = document.createElement('script');\n script.src = `https://maps.googleapis.com/maps/api/js?key=${GOOGLE_MAPS_API_KEY}&libraries=places`;\n script.async = true;\n script.defer = true;\n script.onload = () => resolve();\n script.onerror = () => reject(new Error('Failed to load Google Maps script'));\n document.head.appendChild(script);\n });\n}\n\n// Extract address components from Google Places result\nfunction extractAddressComponents(place: google.maps.places.PlaceResult): AddressComponents {\n const components: AddressComponents = {\n fullAddress: place.formatted_address\n };\n\n if (place.address_components) {\n place.address_components.forEach((component) => {\n const types = component.types;\n\n if (types.includes('street_number')) {\n components.streetNumber = component.long_name;\n }\n if (types.includes('route')) {\n components.streetName = component.long_name;\n }\n if (types.includes('locality')) {\n components.city = component.long_name;\n }\n if (types.includes('administrative_area_level_1')) {\n components.state = component.short_name;\n }\n if (types.includes('postal_code')) {\n components.zipCode = component.long_name;\n }\n if (types.includes('country')) {\n components.country = component.short_name;\n }\n });\n }\n\n return components;\n}\n\nexport function AddressAutocomplete({ id, label, hint, error, required, className, onChange, onPlaceSelect, value, ...rest }: Props) {\n const inputRef = useRef<HTMLInputElement>(null);\n const autocompleteServiceRef = useRef<google.maps.places.AutocompleteService | null>(null);\n const placesServiceRef = useRef<google.maps.places.PlacesService | null>(null);\n const suggestionsContainerRef = useRef<HTMLDivElement>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [inputValue, setInputValue] = useState((value as string) || '');\n const [suggestions, setSuggestions] = useState<google.maps.places.AutocompletePrediction[]>([]);\n const [showSuggestions, setShowSuggestions] = useState(false);\n const [selectedIndex, setSelectedIndex] = useState(-1);\n\n // Use refs for state values used in event handlers to avoid dependency issues\n const suggestionsRef = useRef<google.maps.places.AutocompletePrediction[]>([]);\n const showSuggestionsRef = useRef(false);\n const selectedIndexRef = useRef(-1);\n\n // Keep refs in sync with state\n useEffect(() => {\n suggestionsRef.current = suggestions;\n }, [suggestions]);\n\n useEffect(() => {\n showSuggestionsRef.current = showSuggestions;\n }, [showSuggestions]);\n\n useEffect(() => {\n selectedIndexRef.current = selectedIndex;\n }, [selectedIndex]);\n\n useEffect(() => {\n // Update input value when value prop changes\n if (value !== undefined) {\n setInputValue(String(value));\n }\n }, [value]);\n\n // Debounce timer ref\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n if (!inputRef.current) return;\n\n let isMounted = true;\n\n // Load Google Maps script and initialize services\n loadGoogleMapsScript()\n .then(() => {\n if (!isMounted || !inputRef.current) return;\n\n // Initialize services\n autocompleteServiceRef.current = new google.maps.places.AutocompleteService();\n placesServiceRef.current = new google.maps.places.PlacesService(document.createElement('div'));\n\n setIsLoading(false);\n })\n .catch((err) => {\n console.error('Error loading Google Maps:', err);\n setIsLoading(false);\n });\n\n return () => {\n isMounted = false;\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n // Handle input changes with debouncing\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setInputValue(query);\n onChange?.(query);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (query.length < 3) {\n setSuggestions([]);\n setShowSuggestions(false);\n return;\n }\n\n // Debounce API calls\n debounceTimerRef.current = setTimeout(() => {\n if (!autocompleteServiceRef.current) return;\n\n autocompleteServiceRef.current.getPlacePredictions(\n {\n input: query,\n types: ['address']\n },\n (predictions, status) => {\n if (status === google.maps.places.PlacesServiceStatus.OK && predictions) {\n setSuggestions(predictions);\n setShowSuggestions(true);\n setSelectedIndex(-1);\n } else {\n setSuggestions([]);\n setShowSuggestions(false);\n }\n }\n );\n }, 300);\n };\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!showSuggestionsRef.current || suggestionsRef.current.length === 0) {\n if (e.key === 'Escape') {\n setShowSuggestions(false);\n showSuggestionsRef.current = false;\n }\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedIndex((prev) => {\n const newIndex = prev < suggestionsRef.current.length - 1 ? prev + 1 : prev;\n selectedIndexRef.current = newIndex;\n return newIndex;\n });\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedIndex((prev) => {\n const newIndex = prev > 0 ? prev - 1 : -1;\n selectedIndexRef.current = newIndex;\n return newIndex;\n });\n break;\n case 'Enter':\n e.preventDefault();\n if (selectedIndexRef.current >= 0 && selectedIndexRef.current < suggestionsRef.current.length) {\n handleSuggestionClick(suggestionsRef.current[selectedIndexRef.current]);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setShowSuggestions(false);\n showSuggestionsRef.current = false;\n break;\n }\n };\n\n // Handle clicks outside to close suggestions\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n suggestionsContainerRef.current &&\n !suggestionsContainerRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setShowSuggestions(false);\n showSuggestionsRef.current = false;\n }\n };\n\n if (showSuggestions) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [showSuggestions]);\n\n const handleSuggestionClick = (prediction: google.maps.places.AutocompletePrediction) => {\n if (!placesServiceRef.current) return;\n\n placesServiceRef.current.getDetails(\n {\n placeId: prediction.place_id,\n fields: ['address_components', 'formatted_address', 'geometry']\n },\n (place, status) => {\n if (status === google.maps.places.PlacesServiceStatus.OK && place) {\n const formattedAddress = place.formatted_address || '';\n setInputValue(formattedAddress);\n setShowSuggestions(false);\n setSuggestions([]);\n showSuggestionsRef.current = false;\n\n const addressComponents = extractAddressComponents(place);\n\n onChange?.(formattedAddress, addressComponents);\n onPlaceSelect?.(place);\n }\n }\n );\n };\n\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <div className=\"relative\">\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n className={`form-input ${error ? 'input-error' : ''}`}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n required={required}\n autoComplete=\"street-address\"\n placeholder={rest.placeholder || 'Enter an address'}\n disabled={isLoading || rest.disabled}\n {...rest}\n />\n {isLoading && <p className=\"mt-1 text-sm text-slate-500\">Loading address suggestions...</p>}\n\n {/* Suggestions dropdown */}\n {showSuggestions && suggestions.length > 0 && (\n <div\n ref={suggestionsContainerRef}\n className=\"absolute z-50 w-full mt-1 bg-white border border-slate-200 rounded-lg shadow-lg max-h-60 overflow-y-auto\"\n role=\"listbox\"\n >\n {suggestions.map((prediction, index) => (\n <div\n key={prediction.place_id}\n className={`px-4 py-3 cursor-pointer transition-colors ${\n index === selectedIndex ? 'bg-blue-50 text-slate-900' : 'bg-white text-slate-900 hover:bg-slate-50'\n } ${index < suggestions.length - 1 ? 'border-b border-slate-100' : ''}`}\n role=\"option\"\n aria-selected={index === selectedIndex}\n onClick={() => handleSuggestionClick(prediction)}\n onMouseEnter={() => setSelectedIndex(index)}\n >\n <div className=\"font-medium text-slate-900\">{prediction.structured_formatting.main_text}</div>\n {prediction.structured_formatting.secondary_text && (\n <div className=\"text-sm text-slate-500 mt-0.5\">{prediction.structured_formatting.secondary_text}</div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n </Field>\n );\n}\n","import type { Question } from '@getcredify/credify-insurance-types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type FormValues = Record<string, any>;\n\n// A single stage (screen) in the wizard\nexport type StageMeta<K extends string = string> = {\n key: string; // stage id\n title: string; // progress header label\n loadQuestions: () => Promise<ReadonlyArray<Question<K>>>; // lazy loader\n};\n\nexport function slugify(s: string) {\n return s\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '');\n}\n\nexport function ensureKey<KSelf extends string = string>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n q: Readonly<Question<KSelf, any, any>>,\n idx: number\n): string {\n return (q.key as string | undefined) ?? `${slugify(q.question)}-${idx}`;\n}\n\n// ----- per-stage validation (visible + required) -----\nexport function validateQuestions<KSelf extends string = string>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n questions: ReadonlyArray<Question<KSelf, any, any>>,\n values: Readonly<Record<string, unknown>>\n): Record<string, string | undefined> {\n const errors: Record<string, string | undefined> = {};\n\n const isBlank = (v: unknown) => v === undefined || v === null || (typeof v === 'string' && v.trim() === '');\n\n questions.forEach((q, i) => {\n const key = ensureKey(q, i);\n const val = values[key];\n\n if (!q.required) return;\n\n switch (q.inputType) {\n case 'checkbox':\n if (val !== true) errors[key] = 'Required';\n break;\n\n case 'radio':\n case 'select':\n if (isBlank(val)) errors[key] = 'Required';\n break;\n\n case 'number':\n // Treat '' / null / undefined as missing; 0 is valid\n if (val === undefined || val === null || (typeof val === 'string' && val.trim() === '')) {\n errors[key] = 'Required';\n }\n break;\n\n case 'date':\n case 'email':\n case 'tel':\n case 'url':\n case 'password':\n case 'text':\n case 'textarea':\n case 'address':\n default:\n if (isBlank(val)) errors[key] = 'Required';\n break;\n }\n });\n\n return errors;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function coerceNumber(v: any) {\n if (v === '' || v === null || v === undefined) return undefined;\n const n = Number(v);\n return Number.isNaN(n) ? undefined : n;\n}\n","import { useMemo, useState, useEffect } from 'react';\n\nimport type { Question } from '@getcredify/credify-insurance-types';\n\nimport {\n TextInput,\n NumericInput,\n EmailInput,\n TelInput,\n UrlInput,\n PasswordInput,\n TextArea,\n DateInput,\n Checkbox,\n Radio,\n RadioGroup,\n SelectInput,\n AddressAutocomplete\n} from './index';\n\nimport { slugify, validateQuestions, coerceNumber, type FormValues } from '../utils/form';\n\n/* ------------------------------------------------------------------ */\n/* Conditional evaluation utilities */\n/* ------------------------------------------------------------------ */\n\ntype ConditionalNode = NonNullable<Question['conditionals']>[number];\n\nfunction toNumber(x: unknown): number | null {\n if (typeof x === 'number' && Number.isFinite(x)) return x;\n if (typeof x === 'string' && x.trim() !== '' && !Number.isNaN(Number(x))) return Number(x);\n return null;\n}\nfunction toTime(x: unknown): number | null {\n if (x instanceof Date && !Number.isNaN(x.getTime())) return x.getTime();\n if (typeof x === 'string') {\n const t = Date.parse(x);\n return Number.isNaN(t) ? null : t;\n }\n return null;\n}\nfunction cmp(a: unknown, b: unknown): number | null {\n const na = toNumber(a),\n nb = toNumber(b);\n if (na != null && nb != null) return na - nb;\n const ta = toTime(a),\n tb = toTime(b);\n if (ta != null && tb != null) return ta - tb;\n if (a == null || b == null) return null;\n return String(a).localeCompare(String(b));\n}\nfunction contains(haystack: unknown, needle: unknown): boolean {\n if (Array.isArray(haystack)) return haystack.some((v) => v === needle);\n if (typeof haystack === 'string') return needle != null && haystack.includes(String(needle));\n return false;\n}\nfunction evalConditional(qValue: unknown, conditionalType: ConditionalNode['conditionalType'], conditionalValue: unknown): boolean {\n switch (conditionalType) {\n case 'equals':\n return qValue === conditionalValue;\n case 'lessThan': {\n const c = cmp(qValue, conditionalValue);\n return c != null && c < 0;\n }\n case 'greaterThan': {\n const c = cmp(qValue, conditionalValue);\n return c != null && c > 0;\n }\n case 'contains':\n return contains(qValue, conditionalValue);\n case 'startsWith':\n return qValue != null && conditionalValue != null && String(qValue).startsWith(String(conditionalValue));\n case 'endsWith':\n return qValue != null && conditionalValue != null && String(qValue).endsWith(String(conditionalValue));\n default:\n return false;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Path helpers (immutable) */\n/* ------------------------------------------------------------------ */\n\ntype ScopePath = Array<string | number>;\n\nfunction getIn(obj: unknown, path: ScopePath): unknown {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return path.reduce((acc: any, key) => (acc == null ? undefined : acc[key]), obj as any);\n}\nfunction setInImmutable<T extends object>(obj: T, path: ScopePath, value: unknown): T {\n if (path.length === 0) return obj;\n const [head, ...tail] = path;\n\n if (tail.length === 0) {\n if (typeof head === 'number') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const base = Array.isArray(obj) ? (obj as any[]) : [];\n const arr = base.slice();\n arr[head] = value;\n return arr as unknown as T;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { ...(obj as any), [head]: value } as T;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const current = (obj as any)?.[head];\n const nextContainer = typeof tail[0] === 'number' ? (Array.isArray(current) ? current : []) : current && typeof current === 'object' ? current : {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const next = setInImmutable(nextContainer as any, tail, value);\n\n if (typeof head === 'number') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const base = Array.isArray(obj) ? (obj as any[]) : [];\n const arr = base.slice();\n arr[head] = next;\n return arr as unknown as T;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { ...(obj as any), [head]: next } as T;\n}\n\n/** Read from a values object using a base scope plus a local key */\nfunction scopedRead(values: FormValues, scope: ScopePath | undefined, key: string) {\n return getIn(values, [...(scope ?? []), key]);\n}\n/** Write immutably to values at scope+key */\nfunction scopedWrite(values: FormValues, scope: ScopePath | undefined, key: string, v: unknown): FormValues {\n return setInImmutable(values, [...(scope ?? []), key], v);\n}\n\nconst ITEMS_SUFFIX = '__items';\nconst itemsKey = (k: string) => `${k}${ITEMS_SUFFIX}`;\n\n/* ------------------------------------------------------------------ */\n/* Key decoration (stable keys) */\n/* ------------------------------------------------------------------ */\n\nfunction decorateKeys(questions: Question[]): Question[] {\n const walk = (list: Question[], pathParts: string[]): Question[] =>\n list.map((q, qi) => {\n const parentPart = pathParts.length ? pathParts.join('__') : 'root';\n const baseKey = (q.key as string) ?? `${parentPart}__q${qi}_${String(q.question).slice(0, 24).replace(/\\W+/g, '-') || 'field'}`;\n\n const conds: readonly ConditionalNode[] = q.conditionals ?? [];\n const nextConds = conds.map((c, ci) => {\n const nested = c.conditionalQuestions\n ? walk(c.conditionalQuestions as unknown as Question[], [...pathParts, `${baseKey}__c${ci}`])\n : undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { ...c, conditionalQuestions: nested as any };\n });\n\n return { ...q, key: baseKey, conditionals: nextConds };\n });\n\n return walk(questions, []);\n}\n\n/** Coerce any unknown to a safe text input value */\nfunction asTextValue(v: unknown): string {\n if (v == null) return '';\n return typeof v === 'string' ? v : String(v);\n}\n\n/** Coerce to a number-control-safe value */\nfunction asNumberValue(v: unknown): string | number {\n if (v == null) return '';\n if (typeof v === 'number' && Number.isFinite(v)) return v;\n if (typeof v === 'string') return v; // let the user type partial numbers like \"-\"\n return '';\n}\n\n/** Coerce to a select value (string/number/undefined) */\nfunction asSelectValue(v: unknown): string | number {\n if (v == null) return ''; // <-- force empty string, not undefined\n if (typeof v === 'string' || typeof v === 'number') return v;\n return String(v);\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function FormRenderer({\n questions,\n initialValues,\n controlledValues,\n onChangeValues,\n onSubmit\n}: {\n questions: Question[];\n initialValues?: Partial<FormValues>;\n controlledValues?: FormValues;\n onChangeValues?: (values: FormValues) => void;\n onSubmit: (values: FormValues) => void; // called on Enter key\n}) {\n const keyedQuestions = useMemo(() => decorateKeys(questions), [questions]);\n\n const initialUncontrolled: FormValues = useMemo(() => {\n const acc: FormValues = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (initialValues) Object.assign(acc, initialValues as any);\n return acc;\n }, [initialValues]);\n\n const [uncontrolled, setUncontrolled] = useState<FormValues>(initialUncontrolled);\n useEffect(() => {\n setUncontrolled(initialUncontrolled);\n }, [initialUncontrolled]);\n\n // HYBRID CONTROLLED SUPPORT\n const [localShadow, setLocalShadow] = useState<FormValues>({});\n const values: FormValues = useMemo(\n () => ({ ...localShadow, ...(controlledValues ?? uncontrolled) }),\n [localShadow, controlledValues, uncontrolled]\n );\n useEffect(() => {\n if (controlledValues) setLocalShadow((p) => ({ ...p, ...controlledValues }));\n }, [controlledValues]);\n\n const [errors, setErrors] = useState<Record<string, string | undefined>>({});\n\n // single field renderer (aware of scope)\n function renderOne(q: Question, scopePath?: ScopePath) {\n const key = q.key as string;\n const label = q.question;\n const val = scopedRead(values, scopePath, key);\n const error = errors[key];\n\n const set = (v: unknown) => {\n let nextAll = scopedWrite(values, scopePath, key, v);\n\n // If this is a radio button with conditionals, check if any array items need to be cleared\n if (q.inputType === 'radio' && q.conditionals) {\n const conds = q.conditionals ?? [];\n\n // Check each conditional to see if it will become false\n for (const cond of conds) {\n const currentValue = scopedRead(values, scopePath, key);\n const wasActive = evalConditional(currentValue, cond.conditionalType, cond.conditionalValue);\n const willBeActive = evalConditional(v, cond.conditionalType, cond.conditionalValue);\n\n // If this conditional was active but will become inactive, and it has repeatable questions, clear the array\n if (wasActive && !willBeActive && cond.conditionalQuestionsAllowMultiple) {\n const children = (cond.conditionalQuestions ?? []) as unknown as Question[];\n if (children.length > 0) {\n const arrStorageKey = itemsKey(key);\n\n nextAll = setInImmutable(nextAll, [...(scopePath ?? []), arrStorageKey], []);\n\n // Also clear any nested array items that might exist\n const clearNestedArrays = (questionList: Question[], currentScope: ScopePath) => {\n questionList.forEach((childQ) => {\n const childConds = childQ.conditionals ?? [];\n childConds.forEach((childCond) => {\n if (childCond.conditionalQuestionsAllowMultiple) {\n const nestedArrKey = itemsKey(childQ.key as string);\n nextAll = setInImmutable(nextAll, [...currentScope, nestedArrKey], []);\n }\n const grandChildren = (childCond.conditionalQuestions ?? []) as unknown as Question[];\n if (grandChildren.length > 0) {\n clearNestedArrays(grandChildren, currentScope);\n }\n });\n });\n };\n\n clearNestedArrays(children, [...(scopePath ?? []), arrStorageKey]);\n }\n }\n }\n }\n\n if (controlledValues && onChangeValues) onChangeValues(nextAll);\n else setUncontrolled(nextAll);\n setLocalShadow(nextAll);\n };\n\n switch (q.inputType) {\n case 'text':\n return (\n <TextInput\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n aria-required={q.required || undefined}\n error={error}\n />\n );\n case 'email':\n return (\n <EmailInput\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n aria-required={q.required || undefined}\n error={error}\n />\n );\n case 'password':\n return (\n <PasswordInput\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n aria-required={q.required || undefined}\n error={error}\n />\n );\n case 'tel':\n return (\n <>\n <TelInput\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n aria-required={q.required || undefined}\n error={error}\n />\n {key === 'phone' && (\n <div className=\"mt-3 text-xs text-slate-600 space-y-1\">\n <p>By entering your phone number, you agree to receive a one-time SMS from Credify Insurance with a verification code.</p>\n <p>Message & data rates may apply. One message per request.</p>\n {/* <p>Reply STOP to opt out, HELP for help.</p> */}\n <p>\n See our{' '}\n <a href=\"https://getcredify.com\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"credify-link-underline\">\n Privacy Policy\n </a>{' '}\n and{' '}\n <a href=\"https://getcredify.com\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"credify-link-underline\">\n Terms of Service\n </a>\n .\n </p>\n </div>\n )}\n </>\n );\n case 'url':\n return (\n <UrlInput\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n aria-required={q.required || undefined}\n error={error}\n />\n );\n case 'number':\n return (\n <NumericInput\n key={key}\n id={key}\n label={label}\n value={asNumberValue(val)}\n onChange={(e) => set(coerceNumber(e.currentTarget.value))}\n aria-required={q.required || undefined}\n error={error}\n />\n );\n case 'textarea':\n return (\n <TextArea\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n aria-required={q.required || undefined}\n error={error}\n rows={4}\n />\n );\n case 'date':\n return (\n <DateInput\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n aria-required={q.required || undefined}\n error={error}\n />\n );\n\n case 'checkbox': {\n if (q.options) {\n const current: string[] = Array.isArray(val) ? (val as string[]) : [];\n return (\n <div key={key} className=\"space-y-2\">\n <div className=\"form-label\">\n {label}\n {q.required && <span className=\"text-red-600 ml-1\">*</span>}\n </div>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {q.options.map((opt) => {\n const idOpt = `${key}-${slugify(opt)}`;\n const checked = current.includes(opt);\n return (\n <Checkbox\n key={idOpt}\n id={idOpt}\n label={opt}\n checked={checked}\n onChange={(e) => {\n const next = new Set(current);\n if (e.currentTarget.checked) next.add(opt);\n else next.delete(opt);\n set(Array.from(next));\n }}\n aria-required={q.required || undefined}\n />\n );\n })}\n </div>\n {error && <p className=\"mt-1 text-sm text-red-600\">{error}</p>}\n </div>\n );\n }\n return (\n <Checkbox\n key={key}\n id={key}\n label={q.required ? `${label} *` : label}\n checked={!!val}\n onChange={(e) => set(e.currentTarget.checked)}\n aria-required={q.required || undefined}\n />\n );\n }\n\n case 'radio': {\n const opts = q.options ?? [];\n // Create a scoped name to avoid conflicts between array items\n const scopedName = scopePath && scopePath.length > 0 ? `${key}__${scopePath.join('__')}` : key;\n return (\n <RadioGroup key={key} legend={label} legendClassName={q.required ? 'legend-required' : undefined}>\n {opts.map((opt) => (\n <Radio key={`${key}-${slugify(opt)}`} name={scopedName} value={opt} checked={val === opt} onChange={() => set(opt)}>\n {opt}\n </Radio>\n ))}\n </RadioGroup>\n );\n }\n\n case 'select': {\n let opts = q.options ?? [];\n // Add special case for `quote_vehicle_id` key\n if (key === 'quote_vehicle_id') {\n opts = controlledValues?.vehicles__items?.map((v: { vin: string }) => v.vin) ?? [];\n }\n return (\n <SelectInput\n key={key}\n id={key}\n label={label}\n aria-required={q.required || undefined}\n error={error}\n value={asSelectValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n placeholder=\"Select an option\"\n options={opts.map((o) => ({ value: o, label: o }))}\n />\n );\n }\n\n case 'address':\n return (\n <AddressAutocomplete\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(address) => set(address)}\n aria-required={q.required || undefined}\n error={error}\n />\n );\n\n default:\n return null;\n }\n }\n\n function renderRecursive(list: Question[], scopePath?: ScopePath) {\n return list.map((q, qIndex) => {\n const key = String(q.key);\n const elem = renderOne(q, scopePath);\n\n const conds = q.conditionals ?? [];\n if (!conds.length) return <div key={`wrap-${key}-${qIndex}`}>{elem}</div>;\n\n const v = scopedRead(values, scopePath, key);\n const matches = conds.filter((c) => evalConditional(v, c.conditionalType, c.conditionalValue));\n const branches = matches.length > 1 && !matches.some((m) => m.conditionalQuestionsAllowMultiple) ? matches.slice(0, 1) : matches;\n\n return (\n <div key={`wrap-${key}-${qIndex}`}>\n {elem}\n\n {branches.map((branch, bi) => {\n const children = (branch.conditionalQuestions ?? []) as unknown as Question[];\n if (!children.length) return null;\n\n // NON-REPEATABLE child branch at current scope\n if (!branch.conditionalQuestionsAllowMultiple) {\n return (\n <div key={`branch-${key}-${bi}`} className=\"mt-3\">\n {renderRecursive(children, scopePath)}\n </div>\n );\n }\n\n // REPEATABLE child branch at current scope\n const arrStorageKey = itemsKey(key);\n const arr: unknown[] = (getIn(values, [...(scopePath ?? []), arrStorageKey]) as unknown[]) ?? [];\n const count = Math.max(1, arr.length || 1);\n\n const pushEmpty = () => {\n const next = setInImmutable(values, [...(scopePath ?? []), arrStorageKey, arr.length], {});\n if (controlledValues && onChangeValues) onChangeValues(next);\n else setUncontrolled(next);\n setLocalShadow(next);\n };\n\n const popLast = () => {\n const nextArr = arr.slice(0, Math.max(0, arr.length - 1));\n const next = setInImmutable(values, [...(scopePath ?? []), arrStorageKey], nextArr);\n if (controlledValues && onChangeValues) onChangeValues(next);\n else setUncontrolled(next);\n setLocalShadow(next);\n };\n\n const groupIdBase = `${key}__c${bi}`;\n\n return (\n <div key={`branch-${key}-${bi}`} className=\"mt-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"text-sm font-medium opacity-75\">Add one or more entries</div>\n <div className=\"space-x-2\">\n <button type=\"button\" className=\"btn-outline px-3 py-1\" onClick={pushEmpty}>\n Add another\n </button>\n {count > 1 && (\n <button type=\"button\" className=\"btn-outline px-3 py-1\" onClick={popLast}>\n Remove last\n </button>\n )}\n </div>\n </div>\n\n {Array.from({ length: count }).map((_, idx) => {\n const itemScope: ScopePath = [...(scopePath ?? []), arrStorageKey, idx];\n const groupId = `${groupIdBase}__i${idx}`;\n\n return (\n <div key={`group-${groupId}`} className=\"rounded-lg border p-3 mb-3\">\n <div className=\"text-sm font-semibold mb-2\">Entry #{idx + 1}</div>\n\n {children.map((childQ) => (\n <div key={`${groupId}-${String(childQ.key)}`} className=\"mt-3\">\n {renderOne(childQ, itemScope)}\n\n {/* Nested conditionals under childQ (supports nested repeatables too) */}\n {(() => {\n const childConds = childQ.conditionals ?? [];\n if (!childConds.length) return null;\n\n const childVal = scopedRead(values, itemScope, childQ.key as string);\n const childMatches = childConds.filter((c) => evalConditional(childVal, c.conditionalType, c.conditionalValue));\n const childBranches =\n childMatches.length > 1 && !childMatches.some((m) => m.conditionalQuestionsAllowMultiple)\n ? childMatches.slice(0, 1)\n : childMatches;\n\n return childBranches.map((bc, bci) => {\n const grandChildren = (bc.conditionalQuestions ?? []) as unknown as Question[];\n if (!grandChildren.length) return null;\n\n // NON-REPEATABLE nested branch: same item scope\n if (!bc.conditionalQuestionsAllowMultiple) {\n return (\n <div key={`nested-${groupId}-${bci}`} className=\"mt-3\">\n {renderRecursive(grandChildren, itemScope)}\n </div>\n );\n }\n\n // REPEATABLE nested branch: store under <itemScope> + itemsKey(childQ.key)\n const nestedArrKey = itemsKey(childQ.key as string);\n const nestedArr: unknown[] = (getIn(values, [...itemScope, nestedArrKey]) as unknown[]) ?? [];\n const nestedCount = Math.max(1, nestedArr.length || 1);\n\n const nestedPush = () => {\n const next = setInImmutable(values, [...itemScope, nestedArrKey, nestedArr.length], {});\n if (controlledValues && onChangeValues) onChangeValues(next);\n else setUncontrolled(next);\n setLocalShadow(next);\n };\n const nestedPop = () => {\n const nextArr = nestedArr.slice(0, Math.max(0, nestedArr.length - 1));\n const next = setInImmutable(values, [...itemScope, nestedArrKey], nextArr);\n if (controlledValues && onChangeValues) onChangeValues(next);\n else setUncontrolled(next);\n setLocalShadow(next);\n };\n\n return (\n <div key={`nested-repeat-${groupId}-${bci}`} className=\"mt-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"text-sm font-medium opacity-75\">Add one or more entries</div>\n <div className=\"space-x-2\">\n <button type=\"button\" className=\"btn-outline px-3 py-1\" onClick={nestedPush}>\n Add another\n </button>\n {nestedCount > 1 && (\n <button type=\"button\" className=\"btn-outline px-3 py-1\" onClick={nestedPop}>\n Remove last\n </button>\n )}\n </div>\n </div>\n\n {Array.from({ length: nestedCount }).map((__, nIdx) => {\n const nestedScope: ScopePath = [...itemScope, nestedArrKey, nIdx];\n return (\n <div key={`nested-item-${groupId}-${bci}-${nIdx}`} className=\"rounded-lg border p-3 mb-3\">\n <div className=\"text-sm font-semibold mb-2\">Entry #{nIdx + 1}</div>\n {renderRecursive(grandChildren, nestedScope)}\n </div>\n );\n })}\n </div>\n );\n });\n })()}\n </div>\n ))}\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n });\n }\n\n // Visible (non-repeatable) only — used for Enter-to-continue validation feedback\n const visibleFlat = useMemo(() => {\n const out: Question[] = [];\n const walk = (list: Question[], scopePath?: ScopePath) => {\n list.forEach((q) => {\n out.push(q);\n const key = String(q.key);\n const conds = q.conditionals ?? [];\n if (!conds.length) return;\n\n const v = scopedRead(values, scopePath, key);\n const matches = conds.filter((c) => evalConditional(v, c.conditionalType, c.conditionalValue));\n const branches = matches.length > 1 && !matches.some((m) => m.conditionalQuestionsAllowMultiple) ? matches.slice(0, 1) : matches;\n\n branches.forEach((m) => {\n const children = (m.conditionalQuestions ?? []) as unknown as Question[];\n if (!children.length) return;\n if (m.conditionalQuestionsAllowMultiple) return; // item-level handled on wizard side\n walk(children, scopePath);\n });\n });\n };\n walk(keyedQuestions);\n return out;\n }, [keyedQuestions, values]);\n\n function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n e.preventDefault();\n const eMap = validateQuestions(visibleFlat as Question[], values);\n setErrors(eMap);\n\n if (Object.keys(eMap).length > 0) {\n const firstIdx = visibleFlat.findIndex((q) => eMap[q.key as string]);\n if (firstIdx >= 0) document.getElementById(visibleFlat[firstIdx].key as string)?.focus();\n return;\n }\n onSubmit(values);\n }\n\n return (\n <form className=\"space-y-6 px-1\" onSubmit={handleSubmit} noValidate>\n {renderRecursive(keyedQuestions)}\n </form>\n );\n}\n\nexport default FormRenderer;\n","/**\n * Google Tag Manager dataLayer helpers for the Credify Insurance Widget.\n * Pushes events at each step so GTM can trigger tags (e.g. GTM-NK8LGHTQ).\n */\n\nexport const GTM_CONTAINER_ID = 'GTM-NK8LGHTQ';\n\ndeclare global {\n interface Window {\n dataLayer?: Record<string, unknown>[];\n }\n}\n\nfunction getDataLayer(): Record<string, unknown>[] {\n if (typeof window === 'undefined') return [];\n window.dataLayer = window.dataLayer ?? [];\n return window.dataLayer;\n}\n\nexport function pushDataLayerEvent(eventName: string, payload: Record<string, unknown> = {}): void {\n const dataLayer = getDataLayer();\n dataLayer.push({\n event: eventName,\n credifyWidget: {\n ...payload,\n containerId: GTM_CONTAINER_ID\n }\n });\n}\n\n/** Widget was opened */\nexport function pushWidgetOpened(): void {\n pushDataLayerEvent('credify_widget_opened');\n}\n\n/** Widget was closed */\nexport function pushWidgetClosed(): void {\n pushDataLayerEvent('credify_widget_closed');\n}\n\n/** User viewed a form stage (step) */\nexport function pushStageViewed(payload: { stageKey: string; stageTitle: string; stepIndex: number; totalSteps: number }): void {\n pushDataLayerEvent('credify_widget_stage_viewed', payload);\n}\n\n/** User completed a form stage (clicked Next successfully) */\nexport function pushStageCompleted(payload: { stageKey: string; stageTitle: string; stepIndex: number; totalSteps: number }): void {\n pushDataLayerEvent('credify_widget_stage_completed', payload);\n}\n\n/** User completed all stages and rates were requested */\nexport function pushFlowCompleted(): void {\n pushDataLayerEvent('credify_widget_flow_completed');\n}\n\n/** User is viewing the rates screen */\nexport function pushRatesViewed(payload?: { rateCount?: number }): void {\n pushDataLayerEvent('credify_widget_rates_viewed', payload ?? {});\n}\n\n/** User clicked Back from the rates screen */\nexport function pushRatesBack(): void {\n pushDataLayerEvent('credify_widget_rates_back');\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { Question } from '@getcredify/credify-insurance-types';\n\nimport { FormRenderer } from './index';\n\nimport { ensureKey, validateQuestions, type StageMeta, type FormValues } from '../utils/form';\nimport { pushStageViewed } from '../utils/gtm';\n\n/* ---------- conditional helpers (mirrors renderer) ---------- */\ntype ConditionalNode = NonNullable<Question['conditionals']>[number];\n\nfunction toNumber(x: unknown): number | null {\n if (typeof x === 'number' && Number.isFinite(x)) return x;\n if (typeof x === 'string' && x.trim() !== '' && !Number.isNaN(Number(x))) return Number(x);\n return null;\n}\nfunction toTime(x: unknown): number | null {\n if (x instanceof Date && !Number.isNaN(x.getTime())) return x.getTime();\n if (typeof x === 'string') {\n const t = Date.parse(x);\n return Number.isNaN(t) ? null : t;\n }\n return null;\n}\nfunction cmp(a: unknown, b: unknown): number | null {\n const na = toNumber(a),\n nb = toNumber(b);\n if (na != null && nb != null) return na - nb;\n const ta = toTime(a),\n tb = toTime(b);\n if (ta != null && tb != null) return ta - tb;\n if (a == null || b == null) return null;\n return String(a).localeCompare(String(b));\n}\nfunction contains(haystack: unknown, needle: unknown): boolean {\n if (Array.isArray(haystack)) return haystack.some((v) => v === needle);\n if (typeof haystack === 'string') return needle != null && haystack.includes(String(needle));\n return false;\n}\nfunction evalConditional(v: unknown, type: ConditionalNode['conditionalType'], rhs: unknown): boolean {\n switch (type) {\n case 'equals':\n return v === rhs;\n case 'lessThan': {\n const c = cmp(v, rhs);\n return c != null && c < 0;\n }\n case 'greaterThan': {\n const c = cmp(v, rhs);\n return c != null && c > 0;\n }\n case 'contains':\n return contains(v, rhs);\n case 'startsWith':\n return v != null && rhs != null && String(v).startsWith(String(rhs));\n case 'endsWith':\n return v != null && rhs != null && String(v).endsWith(String(rhs));\n default:\n return false;\n }\n}\n\n/* ---------- visibility (non-repeatable) ---------- */\nfunction flattenVisibleQuestions(root: ReadonlyArray<Question>, values: FormValues): ReadonlyArray<Question> {\n const out: Question[] = [];\n const walk = (list: ReadonlyArray<Question>) => {\n list.forEach((q) => {\n out.push(q);\n const key = String(q.key);\n const v = values[key];\n const conds = q.conditionals ?? [];\n if (!conds.length) return;\n\n const matches = conds.filter((c) => evalConditional(v, c.conditionalType, c.conditionalValue));\n const branches = matches.length > 1 && !matches.some((m) => m.conditionalQuestionsAllowMultiple) ? matches.slice(0, 1) : matches;\n\n branches.forEach((m) => {\n const children = (m.conditionalQuestions ?? []) as unknown as Question[];\n if (!children.length) return;\n if (m.conditionalQuestionsAllowMultiple) return; // handled per-item below\n children.forEach((child) => out.push(child));\n });\n });\n };\n walk(root);\n return out;\n}\n\n/* ---------- repeatable validation (any depth) ---------- */\nconst ITEMS_SUFFIX = '__items';\nconst itemsKey = (k: string) => `${k}${ITEMS_SUFFIX}`;\n\nfunction validateRepeatablesRecursive(questions: ReadonlyArray<Question>, valuesAtScope: FormValues): boolean {\n // returns true if any blocking error exists\n for (const q of questions) {\n const qKey = String(q.key);\n const qVal = valuesAtScope[qKey];\n const conds = q.conditionals ?? [];\n if (!conds.length) continue;\n\n const matches = conds.filter((c) => evalConditional(qVal, c.conditionalType, c.conditionalValue));\n const branches = matches.length > 1 && !matches.some((m) => m.conditionalQuestionsAllowMultiple) ? matches.slice(0, 1) : matches;\n\n for (const b of branches) {\n const children = (b.conditionalQuestions ?? []) as unknown as Question[];\n if (!children.length) continue;\n\n if (!b.conditionalQuestionsAllowMultiple) {\n // non-repeatable: keep walking for deeper repeats\n if (validateRepeatablesRecursive(children, valuesAtScope)) return true;\n continue;\n }\n\n // repeatable at this scope\n const arr = (valuesAtScope[itemsKey(qKey)] as unknown[]) ?? [];\n if (arr.length === 0) return true; // must have at least one entry\n\n for (const item of arr as Array<Record<string, unknown>>) {\n // 1) validate required fields for this item's children\n const itemErrors = validateQuestions(children, item as FormValues);\n if (Object.values(itemErrors).some(Boolean)) return true;\n\n // 2) recursively validate nested repeatables within this item\n if (validateRepeatablesRecursive(children, item as FormValues)) return true;\n }\n }\n }\n return false;\n}\n\n/** True when any visible repeatable branch (at any depth) is missing items or has invalid items */\nfunction hasRepeatableBlockingErrors(questions: ReadonlyArray<Question>, rootValues: FormValues): boolean {\n return validateRepeatablesRecursive(questions, rootValues);\n}\n\ntype CompleteCallback = (values: FormValues, stageKey: string) => Promise<{ success: boolean; error?: string }>;\n\n/* -------------------------------- component -------------------------------- */\nexport function FormWizard({\n stages,\n onStageComplete,\n onComplete,\n initialValues,\n initialActive\n}: {\n stages: StageMeta[];\n onStageComplete: CompleteCallback;\n onComplete: CompleteCallback;\n initialValues?: FormValues;\n initialActive?: number;\n}) {\n const [active, setActive] = useState(initialActive ?? 0);\n const [allValues, setAllValues] = useState<FormValues>(initialValues ?? {});\n const [perStageQuestions, setPerStageQuestions] = useState<Record<string, Question[]>>({});\n const [loading, setLoading] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [stageError, setStageError] = useState<string | null>(null);\n const stepRefs = useRef<(HTMLLIElement | null)[]>([]);\n\n const hasStages = Array.isArray(stages) && stages.length > 0;\n const stage = hasStages ? stages[Math.min(active, stages.length - 1)] : null;\n const stageKey = stage?.key ?? null;\n\n // Update active stage when initialActive changes (e.g., when going back from rates)\n useEffect(() => {\n if (initialActive !== undefined) {\n setActive(initialActive);\n }\n }, [initialActive]);\n\n // Scroll active step into view\n useEffect(() => {\n const activeElement = stepRefs.current[active];\n if (activeElement) {\n activeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n }\n }, [active]);\n\n // Update form values when initialValues changes (e.g., when going back from rates)\n // Only update if initialValues is provided (not undefined/null)\n useEffect(() => {\n if (initialValues !== undefined) {\n setAllValues(initialValues);\n }\n }, [initialValues]);\n\n useEffect(() => {\n if (!stage || !stageKey) {\n setLoading(false);\n setStageError(null);\n return;\n }\n if (perStageQuestions[stageKey]) {\n setLoading(false);\n setStageError(null);\n return;\n }\n\n let cancelled = false;\n setLoading(true);\n setStageError(null);\n\n Promise.resolve(stage.loadQuestions())\n .then((qs) => {\n if (cancelled) return;\n if (!Array.isArray(qs)) throw new Error(`loadQuestions(\"${stageKey}\") did not return an array`);\n setPerStageQuestions((m) => ({ ...m, [stageKey]: qs }));\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((err: any) => {\n if (cancelled) return;\n setStageError(`Failed to load stage \"${stage?.title ?? ''}\": ${err?.message ?? 'Unknown error'}`);\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [stage, stageKey, perStageQuestions]);\n\n const questions = stageKey ? perStageQuestions[stageKey] : undefined;\n\n // GTM: stage viewed (when questions for this stage have loaded)\n useEffect(() => {\n if (stage && stageKey && questions) {\n pushStageViewed({\n stageKey,\n stageTitle: stage.title ?? stageKey,\n stepIndex: active + 1,\n totalSteps: stages.length\n });\n }\n }, [stageKey, active, stages.length, stage, questions]);\n\n // Values slice for current stage (+ keep any __items arrays)\n const currentValues = useMemo(() => {\n if (!questions) return {};\n const slice: FormValues = {};\n\n // Helper function to recursively collect all nested question keys\n const collectAllQuestionKeys = (questionList: Question[]): string[] => {\n const keys: string[] = [];\n const walk = (list: Question[]) => {\n list.forEach((q, i) => {\n const k = ensureKey(q, i);\n keys.push(k);\n const kItems = itemsKey(k);\n keys.push(kItems);\n\n // Recursively collect keys from conditional questions\n const conds = q.conditionals ?? [];\n conds.forEach((c) => {\n const children = (c.conditionalQuestions ?? []) as unknown as Question[];\n if (children.length > 0) {\n walk(children);\n }\n });\n });\n };\n walk(questionList);\n return keys;\n };\n\n // Get all keys that could be relevant to this stage (including nested conditionals)\n const allRelevantKeys = collectAllQuestionKeys(questions);\n\n // Include values for all relevant keys\n allRelevantKeys.forEach((k) => {\n if (k in allValues) slice[k] = allValues[k];\n });\n // include any orphaned *_ _items keys to keep sub-arrays alive\n for (const [k, v] of Object.entries(allValues)) {\n if (k.endsWith(ITEMS_SUFFIX) && !(k in slice)) slice[k] = v;\n }\n return slice;\n }, [questions, allValues]);\n\n const updateCurrentValues = (next: FormValues) => {\n setAllValues((prev) => ({ ...prev, ...next }));\n };\n\n const goPrev = () => {\n setActive((i) => (i > 0 ? i - 1 : 0));\n document.querySelector<HTMLElement>('.panel-body')?.scrollTo({ top: 0, behavior: 'instant' as ScrollBehavior });\n };\n\n const goNext = async () => {\n if (!questions || !stage || loading || stageError || isSubmitting) return;\n\n // flat (visible, non-repeatable) validation\n const visible = flattenVisibleQuestions(questions, allValues);\n const flatErrors = validateQuestions(visible as Question[], allValues);\n const flatBlock = Object.values(flatErrors).some(Boolean);\n\n // repeatable validation (any depth)\n const repeatBlock = hasRepeatableBlockingErrors(questions, allValues);\n\n if (flatBlock || repeatBlock) return;\n\n setIsSubmitting(true);\n try {\n const nextIndex = Math.min(active + 1, stages.length - 1);\n const isComplete = active >= stages.length - 1;\n const { success, error } = isComplete ? await onComplete(allValues, stageKey ?? '') : await onStageComplete(currentValues, stageKey ?? '');\n if (!success) {\n setStageError(error ?? 'An error occurred');\n return;\n }\n if (!isComplete) setActive(nextIndex);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n // LIVE disabled state for the Next button (always rendered)\n const disableNext = useMemo(() => {\n if (!questions || loading || !!stageError || isSubmitting) return true;\n const visible = flattenVisibleQuestions(questions, allValues);\n const flatErrors = validateQuestions(visible as Question[], allValues);\n const flatBlock = Object.values(flatErrors).some(Boolean);\n const repeatBlock = hasRepeatableBlockingErrors(questions, allValues);\n return flatBlock || repeatBlock;\n }, [questions, allValues, loading, stageError, isSubmitting]);\n\n if (!hasStages) return <div className=\"text-slate-600\">Loading...</div>;\n\n return (\n <div className=\"space-y-6\">\n {/* progress header */}\n <div className=\"form-wizard-steps-header flex items-center justify-between gap-4\">\n <ol\n className=\"form-wizard-steps flex gap-2 text-xs overflow-x-auto flex-1 pb-1 scrollbar-hide items-center\"\n style={{ scrollbarWidth: 'none', msOverflowStyle: 'none' }}\n >\n {stages.flatMap((s, i) => [\n <li\n key={s.key ?? `stage-${i}`}\n ref={(el) => {\n stepRefs.current[i] = el;\n }}\n className={`form-wizard-step-pill px-2.5 py-1 rounded-full border whitespace-nowrap flex-shrink-0 ${\n i < active\n ? 'bg-blue-600 text-white border-blue-600'\n : i === active\n ? 'border-blue-600 text-blue-600 bg-white'\n : 'border-slate-200 text-slate-600'\n }`}\n >\n {s.title}\n </li>,\n ...(i < stages.length - 1\n ? [\n <li key={`arrow-${s.key ?? i}`} className=\"form-wizard-step-arrow text-slate-400 flex-shrink-0\">\n →\n </li>\n ]\n : [])\n ])}\n </ol>\n <div className=\"form-wizard-step-counter text-sm text-slate-500 flex-shrink-0\">\n {Math.min(active + 1, stages.length)} / {stages.length}\n </div>\n </div>\n\n {/* stage content */}\n <div>\n {loading && <div className=\"text-slate-500\">Loading…</div>}\n\n {stage && (\n <FormRenderer\n key={stage.key}\n questions={questions ?? []}\n controlledValues={currentValues}\n onChangeValues={updateCurrentValues}\n onSubmit={() => goNext()} // Enter key advances\n />\n )}\n </div>\n\n {/* error message */}\n {!loading && stageError && (\n <div className=\"text-red-600 text-sm -mt-4\">\n <div>{stageError}</div>\n {stage && (\n <button\n type=\"button\"\n className=\"credify-retry-btn underline mt-1 font-bold\"\n onClick={() => {\n setPerStageQuestions((m) => {\n if (!stageKey) return m;\n const copy = { ...m };\n delete copy[stageKey];\n return copy;\n });\n }}\n >\n Retry\n </button>\n )}\n </div>\n )}\n\n {/* footer (always visible) */}\n <div className={active > 0 ? 'grid grid-cols-2 gap-3' : ''}>\n {active > 0 && (\n <button\n type=\"button\"\n onClick={goPrev}\n disabled={loading}\n className=\"credify-btn-back h-12 rounded-full border border-gray-300 text-text-primary hover:bg-gray-50 transition\"\n >\n Back\n </button>\n )}\n\n <button\n type=\"button\"\n data-widget-ctrl=\"next\"\n onClick={goNext}\n disabled={disableNext}\n className={[\n 'form-wizard-next-btn',\n active > 0 ? '' : 'w-full',\n 'h-12 rounded-full text-white transition',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'flex items-center justify-center gap-2',\n disableNext\n ? 'bg-gray-300'\n : 'bg-blue-600 hover:bg-blue-600/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600/40 bg-primary hover:bg-primary/90 focus-visible:ring-primary/40'\n ].join(' ')}\n >\n {isSubmitting && (\n <svg className=\"animate-spin h-5 w-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n {active === stages.length - 1 ? 'Finish' : 'Next'}\n </button>\n </div>\n </div>\n );\n}\n\nexport default FormWizard;\n","const QUOTE_ID_KEY = 'credify_quote_id';\nconst AUTH_TOKEN_KEY = 'credify_auth_token';\n\n/**\n * Save quoteId to localStorage\n */\nexport function saveQuoteId(quoteId: string): void {\n try {\n localStorage.setItem(QUOTE_ID_KEY, quoteId);\n } catch (error) {\n console.error('Failed to save quoteId to localStorage:', error);\n }\n}\n\n/**\n * Load quoteId from localStorage\n */\nexport function loadQuoteId(): string | null {\n try {\n return localStorage.getItem(QUOTE_ID_KEY);\n } catch (error) {\n console.error('Failed to load quoteId from localStorage:', error);\n return null;\n }\n}\n\n/**\n * Clear quoteId from localStorage\n */\nexport function clearQuoteId(): void {\n try {\n localStorage.removeItem(QUOTE_ID_KEY);\n } catch (error) {\n console.error('Failed to clear quoteId from localStorage:', error);\n }\n}\n\n/**\n * Save authToken to localStorage\n */\nexport function saveAuthToken(token: string): void {\n try {\n localStorage.setItem(AUTH_TOKEN_KEY, token);\n } catch (error) {\n console.error('Failed to save authToken to localStorage:', error);\n }\n}\n\n/**\n * Load authToken from localStorage\n */\nexport function loadAuthToken(): string | null {\n try {\n return localStorage.getItem(AUTH_TOKEN_KEY);\n } catch (error) {\n console.error('Failed to load authToken from localStorage:', error);\n return null;\n }\n}\n\n/**\n * Clear authToken from localStorage\n */\nexport function clearAuthToken(): void {\n try {\n localStorage.removeItem(AUTH_TOKEN_KEY);\n } catch (error) {\n console.error('Failed to clear authToken from localStorage:', error);\n }\n}\n\n/**\n * Clear all quote-related data from localStorage\n */\nexport function clearAllQuoteData(): void {\n clearQuoteId();\n clearAuthToken();\n}\n","import type { Stage, Question, GetRatesResponse } from '@getcredify/credify-insurance-types';\nimport type { Quote } from '@getcredify/credify-insurance-db';\nimport type { FormValues } from './form';\nimport { saveAuthToken, loadAuthToken, clearAuthToken as clearAuthTokenStorage } from './storage';\n\nconst BASE_URL = 'https://api.getcredify.com';\n\n// Store JWT token in memory\nlet authToken: string | null = null;\n\nexport function setAuthToken(token: string): void {\n authToken = token;\n saveAuthToken(token);\n}\n\nexport function getAuthToken(): string | null {\n return authToken;\n}\n\nexport function loadAuthTokenFromStorage(): void {\n const storedToken = loadAuthToken();\n if (storedToken) {\n authToken = storedToken;\n }\n}\n\nexport function clearAuthToken(): void {\n authToken = null;\n clearAuthTokenStorage();\n}\n\nasync function makeAuthenticatedRequest(url: string, body: object): Promise<Response> {\n const headers: HeadersInit = {\n 'Content-Type': 'application/json'\n };\n\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n });\n\n if (!response.ok) {\n let errorMessage = `Request failed with status ${response.status}`;\n try {\n const errorData = await response.json();\n errorMessage = errorData.error || errorMessage;\n } catch {\n // If response is not JSON, use status text\n errorMessage = response.statusText || errorMessage;\n }\n const error = new Error(errorMessage) as Error & { statusCode?: number };\n error.statusCode = response.status;\n throw error;\n }\n\n return response;\n}\n\nexport async function getQuestionsByStage(stage: Stage): Promise<{ questions: Question[] }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/get-questions-by-stage`, { stage });\n const data = await response.json();\n return data;\n}\n\nexport async function getStagesForQuote(): Promise<{ stages: Stage[] }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/get-stages-for-quote`, {});\n const data = await response.json();\n return data;\n}\n\nexport async function createQuote(phone: string): Promise<{ quoteId: string }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/create-quote`, { phone });\n const data = await response.json();\n if (!data || typeof data !== 'object' || !data.quoteId) {\n throw new Error(`Invalid createQuote response: ${JSON.stringify(data)}`);\n }\n return data;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport async function updateQuote(payload: FormValues & { current_stage?: string }, getRates: boolean, quoteId?: string): Promise<{}> {\n // If we have a token, use it. Otherwise, send quoteId in body (for pre-verification stage)\n // Only include quoteId if it's a valid non-empty string\n const body: { payload: FormValues & { current_stage?: string }; getRates: boolean; quoteId?: string } = { payload, getRates };\n if (quoteId && typeof quoteId === 'string' && quoteId.trim() !== '') {\n body.quoteId = quoteId;\n }\n const response = await makeAuthenticatedRequest(`${BASE_URL}/update-quote`, body);\n const data = await response.json();\n return data;\n}\n\nexport async function verifyQuote(quoteId: string, smsCode: string): Promise<{ isVerified: boolean; token: string | null }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/verify-quote`, { quoteId, smsCode });\n const data = await response.json();\n return data;\n}\n\nexport async function isSupportedState(state: string): Promise<{ isSupported: boolean }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/is-supported-state`, { state });\n const data = await response.json();\n return data;\n}\n\nexport async function getRates(): Promise<{ rates: GetRatesResponse }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/get-rates`, {});\n const data = await response.json();\n return data;\n}\n\nexport async function getQuote(quoteId?: string): Promise<{ quote: Quote }> {\n // If we have a token, use it. Otherwise, send quoteId in body (for pre-verification stage)\n const body = quoteId ? { quoteId } : {};\n const response = await makeAuthenticatedRequest(`${BASE_URL}/get-quote`, body);\n const data = await response.json();\n return data;\n}\n\nexport async function requestBind(quoteRateId: string): Promise<{ success?: boolean }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/request-bind`, { quoteRateId });\n const data = await response.json();\n // Backend returns {} on success, so return it with success: true\n return data && typeof data === 'object' && 'success' in data ? data : { success: true };\n}\n","import { useState, useEffect } from 'react';\n\nimport type { GetRatesResponse } from '@getcredify/credify-insurance-types';\n\nimport { requestBind, loadAuthTokenFromStorage, getAuthToken, clearAuthToken } from '../utils/api';\nimport { clearAllQuoteData } from '../utils/storage';\nimport { pushRatesBack } from '../utils/gtm';\n\nconst currencyFormatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n});\n\ntype RequestStatus = 'idle' | 'loading' | 'success' | 'error';\n\nfunction BackButton({ onBack }: { onBack?: () => void }) {\n const handleBack = () => {\n pushRatesBack();\n onBack?.();\n };\n return (\n <button\n type=\"button\"\n onClick={handleBack}\n className=\"credify-btn-back credify-btn-back-rates h-12 rounded-full border border-gray-300 text-text-primary hover:bg-gray-50 transition w-full\"\n >\n Back\n </button>\n );\n}\n\nexport function Rates({ rates, onBack }: { rates: GetRatesResponse; onBack?: () => void }) {\n const hasRates = Array.isArray(rates) && rates.length > 0;\n const [requestStatuses, setRequestStatuses] = useState<Record<string, RequestStatus>>({});\n\n // Load auth token from localStorage when component mounts\n useEffect(() => {\n loadAuthTokenFromStorage();\n }, []);\n\n if (!hasRates) {\n return (\n <section className=\"mt-8\">\n <h3 className=\"text-lg font-semibold text-slate-900\">Rates</h3>\n <p className=\"mt-2 text-sm text-slate-500\">No rates are available at this time.</p>\n {onBack && <BackButton onBack={onBack} />}\n </section>\n );\n }\n\n return (\n <section className=\"mt-8\">\n <h3 className=\"text-lg font-semibold text-slate-900\">Rates</h3>\n <div className=\"mt-4 grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {rates.map((rate) => {\n const premiumDollars = rate.premium_cents / 100;\n const formattedPremium = currencyFormatter.format(premiumDollars);\n const cardKey = rate.quote_rate_id;\n const status = requestStatuses[cardKey] ?? 'idle';\n const isRequesting = status === 'loading';\n const isRequested = status === 'success';\n\n const handleRequestBind = async () => {\n setRequestStatuses((prev) => ({ ...prev, [cardKey]: 'loading' }));\n try {\n // Ensure auth token is loaded from localStorage before making the request\n loadAuthTokenFromStorage();\n const token = getAuthToken();\n if (!token) {\n throw new Error('Authentication required. Please verify your phone number first.');\n }\n const result = await requestBind(rate.quote_rate_id);\n // Backend returns {} on success, so if we get here without an error, it's successful\n // Check for success property if present, otherwise assume success if no error\n const success = result?.success !== false;\n if (!success) throw new Error('Request failed');\n\n // Clear all quote data from localStorage and memory so user starts fresh on return\n clearAllQuoteData();\n clearAuthToken();\n\n setRequestStatuses((prev) => ({ ...prev, [cardKey]: 'success' }));\n } catch {\n setRequestStatuses((prev) => ({ ...prev, [cardKey]: 'error' }));\n }\n };\n\n return (\n <div key={cardKey} className=\"flex flex-col rounded-xl border border-slate-200 bg-white p-6 shadow-sm transition hover:shadow-md\">\n {/* Carrier Logo and Name */}\n <div className=\"mb-4 flex items-center gap-3\">\n {rate.carrier_logo_base64 ? (\n <img src={`data:image/png;base64,${rate.carrier_logo_base64}`} alt={rate.carrier_name} className=\"h-12 w-auto object-contain\" />\n ) : (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md bg-slate-100 text-sm font-semibold text-slate-500\">\n {rate.carrier_name.charAt(0).toUpperCase()}\n </div>\n )}\n <div className=\"flex-1\">\n <h4 className=\"font-semibold text-slate-900\">{rate.carrier_name}</h4>\n </div>\n </div>\n\n {/* Premium */}\n <div className=\"mb-2\">\n <p className=\"text-sm text-slate-500\">Premium</p>\n <p className=\"text-2xl font-bold text-slate-900\">{formattedPremium}</p>\n </div>\n\n {/* Term */}\n <div className=\"mb-4\">\n <p className=\"text-sm text-slate-500\">Term</p>\n <p className=\"font-medium text-slate-700\">{rate.term_months} months</p>\n </div>\n\n {/* Carrier Quote ID */}\n {rate.carrier_quote_id && (\n <div className=\"mb-4\">\n <p className=\"text-xs text-slate-400\">Quote ID: {rate.carrier_quote_id}</p>\n </div>\n )}\n\n {/* Request Bind Button */}\n <div className=\"mt-auto pt-4\">\n <button\n type=\"button\"\n onClick={handleRequestBind}\n disabled={isRequesting || isRequested}\n className={`rates-bind-btn w-full rounded-full px-4 py-2.5 text-sm font-semibold transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600/40 disabled:cursor-not-allowed ${\n isRequested ? 'rates-bind-btn-requested' : 'hover:bg-blue-600/90 disabled:bg-slate-300 disabled:text-slate-500'\n }`}\n >\n {isRequesting ? 'Requesting…' : isRequested ? 'Requested' : 'Request Bind'}\n </button>\n {status === 'error' && <p className=\"mt-2 text-xs text-red-600\">Something went wrong. Please try again.</p>}\n {status === 'success' && <p className=\"mt-2 text-xs text-emerald-600\">We received your bind request.</p>}\n </div>\n </div>\n );\n })}\n </div>\n {onBack && <BackButton onBack={onBack} />}\n </section>\n );\n}\n","import type { Quote } from '@getcredify/credify-insurance-db';\nimport type { FormValues } from './form';\n\n/**\n * Convert boolean to \"Yes\"/\"No\" string (reverse of transformFormValues)\n */\nexport function convertBooleanToYesNo(value: boolean | null | undefined): string | undefined {\n if (value === true) return 'Yes';\n if (value === false) return 'No';\n return undefined;\n}\n\n/**\n * Format date to YYYY-MM-DD string format\n */\nexport function formatDate(date: Date | string | null | undefined): string | undefined {\n if (!date) return undefined;\n try {\n const d = typeof date === 'string' ? new Date(date) : date;\n if (isNaN(d.getTime())) return undefined;\n return d.toISOString().split('T')[0];\n } catch {\n return undefined;\n }\n}\n\n/**\n * Transform quote data from database format to form values\n */\nexport function quoteToFormValues(quote: Quote): FormValues {\n const formValues: FormValues = {};\n\n // Root quote fields\n if (quote.phone) formValues.phone = quote.phone;\n if (quote.first_name) formValues.first_name = quote.first_name;\n if (quote.last_name) formValues.last_name = quote.last_name;\n if (quote.email) formValues.email = quote.email;\n if (quote.date_of_birth) formValues.date_of_birth = formatDate(quote.date_of_birth);\n if (quote.product) formValues.product = quote.product;\n if (quote.state) formValues.state = quote.state;\n\n // Combine address fields into a single address string\n const addressParts: string[] = [];\n if (quote.line_1) addressParts.push(quote.line_1);\n if (quote.line_2) addressParts.push(quote.line_2);\n if (quote.city) addressParts.push(quote.city);\n if (quote.state) addressParts.push(quote.state);\n if (quote.postal_code) addressParts.push(quote.postal_code);\n if (addressParts.length > 0) {\n formValues.address = addressParts.join(', ');\n }\n\n if (quote.years_at_address !== null && quote.years_at_address !== undefined) formValues.years_at_address = quote.years_at_address;\n if (quote.months_at_address !== null && quote.months_at_address !== undefined) formValues.months_at_address = quote.months_at_address;\n if (quote.move_in_date) formValues.move_in_date = formatDate(quote.move_in_date);\n\n // Combine prior address fields into a single prior_address string\n const priorAddressParts: string[] = [];\n if (quote.prior_line_1) priorAddressParts.push(quote.prior_line_1);\n if (quote.prior_line_2) priorAddressParts.push(quote.prior_line_2);\n if (quote.prior_city) priorAddressParts.push(quote.prior_city);\n if (quote.prior_state) priorAddressParts.push(quote.prior_state);\n if (quote.prior_postal_code) priorAddressParts.push(quote.prior_postal_code);\n if (priorAddressParts.length > 0) {\n formValues.prior_address = priorAddressParts.join(', ');\n }\n\n if (quote.years_at_prior_address !== null && quote.years_at_prior_address !== undefined)\n formValues.years_at_prior_address = quote.years_at_prior_address;\n\n // Auto prior insurance fields\n if (quote.auto_has_prior_insurance !== null && quote.auto_has_prior_insurance !== undefined) {\n formValues.auto_has_prior_insurance = convertBooleanToYesNo(quote.auto_has_prior_insurance);\n }\n if (quote.auto_prior_expiration_date) formValues.auto_prior_expiration_date = formatDate(quote.auto_prior_expiration_date);\n if (quote.auto_prior_carrier_name) formValues.auto_prior_carrier_name = quote.auto_prior_carrier_name;\n if (quote.auto_prior_liability_limit) formValues.auto_prior_liability_limit = quote.auto_prior_liability_limit;\n if (quote.auto_reason_for_no_insurance) formValues.auto_reason_for_no_insurance = quote.auto_reason_for_no_insurance;\n if (quote.auto_prior_years !== null && quote.auto_prior_years !== undefined) formValues.auto_prior_years = quote.auto_prior_years;\n if (quote.auto_prior_months !== null && quote.auto_prior_months !== undefined) formValues.auto_prior_months = quote.auto_prior_months;\n if (quote.auto_continuous_coverage_years !== null && quote.auto_continuous_coverage_years !== undefined) {\n formValues.auto_continuous_coverage_years = quote.auto_continuous_coverage_years;\n }\n if (quote.auto_cancelled_declined_refused_to_renew !== null && quote.auto_cancelled_declined_refused_to_renew !== undefined) {\n formValues.auto_cancelled_declined_refused_to_renew = convertBooleanToYesNo(quote.auto_cancelled_declined_refused_to_renew);\n }\n\n // Home prior insurance fields\n if (quote.home_has_prior_insurance !== null && quote.home_has_prior_insurance !== undefined) {\n formValues.home_has_prior_insurance = convertBooleanToYesNo(quote.home_has_prior_insurance);\n }\n if (quote.home_prior_expiration_date) formValues.home_prior_expiration_date = formatDate(quote.home_prior_expiration_date);\n if (quote.home_prior_carrier_name) formValues.home_prior_carrier_name = quote.home_prior_carrier_name;\n\n // Home property fields\n if (quote.year_built !== null && quote.year_built !== undefined) formValues.year_built = quote.year_built;\n if (quote.number_of_units !== null && quote.number_of_units !== undefined) formValues.number_of_units = quote.number_of_units;\n if (quote.number_of_stories !== null && quote.number_of_stories !== undefined) formValues.number_of_stories = quote.number_of_stories;\n if (quote.number_of_beds !== null && quote.number_of_beds !== undefined) formValues.number_of_beds = quote.number_of_beds;\n if (quote.number_of_full_baths !== null && quote.number_of_full_baths !== undefined) formValues.number_of_full_baths = quote.number_of_full_baths;\n if (quote.number_of_partial_baths !== null && quote.number_of_partial_baths !== undefined) {\n formValues.number_of_partial_baths = quote.number_of_partial_baths;\n }\n if (quote.under_construction !== null && quote.under_construction !== undefined) {\n formValues.under_construction = convertBooleanToYesNo(quote.under_construction);\n }\n if (quote.distance_from_fire_hydrant_ft) formValues.distance_from_fire_hydrant_ft = quote.distance_from_fire_hydrant_ft;\n if (quote.distance_from_fire_station_miles) formValues.distance_from_fire_station_miles = quote.distance_from_fire_station_miles;\n if (quote.architectural_style) formValues.architectural_style = quote.architectural_style;\n if (quote.dwelling_type) formValues.dwelling_type = quote.dwelling_type;\n if (quote.construction_quality) formValues.construction_quality = quote.construction_quality;\n if (quote.located_over_water !== null && quote.located_over_water !== undefined) {\n formValues.located_over_water = quote.located_over_water;\n }\n if (quote.construction_type) formValues.construction_type = quote.construction_type;\n if (quote.exterior_wall_type) formValues.exterior_wall_type = quote.exterior_wall_type;\n if (quote.foundation_type) formValues.foundation_type = quote.foundation_type;\n if (quote.roof_material_type) formValues.roof_material_type = quote.roof_material_type;\n if (quote.year_roof_updated !== null && quote.year_roof_updated !== undefined) formValues.year_roof_updated = quote.year_roof_updated;\n if (quote.heating_type) formValues.heating_type = quote.heating_type;\n if (quote.heating_fuel_type) formValues.heating_fuel_type = quote.heating_fuel_type;\n if (quote.number_of_fireplaces !== null && quote.number_of_fireplaces !== undefined) {\n formValues.number_of_fireplaces = quote.number_of_fireplaces;\n }\n if (quote.basement_type) formValues.basement_type = quote.basement_type;\n if (quote.parking_type) formValues.parking_type = quote.parking_type;\n if (quote.number_of_parking_spaces !== null && quote.number_of_parking_spaces !== undefined) {\n formValues.number_of_parking_spaces = quote.number_of_parking_spaces;\n }\n if (quote.plumbing_type) formValues.plumbing_type = quote.plumbing_type;\n if (quote.pool_type) formValues.pool_type = quote.pool_type;\n if (quote.total_area_sq_ft !== null && quote.total_area_sq_ft !== undefined) formValues.total_area_sq_ft = quote.total_area_sq_ft;\n if (quote.parcel_area_sq_ft !== null && quote.parcel_area_sq_ft !== undefined) formValues.parcel_area_sq_ft = quote.parcel_area_sq_ft;\n if (quote.residence_type) formValues.residence_type = quote.residence_type;\n if (quote.usage_type) formValues.usage_type = quote.usage_type;\n if (quote.household_size !== null && quote.household_size !== undefined) formValues.household_size = quote.household_size;\n if (quote.number_of_mortgagees !== null && quote.number_of_mortgagees !== undefined) {\n formValues.number_of_mortgagees = quote.number_of_mortgagees;\n }\n if (quote.has_dog !== null && quote.has_dog !== undefined) formValues.has_dog = convertBooleanToYesNo(quote.has_dog);\n if (quote.dog_breed_type) formValues.dog_breed_type = quote.dog_breed_type;\n if (quote.number_of_dogs !== null && quote.number_of_dogs !== undefined) formValues.number_of_dogs = quote.number_of_dogs;\n if (quote.has_business_on_premises !== null && quote.has_business_on_premises !== undefined) {\n formValues.has_business_on_premises = convertBooleanToYesNo(quote.has_business_on_premises);\n }\n if (quote.business_class) formValues.business_class = quote.business_class;\n\n // Discount fields\n if (quote.retiree_discount !== null && quote.retiree_discount !== undefined) {\n formValues.retiree_discount = convertBooleanToYesNo(quote.retiree_discount);\n }\n if (quote.gated_community_discount !== null && quote.gated_community_discount !== undefined) {\n formValues.gated_community_discount = convertBooleanToYesNo(quote.gated_community_discount);\n }\n if (quote.multi_policy_discount !== null && quote.multi_policy_discount !== undefined) {\n formValues.multi_policy_discount = convertBooleanToYesNo(quote.multi_policy_discount);\n }\n if (quote.non_smoker_discount !== null && quote.non_smoker_discount !== undefined) {\n formValues.non_smoker_discount = convertBooleanToYesNo(quote.non_smoker_discount);\n }\n if (quote.first_time_buyer_discount !== null && quote.first_time_buyer_discount !== undefined) {\n formValues.first_time_buyer_discount = convertBooleanToYesNo(quote.first_time_buyer_discount);\n }\n\n // Safety features\n if (quote.fire_detection_system !== null && quote.fire_detection_system !== undefined) {\n formValues.fire_detection_system = convertBooleanToYesNo(quote.fire_detection_system);\n }\n if (quote.burglar_alarm_system !== null && quote.burglar_alarm_system !== undefined) {\n formValues.burglar_alarm_system = convertBooleanToYesNo(quote.burglar_alarm_system);\n }\n if (quote.burglar_alarm_system_type) formValues.burglar_alarm_system_type = quote.burglar_alarm_system_type;\n if (quote.smoke_detectors !== null && quote.smoke_detectors !== undefined) {\n formValues.smoke_detectors = convertBooleanToYesNo(quote.smoke_detectors);\n }\n if (quote.sprinkler_system !== null && quote.sprinkler_system !== undefined) {\n formValues.sprinkler_system = convertBooleanToYesNo(quote.sprinkler_system);\n }\n if (quote.sprinkler_system_type) formValues.sprinkler_system_type = quote.sprinkler_system_type;\n if (quote.gas_leakage_detector !== null && quote.gas_leakage_detector !== undefined) {\n formValues.gas_leakage_detector = convertBooleanToYesNo(quote.gas_leakage_detector);\n }\n if (quote.deadbolt_locks !== null && quote.deadbolt_locks !== undefined) {\n formValues.deadbolt_locks = convertBooleanToYesNo(quote.deadbolt_locks);\n }\n if (quote.fire_extinguisher !== null && quote.fire_extinguisher !== undefined) {\n formValues.fire_extinguisher = convertBooleanToYesNo(quote.fire_extinguisher);\n }\n\n // Other boolean fields\n if (quote.order_credit_authorized !== null && quote.order_credit_authorized !== undefined) {\n formValues.order_credit_authorized = convertBooleanToYesNo(quote.order_credit_authorized);\n }\n if (quote.has_health_insurance_auto_accident !== null && quote.has_health_insurance_auto_accident !== undefined) {\n formValues.has_health_insurance_auto_accident = convertBooleanToYesNo(quote.has_health_insurance_auto_accident);\n }\n if (quote.named_insured_foreclosure_repo_bankruptcy !== null && quote.named_insured_foreclosure_repo_bankruptcy !== undefined) {\n formValues.named_insured_foreclosure_repo_bankruptcy = convertBooleanToYesNo(quote.named_insured_foreclosure_repo_bankruptcy);\n }\n if (quote.named_insured_convicted_insurance_fraud !== null && quote.named_insured_convicted_insurance_fraud !== undefined) {\n formValues.named_insured_convicted_insurance_fraud = convertBooleanToYesNo(quote.named_insured_convicted_insurance_fraud);\n }\n\n // Set \"Add Drivers\" checkbox based on whether drivers exist\n if (quote.drivers && quote.drivers.length > 0) {\n formValues.drivers = 'Yes';\n formValues.drivers__items = quote.drivers.map((driver) => {\n const driverValues: FormValues = {};\n if (driver.first_name) driverValues.first_name = driver.first_name;\n if (driver.last_name) driverValues.last_name = driver.last_name;\n if (driver.date_of_birth) driverValues.date_of_birth = formatDate(driver.date_of_birth);\n if (driver.gender) driverValues.gender = driver.gender;\n if (driver.marital_status) driverValues.marital_status = driver.marital_status;\n if (driver.relationship_to_insured) driverValues.relationship_to_insured = driver.relationship_to_insured;\n if (driver.license_state) driverValues.license_state = driver.license_state;\n if (driver.license_status) driverValues.license_status = driver.license_status;\n if (driver.license_number) driverValues.license_number = driver.license_number;\n if (driver.date_first_licensed) driverValues.date_first_licensed = formatDate(driver.date_first_licensed);\n if (driver.education_level) driverValues.education_level = driver.education_level;\n if (driver.occupation) driverValues.occupation = driver.occupation;\n if (driver.industry) driverValues.industry = driver.industry;\n\n // Driver violations\n if (driver.driver_violations && driver.driver_violations.length > 0) {\n driverValues.driver_violations__items = driver.driver_violations.map((violation) => {\n const violationValues: FormValues = {};\n if (violation.code) violationValues.code = violation.code;\n if (violation.occurred_at) violationValues.occurred_at = formatDate(violation.occurred_at);\n return violationValues;\n });\n }\n\n // Driver accidents\n if (driver.driver_accidents && driver.driver_accidents.length > 0) {\n driverValues.driver_accidents__items = driver.driver_accidents.map((accident) => {\n const accidentValues: FormValues = {};\n if (accident.occurred_at) accidentValues.occurred_at = formatDate(accident.occurred_at);\n if (accident.description) accidentValues.description = accident.description;\n if (accident.quote_vehicle_id) accidentValues.quote_vehicle_id = accident.quote_vehicle_id;\n if (accident.property_damage_amount_paid_cents !== null && accident.property_damage_amount_paid_cents !== undefined) {\n accidentValues.property_damage_amount_paid_cents = accident.property_damage_amount_paid_cents;\n }\n if (accident.personal_injury_amount_paid_cents !== null && accident.personal_injury_amount_paid_cents !== undefined) {\n accidentValues.personal_injury_amount_paid_cents = accident.personal_injury_amount_paid_cents;\n }\n return accidentValues;\n });\n }\n\n // Driver losses (nested under driver, using 'losses' association)\n if (driver.losses && driver.losses.length > 0) {\n driverValues.losses = driver.losses.map((loss) => {\n const lossValues: FormValues = {};\n if (loss.description) lossValues.description = loss.description;\n if (loss.date_of_incident) lossValues.date_of_incident = formatDate(loss.date_of_incident);\n if (loss.amount_paid_cents !== null && loss.amount_paid_cents !== undefined) {\n lossValues.amount_paid_cents = loss.amount_paid_cents;\n }\n if (loss.quote_vehicle_id) lossValues.quote_vehicle_id = loss.quote_vehicle_id;\n return lossValues;\n });\n }\n\n return driverValues;\n });\n } else {\n // No drivers exist, set checkbox to 'No'\n formValues.drivers = 'No';\n }\n\n // Set \"Add Vehicles\" checkbox based on whether vehicles exist\n if (quote.vehicles && quote.vehicles.length > 0) {\n formValues.vehicles = 'Yes';\n formValues.vehicles__items = quote.vehicles.map((vehicle) => {\n const vehicleValues: FormValues = {};\n if (vehicle.vin) vehicleValues.vin = vehicle.vin;\n if (vehicle.year !== null && vehicle.year !== undefined) vehicleValues.year = vehicle.year;\n if (vehicle.make) vehicleValues.make = vehicle.make;\n if (vehicle.model) vehicleValues.model = vehicle.model;\n if (vehicle.ownership_type) vehicleValues.ownership_type = vehicle.ownership_type;\n if (vehicle.usage) vehicleValues.usage = vehicle.usage;\n if (vehicle.annual_mileage !== null && vehicle.annual_mileage !== undefined) {\n vehicleValues.annual_mileage = vehicle.annual_mileage;\n }\n if (vehicle.miles_to_work !== null && vehicle.miles_to_work !== undefined) {\n vehicleValues.miles_to_work = vehicle.miles_to_work;\n }\n if (vehicle.percent_to_work !== null && vehicle.percent_to_work !== undefined) {\n vehicleValues.percent_to_work = vehicle.percent_to_work;\n }\n\n // Combine garaging address fields into a single garaging_address string\n const garagingAddressParts: string[] = [];\n if (vehicle.garaging_address_line_1) garagingAddressParts.push(vehicle.garaging_address_line_1);\n if (vehicle.garaging_address_line_2) garagingAddressParts.push(vehicle.garaging_address_line_2);\n if (vehicle.garaging_address_city) garagingAddressParts.push(vehicle.garaging_address_city);\n if (vehicle.garaging_address_state) garagingAddressParts.push(vehicle.garaging_address_state);\n if (vehicle.garaging_address_postal_code) garagingAddressParts.push(vehicle.garaging_address_postal_code);\n if (garagingAddressParts.length > 0) {\n vehicleValues.garaging_address = garagingAddressParts.join(', ');\n }\n\n if (vehicle.anti_theft_type) vehicleValues.anti_theft_type = vehicle.anti_theft_type;\n if (vehicle.passive_restraint_type) vehicleValues.passive_restraint_type = vehicle.passive_restraint_type;\n\n // Vehicle coverages\n if (vehicle.coverages && vehicle.coverages.length > 0) {\n vehicleValues.coverages__items = vehicle.coverages.map((coverage) => {\n const coverageValues: FormValues = {};\n if (coverage.type) coverageValues.type = coverage.type;\n if (coverage.per_person_limit_cents !== null && coverage.per_person_limit_cents !== undefined) {\n coverageValues.per_person_limit_cents = coverage.per_person_limit_cents;\n }\n if (coverage.per_incident_limit_cents !== null && coverage.per_incident_limit_cents !== undefined) {\n coverageValues.per_incident_limit_cents = coverage.per_incident_limit_cents;\n }\n if (coverage.per_incident_limit_percent !== null && coverage.per_incident_limit_percent !== undefined) {\n coverageValues.per_incident_limit_percent = coverage.per_incident_limit_percent;\n }\n if (coverage.per_day_limit_cents !== null && coverage.per_day_limit_cents !== undefined) {\n coverageValues.per_day_limit_cents = coverage.per_day_limit_cents;\n }\n if (coverage.deductible_cents !== null && coverage.deductible_cents !== undefined) {\n coverageValues.deductible_cents = coverage.deductible_cents;\n }\n if (coverage.is_declined !== null && coverage.is_declined !== undefined) {\n coverageValues.is_declined = convertBooleanToYesNo(coverage.is_declined);\n }\n return coverageValues;\n });\n }\n\n // Vehicle lienholders\n if (vehicle.vehicle_lienholders && vehicle.vehicle_lienholders.length > 0) {\n vehicleValues.vehicle_lienholders__items = vehicle.vehicle_lienholders.map((lienholder) => {\n const lienholderValues: FormValues = {};\n if (lienholder.name) lienholderValues.name = lienholder.name;\n if (lienholder.type) lienholderValues.type = lienholder.type;\n if (lienholder.line_1) lienholderValues.line_1 = lienholder.line_1;\n if (lienholder.line_2) lienholderValues.line_2 = lienholder.line_2;\n if (lienholder.city) lienholderValues.city = lienholder.city;\n if (lienholder.state) lienholderValues.state = lienholder.state;\n if (lienholder.postal_code) lienholderValues.postal_code = lienholder.postal_code;\n if (lienholder.phone) lienholderValues.phone = lienholder.phone;\n if (lienholder.fax) lienholderValues.fax = lienholder.fax;\n return lienholderValues;\n });\n }\n\n return vehicleValues;\n });\n } else {\n // No vehicles exist, set checkbox to 'No'\n formValues.vehicles = 'No';\n }\n\n // Home losses array -> home_losses__items\n if (quote.losses && quote.losses.length > 0) {\n formValues.home_losses__items = quote.losses.map((loss) => {\n const lossValues: FormValues = {};\n if (loss.description) lossValues.description = loss.description;\n if (loss.date_of_incident) lossValues.date_of_incident = formatDate(loss.date_of_incident);\n if (loss.amount_paid_cents !== null && loss.amount_paid_cents !== undefined) {\n lossValues.amount_paid_cents = loss.amount_paid_cents;\n }\n return lossValues;\n });\n }\n\n return formValues;\n}\n","import { useEffect, useCallback, useState } from 'react';\n\nimport type { GetRatesResponse, Stage } from '@getcredify/credify-insurance-types';\n\nimport { FormWizard, Rates } from './index';\n\nimport type { StageMeta, FormValues } from '../utils/form';\nimport {\n createQuote,\n getQuestionsByStage,\n getRates,\n getStagesForQuote,\n isSupportedState,\n setAuthToken,\n updateQuote,\n verifyQuote,\n getQuote,\n loadAuthTokenFromStorage,\n getAuthToken,\n clearAuthToken\n} from '../utils/api';\nimport { loadQuoteId, saveQuoteId, clearQuoteId } from '../utils/storage';\nimport { quoteToFormValues } from '../utils/quoteToFormValues';\nimport { pushWidgetOpened, pushWidgetClosed, pushFlowCompleted, pushRatesViewed, pushStageCompleted } from '../utils/gtm';\n\nfunction transformFormValues(values: FormValues): FormValues {\n const transformed: FormValues = {};\n\n // Helper function to convert \"Yes\"/\"No\" to boolean\n const convertYesNoToBoolean = (value: unknown): unknown => {\n if (typeof value === 'string') {\n if (value === 'Yes') return true;\n if (value === 'No') return false;\n }\n return value;\n };\n\n // Get all non-__items keys to determine which fields are in the current stage\n const nonItemsKeys = Object.keys(values).filter((key) => !key.includes('__items'));\n\n // Get all field names that exist within any __items arrays\n const fieldsInArrays = new Set<string>();\n for (const [key, value] of Object.entries(values)) {\n if (key.endsWith('__items') && Array.isArray(value)) {\n value.forEach((item) => {\n if (typeof item === 'object' && item !== null) {\n Object.keys(item).forEach((fieldName) => {\n fieldsInArrays.add(fieldName);\n });\n }\n });\n }\n }\n\n for (const [key, value] of Object.entries(values)) {\n if (key.endsWith('__items')) {\n // Convert \"drivers__items\" to \"drivers\" with the array value\n const baseKey = key.replace('__items', '');\n\n // Only include this array if there's a corresponding root-level field with the same name\n // This indicates the array is actively being used in the current stage\n const hasCorrespondingRootField = nonItemsKeys.includes(baseKey);\n\n if (hasCorrespondingRootField) {\n // Recursively transform each item in the array\n const transformedArray = Array.isArray(value) ? value.map((item) => transformFormValues(item as FormValues)) : value;\n transformed[baseKey] = transformedArray;\n }\n } else if (!key.includes('__items')) {\n // Include root-level fields that don't exist in any array items\n // This prevents including fields from previous stages that are now represented in arrays\n if (!fieldsInArrays.has(key)) {\n transformed[key] = convertYesNoToBoolean(value);\n }\n }\n // Skip any other __items related keys that we've already processed\n }\n\n return transformed;\n}\n\nexport default function Widget({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) {\n const [stages, setStages] = useState<StageMeta[]>([]);\n const [quoteId, setQuoteId] = useState<string | null>(null);\n const [rates, setRates] = useState<GetRatesResponse | null>(null);\n const [savedFormValues, setSavedFormValues] = useState<FormValues | null>(null);\n const [initialActiveStage, setInitialActiveStage] = useState<number | undefined>(undefined);\n const [isRestoringQuote, setIsRestoringQuote] = useState(false);\n\n function mapStagesToStageMetas(stages: Stage[]): StageMeta[] {\n // Map stage keys to human-friendly titles\n const stageTitleMap: Record<string, string> = {\n SMSVerification: 'Verify',\n AutoCurrentCarrier: 'Current Auto Policy',\n HomeCurrentCarrier: 'Current Home Policy'\n };\n\n return stages.map((stage) => ({\n key: stage,\n title: stageTitleMap[stage] || stage,\n loadQuestions: async () => {\n const data = await getQuestionsByStage(stage);\n const qs = data.questions;\n return qs;\n }\n }));\n }\n\n // Restore quote state on mount\n useEffect(() => {\n const restoreQuoteState = async () => {\n try {\n // Load quoteId and authToken from localStorage\n const storedQuoteId = loadQuoteId();\n loadAuthTokenFromStorage();\n\n if (storedQuoteId) {\n setIsRestoringQuote(true);\n setQuoteId(storedQuoteId);\n\n // Try to fetch quote data - use token if available, otherwise send quoteId in body\n try {\n const token = getAuthToken();\n const response = await getQuote(token ? undefined : storedQuoteId);\n\n if (!response || !response.quote) {\n throw new Error('Invalid response from getQuote: missing quote data');\n }\n\n const { quote } = response;\n\n // Find the stage index based on current_stage FIRST\n // This ensures we have the correct stages before setting form values\n const { stages: currentStages } = await getStagesForQuote();\n const stageMetas = mapStagesToStageMetas(currentStages);\n setStages(stageMetas);\n\n // Transform quote data to form values\n try {\n const formValues = quoteToFormValues(quote);\n setSavedFormValues(formValues);\n } catch (transformError) {\n throw new Error(`Failed to transform quote data: ${transformError instanceof Error ? transformError.message : 'Unknown error'}`);\n }\n\n // Set the initial active stage based on current_stage\n if (quote.current_stage) {\n const stageIndex = stageMetas.findIndex((s) => s.key === quote.current_stage);\n if (stageIndex >= 0) {\n setInitialActiveStage(stageIndex);\n } else {\n // If current_stage not found, default to last stage\n setInitialActiveStage(stageMetas.length - 1);\n }\n } else {\n // If no current_stage, default to last stage\n setInitialActiveStage(stageMetas.length - 1);\n }\n } catch (error) {\n // If quote fetch fails, check if it's a 404 (quote not found)\n const apiError = error as Error & { statusCode?: number };\n if (apiError.statusCode === 404) {\n // Quote doesn't exist - clear invalid quoteId and let user start fresh\n clearQuoteId();\n setQuoteId(null);\n } else {\n // Other errors (e.g., token expired) - clear token but keep quoteId\n clearAuthToken();\n // Don't clear quoteId - user can continue and verify SMS again\n }\n } finally {\n setIsRestoringQuote(false);\n }\n } else {\n // No quote to restore, fetch default stages\n const { stages: defaultStages } = await getStagesForQuote();\n setStages(mapStagesToStageMetas(defaultStages));\n }\n } catch {\n // Silently handle restore errors\n setIsRestoringQuote(false);\n }\n };\n\n if (isOpen) {\n restoreQuoteState();\n }\n }, [isOpen]);\n\n // Lock background scroll\n useEffect(() => {\n if (!isOpen) return;\n const { overflow } = document.body.style;\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = overflow;\n };\n }, [isOpen]);\n\n // Close on Escape\n const onKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n pushWidgetClosed();\n onClose();\n }\n },\n [onClose]\n );\n useEffect(() => {\n if (!isOpen) return;\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [isOpen, onKeyDown]);\n\n // Clear saved form values and reset state when widget closes\n useEffect(() => {\n if (!isOpen) {\n setSavedFormValues(null);\n setInitialActiveStage(undefined);\n setIsRestoringQuote(false);\n }\n }, [isOpen]);\n\n // GTM: widget opened\n useEffect(() => {\n if (isOpen) pushWidgetOpened();\n }, [isOpen]);\n\n // GTM: rates viewed\n useEffect(() => {\n if (rates && Array.isArray(rates)) pushRatesViewed({ rateCount: rates.length });\n }, [rates]);\n\n if (!isOpen) return null;\n\n const handleClose = () => {\n pushWidgetClosed();\n onClose();\n };\n\n return (\n <div className=\"fixed inset-0 z-[9999] flex items-center justify-center\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"insurance-modal-title\">\n <div className=\"backdrop\" aria-hidden=\"true\" />\n\n <div className=\"modal-panel bg-white relative w-full max-w-2xl flex flex-col max-h-[90vh] overflow-hidden\" role=\"document\">\n <button\n onClick={handleClose}\n className=\"modal-close-btn absolute top-4 right-4 text-slate-400 hover:text-slate-600 text-xl\"\n aria-label=\"Close\"\n type=\"button\"\n >\n ×\n </button>\n\n <div className=\"text-center mb-6\">\n <h2 id=\"insurance-modal-title\" className=\"h1-title\">\n Let's get you the best insurance rates.\n </h2>\n <p className=\"p-subtitle\">This should only take a few minutes.</p>\n </div>\n\n {/* The ONLY scrollable area */}\n <div className=\"panel-body flex-1 min-h-0 overflow-y-auto\">\n {!rates && (\n <>\n {isRestoringQuote || stages.length === 0 ? (\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"text-slate-600\">Loading...</div>\n </div>\n ) : (\n <FormWizard\n stages={stages}\n initialValues={savedFormValues ?? undefined}\n initialActive={initialActiveStage}\n onStageComplete={async (stageValues, stageKey) => {\n try {\n const transformedValues = transformFormValues(stageValues);\n\n // Get the updated stages first to determine the next stage\n const { stages: newStages } = await getStagesForQuote();\n const stageMetas = mapStagesToStageMetas(newStages);\n setStages(stageMetas);\n\n // Find the next stage after the completed one\n const currentStageIndex = stageMetas.findIndex((s) => s.key === stageKey);\n const currentMeta = stageMetas[currentStageIndex];\n const nextStageIndex = currentStageIndex + 1;\n const nextStage = nextStageIndex < stageMetas.length ? stageMetas[nextStageIndex] : null;\n const nextStageKey = nextStage?.key || stageKey; // If it's the last stage, keep the current one\n\n if (!quoteId) {\n const createQuoteResponse = await createQuote(transformedValues.phone as string);\n const newQuoteId = createQuoteResponse?.quoteId;\n if (!newQuoteId || typeof newQuoteId !== 'string' || newQuoteId.trim() === '') {\n throw new Error(`Failed to create quote - invalid quoteId returned: ${newQuoteId}`);\n }\n setQuoteId(newQuoteId);\n saveQuoteId(newQuoteId);\n // Save next stage as current_stage after creating quote (no token yet, so pass quoteId)\n await updateQuote({ current_stage: nextStageKey }, false, newQuoteId);\n } else if (stageKey === 'SMSVerification') {\n const { isVerified, token } = await verifyQuote(quoteId, transformedValues.sms_code as string);\n if (!isVerified) {\n throw new Error('Invalid SMS code');\n }\n if (token) {\n setAuthToken(token);\n }\n // Save next stage as current_stage after SMS verification (now we have a token)\n await updateQuote({ current_stage: nextStageKey }, false);\n } else if (stageKey === 'State') {\n const { isSupported } = await isSupportedState(transformedValues.state as string);\n if (!isSupported) {\n throw new Error('State is not supported');\n }\n // Include next stage as current_stage in the payload\n // Pass quoteId if we have it but no token (for pre-verification stages)\n const token = getAuthToken();\n await updateQuote({ ...transformedValues, current_stage: nextStageKey }, false, token ? undefined : quoteId);\n } else {\n // Include next stage as current_stage in the payload\n // Pass quoteId if we have it but no token (for pre-verification stages)\n const token = getAuthToken();\n await updateQuote({ ...transformedValues, current_stage: nextStageKey }, false, token ? undefined : quoteId || undefined);\n }\n\n pushStageCompleted({\n stageKey,\n stageTitle: currentMeta?.title ?? stageKey,\n stepIndex: currentStageIndex + 1,\n totalSteps: stageMetas.length\n });\n return { success: true };\n } catch (error) {\n return { success: false, error: error instanceof Error ? error.message : 'An error occurred' };\n }\n }}\n onComplete={async (allValues) => {\n try {\n const transformedValues = transformFormValues(allValues);\n\n if (!quoteId) {\n throw new Error('Quote ID is required');\n }\n await updateQuote(transformedValues, true);\n\n // Save form values so we can restore them when going back\n setSavedFormValues(allValues);\n\n const { rates } = await getRates();\n setRates(rates);\n\n const totalSteps = stages.length;\n const lastStage = stages[totalSteps - 1];\n pushStageCompleted({\n stageKey: lastStage?.key ?? 'unknown',\n stageTitle: lastStage?.title ?? 'unknown',\n stepIndex: totalSteps,\n totalSteps\n });\n pushFlowCompleted();\n return { success: true };\n } catch (error) {\n return { success: false, error: error instanceof Error ? error.message : 'An error occurred' };\n }\n }}\n />\n )}\n </>\n )}{' '}\n {rates && quoteId && <Rates rates={rates} onBack={() => setRates(null)} />}\n </div>\n\n {/* Footer */}\n <div className=\"mt-4 pt-4 border-t border-slate-200\">\n <p className=\"text-center text-sm text-slate-500\">Insurance products offered through Credify Corporation, a licensed insurance agency.</p>\n </div>\n </div>\n </div>\n );\n}\n","import Widget from '../components/Widget';\nimport CredifyInsuranceWidget from '../widget';\n\nexport default function WidgetController({ isOpen }: { isOpen: boolean }) {\n return (\n <Widget\n isOpen={isOpen}\n onClose={() => {\n CredifyInsuranceWidget.close();\n }}\n />\n );\n}\n","/* @refresh skip */\nimport { createElement } from 'react';\nimport { createRoot, type Root } from 'react-dom/client';\nimport WidgetController from './internal/WidgetController';\nimport './index.css';\n// CSS is injected at runtime by vite-plugin-css-injected-by-js so the widget always has its styles on any host.\n\ntype InitOptions = { autoOpen?: boolean };\n\nlet container: HTMLDivElement | null = null;\nlet root: Root | null = null;\nlet isOpen = false;\n\nfunction ensureRoot() {\n if (!container) {\n container = document.createElement('div');\n container.id = 'insurance-widget-root';\n // Mount on documentElement so host transforms/filters on body don't make\n // our fixed overlay position relative to body (which would look inline).\n document.documentElement.appendChild(container);\n }\n if (!root && container) {\n root = createRoot(container);\n }\n}\n\nfunction render() {\n ensureRoot();\n if (root) {\n root.render(createElement(WidgetController, { isOpen })); // ⬅️ controlled prop\n }\n}\n\nfunction destroy() {\n if (root && container) {\n root.unmount();\n container.remove();\n }\n root = null;\n container = null;\n}\n\nexport interface CredifyInsuranceWidgetAPI {\n init(options?: InitOptions): void;\n open(): void;\n close(): void;\n destroy(): void;\n}\n\nexport const CredifyInsuranceWidget: CredifyInsuranceWidgetAPI = {\n init: (options) => {\n isOpen = !!options?.autoOpen; // default false\n render();\n },\n open: () => {\n isOpen = true;\n render();\n },\n close: () => {\n isOpen = false;\n render();\n },\n destroy\n};\n\n// expose globally for script-tag usage\ndeclare global {\n interface Window {\n CredifyInsuranceWidget?: CredifyInsuranceWidgetAPI;\n }\n}\nif (typeof window !== 'undefined') window.CredifyInsuranceWidget = CredifyInsuranceWidget;\n\nexport default CredifyInsuranceWidget;\n"],"names":["Field","id","label","hint","error","required","className","children","jsxs","jsx","TextInput","rest","NumericInput","EmailInput","formatPhoneNumber","value","digits","tenDigits","extractDigits","TelInput","onChange","displayValue","setDisplayValue","useState","inputRef","useRef","cursorPositionRef","useEffect","limitedDigits","handleChange","e","input","inputValue","formatted","rawValue","syntheticEvent","beforeCursor","digitsBeforeCursor","formattedBeforeCursor","newPosition","UrlInput","PasswordInput","TextArea","rows","DateInput","Checkbox","Radio","name","checked","RadioGroup","legend","legendClassName","SelectInput","placeholder","options","describedBy","hasCustomChildren","opt","GOOGLE_MAPS_API_KEY","loadGoogleMapsScript","resolve","reject","existingScript","script","extractAddressComponents","place","components","component","types","AddressAutocomplete","onPlaceSelect","autocompleteServiceRef","placesServiceRef","suggestionsContainerRef","isLoading","setIsLoading","setInputValue","suggestions","setSuggestions","showSuggestions","setShowSuggestions","selectedIndex","setSelectedIndex","suggestionsRef","showSuggestionsRef","selectedIndexRef","debounceTimerRef","isMounted","err","handleInputChange","query","predictions","status","handleKeyDown","prev","newIndex","handleSuggestionClick","handleClickOutside","event","prediction","formattedAddress","addressComponents","index","slugify","s","ensureKey","q","idx","validateQuestions","questions","values","errors","isBlank","v","i","key","val","coerceNumber","n","toNumber","x","toTime","cmp","a","b","na","nb","ta","tb","contains","haystack","needle","evalConditional","qValue","conditionalType","conditionalValue","c","getIn","obj","path","acc","setInImmutable","head","tail","arr","current","nextContainer","next","scopedRead","scope","scopedWrite","ITEMS_SUFFIX","itemsKey","k","decorateKeys","walk","list","pathParts","qi","parentPart","baseKey","nextConds","ci","nested","asTextValue","asNumberValue","asSelectValue","FormRenderer","initialValues","controlledValues","onChangeValues","onSubmit","keyedQuestions","useMemo","initialUncontrolled","uncontrolled","setUncontrolled","localShadow","setLocalShadow","p","setErrors","renderOne","scopePath","set","nextAll","conds","cond","currentValue","wasActive","willBeActive","arrStorageKey","clearNestedArrays","questionList","currentScope","childQ","childCond","nestedArrKey","grandChildren","Fragment","idOpt","opts","scopedName","o","address","renderRecursive","qIndex","elem","matches","branches","branch","bi","count","pushEmpty","popLast","nextArr","groupIdBase","_","itemScope","groupId","childConds","childVal","childMatches","m","bc","bci","nestedArr","nestedCount","nestedPush","nestedPop","__","nIdx","nestedScope","visibleFlat","out","handleSubmit","eMap","firstIdx","GTM_CONTAINER_ID","getDataLayer","pushDataLayerEvent","eventName","payload","pushWidgetOpened","pushWidgetClosed","pushStageViewed","pushStageCompleted","pushFlowCompleted","pushRatesViewed","pushRatesBack","type","rhs","flattenVisibleQuestions","root","child","validateRepeatablesRecursive","valuesAtScope","qKey","qVal","item","itemErrors","hasRepeatableBlockingErrors","rootValues","FormWizard","stages","onStageComplete","onComplete","initialActive","active","setActive","allValues","setAllValues","perStageQuestions","setPerStageQuestions","loading","setLoading","isSubmitting","setIsSubmitting","stageError","setStageError","stepRefs","hasStages","stage","stageKey","activeElement","cancelled","qs","currentValues","slice","keys","kItems","updateCurrentValues","goPrev","goNext","visible","flatErrors","flatBlock","repeatBlock","nextIndex","isComplete","success","disableNext","el","copy","QUOTE_ID_KEY","AUTH_TOKEN_KEY","saveQuoteId","quoteId","loadQuoteId","clearQuoteId","saveAuthToken","token","loadAuthToken","clearAuthToken","clearAllQuoteData","BASE_URL","authToken","setAuthToken","getAuthToken","loadAuthTokenFromStorage","storedToken","clearAuthTokenStorage","makeAuthenticatedRequest","url","body","headers","response","errorMessage","getQuestionsByStage","getStagesForQuote","createQuote","phone","data","updateQuote","getRates","verifyQuote","smsCode","isSupportedState","state","getQuote","requestBind","quoteRateId","currencyFormatter","BackButton","onBack","handleBack","Rates","rates","hasRates","requestStatuses","setRequestStatuses","rate","premiumDollars","formattedPremium","cardKey","isRequesting","isRequested","handleRequestBind","convertBooleanToYesNo","formatDate","date","d","quoteToFormValues","quote","formValues","addressParts","priorAddressParts","driver","driverValues","violation","violationValues","accident","accidentValues","loss","lossValues","vehicle","vehicleValues","garagingAddressParts","coverage","coverageValues","lienholder","lienholderValues","transformFormValues","transformed","convertYesNoToBoolean","nonItemsKeys","fieldsInArrays","fieldName","transformedArray","Widget","isOpen","onClose","setStages","setQuoteId","setRates","savedFormValues","setSavedFormValues","initialActiveStage","setInitialActiveStage","isRestoringQuote","setIsRestoringQuote","mapStagesToStageMetas","stageTitleMap","storedQuoteId","currentStages","stageMetas","transformError","stageIndex","defaultStages","overflow","onKeyDown","useCallback","handleClose","stageValues","transformedValues","newStages","currentStageIndex","currentMeta","nextStageIndex","nextStageKey","isVerified","isSupported","newQuoteId","totalSteps","lastStage","WidgetController","CredifyInsuranceWidget","container","ensureRoot","createRoot","render","createElement","destroy"],"mappings":"ybAYO,SAASA,EAAM,CAAE,GAAAC,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,SAAAC,GAAwB,CAC3F,OACEC,OAAC,OAAI,UAAAF,EACH,SAAA,CAAAE,EAAAA,KAAC,QAAA,CAAM,QAASP,EAAI,UAAU,aAC3B,SAAA,CAAAC,EAAM,IAAEG,GAAYI,EAAAA,IAAC,OAAA,CAAK,UAAU,eAAe,SAAA,GAAA,CAAC,CAAA,EACvD,EACCF,EACAJ,GAAQ,CAACC,GACRK,EAAAA,IAAC,IAAA,CAAE,GAAI,GAAGR,CAAE,QAAS,UAAU,8BAC5B,SAAAE,CAAA,CACH,EAEDC,SACE,IAAA,CAAE,GAAI,GAAGH,CAAE,SAAU,UAAU,4BAC7B,SAAAG,CAAA,CACH,CAAA,EAEJ,CAEJ,CC1BO,SAASM,GAAU,CAAE,GAAAT,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,GAAGK,GAAe,CACzF,aACGX,EAAA,CAAM,GAAAC,EAAQ,MAAAC,EAAc,KAAAC,EAAY,MAAAC,EAAc,SAAAC,EAAoB,UAAAC,EACzE,SAAAG,EAAAA,IAAC,QAAA,CACC,GAAAR,EACA,UAAW,cAAcG,EAAQ,cAAgB,EAAE,GACnD,eAAc,CAAC,CAACA,EAChB,mBAAkB,CAACD,EAAO,GAAGF,CAAE,QAAU,KAAMG,EAAQ,GAAGH,CAAE,SAAW,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OAC1G,SAAAI,EACC,GAAGM,EACJ,KAAK,MAAA,CAAA,EAET,CAEJ,CCdO,SAASC,GAAa,CAAE,GAAAX,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,GAAGK,GAAe,CAC5F,aACGX,EAAA,CAAM,GAAAC,EAAQ,MAAAC,EAAc,KAAAC,EAAY,MAAAC,EAAc,SAAAC,EAAoB,UAAAC,EACzE,SAAAG,EAAAA,IAAC,QAAA,CACC,GAAAR,EACA,KAAK,SACL,UAAW,cAAcG,EAAQ,cAAgB,EAAE,GACnD,eAAc,CAAC,CAACA,EAChB,mBAAkB,CAACD,EAAO,GAAGF,CAAE,QAAU,KAAMG,EAAQ,GAAGH,CAAE,SAAW,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OAC1G,SAAAI,EACC,GAAGM,CAAA,CAAA,EAER,CAEJ,CCdO,SAASE,GAAW,CAAE,GAAAZ,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,GAAGK,GAAe,CAC1F,aACGX,EAAA,CAAM,GAAAC,EAAQ,MAAAC,EAAc,KAAAC,EAAY,MAAAC,EAAc,SAAAC,EAAoB,UAAAC,EACzE,SAAAG,EAAAA,IAAC,QAAA,CACC,GAAAR,EACA,KAAK,QACL,UAAW,cAAcG,EAAQ,cAAgB,EAAE,GACnD,UAAU,QACV,aAAa,QACb,SAAAC,EACA,eAAc,CAAC,CAACD,EAChB,mBAAkB,CAACD,EAAO,GAAGF,CAAE,QAAU,KAAMG,EAAQ,GAAGH,CAAE,SAAW,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OACzG,GAAGU,CAAA,CAAA,EAER,CAEJ,CCPA,SAASG,GAAkBC,EAAuB,CAEhD,MAAMC,EAASD,EAAM,QAAQ,MAAO,EAAE,EAGtC,GAAIC,EAAO,SAAW,GACpB,MAAO,IAAIA,EAAO,MAAM,EAAG,CAAC,CAAC,KAAKA,EAAO,MAAM,EAAG,CAAC,CAAC,MAAMA,EAAO,MAAM,CAAC,CAAC,GAI3E,GAAIA,EAAO,OAAS,GAAI,CACtB,MAAMC,EAAYD,EAAO,MAAM,EAAG,EAAE,EACpC,MAAO,IAAIC,EAAU,MAAM,EAAG,CAAC,CAAC,KAAKA,EAAU,MAAM,EAAG,CAAC,CAAC,MAAMA,EAAU,MAAM,CAAC,CAAC,EACpF,CAGA,OAAID,EAAO,QAAU,EACZ,IAAIA,EAAO,MAAM,EAAG,CAAC,CAAC,KAAKA,EAAO,MAAM,EAAG,CAAC,CAAC,MAAMA,EAAO,MAAM,CAAC,CAAC,GAEvEA,EAAO,QAAU,EACZ,IAAIA,EAAO,MAAM,EAAG,CAAC,CAAC,KAAKA,EAAO,MAAM,CAAC,CAAC,GAE/CA,EAAO,OAAS,EACX,IAAIA,CAAM,GAGZA,CACT,CAKA,SAASE,GAAcH,EAAuB,CAC5C,OAAOA,EAAM,QAAQ,MAAO,EAAE,CAChC,CAEO,SAASI,GAAS,CAAE,GAAAlB,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,MAAAS,EAAQ,GAAI,SAAAK,EAAU,GAAGT,GAAe,CAC9G,KAAM,CAACU,EAAcC,CAAe,EAAIC,EAAAA,SAAS,EAAE,EAC7CC,EAAWC,EAAAA,OAAyB,IAAI,EACxCC,EAAoBD,EAAAA,OAAe,CAAC,EAG1CE,EAAAA,UAAU,IAAM,CACd,GAAI,CAACZ,EAAO,CACVO,EAAgB,EAAE,EAClB,MACF,CAGA,IAAIN,EAASE,GAAcH,CAAK,EAG5BC,EAAO,SAAW,IAAMA,EAAO,WAAW,GAAG,IAC/CA,EAASA,EAAO,MAAM,CAAC,GAIzB,MAAMY,EAAgBZ,EAAO,MAAM,EAAG,EAAE,EACxCM,EAAgBR,GAAkBc,CAAa,CAAC,CAClD,EAAG,CAACb,CAAK,CAAC,EAEV,MAAMc,EAAgBC,GAAqC,CACzD,MAAMC,EAAQD,EAAE,OACVE,EAAaD,EAAM,MAGzBL,EAAkB,QAAUK,EAAM,gBAAkB,EAMpD,MAAMH,EAHSV,GAAcc,CAAU,EAGV,MAAM,EAAG,EAAE,EAGlCC,EAAYnB,GAAkBc,CAAa,EACjDN,EAAgBW,CAAS,EAIzB,MAAMC,EAAWN,EAAc,SAAW,GAAK,KAAKA,CAAa,GAAKA,EAGhEO,EAAiB,CACrB,GAAGL,EACH,cAAe,CACb,GAAGA,EAAE,cACL,MAAOI,CAAA,EAET,OAAQ,CACN,GAAGJ,EAAE,OACL,MAAOI,CAAA,CACT,EAIFd,IAAWe,CAAc,EAGzB,WAAW,IAAM,CACf,GAAIX,EAAS,QAAS,CAEpB,MAAMY,EAAeJ,EAAW,MAAM,EAAGN,EAAkB,OAAO,EAC5DW,EAAqBnB,GAAckB,CAAY,EAC/CE,EAAwBxB,GAAkBuB,CAAkB,EAE5DE,EAAc,KAAK,IAAID,EAAsB,OAAQL,EAAU,MAAM,EAC3ET,EAAS,QAAQ,kBAAkBe,EAAaA,CAAW,CAC7D,CACF,EAAG,CAAC,CACN,EAEA,aACGvC,EAAA,CAAM,GAAAC,EAAQ,MAAAC,EAAc,KAAAC,EAAY,MAAAC,EAAc,SAAAC,EAAoB,UAAAC,EACzE,SAAAE,EAAAA,KAAC,MAAA,CACC,UAAW,2FACTJ,EAAQ,uBAAyB,yEACnC,GAEA,SAAA,CAAAK,EAAAA,IAAC,QAAA,CACC,QAASR,EACT,UAAU,iIACX,SAAA,IAAA,CAAA,EAGDQ,EAAAA,IAAC,QAAA,CACC,IAAKe,EACL,GAAAvB,EACA,KAAK,MACL,UAAW,2GACTG,EAAQ,cAAgB,EAC1B,GACA,UAAU,MACV,aAAa,MACb,SAAAC,EACA,eAAc,CAAC,CAACD,EAChB,mBAAkB,CAACD,EAAO,GAAGF,CAAE,QAAU,KAAMG,EAAQ,GAAGH,CAAE,SAAW,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OAC1G,MAAOoB,EACP,SAAUQ,EACT,GAAGlB,CAAA,CAAA,CACN,CAAA,CAAA,EAEJ,CAEJ,CCzJO,SAAS6B,GAAS,CAAE,GAAAvC,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,GAAGK,GAAe,CACxF,aACGX,EAAA,CAAM,GAAAC,EAAQ,MAAAC,EAAc,KAAAC,EAAY,MAAAC,EAAc,SAAAC,EAAoB,UAAAC,EACzE,SAAAG,EAAAA,IAAC,QAAA,CACC,GAAAR,EACA,KAAK,MACL,UAAW,cAAcG,EAAQ,cAAgB,EAAE,GACnD,UAAU,MACV,aAAa,MACb,SAAAC,EACA,eAAc,CAAC,CAACD,EAChB,mBAAkB,CAACD,EAAO,GAAGF,CAAE,QAAU,KAAMG,EAAQ,GAAGH,CAAE,SAAW,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OACzG,GAAGU,CAAA,CAAA,EAER,CAEJ,CChBO,SAAS8B,GAAc,CAAE,GAAAxC,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,GAAGK,GAAe,CAC7F,aACGX,EAAA,CAAM,GAAAC,EAAQ,MAAAC,EAAc,KAAAC,EAAY,MAAAC,EAAc,SAAAC,EAAoB,UAAAC,EACzE,SAAAG,EAAAA,IAAC,QAAA,CACC,GAAAR,EACA,KAAK,WACL,UAAW,cAAcG,EAAQ,cAAgB,EAAE,GACnD,aAAa,mBACb,SAAAC,EACA,eAAc,CAAC,CAACD,EAChB,mBAAkB,CAACD,EAAO,GAAGF,CAAE,QAAU,KAAMG,EAAQ,GAAGH,CAAE,SAAW,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OACzG,GAAGU,CAAA,CAAA,EAER,CAEJ,CCfO,SAAS+B,GAAS,CAAE,GAAAzC,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,KAAAqC,EAAO,EAAG,GAAGhC,CAAA,EAAe,CAClG,aACGX,EAAA,CAAM,GAAAC,EAAQ,MAAAC,EAAc,KAAAC,EAAY,MAAAC,EAAc,SAAAC,EAAoB,UAAAC,EACzE,SAAAG,EAAAA,IAAC,WAAA,CACC,GAAAR,EACA,KAAA0C,EACA,UAAW,cAAcvC,EAAQ,cAAgB,EAAE,GACnD,eAAc,CAAC,CAACA,EAChB,mBAAkB,CAACD,EAAO,GAAGF,CAAE,QAAU,KAAMG,EAAQ,GAAGH,CAAE,SAAW,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OAC1G,SAAAI,EACC,GAAGM,CAAA,CAAA,EAER,CAEJ,CCdO,SAASiC,GAAU,CAAE,GAAA3C,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,GAAGK,GAAe,CACzF,aACGX,EAAA,CAAM,GAAAC,EAAQ,MAAAC,EAAc,KAAAC,EAAY,MAAAC,EAAc,SAAAC,EAAoB,UAAAC,EACzE,SAAAG,EAAAA,IAAC,QAAA,CACC,GAAAR,EACA,KAAK,OACL,UAAW,cAAcG,EAAQ,cAAgB,EAAE,GACnD,eAAc,CAAC,CAACA,EAChB,mBAAkB,CAACD,EAAO,GAAGF,CAAE,QAAU,KAAMG,EAAQ,GAAGH,CAAE,SAAW,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OAC1G,SAAAI,EACC,GAAGM,CAAA,CAAA,EAER,CAEJ,CCXO,SAASkC,GAAS,CAAE,GAAA5C,EAAI,MAAAC,EAAO,UAAAI,EAAW,GAAGK,GAAe,CACjE,OACEH,OAAC,SAAM,UAAW,iBAAiBF,GAAa,EAAE,GAAI,QAASL,EAC7D,SAAA,CAAAQ,MAAC,SAAM,GAAAR,EAAQ,KAAK,WAAW,UAAU,iBAAkB,GAAGU,EAAM,EACpEF,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAkB,SAAAP,CAAA,CAAM,CAAA,EAC1C,CAEJ,CCbO,SAAS4C,GAAM,CACpB,KAAAC,EACA,MAAAhC,EACA,QAAAiC,EACA,SAAA5B,EACA,SAAAb,CACF,EAMG,CACD,OACEC,EAAAA,KAAC,QAAA,CAAM,UAAU,aACf,SAAA,CAAAC,EAAAA,IAAC,QAAA,CAAM,UAAU,cAAc,KAAK,QAAQ,KAAAsC,EAAY,MAAAhC,EAAc,QAAAiC,EAAkB,SAAA5B,CAAA,CAAoB,EAC5GX,EAAAA,IAAC,OAAA,CAAK,UAAU,cAAe,SAAAF,CAAA,CAAS,CAAA,EAC1C,CAEJ,CAEO,SAAS0C,GAAW,CACzB,OAAAC,EACA,SAAA3C,EACA,UAAAD,EACA,gBAAA6C,CACF,EAKG,CACD,OACE3C,OAAC,YAAS,UAAAF,EACR,SAAA,CAAAG,EAAAA,IAAC,SAAA,CAAO,UAAW,8BAA8B0C,GAAmB,EAAE,GAAI,MAAO,CAAE,MAAO,qBAAA,EACvF,SAAAD,CAAA,CACH,EACAzC,EAAAA,IAAC,MAAA,CAAI,UAAU,wCAAyC,SAAAF,CAAA,CAAS,CAAA,EACnE,CAEJ,CCzBO,SAAS6C,GAAY,CAAE,GAAAnD,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,YAAA+C,EAAa,QAAAC,EAAS,SAAA/C,EAAU,GAAGI,GAAe,CAC3H,MAAM4C,EAAc,CAACpD,EAAO,GAAGF,CAAE,QAAU,KAAMG,EAAQ,GAAGH,CAAE,SAAW,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OAEtGuD,EAAoB,CAAC,CAACjD,EAE5B,aACGP,EAAA,CAAM,GAAAC,EAAQ,MAAAC,EAAc,KAAAC,EAAY,MAAAC,EAAc,SAAAC,EAAoB,UAAAC,EACzE,SAAAE,EAAAA,KAAC,SAAA,CACC,GAAAP,EACA,UAAW,2BAA2BG,EAAQ,cAAgB,EAAE,GAChE,eAAc,CAAC,CAACA,EAChB,mBAAkBmD,EAClB,SAAAlD,EACC,GAAGM,EAEH,SAAA,CAAA0C,GACC5C,EAAAA,IAAC,SAAA,CAAO,MAAM,GAAG,SAAQ,GAAC,SAAU,EAAE,UAAWE,GAC9C,SAAA0C,CAAA,CACH,EAGDG,EACGjD,EACA+C,GAAS,IAAKG,SACX,SAAA,CAAuB,MAAOA,EAAI,MAAO,SAAUA,EAAI,SACrD,WAAI,KAAA,EADMA,EAAI,KAEjB,CACD,CAAA,CAAA,CAAA,EAET,CAEJ,CC3CA,MAAMC,GAAsB,0CAmB5B,SAASC,IAAsC,CAC7C,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CAEtC,GAAI,OAAO,QAAQ,MAAM,OAAQ,CAC/BD,EAAA,EACA,MACF,CAGA,MAAME,EAAiB,SAAS,cAAc,oCAAoC,EAClF,GAAIA,EAAgB,CAClBA,EAAe,iBAAiB,OAAQ,IAAMF,EAAA,CAAS,EACvDE,EAAe,iBAAiB,QAAS,IAAMD,EAAO,IAAI,MAAM,mCAAmC,CAAC,CAAC,EACrG,MACF,CAGA,MAAME,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAM,+CAA+CL,EAAmB,oBAC/EK,EAAO,MAAQ,GACfA,EAAO,MAAQ,GACfA,EAAO,OAAS,IAAMH,EAAA,EACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,mCAAmC,CAAC,EAC5E,SAAS,KAAK,YAAYE,CAAM,CAClC,CAAC,CACH,CAGA,SAASC,GAAyBC,EAA0D,CAC1F,MAAMC,EAAgC,CACpC,YAAaD,EAAM,iBAAA,EAGrB,OAAIA,EAAM,oBACRA,EAAM,mBAAmB,QAASE,GAAc,CAC9C,MAAMC,EAAQD,EAAU,MAEpBC,EAAM,SAAS,eAAe,IAChCF,EAAW,aAAeC,EAAU,WAElCC,EAAM,SAAS,OAAO,IACxBF,EAAW,WAAaC,EAAU,WAEhCC,EAAM,SAAS,UAAU,IAC3BF,EAAW,KAAOC,EAAU,WAE1BC,EAAM,SAAS,6BAA6B,IAC9CF,EAAW,MAAQC,EAAU,YAE3BC,EAAM,SAAS,aAAa,IAC9BF,EAAW,QAAUC,EAAU,WAE7BC,EAAM,SAAS,SAAS,IAC1BF,EAAW,QAAUC,EAAU,WAEnC,CAAC,EAGID,CACT,CAEO,SAASG,GAAoB,CAAE,GAAApE,EAAI,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,SAAAc,EAAU,cAAAkD,EAAe,MAAAvD,EAAO,GAAGJ,GAAe,CACnI,MAAMa,EAAWC,EAAAA,OAAyB,IAAI,EACxC8C,EAAyB9C,EAAAA,OAAsD,IAAI,EACnF+C,EAAmB/C,EAAAA,OAAgD,IAAI,EACvEgD,EAA0BhD,EAAAA,OAAuB,IAAI,EACrD,CAACiD,EAAWC,CAAY,EAAIpD,EAAAA,SAAS,EAAI,EACzC,CAACS,EAAY4C,CAAa,EAAIrD,EAAAA,SAAUR,GAAoB,EAAE,EAC9D,CAAC8D,EAAaC,CAAc,EAAIvD,EAAAA,SAAsD,CAAA,CAAE,EACxF,CAACwD,EAAiBC,CAAkB,EAAIzD,EAAAA,SAAS,EAAK,EACtD,CAAC0D,EAAeC,CAAgB,EAAI3D,EAAAA,SAAS,EAAE,EAG/C4D,EAAiB1D,EAAAA,OAAoD,EAAE,EACvE2D,EAAqB3D,EAAAA,OAAO,EAAK,EACjC4D,EAAmB5D,EAAAA,OAAO,EAAE,EAGlCE,EAAAA,UAAU,IAAM,CACdwD,EAAe,QAAUN,CAC3B,EAAG,CAACA,CAAW,CAAC,EAEhBlD,EAAAA,UAAU,IAAM,CACdyD,EAAmB,QAAUL,CAC/B,EAAG,CAACA,CAAe,CAAC,EAEpBpD,EAAAA,UAAU,IAAM,CACd0D,EAAiB,QAAUJ,CAC7B,EAAG,CAACA,CAAa,CAAC,EAElBtD,EAAAA,UAAU,IAAM,CAEVZ,IAAU,QACZ6D,EAAc,OAAO7D,CAAK,CAAC,CAE/B,EAAG,CAACA,CAAK,CAAC,EAGV,MAAMuE,EAAmB7D,EAAAA,OAA8B,IAAI,EAE3DE,EAAAA,UAAU,IAAM,CACd,GAAI,CAACH,EAAS,QAAS,OAEvB,IAAI+D,EAAY,GAGhB,OAAA5B,GAAA,EACG,KAAK,IAAM,CACN,CAAC4B,GAAa,CAAC/D,EAAS,UAG5B+C,EAAuB,QAAU,IAAI,OAAO,KAAK,OAAO,oBACxDC,EAAiB,QAAU,IAAI,OAAO,KAAK,OAAO,cAAc,SAAS,cAAc,KAAK,CAAC,EAE7FG,EAAa,EAAK,EACpB,CAAC,EACA,MAAOa,GAAQ,CACd,QAAQ,MAAM,6BAA8BA,CAAG,EAC/Cb,EAAa,EAAK,CACpB,CAAC,EAEI,IAAM,CACXY,EAAY,GACRD,EAAiB,SACnB,aAAaA,EAAiB,OAAO,CAEzC,CACF,EAAG,CAAA,CAAE,EAGL,MAAMG,EAAqB3D,GAA2C,CACpE,MAAM4D,EAAQ5D,EAAE,OAAO,MASvB,GARA8C,EAAcc,CAAK,EACnBtE,IAAWsE,CAAK,EAGZJ,EAAiB,SACnB,aAAaA,EAAiB,OAAO,EAGnCI,EAAM,OAAS,EAAG,CACpBZ,EAAe,CAAA,CAAE,EACjBE,EAAmB,EAAK,EACxB,MACF,CAGAM,EAAiB,QAAU,WAAW,IAAM,CACrCf,EAAuB,SAE5BA,EAAuB,QAAQ,oBAC7B,CACE,MAAOmB,EACP,MAAO,CAAC,SAAS,CAAA,EAEnB,CAACC,EAAaC,IAAW,CACnBA,IAAW,OAAO,KAAK,OAAO,oBAAoB,IAAMD,GAC1Db,EAAea,CAAW,EAC1BX,EAAmB,EAAI,EACvBE,EAAiB,EAAE,IAEnBJ,EAAe,CAAA,CAAE,EACjBE,EAAmB,EAAK,EAE5B,CAAA,CAEJ,EAAG,GAAG,CACR,EAGMa,EAAiB/D,GAA6C,CAClE,GAAI,CAACsD,EAAmB,SAAWD,EAAe,QAAQ,SAAW,EAAG,CAClErD,EAAE,MAAQ,WACZkD,EAAmB,EAAK,EACxBI,EAAmB,QAAU,IAE/B,MACF,CAEA,OAAQtD,EAAE,IAAA,CACR,IAAK,YACHA,EAAE,eAAA,EACFoD,EAAkBY,GAAS,CACzB,MAAMC,EAAWD,EAAOX,EAAe,QAAQ,OAAS,EAAIW,EAAO,EAAIA,EACvE,OAAAT,EAAiB,QAAUU,EACpBA,CACT,CAAC,EACD,MACF,IAAK,UACHjE,EAAE,eAAA,EACFoD,EAAkBY,GAAS,CACzB,MAAMC,EAAWD,EAAO,EAAIA,EAAO,EAAI,GACvC,OAAAT,EAAiB,QAAUU,EACpBA,CACT,CAAC,EACD,MACF,IAAK,QACHjE,EAAE,eAAA,EACEuD,EAAiB,SAAW,GAAKA,EAAiB,QAAUF,EAAe,QAAQ,QACrFa,EAAsBb,EAAe,QAAQE,EAAiB,OAAO,CAAC,EAExE,MACF,IAAK,SACHvD,EAAE,eAAA,EACFkD,EAAmB,EAAK,EACxBI,EAAmB,QAAU,GAC7B,KAAA,CAEN,EAGAzD,EAAAA,UAAU,IAAM,CACd,MAAMsE,EAAsBC,GAAsB,CAE9CzB,EAAwB,SACxB,CAACA,EAAwB,QAAQ,SAASyB,EAAM,MAAc,GAC9D1E,EAAS,SACT,CAACA,EAAS,QAAQ,SAAS0E,EAAM,MAAc,IAE/ClB,EAAmB,EAAK,EACxBI,EAAmB,QAAU,GAEjC,EAEA,GAAIL,EACF,gBAAS,iBAAiB,YAAakB,CAAkB,EAClD,IAAM,CACX,SAAS,oBAAoB,YAAaA,CAAkB,CAC9D,CAEJ,EAAG,CAAClB,CAAe,CAAC,EAEpB,MAAMiB,EAAyBG,GAA0D,CAClF3B,EAAiB,SAEtBA,EAAiB,QAAQ,WACvB,CACE,QAAS2B,EAAW,SACpB,OAAQ,CAAC,qBAAsB,oBAAqB,UAAU,CAAA,EAEhE,CAAClC,EAAO2B,IAAW,CACjB,GAAIA,IAAW,OAAO,KAAK,OAAO,oBAAoB,IAAM3B,EAAO,CACjE,MAAMmC,EAAmBnC,EAAM,mBAAqB,GACpDW,EAAcwB,CAAgB,EAC9BpB,EAAmB,EAAK,EACxBF,EAAe,CAAA,CAAE,EACjBM,EAAmB,QAAU,GAE7B,MAAMiB,EAAoBrC,GAAyBC,CAAK,EAExD7C,IAAWgF,EAAkBC,CAAiB,EAC9C/B,IAAgBL,CAAK,CACvB,CACF,CAAA,CAEJ,EAEA,OACExD,EAAAA,IAACT,EAAA,CAAM,GAAAC,EAAQ,MAAAC,EAAc,KAAAC,EAAY,MAAAC,EAAc,SAAAC,EAAoB,UAAAC,EACzE,SAAAE,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAC,EAAAA,IAAC,QAAA,CACC,IAAKe,EACL,GAAAvB,EACA,KAAK,OACL,UAAW,cAAcG,EAAQ,cAAgB,EAAE,GACnD,MAAO4B,EACP,SAAUyD,EACV,UAAWI,EACX,eAAc,CAAC,CAACzF,EAChB,mBAAkB,CAACD,EAAO,GAAGF,CAAE,QAAU,KAAMG,EAAQ,GAAGH,CAAE,SAAW,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OAC1G,SAAAI,EACA,aAAa,iBACb,YAAaM,EAAK,aAAe,mBACjC,SAAU+D,GAAa/D,EAAK,SAC3B,GAAGA,CAAA,CAAA,EAEL+D,GAAajE,EAAAA,IAAC,IAAA,CAAE,UAAU,8BAA8B,SAAA,iCAA8B,EAGtFsE,GAAmBF,EAAY,OAAS,GACvCpE,EAAAA,IAAC,MAAA,CACC,IAAKgE,EACL,UAAU,2GACV,KAAK,UAEJ,SAAAI,EAAY,IAAI,CAACsB,EAAYG,IAC5B9F,EAAAA,KAAC,MAAA,CAEC,UAAW,8CACT8F,IAAUrB,EAAgB,4BAA8B,2CAC1D,IAAIqB,EAAQzB,EAAY,OAAS,EAAI,4BAA8B,EAAE,GACrE,KAAK,SACL,gBAAeyB,IAAUrB,EACzB,QAAS,IAAMe,EAAsBG,CAAU,EAC/C,aAAc,IAAMjB,EAAiBoB,CAAK,EAE1C,SAAA,CAAA7F,MAAC,MAAA,CAAI,UAAU,6BAA8B,SAAA0F,EAAW,sBAAsB,UAAU,EACvFA,EAAW,sBAAsB,gBAChC1F,EAAAA,IAAC,OAAI,UAAU,gCAAiC,SAAA0F,EAAW,sBAAsB,cAAA,CAAe,CAAA,CAAA,EAX7FA,EAAW,QAAA,CAcnB,CAAA,CAAA,CACH,CAAA,CAEJ,CAAA,CACF,CAEJ,CC/TO,SAASI,GAAQC,EAAW,CACjC,OAAOA,EACJ,cACA,QAAQ,cAAe,GAAG,EAC1B,QAAQ,WAAY,EAAE,CAC3B,CAEO,SAASC,GAEdC,EACAC,EACQ,CACR,OAAQD,EAAE,KAA8B,GAAGH,GAAQG,EAAE,QAAQ,CAAC,IAAIC,CAAG,EACvE,CAGO,SAASC,GAEdC,EACAC,EACoC,CACpC,MAAMC,EAA6C,CAAA,EAE7CC,EAAWC,GAAkCA,GAAM,MAAS,OAAOA,GAAM,UAAYA,EAAE,KAAA,IAAW,GAExG,OAAAJ,EAAU,QAAQ,CAACH,EAAGQ,IAAM,CAC1B,MAAMC,EAAMV,GAAUC,EAAGQ,CAAC,EACpBE,EAAMN,EAAOK,CAAG,EAEtB,GAAKT,EAAE,SAEP,OAAQA,EAAE,UAAA,CACR,IAAK,WACCU,IAAQ,KAAML,EAAOI,CAAG,EAAI,YAChC,MAEF,IAAK,QACL,IAAK,SACCH,EAAQI,CAAG,IAAGL,EAAOI,CAAG,EAAI,YAChC,MAEF,IAAK,UAEsBC,GAAQ,MAAS,OAAOA,GAAQ,UAAYA,EAAI,KAAA,IAAW,MAClFL,EAAOI,CAAG,EAAI,YAEhB,MAEF,IAAK,OACL,IAAK,QACL,IAAK,MACL,IAAK,MACL,IAAK,WACL,IAAK,OACL,IAAK,WACL,IAAK,UACL,QACMH,EAAQI,CAAG,IAAGL,EAAOI,CAAG,EAAI,YAChC,KAAA,CAEN,CAAC,EAEMJ,CACT,CAGO,SAASM,GAAaJ,EAAQ,CACnC,GAAIA,IAAM,IAAMA,IAAM,MAAQA,IAAM,OAAW,OAC/C,MAAMK,EAAI,OAAOL,CAAC,EAClB,OAAO,OAAO,MAAMK,CAAC,EAAI,OAAYA,CACvC,CCtDA,SAASC,GAASC,EAA2B,CAC3C,OAAI,OAAOA,GAAM,UAAY,OAAO,SAASA,CAAC,EAAUA,EACpD,OAAOA,GAAM,UAAYA,EAAE,KAAA,IAAW,IAAM,CAAC,OAAO,MAAM,OAAOA,CAAC,CAAC,EAAU,OAAOA,CAAC,EAClF,IACT,CACA,SAASC,GAAOD,EAA2B,CACzC,GAAIA,aAAa,MAAQ,CAAC,OAAO,MAAMA,EAAE,SAAS,EAAG,OAAOA,EAAE,QAAA,EAC9D,GAAI,OAAOA,GAAM,SAAU,CACzB,MAAM,EAAI,KAAK,MAAMA,CAAC,EACtB,OAAO,OAAO,MAAM,CAAC,EAAI,KAAO,CAClC,CACA,OAAO,IACT,CACA,SAASE,GAAIC,EAAYC,EAA2B,CAClD,MAAMC,EAAKN,GAASI,CAAC,EACnBG,EAAKP,GAASK,CAAC,EACjB,GAAIC,GAAM,MAAQC,GAAM,YAAaD,EAAKC,EAC1C,MAAMC,EAAKN,GAAOE,CAAC,EACjBK,EAAKP,GAAOG,CAAC,EACf,OAAIG,GAAM,MAAQC,GAAM,KAAaD,EAAKC,EACtCL,GAAK,MAAQC,GAAK,KAAa,KAC5B,OAAOD,CAAC,EAAE,cAAc,OAAOC,CAAC,CAAC,CAC1C,CACA,SAASK,GAASC,EAAmBC,EAA0B,CAC7D,OAAI,MAAM,QAAQD,CAAQ,EAAUA,EAAS,KAAMjB,GAAMA,IAAMkB,CAAM,EACjE,OAAOD,GAAa,SAAiBC,GAAU,MAAQD,EAAS,SAAS,OAAOC,CAAM,CAAC,EACpF,EACT,CACA,SAASC,GAAgBC,EAAiBC,EAAqDC,EAAoC,CACjI,OAAQD,EAAA,CACN,IAAK,SACH,OAAOD,IAAWE,EACpB,IAAK,WAAY,CACf,MAAMC,EAAId,GAAIW,EAAQE,CAAgB,EACtC,OAAOC,GAAK,MAAQA,EAAI,CAC1B,CACA,IAAK,cAAe,CAClB,MAAMA,EAAId,GAAIW,EAAQE,CAAgB,EACtC,OAAOC,GAAK,MAAQA,EAAI,CAC1B,CACA,IAAK,WACH,OAAOP,GAASI,EAAQE,CAAgB,EAC1C,IAAK,aACH,OAAOF,GAAU,MAAQE,GAAoB,MAAQ,OAAOF,CAAM,EAAE,WAAW,OAAOE,CAAgB,CAAC,EACzG,IAAK,WACH,OAAOF,GAAU,MAAQE,GAAoB,MAAQ,OAAOF,CAAM,EAAE,SAAS,OAAOE,CAAgB,CAAC,EACvG,QACE,MAAO,EAAA,CAEb,CAQA,SAASE,GAAMC,EAAcC,EAA0B,CAErD,OAAOA,EAAK,OAAO,CAACC,EAAUzB,IAAmCyB,IAAIzB,CAAG,EAAIuB,CAAU,CACxF,CACA,SAASG,EAAiCH,EAAQC,EAAiB5H,EAAmB,CACpF,GAAI4H,EAAK,SAAW,EAAG,OAAOD,EAC9B,KAAM,CAACI,EAAM,GAAGC,CAAI,EAAIJ,EAExB,GAAII,EAAK,SAAW,EAAG,CACrB,GAAI,OAAOD,GAAS,SAAU,CAG5B,MAAME,GADO,MAAM,QAAQN,CAAG,EAAKA,EAAgB,CAAA,GAClC,MAAA,EACjB,OAAAM,EAAIF,CAAI,EAAI/H,EACLiI,CACT,CAEA,MAAO,CAAE,GAAIN,EAAa,CAACI,CAAI,EAAG/H,CAAA,CACpC,CAGA,MAAMkI,EAAWP,IAAcI,CAAI,EAC7BI,EAAgB,OAAOH,EAAK,CAAC,GAAM,SAAY,MAAM,QAAQE,CAAO,EAAIA,EAAU,CAAA,EAAMA,GAAW,OAAOA,GAAY,SAAWA,EAAU,CAAA,EAG3IE,EAAON,EAAeK,EAAsBH,EAAMhI,CAAK,EAE7D,GAAI,OAAO+H,GAAS,SAAU,CAG5B,MAAME,GADO,MAAM,QAAQN,CAAG,EAAKA,EAAgB,CAAA,GAClC,MAAA,EACjB,OAAAM,EAAIF,CAAI,EAAIK,EACLH,CACT,CAEA,MAAO,CAAE,GAAIN,EAAa,CAACI,CAAI,EAAGK,CAAA,CACpC,CAGA,SAASC,GAAWtC,EAAoBuC,EAA8BlC,EAAa,CACjF,OAAOsB,GAAM3B,EAAQ,CAAC,GAAIuC,GAAS,CAAA,EAAKlC,CAAG,CAAC,CAC9C,CAEA,SAASmC,GAAYxC,EAAoBuC,EAA8BlC,EAAaF,EAAwB,CAC1G,OAAO4B,EAAe/B,EAAQ,CAAC,GAAIuC,GAAS,GAAKlC,CAAG,EAAGF,CAAC,CAC1D,CAEA,MAAMsC,GAAe,UACfC,GAAYC,GAAc,GAAGA,CAAC,GAAGF,EAAY,GAMnD,SAASG,GAAa7C,EAAmC,CACvD,MAAM8C,EAAO,CAACC,EAAkBC,IAC9BD,EAAK,IAAI,CAAClD,EAAGoD,IAAO,CAClB,MAAMC,EAAaF,EAAU,OAASA,EAAU,KAAK,IAAI,EAAI,OACvDG,EAAWtD,EAAE,KAAkB,GAAGqD,CAAU,MAAMD,CAAE,IAAI,OAAOpD,EAAE,QAAQ,EAAE,MAAM,EAAG,EAAE,EAAE,QAAQ,OAAQ,GAAG,GAAK,OAAO,GAGvHuD,GADoCvD,EAAE,cAAgB,CAAA,GACpC,IAAI,CAAC8B,EAAG0B,IAAO,CACrC,MAAMC,EAAS3B,EAAE,qBACbmB,EAAKnB,EAAE,qBAA+C,CAAC,GAAGqB,EAAW,GAAGG,CAAO,MAAME,CAAE,EAAE,CAAC,EAC1F,OAEJ,MAAO,CAAE,GAAG1B,EAAG,qBAAsB2B,CAAA,CACvC,CAAC,EAED,MAAO,CAAE,GAAGzD,EAAG,IAAKsD,EAAS,aAAcC,CAAA,CAC7C,CAAC,EAEH,OAAON,EAAK9C,EAAW,EAAE,CAC3B,CAGA,SAASuD,EAAYnD,EAAoB,CACvC,OAAIA,GAAK,KAAa,GACf,OAAOA,GAAM,SAAWA,EAAI,OAAOA,CAAC,CAC7C,CAGA,SAASoD,GAAcpD,EAA6B,CAClD,OAAIA,GAAK,KAAa,GAClB,OAAOA,GAAM,UAAY,OAAO,SAASA,CAAC,GAC1C,OAAOA,GAAM,SAAiBA,EAC3B,EACT,CAGA,SAASqD,GAAcrD,EAA6B,CAClD,OAAIA,GAAK,KAAa,GAClB,OAAOA,GAAM,UAAY,OAAOA,GAAM,SAAiBA,EACpD,OAAOA,CAAC,CACjB,CAMO,SAASsD,GAAa,CAC3B,UAAA1D,EACA,cAAA2D,EACA,iBAAAC,EACA,eAAAC,EACA,SAAAC,CACF,EAMG,CACD,MAAMC,EAAiBC,EAAAA,QAAQ,IAAMnB,GAAa7C,CAAS,EAAG,CAACA,CAAS,CAAC,EAEnEiE,EAAkCD,EAAAA,QAAQ,IAAM,CACpD,MAAMjC,EAAkB,CAAA,EAExB,OAAI4B,GAAe,OAAO,OAAO5B,EAAK4B,CAAoB,EACnD5B,CACT,EAAG,CAAC4B,CAAa,CAAC,EAEZ,CAACO,EAAcC,CAAe,EAAIzJ,EAAAA,SAAqBuJ,CAAmB,EAChFnJ,EAAAA,UAAU,IAAM,CACdqJ,EAAgBF,CAAmB,CACrC,EAAG,CAACA,CAAmB,CAAC,EAGxB,KAAM,CAACG,EAAaC,CAAc,EAAI3J,EAAAA,SAAqB,CAAA,CAAE,EACvDuF,EAAqB+D,EAAAA,QACzB,KAAO,CAAE,GAAGI,EAAa,GAAIR,GAAoBM,CAAA,GACjD,CAACE,EAAaR,EAAkBM,CAAY,CAAA,EAE9CpJ,EAAAA,UAAU,IAAM,CACV8I,KAAkCU,IAAO,CAAE,GAAGA,EAAG,GAAGV,CAAA,EAAmB,CAC7E,EAAG,CAACA,CAAgB,CAAC,EAErB,KAAM,CAAC1D,EAAQqE,CAAS,EAAI7J,EAAAA,SAA6C,CAAA,CAAE,EAG3E,SAAS8J,EAAU3E,EAAa4E,EAAuB,CACrD,MAAMnE,EAAMT,EAAE,IACRxG,EAAQwG,EAAE,SACVU,EAAMgC,GAAWtC,EAAQwE,EAAWnE,CAAG,EACvC/G,EAAQ2G,EAAOI,CAAG,EAElBoE,EAAOtE,GAAe,CAC1B,IAAIuE,EAAUlC,GAAYxC,EAAQwE,EAAWnE,EAAKF,CAAC,EAGnD,GAAIP,EAAE,YAAc,SAAWA,EAAE,aAAc,CAC7C,MAAM+E,EAAQ/E,EAAE,cAAgB,CAAA,EAGhC,UAAWgF,KAAQD,EAAO,CACxB,MAAME,EAAevC,GAAWtC,EAAQwE,EAAWnE,CAAG,EAChDyE,EAAYxD,GAAgBuD,EAAcD,EAAK,gBAAiBA,EAAK,gBAAgB,EACrFG,EAAezD,GAAgBnB,EAAGyE,EAAK,gBAAiBA,EAAK,gBAAgB,EAGnF,GAAIE,GAAa,CAACC,GAAgBH,EAAK,kCAAmC,CACxE,MAAMnL,EAAYmL,EAAK,sBAAwB,CAAA,EAC/C,GAAInL,EAAS,OAAS,EAAG,CACvB,MAAMuL,EAAgBtC,GAASrC,CAAG,EAElCqE,EAAU3C,EAAe2C,EAAS,CAAC,GAAIF,GAAa,GAAKQ,CAAa,EAAG,EAAE,EAG3E,MAAMC,EAAoB,CAACC,EAA0BC,IAA4B,CAC/ED,EAAa,QAASE,GAAW,EACZA,EAAO,cAAgB,CAAA,GAC/B,QAASC,GAAc,CAChC,GAAIA,EAAU,kCAAmC,CAC/C,MAAMC,GAAe5C,GAAS0C,EAAO,GAAa,EAClDV,EAAU3C,EAAe2C,EAAS,CAAC,GAAGS,EAAcG,EAAY,EAAG,EAAE,CACvE,CACA,MAAMC,EAAiBF,EAAU,sBAAwB,CAAA,EACrDE,EAAc,OAAS,GACzBN,EAAkBM,EAAeJ,CAAY,CAEjD,CAAC,CACH,CAAC,CACH,EAEAF,EAAkBxL,EAAU,CAAC,GAAI+K,GAAa,CAAA,EAAKQ,CAAa,CAAC,CACnE,CACF,CACF,CACF,CAEIrB,GAAoBC,EAAgBA,EAAec,CAAO,IACzCA,CAAO,EAC5BN,EAAeM,CAAO,CACxB,EAEA,OAAQ9E,EAAE,UAAA,CACR,IAAK,OACH,OACEjG,EAAAA,IAACC,GAAA,CAEC,GAAIyG,EACJ,MAAAjH,EACA,MAAOkK,EAAYhD,CAAG,EACtB,SAAWtF,GAAMyJ,EAAIzJ,EAAE,cAAc,KAAK,EAC1C,gBAAe4E,EAAE,UAAY,OAC7B,MAAAtG,CAAA,EANK+G,CAAA,EASX,IAAK,QACH,OACE1G,EAAAA,IAACI,GAAA,CAEC,GAAIsG,EACJ,MAAAjH,EACA,MAAOkK,EAAYhD,CAAG,EACtB,SAAWtF,GAAMyJ,EAAIzJ,EAAE,cAAc,KAAK,EAC1C,gBAAe4E,EAAE,UAAY,OAC7B,MAAAtG,CAAA,EANK+G,CAAA,EASX,IAAK,WACH,OACE1G,EAAAA,IAACgC,GAAA,CAEC,GAAI0E,EACJ,MAAAjH,EACA,MAAOkK,EAAYhD,CAAG,EACtB,SAAWtF,GAAMyJ,EAAIzJ,EAAE,cAAc,KAAK,EAC1C,gBAAe4E,EAAE,UAAY,OAC7B,MAAAtG,CAAA,EANK+G,CAAA,EASX,IAAK,MACH,OACE3G,EAAAA,KAAA8L,WAAA,CACE,SAAA,CAAA7L,EAAAA,IAACU,GAAA,CAEC,GAAIgG,EACJ,MAAAjH,EACA,MAAOkK,EAAYhD,CAAG,EACtB,SAAWtF,GAAMyJ,EAAIzJ,EAAE,cAAc,KAAK,EAC1C,gBAAe4E,EAAE,UAAY,OAC7B,MAAAtG,CAAA,EANK+G,CAAA,EAQNA,IAAQ,SACP3G,OAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAC,EAAAA,IAAC,KAAE,SAAA,qHAAA,CAAmH,EACtHA,EAAAA,IAAC,KAAE,SAAA,0DAAA,CAAwD,SAE1D,IAAA,CAAE,SAAA,CAAA,UACO,IACRA,EAAAA,IAAC,IAAA,CAAE,KAAK,yBAAyB,OAAO,SAAS,IAAI,sBAAsB,UAAU,yBAAyB,SAAA,gBAAA,CAE9G,EAAK,IAAI,MACL,IACJA,EAAAA,IAAC,IAAA,CAAE,KAAK,yBAAyB,OAAO,SAAS,IAAI,sBAAsB,UAAU,yBAAyB,SAAA,kBAAA,CAE9G,EAAI,GAAA,CAAA,CAEN,CAAA,CAAA,CACF,CAAA,EAEJ,EAEJ,IAAK,MACH,OACEA,EAAAA,IAAC+B,GAAA,CAEC,GAAI2E,EACJ,MAAAjH,EACA,MAAOkK,EAAYhD,CAAG,EACtB,SAAWtF,GAAMyJ,EAAIzJ,EAAE,cAAc,KAAK,EAC1C,gBAAe4E,EAAE,UAAY,OAC7B,MAAAtG,CAAA,EANK+G,CAAA,EASX,IAAK,SACH,OACE1G,EAAAA,IAACG,GAAA,CAEC,GAAIuG,EACJ,MAAAjH,EACA,MAAOmK,GAAcjD,CAAG,EACxB,SAAWtF,GAAMyJ,EAAIlE,GAAavF,EAAE,cAAc,KAAK,CAAC,EACxD,gBAAe4E,EAAE,UAAY,OAC7B,MAAAtG,CAAA,EANK+G,CAAA,EASX,IAAK,WACH,OACE1G,EAAAA,IAACiC,GAAA,CAEC,GAAIyE,EACJ,MAAAjH,EACA,MAAOkK,EAAYhD,CAAG,EACtB,SAAWtF,GAAMyJ,EAAIzJ,EAAE,cAAc,KAAK,EAC1C,gBAAe4E,EAAE,UAAY,OAC7B,MAAAtG,EACA,KAAM,CAAA,EAPD+G,CAAA,EAUX,IAAK,OACH,OACE1G,EAAAA,IAACmC,GAAA,CAEC,GAAIuE,EACJ,MAAAjH,EACA,MAAOkK,EAAYhD,CAAG,EACtB,SAAWtF,GAAMyJ,EAAIzJ,EAAE,cAAc,KAAK,EAC1C,gBAAe4E,EAAE,UAAY,OAC7B,MAAAtG,CAAA,EANK+G,CAAA,EAUX,IAAK,WAAY,CACf,GAAIT,EAAE,QAAS,CACb,MAAMuC,EAAoB,MAAM,QAAQ7B,CAAG,EAAKA,EAAmB,CAAA,EACnE,OACE5G,EAAAA,KAAC,MAAA,CAAc,UAAU,YACvB,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,aACZ,SAAA,CAAAN,EACAwG,EAAE,UAAYjG,EAAAA,IAAC,OAAA,CAAK,UAAU,oBAAoB,SAAA,GAAA,CAAC,CAAA,EACtD,EACAA,MAAC,OAAI,UAAU,wCACZ,WAAE,QAAQ,IAAKgD,GAAQ,CACtB,MAAM8I,EAAQ,GAAGpF,CAAG,IAAIZ,GAAQ9C,CAAG,CAAC,GAC9BT,EAAUiG,EAAQ,SAASxF,CAAG,EACpC,OACEhD,EAAAA,IAACoC,GAAA,CAEC,GAAI0J,EACJ,MAAO9I,EACP,QAAAT,EACA,SAAWlB,GAAM,CACf,MAAMqH,EAAO,IAAI,IAAIF,CAAO,EACxBnH,EAAE,cAAc,QAASqH,EAAK,IAAI1F,CAAG,EACpC0F,EAAK,OAAO1F,CAAG,EACpB8H,EAAI,MAAM,KAAKpC,CAAI,CAAC,CACtB,EACA,gBAAezC,EAAE,UAAY,MAAA,EAVxB6F,CAAA,CAaX,CAAC,CAAA,CACH,EACCnM,GAASK,EAAAA,IAAC,IAAA,CAAE,UAAU,4BAA6B,SAAAL,CAAA,CAAM,CAAA,CAAA,EA1BlD+G,CA2BV,CAEJ,CACA,OACE1G,EAAAA,IAACoC,GAAA,CAEC,GAAIsE,EACJ,MAAOT,EAAE,SAAW,GAAGxG,CAAK,KAAOA,EACnC,QAAS,CAAC,CAACkH,EACX,SAAWtF,GAAMyJ,EAAIzJ,EAAE,cAAc,OAAO,EAC5C,gBAAe4E,EAAE,UAAY,MAAA,EALxBS,CAAA,CAQX,CAEA,IAAK,QAAS,CACZ,MAAMqF,EAAO9F,EAAE,SAAW,CAAA,EAEpB+F,EAAanB,GAAaA,EAAU,OAAS,EAAI,GAAGnE,CAAG,KAAKmE,EAAU,KAAK,IAAI,CAAC,GAAKnE,EAC3F,aACGlE,GAAA,CAAqB,OAAQ/C,EAAO,gBAAiBwG,EAAE,SAAW,kBAAoB,OACpF,SAAA8F,EAAK,IAAK/I,GACThD,EAAAA,IAACqC,GAAA,CAAqC,KAAM2J,EAAY,MAAOhJ,EAAK,QAAS2D,IAAQ3D,EAAK,SAAU,IAAM8H,EAAI9H,CAAG,EAC9G,SAAAA,CAAA,EADS,GAAG0D,CAAG,IAAIZ,GAAQ9C,CAAG,CAAC,EAElC,CACD,GALc0D,CAMjB,CAEJ,CAEA,IAAK,SAAU,CACb,IAAIqF,EAAO9F,EAAE,SAAW,CAAA,EAExB,OAAIS,IAAQ,qBACVqF,EAAO/B,GAAkB,iBAAiB,IAAKxD,GAAuBA,EAAE,GAAG,GAAK,CAAA,GAGhFxG,EAAAA,IAAC2C,GAAA,CAEC,GAAI+D,EACJ,MAAAjH,EACA,gBAAewG,EAAE,UAAY,OAC7B,MAAAtG,EACA,MAAOkK,GAAclD,CAAG,EACxB,SAAWtF,GAAMyJ,EAAIzJ,EAAE,cAAc,KAAK,EAC1C,YAAY,mBACZ,QAAS0K,EAAK,IAAKE,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAAA,EAR5CvF,CAAA,CAWX,CAEA,IAAK,UACH,OACE1G,EAAAA,IAAC4D,GAAA,CAEC,GAAI8C,EACJ,MAAAjH,EACA,MAAOkK,EAAYhD,CAAG,EACtB,SAAWuF,GAAYpB,EAAIoB,CAAO,EAClC,gBAAejG,EAAE,UAAY,OAC7B,MAAAtG,CAAA,EANK+G,CAAA,EAUX,QACE,OAAO,IAAA,CAEb,CAEA,SAASyF,EAAgBhD,EAAkB0B,EAAuB,CAChE,OAAO1B,EAAK,IAAI,CAAClD,EAAGmG,IAAW,CAC7B,MAAM1F,EAAM,OAAOT,EAAE,GAAG,EAClBoG,EAAOzB,EAAU3E,EAAG4E,CAAS,EAE7BG,EAAQ/E,EAAE,cAAgB,CAAA,EAChC,GAAI,CAAC+E,EAAM,OAAQ,OAAOhL,EAAAA,IAAC,MAAA,CAAmC,SAAAqM,CAAA,EAA1B,QAAQ3F,CAAG,IAAI0F,CAAM,EAAU,EAEnE,MAAM5F,EAAImC,GAAWtC,EAAQwE,EAAWnE,CAAG,EACrC4F,EAAUtB,EAAM,OAAQjD,GAAMJ,GAAgBnB,EAAGuB,EAAE,gBAAiBA,EAAE,gBAAgB,CAAC,EACvFwE,EAAWD,EAAQ,OAAS,GAAK,CAACA,EAAQ,KAAM,GAAM,EAAE,iCAAiC,EAAIA,EAAQ,MAAM,EAAG,CAAC,EAAIA,EAEzH,cACG,MAAA,CACE,SAAA,CAAAD,EAEAE,EAAS,IAAI,CAACC,EAAQC,IAAO,CAC5B,MAAM3M,EAAY0M,EAAO,sBAAwB,CAAA,EACjD,GAAI,CAAC1M,EAAS,OAAQ,OAAO,KAG7B,GAAI,CAAC0M,EAAO,kCACV,OACExM,EAAAA,IAAC,MAAA,CAAgC,UAAU,OACxC,SAAAmM,EAAgBrM,EAAU+K,CAAS,CAAA,EAD5B,UAAUnE,CAAG,IAAI+F,CAAE,EAE7B,EAKJ,MAAMpB,EAAgBtC,GAASrC,CAAG,EAC5B6B,EAAkBP,GAAM3B,EAAQ,CAAC,GAAIwE,GAAa,CAAA,EAAKQ,CAAa,CAAC,GAAmB,CAAA,EACxFqB,EAAQ,KAAK,IAAI,EAAGnE,EAAI,QAAU,CAAC,EAEnCoE,EAAY,IAAM,CACtB,MAAMjE,EAAON,EAAe/B,EAAQ,CAAC,GAAIwE,GAAa,CAAA,EAAKQ,EAAe9C,EAAI,MAAM,EAAG,CAAA,CAAE,EACrFyB,GAAoBC,EAAgBA,EAAevB,CAAI,IACtCA,CAAI,EACzB+B,EAAe/B,CAAI,CACrB,EAEMkE,EAAU,IAAM,CACpB,MAAMC,EAAUtE,EAAI,MAAM,EAAG,KAAK,IAAI,EAAGA,EAAI,OAAS,CAAC,CAAC,EAClDG,EAAON,EAAe/B,EAAQ,CAAC,GAAIwE,GAAa,CAAA,EAAKQ,CAAa,EAAGwB,CAAO,EAC9E7C,GAAoBC,EAAgBA,EAAevB,CAAI,IACtCA,CAAI,EACzB+B,EAAe/B,CAAI,CACrB,EAEMoE,EAAc,GAAGpG,CAAG,MAAM+F,CAAE,GAElC,OACE1M,EAAAA,KAAC,MAAA,CAAgC,UAAU,OACzC,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,iCAAiC,SAAA,0BAAuB,EACvED,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAC,EAAAA,IAAC,UAAO,KAAK,SAAS,UAAU,wBAAwB,QAAS2M,EAAW,SAAA,aAAA,CAE5E,EACCD,EAAQ,GACP1M,EAAAA,IAAC,SAAA,CAAO,KAAK,SAAS,UAAU,wBAAwB,QAAS4M,EAAS,SAAA,aAAA,CAE1E,CAAA,CAAA,CAEJ,CAAA,EACF,EAEC,MAAM,KAAK,CAAE,OAAQF,CAAA,CAAO,EAAE,IAAI,CAACK,EAAG7G,IAAQ,CAC7C,MAAM8G,EAAuB,CAAC,GAAInC,GAAa,CAAA,EAAKQ,EAAenF,CAAG,EAChE+G,EAAU,GAAGH,CAAW,MAAM5G,CAAG,GAEvC,OACEnG,EAAAA,KAAC,MAAA,CAA6B,UAAU,6BACtC,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,6BAA6B,SAAA,CAAA,UAAQmG,EAAM,CAAA,EAAE,EAE3DpG,EAAS,IAAK2L,IACb1L,EAAAA,KAAC,MAAA,CAA6C,UAAU,OACrD,SAAA,CAAA6K,EAAUa,GAAQuB,CAAS,GAG1B,IAAM,CACN,MAAME,GAAazB,GAAO,cAAgB,CAAA,EAC1C,GAAI,CAACyB,GAAW,OAAQ,OAAO,KAE/B,MAAMC,GAAWxE,GAAWtC,EAAQ2G,EAAWvB,GAAO,GAAa,EAC7D2B,GAAeF,GAAW,OAAQnF,IAAMJ,GAAgBwF,GAAUpF,GAAE,gBAAiBA,GAAE,gBAAgB,CAAC,EAM9G,OAJEqF,GAAa,OAAS,GAAK,CAACA,GAAa,KAAMC,IAAMA,GAAE,iCAAiC,EACpFD,GAAa,MAAM,EAAG,CAAC,EACvBA,IAEe,IAAI,CAACE,GAAIC,KAAQ,CACpC,MAAM3B,GAAiB0B,GAAG,sBAAwB,CAAA,EAClD,GAAI,CAAC1B,GAAc,OAAQ,OAAO,KAGlC,GAAI,CAAC0B,GAAG,kCACN,OACEtN,EAAAA,IAAC,MAAA,CAAqC,UAAU,OAC7C,SAAAmM,EAAgBP,GAAeoB,CAAS,CAAA,EADjC,UAAUC,CAAO,IAAIM,EAAG,EAElC,EAKJ,MAAM5B,GAAe5C,GAAS0C,GAAO,GAAa,EAC5C+B,GAAwBxF,GAAM3B,EAAQ,CAAC,GAAG2G,EAAWrB,EAAY,CAAC,GAAmB,CAAA,EACrF8B,GAAc,KAAK,IAAI,EAAGD,GAAU,QAAU,CAAC,EAE/CE,GAAa,IAAM,CACvB,MAAMhF,GAAON,EAAe/B,EAAQ,CAAC,GAAG2G,EAAWrB,GAAc6B,GAAU,MAAM,EAAG,EAAE,EAClFxD,GAAoBC,EAAgBA,EAAevB,EAAI,IACtCA,EAAI,EACzB+B,EAAe/B,EAAI,CACrB,EACMiF,GAAY,IAAM,CACtB,MAAMd,GAAUW,GAAU,MAAM,EAAG,KAAK,IAAI,EAAGA,GAAU,OAAS,CAAC,CAAC,EAC9D9E,GAAON,EAAe/B,EAAQ,CAAC,GAAG2G,EAAWrB,EAAY,EAAGkB,EAAO,EACrE7C,GAAoBC,EAAgBA,EAAevB,EAAI,IACtCA,EAAI,EACzB+B,EAAe/B,EAAI,CACrB,EAEA,OACE3I,EAAAA,KAAC,MAAA,CAA4C,UAAU,OACrD,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,iCAAiC,SAAA,0BAAuB,EACvED,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAC,EAAAA,IAAC,UAAO,KAAK,SAAS,UAAU,wBAAwB,QAAS0N,GAAY,SAAA,aAAA,CAE7E,EACCD,GAAc,GACbzN,EAAAA,IAAC,SAAA,CAAO,KAAK,SAAS,UAAU,wBAAwB,QAAS2N,GAAW,SAAA,aAAA,CAE5E,CAAA,CAAA,CAEJ,CAAA,EACF,EAEC,MAAM,KAAK,CAAE,OAAQF,EAAA,CAAa,EAAE,IAAI,CAACG,GAAIC,KAAS,CACrD,MAAMC,GAAyB,CAAC,GAAGd,EAAWrB,GAAckC,EAAI,EAChE,OACE9N,EAAAA,KAAC,MAAA,CAAkD,UAAU,6BAC3D,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,6BAA6B,SAAA,CAAA,UAAQ8N,GAAO,CAAA,EAAE,EAC5D1B,EAAgBP,GAAekC,EAAW,CAAA,GAFnC,eAAeb,CAAO,IAAIM,EAAG,IAAIM,EAAI,EAG/C,CAEJ,CAAC,CAAA,CAAA,EAvBO,iBAAiBZ,CAAO,IAAIM,EAAG,EAwBzC,CAEJ,CAAC,CACH,GAAA,CAAG,GA3EK,GAAGN,CAAO,IAAI,OAAOxB,GAAO,GAAG,CAAC,EA4E1C,CACD,CAAA,CAAA,EAjFO,SAASwB,CAAO,EAkF1B,CAEJ,CAAC,CAAA,CAAA,EAxGO,UAAUvG,CAAG,IAAI+F,CAAE,EAyG7B,CAEJ,CAAC,CAAA,CAAA,EAlJO,QAAQ/F,CAAG,IAAI0F,CAAM,EAmJ/B,CAEJ,CAAC,CACH,CAGA,MAAM2B,EAAc3D,EAAAA,QAAQ,IAAM,CAChC,MAAM4D,EAAkB,CAAA,EAClB9E,EAAO,CAACC,EAAkB0B,IAA0B,CACxD1B,EAAK,QAASlD,GAAM,CAClB+H,EAAI,KAAK/H,CAAC,EACV,MAAMS,EAAM,OAAOT,EAAE,GAAG,EAClB+E,EAAQ/E,EAAE,cAAgB,CAAA,EAChC,GAAI,CAAC+E,EAAM,OAAQ,OAEnB,MAAMxE,EAAImC,GAAWtC,EAAQwE,EAAWnE,CAAG,EACrC4F,EAAUtB,EAAM,OAAQjD,GAAMJ,GAAgBnB,EAAGuB,EAAE,gBAAiBA,EAAE,gBAAgB,CAAC,GAC5EuE,EAAQ,OAAS,GAAK,CAACA,EAAQ,KAAM,GAAM,EAAE,iCAAiC,EAAIA,EAAQ,MAAM,EAAG,CAAC,EAAIA,GAEhH,QAAS,GAAM,CACtB,MAAMxM,EAAY,EAAE,sBAAwB,CAAA,EACvCA,EAAS,SACV,EAAE,mCACNoJ,EAAKpJ,EAAU+K,CAAS,EAC1B,CAAC,CACH,CAAC,CACH,EACA,OAAA3B,EAAKiB,CAAc,EACZ6D,CACT,EAAG,CAAC7D,EAAgB9D,CAAM,CAAC,EAE3B,SAAS4H,EAAa5M,EAAqC,CACzDA,EAAE,eAAA,EACF,MAAM6M,EAAO/H,GAAkB4H,EAA2B1H,CAAM,EAGhE,GAFAsE,EAAUuD,CAAI,EAEV,OAAO,KAAKA,CAAI,EAAE,OAAS,EAAG,CAChC,MAAMC,EAAWJ,EAAY,UAAW9H,GAAMiI,EAAKjI,EAAE,GAAa,CAAC,EAC/DkI,GAAY,GAAG,SAAS,eAAeJ,EAAYI,CAAQ,EAAE,GAAa,GAAG,MAAA,EACjF,MACF,CACAjE,EAAS7D,CAAM,CACjB,CAEA,OACErG,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAiB,SAAUiO,EAAc,WAAU,GAChE,SAAA9B,EAAgBhC,CAAc,CAAA,CACjC,CAEJ,CC/rBO,MAAMiE,GAAmB,eAQhC,SAASC,IAA0C,CACjD,OAAI,OAAO,OAAW,IAAoB,CAAA,GAC1C,OAAO,UAAY,OAAO,WAAa,CAAA,EAChC,OAAO,UAChB,CAEO,SAASC,EAAmBC,EAAmBC,EAAmC,GAAU,CAC/EH,GAAA,EACR,KAAK,CACb,MAAOE,EACP,cAAe,CACb,GAAGC,EACH,YAAaJ,EAAA,CACf,CACD,CACH,CAGO,SAASK,IAAyB,CACvCH,EAAmB,uBAAuB,CAC5C,CAGO,SAASI,IAAyB,CACvCJ,EAAmB,uBAAuB,CAC5C,CAGO,SAASK,GAAgBH,EAAgG,CAC9HF,EAAmB,8BAA+BE,CAAO,CAC3D,CAGO,SAASI,GAAmBJ,EAAgG,CACjIF,EAAmB,iCAAkCE,CAAO,CAC9D,CAGO,SAASK,IAA0B,CACxCP,EAAmB,+BAA+B,CACpD,CAGO,SAASQ,GAAgBN,EAAwC,CACtEF,EAAmB,8BAA+BE,GAAW,EAAE,CACjE,CAGO,SAASO,IAAsB,CACpCT,EAAmB,2BAA2B,CAChD,CCnDA,SAASxH,GAASC,EAA2B,CAC3C,OAAI,OAAOA,GAAM,UAAY,OAAO,SAASA,CAAC,EAAUA,EACpD,OAAOA,GAAM,UAAYA,EAAE,KAAA,IAAW,IAAM,CAAC,OAAO,MAAM,OAAOA,CAAC,CAAC,EAAU,OAAOA,CAAC,EAClF,IACT,CACA,SAASC,GAAOD,EAA2B,CACzC,GAAIA,aAAa,MAAQ,CAAC,OAAO,MAAMA,EAAE,SAAS,EAAG,OAAOA,EAAE,QAAA,EAC9D,GAAI,OAAOA,GAAM,SAAU,CACzB,MAAM,EAAI,KAAK,MAAMA,CAAC,EACtB,OAAO,OAAO,MAAM,CAAC,EAAI,KAAO,CAClC,CACA,OAAO,IACT,CACA,SAASE,GAAIC,EAAYC,EAA2B,CAClD,MAAMC,EAAKN,GAASI,CAAC,EACnBG,EAAKP,GAASK,CAAC,EACjB,GAAIC,GAAM,MAAQC,GAAM,YAAaD,EAAKC,EAC1C,MAAMC,EAAKN,GAAOE,CAAC,EACjBK,EAAKP,GAAOG,CAAC,EACf,OAAIG,GAAM,MAAQC,GAAM,KAAaD,EAAKC,EACtCL,GAAK,MAAQC,GAAK,KAAa,KAC5B,OAAOD,CAAC,EAAE,cAAc,OAAOC,CAAC,CAAC,CAC1C,CACA,SAASK,GAASC,EAAmBC,EAA0B,CAC7D,OAAI,MAAM,QAAQD,CAAQ,EAAUA,EAAS,KAAMjB,GAAMA,IAAMkB,CAAM,EACjE,OAAOD,GAAa,SAAiBC,GAAU,MAAQD,EAAS,SAAS,OAAOC,CAAM,CAAC,EACpF,EACT,CACA,SAASC,GAAgBnB,EAAYwI,EAA0CC,EAAuB,CACpG,OAAQD,EAAA,CACN,IAAK,SACH,OAAOxI,IAAMyI,EACf,IAAK,WAAY,CACf,MAAMlH,EAAId,GAAIT,EAAGyI,CAAG,EACpB,OAAOlH,GAAK,MAAQA,EAAI,CAC1B,CACA,IAAK,cAAe,CAClB,MAAMA,EAAId,GAAIT,EAAGyI,CAAG,EACpB,OAAOlH,GAAK,MAAQA,EAAI,CAC1B,CACA,IAAK,WACH,OAAOP,GAAShB,EAAGyI,CAAG,EACxB,IAAK,aACH,OAAOzI,GAAK,MAAQyI,GAAO,MAAQ,OAAOzI,CAAC,EAAE,WAAW,OAAOyI,CAAG,CAAC,EACrE,IAAK,WACH,OAAOzI,GAAK,MAAQyI,GAAO,MAAQ,OAAOzI,CAAC,EAAE,SAAS,OAAOyI,CAAG,CAAC,EACnE,QACE,MAAO,EAAA,CAEb,CAGA,SAASC,GAAwBC,EAA+B9I,EAA6C,CAC3G,MAAM2H,EAAkB,CAAA,EAoBxB,OAnBc7E,GAAkC,CAC9CA,EAAK,QAASlD,GAAM,CAClB+H,EAAI,KAAK/H,CAAC,EACV,MAAMS,EAAM,OAAOT,EAAE,GAAG,EAClBO,EAAIH,EAAOK,CAAG,EACdsE,EAAQ/E,EAAE,cAAgB,CAAA,EAChC,GAAI,CAAC+E,EAAM,OAAQ,OAEnB,MAAMsB,EAAUtB,EAAM,OAAQjD,GAAMJ,GAAgBnB,EAAGuB,EAAE,gBAAiBA,EAAE,gBAAgB,CAAC,GAC5EuE,EAAQ,OAAS,GAAK,CAACA,EAAQ,KAAMe,GAAMA,EAAE,iCAAiC,EAAIf,EAAQ,MAAM,EAAG,CAAC,EAAIA,GAEhH,QAASe,GAAM,CACtB,MAAMvN,EAAYuN,EAAE,sBAAwB,CAAA,EACvCvN,EAAS,SACVuN,EAAE,mCACNvN,EAAS,QAASsP,GAAUpB,EAAI,KAAKoB,CAAK,CAAC,EAC7C,CAAC,CACH,CAAC,CACH,GACKD,CAAI,EACFnB,CACT,CAGA,MAAMlF,GAAe,UACfC,GAAYC,GAAc,GAAGA,CAAC,GAAGF,EAAY,GAEnD,SAASuG,GAA6BjJ,EAAoCkJ,EAAoC,CAE5G,UAAWrJ,KAAKG,EAAW,CACzB,MAAMmJ,EAAO,OAAOtJ,EAAE,GAAG,EACnBuJ,EAAOF,EAAcC,CAAI,EACzBvE,EAAQ/E,EAAE,cAAgB,CAAA,EAChC,GAAI,CAAC+E,EAAM,OAAQ,SAEnB,MAAMsB,EAAUtB,EAAM,OAAQjD,GAAMJ,GAAgB6H,EAAMzH,EAAE,gBAAiBA,EAAE,gBAAgB,CAAC,EAC1FwE,EAAWD,EAAQ,OAAS,GAAK,CAACA,EAAQ,KAAMe,GAAMA,EAAE,iCAAiC,EAAIf,EAAQ,MAAM,EAAG,CAAC,EAAIA,EAEzH,UAAWnF,KAAKoF,EAAU,CACxB,MAAMzM,EAAYqH,EAAE,sBAAwB,CAAA,EAC5C,GAAI,CAACrH,EAAS,OAAQ,SAEtB,GAAI,CAACqH,EAAE,kCAAmC,CAExC,GAAIkI,GAA6BvP,EAAUwP,CAAa,EAAG,MAAO,GAClE,QACF,CAGA,MAAM/G,EAAO+G,EAAcvG,GAASwG,CAAI,CAAC,GAAmB,CAAA,EAC5D,GAAIhH,EAAI,SAAW,EAAG,MAAO,GAE7B,UAAWkH,KAAQlH,EAAuC,CAExD,MAAMmH,EAAavJ,GAAkBrG,EAAU2P,CAAkB,EAIjE,GAHI,OAAO,OAAOC,CAAU,EAAE,KAAK,OAAO,GAGtCL,GAA6BvP,EAAU2P,CAAkB,EAAG,MAAO,EACzE,CACF,CACF,CACA,MAAO,EACT,CAGA,SAASE,GAA4BvJ,EAAoCwJ,EAAiC,CACxG,OAAOP,GAA6BjJ,EAAWwJ,CAAU,CAC3D,CAKO,SAASC,GAAW,CACzB,OAAAC,EACA,gBAAAC,EACA,WAAAC,EACA,cAAAjG,EACA,cAAAkG,CACF,EAMG,CACD,KAAM,CAACC,EAAQC,CAAS,EAAIrP,EAAAA,SAASmP,GAAiB,CAAC,EACjD,CAACG,EAAWC,CAAY,EAAIvP,EAAAA,SAAqBiJ,GAAiB,CAAA,CAAE,EACpE,CAACuG,EAAmBC,CAAoB,EAAIzP,EAAAA,SAAqC,CAAA,CAAE,EACnF,CAAC0P,EAASC,CAAU,EAAI3P,EAAAA,SAAS,EAAK,EACtC,CAAC4P,EAAcC,CAAe,EAAI7P,EAAAA,SAAS,EAAK,EAChD,CAAC8P,EAAYC,CAAa,EAAI/P,EAAAA,SAAwB,IAAI,EAC1DgQ,EAAW9P,EAAAA,OAAiC,EAAE,EAE9C+P,EAAY,MAAM,QAAQjB,CAAM,GAAKA,EAAO,OAAS,EACrDkB,EAAQD,EAAYjB,EAAO,KAAK,IAAII,EAAQJ,EAAO,OAAS,CAAC,CAAC,EAAI,KAClEmB,EAAWD,GAAO,KAAO,KAG/B9P,EAAAA,UAAU,IAAM,CACV+O,IAAkB,QACpBE,EAAUF,CAAa,CAE3B,EAAG,CAACA,CAAa,CAAC,EAGlB/O,EAAAA,UAAU,IAAM,CACd,MAAMgQ,EAAgBJ,EAAS,QAAQZ,CAAM,EACzCgB,GACFA,EAAc,eAAe,CAAE,SAAU,SAAU,MAAO,UAAW,OAAQ,SAAU,CAE3F,EAAG,CAAChB,CAAM,CAAC,EAIXhP,EAAAA,UAAU,IAAM,CACV6I,IAAkB,QACpBsG,EAAatG,CAAa,CAE9B,EAAG,CAACA,CAAa,CAAC,EAElB7I,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC8P,GAAS,CAACC,EAAU,CACvBR,EAAW,EAAK,EAChBI,EAAc,IAAI,EAClB,MACF,CACA,GAAIP,EAAkBW,CAAQ,EAAG,CAC/BR,EAAW,EAAK,EAChBI,EAAc,IAAI,EAClB,MACF,CAEA,IAAIM,EAAY,GAChB,OAAAV,EAAW,EAAI,EACfI,EAAc,IAAI,EAElB,QAAQ,QAAQG,EAAM,cAAA,CAAe,EAClC,KAAMI,GAAO,CACZ,GAAI,CAAAD,EACJ,IAAI,CAAC,MAAM,QAAQC,CAAE,QAAS,IAAI,MAAM,kBAAkBH,CAAQ,4BAA4B,EAC9FV,EAAsBlD,IAAO,CAAE,GAAGA,EAAG,CAAC4D,CAAQ,EAAGG,CAAA,EAAK,EACxD,CAAC,EAEA,MAAOrM,GAAa,CACfoM,GACJN,EAAc,yBAAyBG,GAAO,OAAS,EAAE,MAAMjM,GAAK,SAAW,eAAe,EAAE,CAClG,CAAC,EACA,QAAQ,IAAM,CACRoM,GAAWV,EAAW,EAAK,CAClC,CAAC,EAEI,IAAM,CACXU,EAAY,EACd,CACF,EAAG,CAACH,EAAOC,EAAUX,CAAiB,CAAC,EAEvC,MAAMlK,EAAY6K,EAAWX,EAAkBW,CAAQ,EAAI,OAG3D/P,EAAAA,UAAU,IAAM,CACV8P,GAASC,GAAY7K,GACvBuI,GAAgB,CACd,SAAAsC,EACA,WAAYD,EAAM,OAASC,EAC3B,UAAWf,EAAS,EACpB,WAAYJ,EAAO,MAAA,CACpB,CAEL,EAAG,CAACmB,EAAUf,EAAQJ,EAAO,OAAQkB,EAAO5K,CAAS,CAAC,EAGtD,MAAMiL,EAAgBjH,EAAAA,QAAQ,IAAM,CAClC,GAAI,CAAChE,EAAW,MAAO,CAAA,EACvB,MAAMkL,EAAoB,CAAA,GAGM/F,GAAuC,CACrE,MAAMgG,EAAiB,CAAA,EACjBrI,EAAQC,GAAqB,CACjCA,EAAK,QAAQ,CAAClD,EAAGQ,IAAM,CACrB,MAAMuC,EAAIhD,GAAUC,EAAGQ,CAAC,EACxB8K,EAAK,KAAKvI,CAAC,EACX,MAAMwI,EAASzI,GAASC,CAAC,EACzBuI,EAAK,KAAKC,CAAM,GAGFvL,EAAE,cAAgB,CAAA,GAC1B,QAAS8B,GAAM,CACnB,MAAMjI,EAAYiI,EAAE,sBAAwB,CAAA,EACxCjI,EAAS,OAAS,GACpBoJ,EAAKpJ,CAAQ,CAEjB,CAAC,CACH,CAAC,CACH,EACA,OAAAoJ,EAAKqC,CAAY,EACVgG,CACT,GAG+CnL,CAAS,EAGxC,QAAS4C,GAAM,CACzBA,KAAKoH,IAAWkB,EAAMtI,CAAC,EAAIoH,EAAUpH,CAAC,EAC5C,CAAC,EAED,SAAW,CAACA,EAAGxC,CAAC,IAAK,OAAO,QAAQ4J,CAAS,EACvCpH,EAAE,SAASF,EAAY,GAAK,EAAEE,KAAKsI,KAAQA,EAAMtI,CAAC,EAAIxC,GAE5D,OAAO8K,CACT,EAAG,CAAClL,EAAWgK,CAAS,CAAC,EAEnBqB,EAAuB/I,GAAqB,CAChD2H,EAAchL,IAAU,CAAE,GAAGA,EAAM,GAAGqD,GAAO,CAC/C,EAEMgJ,EAAS,IAAM,CACnBvB,EAAW1J,GAAOA,EAAI,EAAIA,EAAI,EAAI,CAAE,EACpC,SAAS,cAA2B,aAAa,GAAG,SAAS,CAAE,IAAK,EAAG,SAAU,UAA6B,CAChH,EAEMkL,EAAS,SAAY,CACzB,GAAI,CAACvL,GAAa,CAAC4K,GAASR,GAAWI,GAAcF,EAAc,OAGnE,MAAMkB,EAAU1C,GAAwB9I,EAAWgK,CAAS,EACtDyB,EAAa1L,GAAkByL,EAAuBxB,CAAS,EAC/D0B,EAAY,OAAO,OAAOD,CAAU,EAAE,KAAK,OAAO,EAGlDE,EAAcpC,GAA4BvJ,EAAWgK,CAAS,EAEpE,GAAI,EAAA0B,GAAaC,GAEjB,CAAApB,EAAgB,EAAI,EACpB,GAAI,CACF,MAAMqB,EAAY,KAAK,IAAI9B,EAAS,EAAGJ,EAAO,OAAS,CAAC,EAClDmC,EAAa/B,GAAUJ,EAAO,OAAS,EACvC,CAAE,QAAAoC,EAAS,MAAAvS,CAAA,EAAUsS,EAAa,MAAMjC,EAAWI,EAAWa,GAAY,EAAE,EAAI,MAAMlB,EAAgBsB,EAAeJ,GAAY,EAAE,EACzI,GAAI,CAACiB,EAAS,CACZrB,EAAclR,GAAS,mBAAmB,EAC1C,MACF,CACKsS,GAAY9B,EAAU6B,CAAS,CACtC,QAAA,CACErB,EAAgB,EAAK,CACvB,EACF,EAGMwB,EAAc/H,EAAAA,QAAQ,IAAM,CAChC,GAAI,CAAChE,GAAaoK,GAAaI,GAAcF,EAAc,MAAO,GAClE,MAAMkB,EAAU1C,GAAwB9I,EAAWgK,CAAS,EACtDyB,EAAa1L,GAAkByL,EAAuBxB,CAAS,EAC/D0B,EAAY,OAAO,OAAOD,CAAU,EAAE,KAAK,OAAO,EAClDE,EAAcpC,GAA4BvJ,EAAWgK,CAAS,EACpE,OAAO0B,GAAaC,CACtB,EAAG,CAAC3L,EAAWgK,EAAWI,EAASI,EAAYF,CAAY,CAAC,EAE5D,OAAKK,EAGHhR,EAAAA,KAAC,MAAA,CAAI,UAAU,YAEb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,mEACb,SAAA,CAAAC,EAAAA,IAAC,KAAA,CACC,UAAU,+FACV,MAAO,CAAE,eAAgB,OAAQ,gBAAiB,MAAA,EAEjD,SAAA8P,EAAO,QAAQ,CAAC/J,EAAGU,IAAM,CACxBzG,EAAAA,IAAC,KAAA,CAEC,IAAMoS,GAAO,CACXtB,EAAS,QAAQrK,CAAC,EAAI2L,CACxB,EACA,UAAW,yFACT3L,EAAIyJ,EACA,yCACAzJ,IAAMyJ,EACJ,yCACA,iCACR,GAEC,SAAAnK,EAAE,KAAA,EAZEA,EAAE,KAAO,SAASU,CAAC,EAAA,EAc1B,GAAIA,EAAIqJ,EAAO,OAAS,EACpB,CACE9P,EAAAA,IAAC,MAA+B,UAAU,sDAAsD,cAAvF,SAAS+F,EAAE,KAAOU,CAAC,EAE5B,CAAA,EAEF,CAAA,CAAC,CACN,CAAA,CAAA,EAEH1G,EAAAA,KAAC,MAAA,CAAI,UAAU,gEACZ,SAAA,CAAA,KAAK,IAAImQ,EAAS,EAAGJ,EAAO,MAAM,EAAE,MAAIA,EAAO,MAAA,CAAA,CAClD,CAAA,EACF,SAGC,MAAA,CACE,SAAA,CAAAU,GAAWxQ,EAAAA,IAAC,MAAA,CAAI,UAAU,iBAAiB,SAAA,WAAQ,EAEnDgR,GACChR,EAAAA,IAAC8J,GAAA,CAEC,UAAW1D,GAAa,CAAA,EACxB,iBAAkBiL,EAClB,eAAgBI,EAChB,SAAU,IAAME,EAAA,CAAO,EAJlBX,EAAM,GAAA,CAKb,EAEJ,EAGC,CAACR,GAAWI,GACX7Q,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAC,EAAAA,IAAC,OAAK,SAAA4Q,CAAA,CAAW,EAChBI,GACChR,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAU,6CACV,QAAS,IAAM,CACbuQ,EAAsBlD,GAAM,CAC1B,GAAI,CAAC4D,EAAU,OAAO5D,EACtB,MAAMgF,EAAO,CAAE,GAAGhF,CAAA,EAClB,cAAOgF,EAAKpB,CAAQ,EACboB,CACT,CAAC,CACH,EACD,SAAA,OAAA,CAAA,CAED,EAEJ,SAID,MAAA,CAAI,UAAWnC,EAAS,EAAI,yBAA2B,GACrD,SAAA,CAAAA,EAAS,GACRlQ,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS0R,EACT,SAAUlB,EACV,UAAU,0GACX,SAAA,MAAA,CAAA,EAKHzQ,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,mBAAiB,OACjB,QAAS4R,EACT,SAAUQ,EACV,UAAW,CACT,uBACAjC,EAAS,EAAI,GAAK,SAClB,0CACA,kDACA,yCACAiC,EACI,cACA,8KAAA,EACJ,KAAK,GAAG,EAET,SAAA,CAAAzB,GACC3Q,EAAAA,KAAC,OAAI,UAAU,kCAAkC,MAAM,6BAA6B,KAAK,OAAO,QAAQ,YACtG,SAAA,CAAAC,EAAAA,IAAC,SAAA,CAAO,UAAU,aAAa,GAAG,KAAK,GAAG,KAAK,EAAE,KAAK,OAAO,eAAe,YAAY,IAAI,EAC5FA,EAAAA,IAAC,OAAA,CACC,UAAU,aACV,KAAK,eACL,EAAE,iHAAA,CAAA,CACH,EACH,EAEDkQ,IAAWJ,EAAO,OAAS,EAAI,SAAW,MAAA,CAAA,CAAA,CAC7C,CAAA,CACF,CAAA,EACF,QAxHsB,MAAA,CAAI,UAAU,iBAAiB,SAAA,aAAU,CA0HnE,CCjcA,MAAMwC,GAAe,mBACfC,GAAiB,qBAKhB,SAASC,GAAYC,EAAuB,CACjD,GAAI,CACF,aAAa,QAAQH,GAAcG,CAAO,CAC5C,OAAS9S,EAAO,CACd,QAAQ,MAAM,0CAA2CA,CAAK,CAChE,CACF,CAKO,SAAS+S,IAA6B,CAC3C,GAAI,CACF,OAAO,aAAa,QAAQJ,EAAY,CAC1C,OAAS3S,EAAO,CACd,eAAQ,MAAM,4CAA6CA,CAAK,EACzD,IACT,CACF,CAKO,SAASgT,IAAqB,CACnC,GAAI,CACF,aAAa,WAAWL,EAAY,CACtC,OAAS3S,EAAO,CACd,QAAQ,MAAM,6CAA8CA,CAAK,CACnE,CACF,CAKO,SAASiT,GAAcC,EAAqB,CACjD,GAAI,CACF,aAAa,QAAQN,GAAgBM,CAAK,CAC5C,OAASlT,EAAO,CACd,QAAQ,MAAM,4CAA6CA,CAAK,CAClE,CACF,CAKO,SAASmT,IAA+B,CAC7C,GAAI,CACF,OAAO,aAAa,QAAQP,EAAc,CAC5C,OAAS5S,EAAO,CACd,eAAQ,MAAM,8CAA+CA,CAAK,EAC3D,IACT,CACF,CAKO,SAASoT,IAAuB,CACrC,GAAI,CACF,aAAa,WAAWR,EAAc,CACxC,OAAS5S,EAAO,CACd,QAAQ,MAAM,+CAAgDA,CAAK,CACrE,CACF,CAKO,SAASqT,IAA0B,CACxCL,GAAA,EACAI,GAAA,CACF,CCxEA,MAAME,EAAW,6BAGjB,IAAIC,GAA2B,KAExB,SAASC,GAAaN,EAAqB,CAChDK,GAAYL,EACZD,GAAcC,CAAK,CACrB,CAEO,SAASO,IAA8B,CAC5C,OAAOF,EACT,CAEO,SAASG,IAAiC,CAC/C,MAAMC,EAAcR,GAAA,EAChBQ,IACFJ,GAAYI,EAEhB,CAEO,SAASP,IAAuB,CACrCG,GAAY,KACZK,GAAA,CACF,CAEA,eAAeC,EAAyBC,EAAaC,EAAiC,CACpF,MAAMC,EAAuB,CAC3B,eAAgB,kBAAA,EAGdT,KACFS,EAAQ,cAAmB,UAAUT,EAAS,IAGhD,MAAMU,EAAW,MAAM,MAAMH,EAAK,CAChC,OAAQ,OACR,QAAAE,EACA,KAAM,KAAK,UAAUD,CAAI,CAAA,CAC1B,EAED,GAAI,CAACE,EAAS,GAAI,CAChB,IAAIC,EAAe,8BAA8BD,EAAS,MAAM,GAChE,GAAI,CAEFC,GADkB,MAAMD,EAAS,KAAA,GACR,OAASC,CACpC,MAAQ,CAENA,EAAeD,EAAS,YAAcC,CACxC,CACA,MAAMlU,EAAQ,IAAI,MAAMkU,CAAY,EACpC,MAAAlU,EAAM,WAAaiU,EAAS,OACtBjU,CACR,CAEA,OAAOiU,CACT,CAEA,eAAsBE,GAAoB9C,EAAkD,CAG1F,OADa,MADI,MAAMwC,EAAyB,GAAGP,CAAQ,0BAA2B,CAAE,MAAAjC,EAAO,GACnE,KAAA,CAE9B,CAEA,eAAsB+C,IAAkD,CAGtE,OADa,MADI,MAAMP,EAAyB,GAAGP,CAAQ,wBAAyB,EAAE,GAC1D,KAAA,CAE9B,CAEA,eAAsBe,GAAYC,EAA6C,CAE7E,MAAMC,EAAO,MADI,MAAMV,EAAyB,GAAGP,CAAQ,gBAAiB,CAAE,MAAAgB,EAAO,GACzD,KAAA,EAC5B,GAAI,CAACC,GAAQ,OAAOA,GAAS,UAAY,CAACA,EAAK,QAC7C,MAAM,IAAI,MAAM,iCAAiC,KAAK,UAAUA,CAAI,CAAC,EAAE,EAEzE,OAAOA,CACT,CAGA,eAAsBC,GAAY3F,EAAkD4F,EAAmB3B,EAA+B,CAGpI,MAAMiB,EAAkG,CAAE,QAAAlF,EAAS,SAAA4F,CAAAA,EACnH,OAAI3B,GAAW,OAAOA,GAAY,UAAYA,EAAQ,KAAA,IAAW,KAC/DiB,EAAK,QAAUjB,GAGJ,MADI,MAAMe,EAAyB,GAAGP,CAAQ,gBAAiBS,CAAI,GACpD,KAAA,CAE9B,CAEA,eAAsBW,GAAY5B,EAAiB6B,EAAyE,CAG1H,OADa,MADI,MAAMd,EAAyB,GAAGP,CAAQ,gBAAiB,CAAE,QAAAR,EAAS,QAAA6B,EAAS,GACpE,KAAA,CAE9B,CAEA,eAAsBC,GAAiBC,EAAkD,CAGvF,OADa,MADI,MAAMhB,EAAyB,GAAGP,CAAQ,sBAAuB,CAAE,MAAAuB,EAAO,GAC/D,KAAA,CAE9B,CAEA,eAAsBJ,IAAiD,CAGrE,OADa,MADI,MAAMZ,EAAyB,GAAGP,CAAQ,aAAc,EAAE,GAC/C,KAAA,CAE9B,CAEA,eAAsBwB,GAAShC,EAA6C,CAE1E,MAAMiB,EAAOjB,EAAU,CAAE,QAAAA,CAAA,EAAY,CAAA,EAGrC,OADa,MADI,MAAMe,EAAyB,GAAGP,CAAQ,aAAcS,CAAI,GACjD,KAAA,CAE9B,CAEA,eAAsBgB,GAAYC,EAAqD,CAErF,MAAMT,EAAO,MADI,MAAMV,EAAyB,GAAGP,CAAQ,gBAAiB,CAAE,YAAA0B,EAAa,GAC/D,KAAA,EAE5B,OAAOT,GAAQ,OAAOA,GAAS,UAAY,YAAaA,EAAOA,EAAO,CAAE,QAAS,EAAA,CACnF,CCxHA,MAAMU,GAAoB,IAAI,KAAK,aAAa,QAAS,CACvD,MAAO,WACP,SAAU,KACZ,CAAC,EAID,SAASC,GAAW,CAAE,OAAAC,GAAmC,CACvD,MAAMC,EAAa,IAAM,CACvBhG,GAAA,EACA+F,IAAA,CACF,EACA,OACE9U,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS+U,EACT,UAAU,wIACX,SAAA,MAAA,CAAA,CAIL,CAEO,SAASC,GAAM,CAAE,MAAAC,EAAO,OAAAH,GAA4D,CACzF,MAAMI,EAAW,MAAM,QAAQD,CAAK,GAAKA,EAAM,OAAS,EAClD,CAACE,EAAiBC,CAAkB,EAAItU,EAAAA,SAAwC,CAAA,CAAE,EAOxF,OAJAI,EAAAA,UAAU,IAAM,CACdmS,GAAA,CACF,EAAG,CAAA,CAAE,EAEA6B,EAWHnV,EAAAA,KAAC,UAAA,CAAQ,UAAU,OACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,uCAAuC,SAAA,QAAK,QACzD,MAAA,CAAI,UAAU,gDACZ,SAAAiV,EAAM,IAAKI,GAAS,CACnB,MAAMC,EAAiBD,EAAK,cAAgB,IACtCE,EAAmBX,GAAkB,OAAOU,CAAc,EAC1DE,EAAUH,EAAK,cACflQ,EAASgQ,EAAgBK,CAAO,GAAK,OACrCC,EAAetQ,IAAW,UAC1BuQ,EAAcvQ,IAAW,UAEzBwQ,EAAoB,SAAY,CACpCP,EAAoB/P,IAAU,CAAE,GAAGA,EAAM,CAACmQ,CAAO,EAAG,SAAA,EAAY,EAChE,GAAI,CAIF,GAFAnC,GAAA,EAEI,CADUD,GAAA,EAEZ,MAAM,IAAI,MAAM,iEAAiE,EAMnF,GAAI,GAJW,MAAMsB,GAAYW,EAAK,aAAa,IAG3B,UAAY,IACtB,MAAM,IAAI,MAAM,gBAAgB,EAG9CrC,GAAA,EACAD,GAAA,EAEAqC,EAAoB/P,IAAU,CAAE,GAAGA,EAAM,CAACmQ,CAAO,EAAG,SAAA,EAAY,CAClE,MAAQ,CACNJ,EAAoB/P,IAAU,CAAE,GAAGA,EAAM,CAACmQ,CAAO,EAAG,OAAA,EAAU,CAChE,CACF,EAEA,OACEzV,EAAAA,KAAC,MAAA,CAAkB,UAAU,qGAE3B,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACZ,SAAA,CAAAsV,EAAK,oBACJrV,EAAAA,IAAC,MAAA,CAAI,IAAK,yBAAyBqV,EAAK,mBAAmB,GAAI,IAAKA,EAAK,aAAc,UAAU,6BAA6B,EAE9HrV,EAAAA,IAAC,MAAA,CAAI,UAAU,0GACZ,SAAAqV,EAAK,aAAa,OAAO,CAAC,EAAE,YAAA,CAAY,CAC3C,EAEFrV,EAAAA,IAAC,MAAA,CAAI,UAAU,SACb,SAAAA,EAAAA,IAAC,MAAG,UAAU,+BAAgC,SAAAqV,EAAK,YAAA,CAAa,CAAA,CAClE,CAAA,EACF,EAGAtV,EAAAA,KAAC,MAAA,CAAI,UAAU,OACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CAAE,UAAU,yBAAyB,SAAA,UAAO,EAC7CA,EAAAA,IAAC,IAAA,CAAE,UAAU,oCAAqC,SAAAuV,CAAA,CAAiB,CAAA,EACrE,EAGAxV,EAAAA,KAAC,MAAA,CAAI,UAAU,OACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CAAE,UAAU,yBAAyB,SAAA,OAAI,EAC1CD,EAAAA,KAAC,IAAA,CAAE,UAAU,6BAA8B,SAAA,CAAAsV,EAAK,YAAY,SAAA,CAAA,CAAO,CAAA,EACrE,EAGCA,EAAK,kBACJrV,EAAAA,IAAC,MAAA,CAAI,UAAU,OACb,SAAAD,EAAAA,KAAC,IAAA,CAAE,UAAU,yBAAyB,SAAA,CAAA,aAAWsV,EAAK,gBAAA,CAAA,CAAiB,CAAA,CACzE,EAIFtV,EAAAA,KAAC,MAAA,CAAI,UAAU,eACb,SAAA,CAAAC,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS2V,EACT,SAAUF,GAAgBC,EAC1B,UAAW,8LACTA,EAAc,2BAA6B,oEAC7C,GAEC,SAAAD,EAAe,cAAgBC,EAAc,YAAc,cAAA,CAAA,EAE7DvQ,IAAW,SAAWnF,EAAAA,IAAC,IAAA,CAAE,UAAU,4BAA4B,SAAA,0CAAuC,EACtGmF,IAAW,WAAanF,EAAAA,IAAC,IAAA,CAAE,UAAU,gCAAgC,SAAA,gCAAA,CAA8B,CAAA,CAAA,CACtG,CAAA,CAAA,EAhDQwV,CAiDV,CAEJ,CAAC,CAAA,CACH,EACCV,GAAU9U,EAAAA,IAAC6U,GAAA,CAAW,OAAAC,CAAA,CAAgB,CAAA,EACzC,EApGE/U,EAAAA,KAAC,UAAA,CAAQ,UAAU,OACjB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,uCAAuC,SAAA,QAAK,EAC1DA,EAAAA,IAAC,IAAA,CAAE,UAAU,8BAA8B,SAAA,uCAAoC,EAC9E8U,GAAU9U,EAAAA,IAAC6U,GAAA,CAAW,OAAAC,CAAA,CAAgB,CAAA,EACzC,CAkGN,CC1IO,SAASc,EAAsBtV,EAAuD,CAC3F,GAAIA,IAAU,GAAM,MAAO,MAC3B,GAAIA,IAAU,GAAO,MAAO,IAE9B,CAKO,SAASuV,EAAWC,EAA4D,CACrF,GAAKA,EACL,GAAI,CACF,MAAMC,EAAI,OAAOD,GAAS,SAAW,IAAI,KAAKA,CAAI,EAAIA,EACtD,OAAI,MAAMC,EAAE,QAAA,CAAS,EAAG,OACjBA,EAAE,YAAA,EAAc,MAAM,GAAG,EAAE,CAAC,CACrC,MAAQ,CACN,MACF,CACF,CAKO,SAASC,GAAkBC,EAA0B,CAC1D,MAAMC,EAAyB,CAAA,EAG3BD,EAAM,QAAOC,EAAW,MAAQD,EAAM,OACtCA,EAAM,aAAYC,EAAW,WAAaD,EAAM,YAChDA,EAAM,YAAWC,EAAW,UAAYD,EAAM,WAC9CA,EAAM,QAAOC,EAAW,MAAQD,EAAM,OACtCA,EAAM,gBAAeC,EAAW,cAAgBL,EAAWI,EAAM,aAAa,GAC9EA,EAAM,UAASC,EAAW,QAAUD,EAAM,SAC1CA,EAAM,QAAOC,EAAW,MAAQD,EAAM,OAG1C,MAAME,EAAyB,CAAA,EAC3BF,EAAM,QAAQE,EAAa,KAAKF,EAAM,MAAM,EAC5CA,EAAM,QAAQE,EAAa,KAAKF,EAAM,MAAM,EAC5CA,EAAM,MAAME,EAAa,KAAKF,EAAM,IAAI,EACxCA,EAAM,OAAOE,EAAa,KAAKF,EAAM,KAAK,EAC1CA,EAAM,aAAaE,EAAa,KAAKF,EAAM,WAAW,EACtDE,EAAa,OAAS,IACxBD,EAAW,QAAUC,EAAa,KAAK,IAAI,GAGzCF,EAAM,mBAAqB,MAAQA,EAAM,mBAAqB,SAAWC,EAAW,iBAAmBD,EAAM,kBAC7GA,EAAM,oBAAsB,MAAQA,EAAM,oBAAsB,SAAWC,EAAW,kBAAoBD,EAAM,mBAChHA,EAAM,eAAcC,EAAW,aAAeL,EAAWI,EAAM,YAAY,GAG/E,MAAMG,EAA8B,CAAA,EACpC,OAAIH,EAAM,cAAcG,EAAkB,KAAKH,EAAM,YAAY,EAC7DA,EAAM,cAAcG,EAAkB,KAAKH,EAAM,YAAY,EAC7DA,EAAM,YAAYG,EAAkB,KAAKH,EAAM,UAAU,EACzDA,EAAM,aAAaG,EAAkB,KAAKH,EAAM,WAAW,EAC3DA,EAAM,mBAAmBG,EAAkB,KAAKH,EAAM,iBAAiB,EACvEG,EAAkB,OAAS,IAC7BF,EAAW,cAAgBE,EAAkB,KAAK,IAAI,GAGpDH,EAAM,yBAA2B,MAAQA,EAAM,yBAA2B,SAC5EC,EAAW,uBAAyBD,EAAM,wBAGxCA,EAAM,2BAA6B,MAAQA,EAAM,2BAA6B,SAChFC,EAAW,yBAA2BN,EAAsBK,EAAM,wBAAwB,GAExFA,EAAM,6BAA4BC,EAAW,2BAA6BL,EAAWI,EAAM,0BAA0B,GACrHA,EAAM,0BAAyBC,EAAW,wBAA0BD,EAAM,yBAC1EA,EAAM,6BAA4BC,EAAW,2BAA6BD,EAAM,4BAChFA,EAAM,+BAA8BC,EAAW,6BAA+BD,EAAM,8BACpFA,EAAM,mBAAqB,MAAQA,EAAM,mBAAqB,SAAWC,EAAW,iBAAmBD,EAAM,kBAC7GA,EAAM,oBAAsB,MAAQA,EAAM,oBAAsB,SAAWC,EAAW,kBAAoBD,EAAM,mBAChHA,EAAM,iCAAmC,MAAQA,EAAM,iCAAmC,SAC5FC,EAAW,+BAAiCD,EAAM,gCAEhDA,EAAM,2CAA6C,MAAQA,EAAM,2CAA6C,SAChHC,EAAW,yCAA2CN,EAAsBK,EAAM,wCAAwC,GAIxHA,EAAM,2BAA6B,MAAQA,EAAM,2BAA6B,SAChFC,EAAW,yBAA2BN,EAAsBK,EAAM,wBAAwB,GAExFA,EAAM,6BAA4BC,EAAW,2BAA6BL,EAAWI,EAAM,0BAA0B,GACrHA,EAAM,0BAAyBC,EAAW,wBAA0BD,EAAM,yBAG1EA,EAAM,aAAe,MAAQA,EAAM,aAAe,SAAWC,EAAW,WAAaD,EAAM,YAC3FA,EAAM,kBAAoB,MAAQA,EAAM,kBAAoB,SAAWC,EAAW,gBAAkBD,EAAM,iBAC1GA,EAAM,oBAAsB,MAAQA,EAAM,oBAAsB,SAAWC,EAAW,kBAAoBD,EAAM,mBAChHA,EAAM,iBAAmB,MAAQA,EAAM,iBAAmB,SAAWC,EAAW,eAAiBD,EAAM,gBACvGA,EAAM,uBAAyB,MAAQA,EAAM,uBAAyB,SAAWC,EAAW,qBAAuBD,EAAM,sBACzHA,EAAM,0BAA4B,MAAQA,EAAM,0BAA4B,SAC9EC,EAAW,wBAA0BD,EAAM,yBAEzCA,EAAM,qBAAuB,MAAQA,EAAM,qBAAuB,SACpEC,EAAW,mBAAqBN,EAAsBK,EAAM,kBAAkB,GAE5EA,EAAM,gCAA+BC,EAAW,8BAAgCD,EAAM,+BACtFA,EAAM,mCAAkCC,EAAW,iCAAmCD,EAAM,kCAC5FA,EAAM,sBAAqBC,EAAW,oBAAsBD,EAAM,qBAClEA,EAAM,gBAAeC,EAAW,cAAgBD,EAAM,eACtDA,EAAM,uBAAsBC,EAAW,qBAAuBD,EAAM,sBACpEA,EAAM,qBAAuB,MAAQA,EAAM,qBAAuB,SACpEC,EAAW,mBAAqBD,EAAM,oBAEpCA,EAAM,oBAAmBC,EAAW,kBAAoBD,EAAM,mBAC9DA,EAAM,qBAAoBC,EAAW,mBAAqBD,EAAM,oBAChEA,EAAM,kBAAiBC,EAAW,gBAAkBD,EAAM,iBAC1DA,EAAM,qBAAoBC,EAAW,mBAAqBD,EAAM,oBAChEA,EAAM,oBAAsB,MAAQA,EAAM,oBAAsB,SAAWC,EAAW,kBAAoBD,EAAM,mBAChHA,EAAM,eAAcC,EAAW,aAAeD,EAAM,cACpDA,EAAM,oBAAmBC,EAAW,kBAAoBD,EAAM,mBAC9DA,EAAM,uBAAyB,MAAQA,EAAM,uBAAyB,SACxEC,EAAW,qBAAuBD,EAAM,sBAEtCA,EAAM,gBAAeC,EAAW,cAAgBD,EAAM,eACtDA,EAAM,eAAcC,EAAW,aAAeD,EAAM,cACpDA,EAAM,2BAA6B,MAAQA,EAAM,2BAA6B,SAChFC,EAAW,yBAA2BD,EAAM,0BAE1CA,EAAM,gBAAeC,EAAW,cAAgBD,EAAM,eACtDA,EAAM,YAAWC,EAAW,UAAYD,EAAM,WAC9CA,EAAM,mBAAqB,MAAQA,EAAM,mBAAqB,SAAWC,EAAW,iBAAmBD,EAAM,kBAC7GA,EAAM,oBAAsB,MAAQA,EAAM,oBAAsB,SAAWC,EAAW,kBAAoBD,EAAM,mBAChHA,EAAM,iBAAgBC,EAAW,eAAiBD,EAAM,gBACxDA,EAAM,aAAYC,EAAW,WAAaD,EAAM,YAChDA,EAAM,iBAAmB,MAAQA,EAAM,iBAAmB,SAAWC,EAAW,eAAiBD,EAAM,gBACvGA,EAAM,uBAAyB,MAAQA,EAAM,uBAAyB,SACxEC,EAAW,qBAAuBD,EAAM,sBAEtCA,EAAM,UAAY,MAAQA,EAAM,UAAY,SAAWC,EAAW,QAAUN,EAAsBK,EAAM,OAAO,GAC/GA,EAAM,iBAAgBC,EAAW,eAAiBD,EAAM,gBACxDA,EAAM,iBAAmB,MAAQA,EAAM,iBAAmB,SAAWC,EAAW,eAAiBD,EAAM,gBACvGA,EAAM,2BAA6B,MAAQA,EAAM,2BAA6B,SAChFC,EAAW,yBAA2BN,EAAsBK,EAAM,wBAAwB,GAExFA,EAAM,iBAAgBC,EAAW,eAAiBD,EAAM,gBAGxDA,EAAM,mBAAqB,MAAQA,EAAM,mBAAqB,SAChEC,EAAW,iBAAmBN,EAAsBK,EAAM,gBAAgB,GAExEA,EAAM,2BAA6B,MAAQA,EAAM,2BAA6B,SAChFC,EAAW,yBAA2BN,EAAsBK,EAAM,wBAAwB,GAExFA,EAAM,wBAA0B,MAAQA,EAAM,wBAA0B,SAC1EC,EAAW,sBAAwBN,EAAsBK,EAAM,qBAAqB,GAElFA,EAAM,sBAAwB,MAAQA,EAAM,sBAAwB,SACtEC,EAAW,oBAAsBN,EAAsBK,EAAM,mBAAmB,GAE9EA,EAAM,4BAA8B,MAAQA,EAAM,4BAA8B,SAClFC,EAAW,0BAA4BN,EAAsBK,EAAM,yBAAyB,GAI1FA,EAAM,wBAA0B,MAAQA,EAAM,wBAA0B,SAC1EC,EAAW,sBAAwBN,EAAsBK,EAAM,qBAAqB,GAElFA,EAAM,uBAAyB,MAAQA,EAAM,uBAAyB,SACxEC,EAAW,qBAAuBN,EAAsBK,EAAM,oBAAoB,GAEhFA,EAAM,4BAA2BC,EAAW,0BAA4BD,EAAM,2BAC9EA,EAAM,kBAAoB,MAAQA,EAAM,kBAAoB,SAC9DC,EAAW,gBAAkBN,EAAsBK,EAAM,eAAe,GAEtEA,EAAM,mBAAqB,MAAQA,EAAM,mBAAqB,SAChEC,EAAW,iBAAmBN,EAAsBK,EAAM,gBAAgB,GAExEA,EAAM,wBAAuBC,EAAW,sBAAwBD,EAAM,uBACtEA,EAAM,uBAAyB,MAAQA,EAAM,uBAAyB,SACxEC,EAAW,qBAAuBN,EAAsBK,EAAM,oBAAoB,GAEhFA,EAAM,iBAAmB,MAAQA,EAAM,iBAAmB,SAC5DC,EAAW,eAAiBN,EAAsBK,EAAM,cAAc,GAEpEA,EAAM,oBAAsB,MAAQA,EAAM,oBAAsB,SAClEC,EAAW,kBAAoBN,EAAsBK,EAAM,iBAAiB,GAI1EA,EAAM,0BAA4B,MAAQA,EAAM,0BAA4B,SAC9EC,EAAW,wBAA0BN,EAAsBK,EAAM,uBAAuB,GAEtFA,EAAM,qCAAuC,MAAQA,EAAM,qCAAuC,SACpGC,EAAW,mCAAqCN,EAAsBK,EAAM,kCAAkC,GAE5GA,EAAM,4CAA8C,MAAQA,EAAM,4CAA8C,SAClHC,EAAW,0CAA4CN,EAAsBK,EAAM,yCAAyC,GAE1HA,EAAM,0CAA4C,MAAQA,EAAM,0CAA4C,SAC9GC,EAAW,wCAA0CN,EAAsBK,EAAM,uCAAuC,GAItHA,EAAM,SAAWA,EAAM,QAAQ,OAAS,GAC1CC,EAAW,QAAU,MACrBA,EAAW,eAAiBD,EAAM,QAAQ,IAAKI,GAAW,CACxD,MAAMC,EAA2B,CAAA,EACjC,OAAID,EAAO,aAAYC,EAAa,WAAaD,EAAO,YACpDA,EAAO,YAAWC,EAAa,UAAYD,EAAO,WAClDA,EAAO,gBAAeC,EAAa,cAAgBT,EAAWQ,EAAO,aAAa,GAClFA,EAAO,SAAQC,EAAa,OAASD,EAAO,QAC5CA,EAAO,iBAAgBC,EAAa,eAAiBD,EAAO,gBAC5DA,EAAO,0BAAyBC,EAAa,wBAA0BD,EAAO,yBAC9EA,EAAO,gBAAeC,EAAa,cAAgBD,EAAO,eAC1DA,EAAO,iBAAgBC,EAAa,eAAiBD,EAAO,gBAC5DA,EAAO,iBAAgBC,EAAa,eAAiBD,EAAO,gBAC5DA,EAAO,sBAAqBC,EAAa,oBAAsBT,EAAWQ,EAAO,mBAAmB,GACpGA,EAAO,kBAAiBC,EAAa,gBAAkBD,EAAO,iBAC9DA,EAAO,aAAYC,EAAa,WAAaD,EAAO,YACpDA,EAAO,WAAUC,EAAa,SAAWD,EAAO,UAGhDA,EAAO,mBAAqBA,EAAO,kBAAkB,OAAS,IAChEC,EAAa,yBAA2BD,EAAO,kBAAkB,IAAKE,GAAc,CAClF,MAAMC,EAA8B,CAAA,EACpC,OAAID,EAAU,OAAMC,EAAgB,KAAOD,EAAU,MACjDA,EAAU,cAAaC,EAAgB,YAAcX,EAAWU,EAAU,WAAW,GAClFC,CACT,CAAC,GAICH,EAAO,kBAAoBA,EAAO,iBAAiB,OAAS,IAC9DC,EAAa,wBAA0BD,EAAO,iBAAiB,IAAKI,GAAa,CAC/E,MAAMC,EAA6B,CAAA,EACnC,OAAID,EAAS,cAAaC,EAAe,YAAcb,EAAWY,EAAS,WAAW,GAClFA,EAAS,cAAaC,EAAe,YAAcD,EAAS,aAC5DA,EAAS,mBAAkBC,EAAe,iBAAmBD,EAAS,kBACtEA,EAAS,oCAAsC,MAAQA,EAAS,oCAAsC,SACxGC,EAAe,kCAAoCD,EAAS,mCAE1DA,EAAS,oCAAsC,MAAQA,EAAS,oCAAsC,SACxGC,EAAe,kCAAoCD,EAAS,mCAEvDC,CACT,CAAC,GAICL,EAAO,QAAUA,EAAO,OAAO,OAAS,IAC1CC,EAAa,OAASD,EAAO,OAAO,IAAKM,GAAS,CAChD,MAAMC,EAAyB,CAAA,EAC/B,OAAID,EAAK,cAAaC,EAAW,YAAcD,EAAK,aAChDA,EAAK,mBAAkBC,EAAW,iBAAmBf,EAAWc,EAAK,gBAAgB,GACrFA,EAAK,oBAAsB,MAAQA,EAAK,oBAAsB,SAChEC,EAAW,kBAAoBD,EAAK,mBAElCA,EAAK,mBAAkBC,EAAW,iBAAmBD,EAAK,kBACvDC,CACT,CAAC,GAGIN,CACT,CAAC,GAGDJ,EAAW,QAAU,KAInBD,EAAM,UAAYA,EAAM,SAAS,OAAS,GAC5CC,EAAW,SAAW,MACtBA,EAAW,gBAAkBD,EAAM,SAAS,IAAKY,GAAY,CAC3D,MAAMC,EAA4B,CAAA,EAC9BD,EAAQ,MAAKC,EAAc,IAAMD,EAAQ,KACzCA,EAAQ,OAAS,MAAQA,EAAQ,OAAS,SAAWC,EAAc,KAAOD,EAAQ,MAClFA,EAAQ,OAAMC,EAAc,KAAOD,EAAQ,MAC3CA,EAAQ,QAAOC,EAAc,MAAQD,EAAQ,OAC7CA,EAAQ,iBAAgBC,EAAc,eAAiBD,EAAQ,gBAC/DA,EAAQ,QAAOC,EAAc,MAAQD,EAAQ,OAC7CA,EAAQ,iBAAmB,MAAQA,EAAQ,iBAAmB,SAChEC,EAAc,eAAiBD,EAAQ,gBAErCA,EAAQ,gBAAkB,MAAQA,EAAQ,gBAAkB,SAC9DC,EAAc,cAAgBD,EAAQ,eAEpCA,EAAQ,kBAAoB,MAAQA,EAAQ,kBAAoB,SAClEC,EAAc,gBAAkBD,EAAQ,iBAI1C,MAAME,EAAiC,CAAA,EACvC,OAAIF,EAAQ,yBAAyBE,EAAqB,KAAKF,EAAQ,uBAAuB,EAC1FA,EAAQ,yBAAyBE,EAAqB,KAAKF,EAAQ,uBAAuB,EAC1FA,EAAQ,uBAAuBE,EAAqB,KAAKF,EAAQ,qBAAqB,EACtFA,EAAQ,wBAAwBE,EAAqB,KAAKF,EAAQ,sBAAsB,EACxFA,EAAQ,8BAA8BE,EAAqB,KAAKF,EAAQ,4BAA4B,EACpGE,EAAqB,OAAS,IAChCD,EAAc,iBAAmBC,EAAqB,KAAK,IAAI,GAG7DF,EAAQ,kBAAiBC,EAAc,gBAAkBD,EAAQ,iBACjEA,EAAQ,yBAAwBC,EAAc,uBAAyBD,EAAQ,wBAG/EA,EAAQ,WAAaA,EAAQ,UAAU,OAAS,IAClDC,EAAc,iBAAmBD,EAAQ,UAAU,IAAKG,GAAa,CACnE,MAAMC,EAA6B,CAAA,EACnC,OAAID,EAAS,OAAMC,EAAe,KAAOD,EAAS,MAC9CA,EAAS,yBAA2B,MAAQA,EAAS,yBAA2B,SAClFC,EAAe,uBAAyBD,EAAS,wBAE/CA,EAAS,2BAA6B,MAAQA,EAAS,2BAA6B,SACtFC,EAAe,yBAA2BD,EAAS,0BAEjDA,EAAS,6BAA+B,MAAQA,EAAS,6BAA+B,SAC1FC,EAAe,2BAA6BD,EAAS,4BAEnDA,EAAS,sBAAwB,MAAQA,EAAS,sBAAwB,SAC5EC,EAAe,oBAAsBD,EAAS,qBAE5CA,EAAS,mBAAqB,MAAQA,EAAS,mBAAqB,SACtEC,EAAe,iBAAmBD,EAAS,kBAEzCA,EAAS,cAAgB,MAAQA,EAAS,cAAgB,SAC5DC,EAAe,YAAcrB,EAAsBoB,EAAS,WAAW,GAElEC,CACT,CAAC,GAICJ,EAAQ,qBAAuBA,EAAQ,oBAAoB,OAAS,IACtEC,EAAc,2BAA6BD,EAAQ,oBAAoB,IAAKK,GAAe,CACzF,MAAMC,EAA+B,CAAA,EACrC,OAAID,EAAW,OAAMC,EAAiB,KAAOD,EAAW,MACpDA,EAAW,OAAMC,EAAiB,KAAOD,EAAW,MACpDA,EAAW,SAAQC,EAAiB,OAASD,EAAW,QACxDA,EAAW,SAAQC,EAAiB,OAASD,EAAW,QACxDA,EAAW,OAAMC,EAAiB,KAAOD,EAAW,MACpDA,EAAW,QAAOC,EAAiB,MAAQD,EAAW,OACtDA,EAAW,cAAaC,EAAiB,YAAcD,EAAW,aAClEA,EAAW,QAAOC,EAAiB,MAAQD,EAAW,OACtDA,EAAW,MAAKC,EAAiB,IAAMD,EAAW,KAC/CC,CACT,CAAC,GAGIL,CACT,CAAC,GAGDZ,EAAW,SAAW,KAIpBD,EAAM,QAAUA,EAAM,OAAO,OAAS,IACxCC,EAAW,mBAAqBD,EAAM,OAAO,IAAKU,GAAS,CACzD,MAAMC,EAAyB,CAAA,EAC/B,OAAID,EAAK,cAAaC,EAAW,YAAcD,EAAK,aAChDA,EAAK,mBAAkBC,EAAW,iBAAmBf,EAAWc,EAAK,gBAAgB,GACrFA,EAAK,oBAAsB,MAAQA,EAAK,oBAAsB,SAChEC,EAAW,kBAAoBD,EAAK,mBAE/BC,CACT,CAAC,GAGIV,CACT,CCzVA,SAASkB,GAAoB/Q,EAAgC,CAC3D,MAAMgR,EAA0B,CAAA,EAG1BC,EAAyBhX,GAA4B,CACzD,GAAI,OAAOA,GAAU,SAAU,CAC7B,GAAIA,IAAU,MAAO,MAAO,GAC5B,GAAIA,IAAU,KAAM,MAAO,EAC7B,CACA,OAAOA,CACT,EAGMiX,EAAe,OAAO,KAAKlR,CAAM,EAAE,OAAQK,GAAQ,CAACA,EAAI,SAAS,SAAS,CAAC,EAG3E8Q,MAAqB,IAC3B,SAAW,CAAC9Q,EAAKpG,CAAK,IAAK,OAAO,QAAQ+F,CAAM,EAC1CK,EAAI,SAAS,SAAS,GAAK,MAAM,QAAQpG,CAAK,GAChDA,EAAM,QAASmP,GAAS,CAClB,OAAOA,GAAS,UAAYA,IAAS,MACvC,OAAO,KAAKA,CAAI,EAAE,QAASgI,GAAc,CACvCD,EAAe,IAAIC,CAAS,CAC9B,CAAC,CAEL,CAAC,EAIL,SAAW,CAAC/Q,EAAKpG,CAAK,IAAK,OAAO,QAAQ+F,CAAM,EAC9C,GAAIK,EAAI,SAAS,SAAS,EAAG,CAE3B,MAAM6C,EAAU7C,EAAI,QAAQ,UAAW,EAAE,EAMzC,GAFkC6Q,EAAa,SAAShO,CAAO,EAEhC,CAE7B,MAAMmO,EAAmB,MAAM,QAAQpX,CAAK,EAAIA,EAAM,IAAKmP,GAAS2H,GAAoB3H,CAAkB,CAAC,EAAInP,EAC/G+W,EAAY9N,CAAO,EAAImO,CACzB,CACF,MAAYhR,EAAI,SAAS,SAAS,GAG3B8Q,EAAe,IAAI9Q,CAAG,IACzB2Q,EAAY3Q,CAAG,EAAI4Q,EAAsBhX,CAAK,GAMpD,OAAO+W,CACT,CAEA,SAAwBM,GAAO,CAAE,OAAAC,EAAQ,QAAAC,GAAqD,CAC5F,KAAM,CAAC/H,EAAQgI,CAAS,EAAIhX,EAAAA,SAAsB,CAAA,CAAE,EAC9C,CAAC2R,EAASsF,CAAU,EAAIjX,EAAAA,SAAwB,IAAI,EACpD,CAACmU,EAAO+C,CAAQ,EAAIlX,EAAAA,SAAkC,IAAI,EAC1D,CAACmX,EAAiBC,CAAkB,EAAIpX,EAAAA,SAA4B,IAAI,EACxE,CAACqX,EAAoBC,CAAqB,EAAItX,EAAAA,SAA6B,MAAS,EACpF,CAACuX,EAAkBC,CAAmB,EAAIxX,EAAAA,SAAS,EAAK,EAE9D,SAASyX,EAAsBzI,EAA8B,CAE3D,MAAM0I,EAAwC,CAC5C,gBAAiB,SACjB,mBAAoB,sBACpB,mBAAoB,qBAAA,EAGtB,OAAO1I,EAAO,IAAKkB,IAAW,CAC5B,IAAKA,EACL,MAAOwH,EAAcxH,CAAK,GAAKA,EAC/B,cAAe,UACA,MAAM8C,GAAoB9C,CAAK,GAC5B,SAElB,EACA,CACJ,CAGA9P,EAAAA,UAAU,IAAM,CA2EV0W,IA1EsB,SAAY,CACpC,GAAI,CAEF,MAAMa,EAAgB/F,GAAA,EAGtB,GAFAW,GAAA,EAEIoF,EAAe,CACjBH,EAAoB,EAAI,EACxBP,EAAWU,CAAa,EAGxB,GAAI,CACF,MAAM5F,EAAQO,GAAA,EACRQ,EAAW,MAAMa,GAAS5B,EAAQ,OAAY4F,CAAa,EAEjE,GAAI,CAAC7E,GAAY,CAACA,EAAS,MACzB,MAAM,IAAI,MAAM,oDAAoD,EAGtE,KAAM,CAAE,MAAAqC,GAAUrC,EAIZ,CAAE,OAAQ8E,CAAA,EAAkB,MAAM3E,GAAA,EAClC4E,EAAaJ,EAAsBG,CAAa,EACtDZ,EAAUa,CAAU,EAGpB,GAAI,CACF,MAAMzC,EAAaF,GAAkBC,CAAK,EAC1CiC,EAAmBhC,CAAU,CAC/B,OAAS0C,EAAgB,CACvB,MAAM,IAAI,MAAM,mCAAmCA,aAA0B,MAAQA,EAAe,QAAU,eAAe,EAAE,CACjI,CAGA,GAAI3C,EAAM,cAAe,CACvB,MAAM4C,EAAaF,EAAW,UAAW5S,GAAMA,EAAE,MAAQkQ,EAAM,aAAa,EACxE4C,GAAc,EAChBT,EAAsBS,CAAU,EAGhCT,EAAsBO,EAAW,OAAS,CAAC,CAE/C,MAEEP,EAAsBO,EAAW,OAAS,CAAC,CAE/C,OAAShZ,EAAO,CAEGA,EACJ,aAAe,KAE1BgT,GAAA,EACAoF,EAAW,IAAI,GAGfhF,GAAA,CAGJ,QAAA,CACEuF,EAAoB,EAAK,CAC3B,CACF,KAAO,CAEL,KAAM,CAAE,OAAQQ,CAAA,EAAkB,MAAM/E,GAAA,EACxC+D,EAAUS,EAAsBO,CAAa,CAAC,CAChD,CACF,MAAQ,CAENR,EAAoB,EAAK,CAC3B,CACF,GAGE,CAEJ,EAAG,CAACV,CAAM,CAAC,EAGX1W,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC0W,EAAQ,OACb,KAAM,CAAE,SAAAmB,CAAA,EAAa,SAAS,KAAK,MACnC,gBAAS,KAAK,MAAM,SAAW,SACxB,IAAM,CACX,SAAS,KAAK,MAAM,SAAWA,CACjC,CACF,EAAG,CAACnB,CAAM,CAAC,EAGX,MAAMoB,EAAYC,EAAAA,YACf5X,GAAqB,CAChBA,EAAE,MAAQ,WACZqN,GAAA,EACAmJ,EAAA,EAEJ,EACA,CAACA,CAAO,CAAA,EA2BV,GAzBA3W,EAAAA,UAAU,IAAM,CACd,GAAK0W,EACL,cAAO,iBAAiB,UAAWoB,CAAS,EACrC,IAAM,OAAO,oBAAoB,UAAWA,CAAS,CAC9D,EAAG,CAACpB,EAAQoB,CAAS,CAAC,EAGtB9X,EAAAA,UAAU,IAAM,CACT0W,IACHM,EAAmB,IAAI,EACvBE,EAAsB,MAAS,EAC/BE,EAAoB,EAAK,EAE7B,EAAG,CAACV,CAAM,CAAC,EAGX1W,EAAAA,UAAU,IAAM,CACV0W,GAAQnJ,GAAA,CACd,EAAG,CAACmJ,CAAM,CAAC,EAGX1W,EAAAA,UAAU,IAAM,CACV+T,GAAS,MAAM,QAAQA,CAAK,MAAmB,CAAE,UAAWA,EAAM,OAAQ,CAChF,EAAG,CAACA,CAAK,CAAC,EAEN,CAAC2C,EAAQ,OAAO,KAEpB,MAAMsB,EAAc,IAAM,CACxBxK,GAAA,EACAmJ,EAAA,CACF,EAEA,OACE9X,OAAC,OAAI,UAAU,0DAA0D,KAAK,SAAS,aAAW,OAAO,kBAAgB,wBACvH,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,WAAW,cAAY,OAAO,EAE7CD,EAAAA,KAAC,MAAA,CAAI,UAAU,4FAA4F,KAAK,WAC9G,SAAA,CAAAC,EAAAA,IAAC,SAAA,CACC,QAASkZ,EACT,UAAU,qFACV,aAAW,QACX,KAAK,SACN,SAAA,GAAA,CAAA,EAIDnZ,EAAAA,KAAC,MAAA,CAAI,UAAU,mBACb,SAAA,CAAAC,MAAC,KAAA,CAAG,GAAG,wBAAwB,UAAU,WAAW,SAAA,0CAEpD,EACAA,EAAAA,IAAC,IAAA,CAAE,UAAU,aAAa,SAAA,sCAAA,CAAoC,CAAA,EAChE,EAGAD,EAAAA,KAAC,MAAA,CAAI,UAAU,4CACZ,SAAA,CAAA,CAACkV,GACAjV,EAAAA,IAAA6L,EAAAA,SAAA,CACG,SAAAwM,GAAoBvI,EAAO,SAAW,EACrC9P,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,eAAC,MAAA,CAAI,UAAU,iBAAiB,SAAA,aAAU,EAC5C,EAEAA,EAAAA,IAAC6P,GAAA,CACC,OAAAC,EACA,cAAemI,GAAmB,OAClC,cAAeE,EACf,gBAAiB,MAAOgB,EAAalI,IAAa,CAChD,GAAI,CACF,MAAMmI,EAAoBhC,GAAoB+B,CAAW,EAGnD,CAAE,OAAQE,CAAA,EAAc,MAAMtF,GAAA,EAC9B4E,EAAaJ,EAAsBc,CAAS,EAClDvB,EAAUa,CAAU,EAGpB,MAAMW,EAAoBX,EAAW,UAAW5S,GAAMA,EAAE,MAAQkL,CAAQ,EAClEsI,EAAcZ,EAAWW,CAAiB,EAC1CE,EAAiBF,EAAoB,EAErCG,GADYD,EAAiBb,EAAW,OAASA,EAAWa,CAAc,EAAI,OACpD,KAAOvI,EAEvC,GAAKwB,EAUL,GAAWxB,IAAa,kBAAmB,CACzC,KAAM,CAAE,WAAAyI,EAAY,MAAA7G,CAAA,EAAU,MAAMwB,GAAY5B,EAAS2G,EAAkB,QAAkB,EAC7F,GAAI,CAACM,EACH,MAAM,IAAI,MAAM,kBAAkB,EAEhC7G,GACFM,GAAaN,CAAK,EAGpB,MAAMsB,GAAY,CAAE,cAAesF,CAAA,EAAgB,EAAK,CAC1D,SAAWxI,IAAa,QAAS,CAC/B,KAAM,CAAE,YAAA0I,CAAA,EAAgB,MAAMpF,GAAiB6E,EAAkB,KAAe,EAChF,GAAI,CAACO,EACH,MAAM,IAAI,MAAM,wBAAwB,EAI1C,MAAM9G,EAAQO,GAAA,EACd,MAAMe,GAAY,CAAE,GAAGiF,EAAmB,cAAeK,GAAgB,GAAO5G,EAAQ,OAAYJ,CAAO,CAC7G,KAAO,CAGL,MAAMI,EAAQO,GAAA,EACd,MAAMe,GAAY,CAAE,GAAGiF,EAAmB,cAAeK,CAAA,EAAgB,GAAO5G,EAAQ,OAAYJ,GAAW,MAAS,CAC1H,KAlCc,CAEZ,MAAMmH,GADsB,MAAM5F,GAAYoF,EAAkB,KAAe,IACvC,QACxC,GAAI,CAACQ,GAAc,OAAOA,GAAe,UAAYA,EAAW,KAAA,IAAW,GACzE,MAAM,IAAI,MAAM,sDAAsDA,CAAU,EAAE,EAEpF7B,EAAW6B,CAAU,EACrBpH,GAAYoH,CAAU,EAEtB,MAAMzF,GAAY,CAAE,cAAesF,CAAA,EAAgB,GAAOG,CAAU,CACtE,CA0BA,OAAAhL,GAAmB,CACjB,SAAAqC,EACA,WAAYsI,GAAa,OAAStI,EAClC,UAAWqI,EAAoB,EAC/B,WAAYX,EAAW,MAAA,CACxB,EACM,CAAE,QAAS,EAAA,CACpB,OAAShZ,EAAO,CACd,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAiB,MAAQA,EAAM,QAAU,mBAAA,CAC3E,CACF,EACA,WAAY,MAAOyQ,GAAc,CAC/B,GAAI,CACF,MAAMgJ,EAAoBhC,GAAoBhH,CAAS,EAEvD,GAAI,CAACqC,EACH,MAAM,IAAI,MAAM,sBAAsB,EAExC,MAAM0B,GAAYiF,EAAmB,EAAI,EAGzClB,EAAmB9H,CAAS,EAE5B,KAAM,CAAE,MAAA6E,CAAAA,EAAU,MAAMb,GAAA,EACxB4D,EAAS/C,CAAK,EAEd,MAAM4E,EAAa/J,EAAO,OACpBgK,EAAYhK,EAAO+J,EAAa,CAAC,EACvC,OAAAjL,GAAmB,CACjB,SAAUkL,GAAW,KAAO,UAC5B,WAAYA,GAAW,OAAS,UAChC,UAAWD,EACX,WAAAA,CAAA,CACD,EACDhL,GAAA,EACO,CAAE,QAAS,EAAA,CACpB,OAASlP,EAAO,CACd,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAiB,MAAQA,EAAM,QAAU,mBAAA,CAC3E,CACF,CAAA,CAAA,EAGN,EACC,IACFsV,GAASxC,GAAWzS,EAAAA,IAACgV,GAAA,CAAM,MAAAC,EAAc,OAAQ,IAAM+C,EAAS,IAAI,CAAA,CAAG,CAAA,EAC1E,EAGAhY,EAAAA,IAAC,OAAI,UAAU,sCACb,eAAC,IAAA,CAAE,UAAU,qCAAqC,SAAA,sFAAA,CAAoF,CAAA,CACxI,CAAA,CAAA,CACF,CAAA,EACF,CAEJ,CC1XA,SAAwB+Z,GAAiB,CAAE,OAAAnC,GAA+B,CACxE,OACE5X,EAAAA,IAAC2X,GAAA,CACC,OAAAC,EACA,QAAS,IAAM,CACboC,GAAuB,MAAA,CACzB,CAAA,CAAA,CAGN,CCHA,IAAIC,EAAmC,KACnC9K,EAAoB,KACpByI,GAAS,GAEb,SAASsC,IAAa,CACfD,IACHA,EAAY,SAAS,cAAc,KAAK,EACxCA,EAAU,GAAK,wBAGf,SAAS,gBAAgB,YAAYA,CAAS,GAE5C,CAAC9K,GAAQ8K,IACX9K,EAAOgL,GAAAA,WAAWF,CAAS,EAE/B,CAEA,SAASG,IAAS,CAChBF,GAAA,EACI/K,GACFA,EAAK,OAAOkL,EAAAA,cAAcN,GAAkB,CAAE,OAAAnC,EAAA,CAAQ,CAAC,CAE3D,CAEA,SAAS0C,IAAU,CACbnL,GAAQ8K,IACV9K,EAAK,QAAA,EACL8K,EAAU,OAAA,GAEZ9K,EAAO,KACP8K,EAAY,IACd,CASO,MAAMD,GAAoD,CAC/D,KAAOnX,GAAY,CACjB+U,GAAS,CAAC,CAAC/U,GAAS,SACpBuX,GAAA,CACF,EACA,KAAM,IAAM,CACVxC,GAAS,GACTwC,GAAA,CACF,EACA,MAAO,IAAM,CACXxC,GAAS,GACTwC,GAAA,CACF,EACA,QAAAE,EACF,EAQI,OAAO,OAAW,MAAa,OAAO,uBAAyBN"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/components/Field.tsx","../src/components/TextInput.tsx","../src/components/NumericInput.tsx","../src/components/EmailInput.tsx","../src/components/TelInput.tsx","../src/components/UrlInput.tsx","../src/components/PasswordInput.tsx","../src/components/TextArea.tsx","../src/components/DateInput.tsx","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/SelectInput.tsx","../src/components/AddressAutocomplete.tsx","../src/utils/decorateKeys.ts","../node_modules/zod/v4/core/core.js","../node_modules/zod/v4/core/util.js","../node_modules/zod/v4/core/errors.js","../node_modules/zod/v4/core/parse.js","../node_modules/zod/v4/core/regexes.js","../node_modules/zod/v4/core/checks.js","../node_modules/zod/v4/core/doc.js","../node_modules/zod/v4/core/versions.js","../node_modules/zod/v4/core/schemas.js","../node_modules/zod/v4/core/registries.js","../node_modules/zod/v4/core/api.js","../node_modules/zod/v4/core/to-json-schema.js","../node_modules/zod/v4/core/json-schema-processors.js","../node_modules/zod/v4/classic/iso.js","../node_modules/zod/v4/classic/errors.js","../node_modules/zod/v4/classic/parse.js","../node_modules/zod/v4/classic/schemas.js","../node_modules/zod/v4/classic/compat.js","../node_modules/zod/v4/classic/coerce.js","../src/utils/validation.ts","../src/utils/form.ts","../src/utils/hiddenQuestions.ts","../src/config/bolt-policy-option-labels.ts","../src/config/bolt-industry-occupation-map.ts","../src/utils/industry-occupation-normalizers.ts","../src/utils/autoCoverageCondition.ts","../src/config/bolt-vehicle-option-chains.ts","../src/utils/storage.ts","../src/utils/api.ts","../src/utils/njPolicyFields.ts","../src/components/FormRenderer.tsx","../src/utils/gtm.ts","../src/components/FormWizard.tsx","../src/components/Rates.tsx","../src/utils/quoteToFormValues.ts","../src/components/Widget.tsx","../src/internal/WidgetController.tsx","../src/widget.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nexport type FieldProps = {\n id: string;\n label: string;\n hint?: string;\n error?: string;\n required?: boolean;\n className?: string;\n children: ReactNode;\n};\n\nexport function Field({ id, label, hint, error, required, className, children }: FieldProps) {\n return (\n <div className={className}>\n <label htmlFor={id} className=\"form-label\">\n {label} {required && <span className=\"text-red-600\">*</span>}\n </label>\n {children}\n {hint && !error && (\n <p id={`${id}-hint`} className=\"mt-1 text-sm text-slate-500\">\n {hint}\n </p>\n )}\n {error && (\n <p id={`${id}-error`} className=\"mt-1 text-sm text-red-600\">\n {error}\n </p>\n )}\n </div>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id'>;\n\nexport function TextInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n className={`form-input ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n required={required}\n {...rest}\n type=\"text\"\n />\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type'>;\n\nexport function NumericInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n type=\"number\"\n className={`form-input ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n required={required}\n {...rest}\n />\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type'>;\n\nexport function EmailInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n type=\"email\"\n className={`form-input ${error ? 'input-error' : ''}`}\n inputMode=\"email\"\n autoComplete=\"email\"\n required={required}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n {...rest}\n />\n </Field>\n );\n}\n","import { useState, useEffect, useRef } from 'react';\nimport type { InputHTMLAttributes, ChangeEvent } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> &\n Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type' | 'value' | 'onChange'> & {\n value?: string;\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n };\n\n/**\n * Formats a phone number string to (XXX) XXX - XXXX format\n * Only formats if there are 10 digits (US phone number)\n */\nfunction formatPhoneNumber(value: string): string {\n // Remove all non-digit characters\n const digits = value.replace(/\\D/g, '');\n\n // If we have 10 digits, format as (XXX) XXX - XXXX\n if (digits.length === 10) {\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)} - ${digits.slice(6)}`;\n }\n\n // If we have more than 10 digits, format the first 10\n if (digits.length > 10) {\n const tenDigits = digits.slice(0, 10);\n return `(${tenDigits.slice(0, 3)}) ${tenDigits.slice(3, 6)} - ${tenDigits.slice(6)}`;\n }\n\n // Partial formatting as user types\n if (digits.length >= 6) {\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)} - ${digits.slice(6)}`;\n }\n if (digits.length >= 3) {\n return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;\n }\n if (digits.length > 0) {\n return `(${digits}`;\n }\n\n return digits;\n}\n\n/**\n * Extracts only digits from a phone number string\n */\nfunction extractDigits(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\nexport function TelInput({ id, label, hint, error, required, className, value = '', onChange, ...rest }: Props) {\n const [displayValue, setDisplayValue] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n const cursorPositionRef = useRef<number>(0);\n\n // Update display value when prop value changes\n useEffect(() => {\n if (!value) {\n setDisplayValue('');\n return;\n }\n\n // Extract digits, handling cases where value might include +1 or just be digits\n let digits = extractDigits(value);\n\n // If value starts with +1 or 1, remove the leading 1 (country code)\n if (digits.length === 11 && digits.startsWith('1')) {\n digits = digits.slice(1);\n }\n\n // Limit to 10 digits for US phone numbers\n const limitedDigits = digits.slice(0, 10);\n setDisplayValue(formatPhoneNumber(limitedDigits));\n }, [value]);\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const inputValue = input.value;\n\n // Save cursor position before formatting\n cursorPositionRef.current = input.selectionStart || 0;\n\n // Extract digits from input\n const digits = extractDigits(inputValue);\n\n // Limit to 10 digits for US phone numbers\n const limitedDigits = digits.slice(0, 10);\n\n // Format the display value\n const formatted = formatPhoneNumber(limitedDigits);\n setDisplayValue(formatted);\n\n // Create a synthetic event with the unformatted digits (with +1 prefix)\n // The actual stored value will be +1 followed by the 10 digits\n const rawValue = limitedDigits.length === 10 ? `+1${limitedDigits}` : limitedDigits;\n\n // Create a new event with the raw value\n const syntheticEvent = {\n ...e,\n currentTarget: {\n ...e.currentTarget,\n value: rawValue\n },\n target: {\n ...e.target,\n value: rawValue\n }\n } as ChangeEvent<HTMLInputElement>;\n\n // Call the original onChange with the raw value\n onChange?.(syntheticEvent);\n\n // Restore cursor position after a short delay to allow React to update\n setTimeout(() => {\n if (inputRef.current) {\n // Calculate new cursor position based on formatting\n const beforeCursor = inputValue.slice(0, cursorPositionRef.current);\n const digitsBeforeCursor = extractDigits(beforeCursor);\n const formattedBeforeCursor = formatPhoneNumber(digitsBeforeCursor);\n // Position cursor at the end of the formatted text that corresponds to the digits before cursor\n const newPosition = Math.min(formattedBeforeCursor.length, formatted.length);\n inputRef.current.setSelectionRange(newPosition, newPosition);\n }\n }, 0);\n };\n\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <div\n className={`tel-input-wrapper flex items-center border rounded-lg transition-colors w-full relative ${\n error ? 'border-red-500 error' : 'border-[var(--accent-color)] focus-within:border-[var(--primary-color)]'\n }`}\n >\n <label\n htmlFor={id}\n className=\"px-3 py-3 text-slate-700 font-medium border-r border-[var(--accent-color)] bg-slate-50 flex-shrink-0 relative z-0 rounded-l-lg\"\n >\n +1\n </label>\n <input\n ref={inputRef}\n id={id}\n type=\"tel\"\n className={`flex-1 px-4 py-3 border-0 rounded-r-lg outline-none bg-transparent text-[var(--text-primary)] text-base ${\n error ? 'input-error' : ''\n }`}\n inputMode=\"tel\"\n autoComplete=\"tel\"\n required={required}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n value={displayValue}\n onChange={handleChange}\n {...rest}\n />\n </div>\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type'>;\n\nexport function UrlInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n type=\"url\"\n className={`form-input ${error ? 'input-error' : ''}`}\n inputMode=\"url\"\n autoComplete=\"url\"\n required={required}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n {...rest}\n />\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type'>;\n\nexport function PasswordInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n type=\"password\"\n className={`form-input ${error ? 'input-error' : ''}`}\n autoComplete=\"current-password\"\n required={required}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n {...rest}\n />\n </Field>\n );\n}\n","import type { TextareaHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'id'>;\n\nexport function TextArea({ id, label, hint, error, required, className, rows = 4, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <textarea\n id={id}\n rows={rows}\n className={`form-input ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n required={required}\n {...rest}\n />\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\ntype Props = Omit<FieldProps, 'children'> & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type'>;\n\nexport function DateInput({ id, label, hint, error, required, className, ...rest }: Props) {\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <input\n id={id}\n type=\"date\"\n className={`form-input ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n required={required}\n {...rest}\n />\n </Field>\n );\n}\n","import type { InputHTMLAttributes } from 'react';\n\ntype Props = {\n id: string;\n label: string;\n className?: string;\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'id'>;\n\nexport function Checkbox({ id, label, className, ...rest }: Props) {\n return (\n <label className={`checkbox-card ${className || ''}`} htmlFor={id}>\n <input id={id} type=\"checkbox\" className=\"checkbox-input\" {...rest} />\n <span className=\"checkbox-label\">{label}</span>\n </label>\n );\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react';\n\nexport function Radio({\n name,\n value,\n checked,\n onChange,\n children\n}: {\n name: string;\n value: string;\n checked?: boolean;\n onChange?: InputHTMLAttributes<HTMLInputElement>['onChange'];\n children: ReactNode;\n}) {\n return (\n <label className=\"radio-card\">\n <input className=\"radio-input\" type=\"radio\" name={name} value={value} checked={checked} onChange={onChange} />\n <span className=\"radio-label\">{children}</span>\n </label>\n );\n}\n\nexport function RadioGroup({\n legend,\n children,\n className,\n legendClassName\n}: {\n legend: string;\n className?: string;\n legendClassName?: string;\n children: ReactNode;\n}) {\n return (\n <fieldset className={className}>\n <legend className={`form-label mb-4 ${legendClassName || ''}`}>{legend}</legend>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">{children}</div>\n </fieldset>\n );\n}\n","import type { SelectHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\nexport type SelectOption = {\n value: string;\n label: string;\n disabled?: boolean;\n};\n\ntype Props = Omit<FieldProps, 'children'> &\n Omit<SelectHTMLAttributes<HTMLSelectElement>, 'id'> & {\n /** If provided, renders a disabled first option prompting selection */\n placeholder?: string;\n /** Provide options as data (or pass custom children instead) */\n options?: SelectOption[];\n };\n\nexport function SelectInput({ id, label, hint, error, required, className, placeholder, options, children, ...rest }: Props) {\n const describedBy = [hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined;\n\n const hasCustomChildren = !!children;\n\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <select\n id={id}\n className={`form-input select-caret ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={describedBy}\n required={required}\n {...rest}\n >\n {placeholder && (\n <option value=\"\" disabled selected={!('value' in rest)}>\n {placeholder}\n </option>\n )}\n\n {hasCustomChildren\n ? children\n : options?.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n </Field>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport { Field, type FieldProps } from './Field';\n\n// cspell:disable-next-line\nconst GOOGLE_MAPS_API_KEY = 'AIzaSyDjLdKLxoa-maLNGAyq_I_2r_Fe_TzFikw';\n\ntype AddressComponents = {\n streetNumber?: string;\n streetName?: string;\n city?: string;\n state?: string;\n zipCode?: string;\n country?: string;\n fullAddress?: string;\n};\n\ntype Props = Omit<FieldProps, 'children'> &\n Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'type' | 'onChange'> & {\n onChange?: (value: string, components?: AddressComponents) => void;\n onPlaceSelect?: (place: google.maps.places.PlaceResult) => void;\n };\n\n// Load Google Maps script dynamically\nfunction loadGoogleMapsScript(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if script is already loaded\n if (window.google?.maps?.places) {\n resolve();\n return;\n }\n\n // Check if script is already being loaded\n const existingScript = document.querySelector('script[src*=\"maps.googleapis.com\"]');\n if (existingScript) {\n existingScript.addEventListener('load', () => resolve());\n existingScript.addEventListener('error', () => reject(new Error('Failed to load Google Maps script')));\n return;\n }\n\n // Create and load the script\n const script = document.createElement('script');\n script.src = `https://maps.googleapis.com/maps/api/js?key=${GOOGLE_MAPS_API_KEY}&libraries=places`;\n script.async = true;\n script.defer = true;\n script.onload = () => resolve();\n script.onerror = () => reject(new Error('Failed to load Google Maps script'));\n document.head.appendChild(script);\n });\n}\n\n// Extract address components from Google Places result\nfunction extractAddressComponents(place: google.maps.places.PlaceResult): AddressComponents {\n const components: AddressComponents = {\n fullAddress: place.formatted_address\n };\n\n if (place.address_components) {\n place.address_components.forEach((component) => {\n const types = component.types;\n\n if (types.includes('street_number')) {\n components.streetNumber = component.long_name;\n }\n if (types.includes('route')) {\n components.streetName = component.long_name;\n }\n if (types.includes('locality')) {\n components.city = component.long_name;\n }\n if (types.includes('administrative_area_level_1')) {\n components.state = component.short_name;\n }\n if (types.includes('postal_code')) {\n components.zipCode = component.long_name;\n }\n if (types.includes('country')) {\n components.country = component.short_name;\n }\n });\n }\n\n return components;\n}\n\nexport function AddressAutocomplete({ id, label, hint, error, required, className, onChange, onPlaceSelect, value, ...rest }: Props) {\n const inputRef = useRef<HTMLInputElement>(null);\n const autocompleteServiceRef = useRef<google.maps.places.AutocompleteService | null>(null);\n const placesServiceRef = useRef<google.maps.places.PlacesService | null>(null);\n const suggestionsContainerRef = useRef<HTMLDivElement>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [inputValue, setInputValue] = useState((value as string) || '');\n const [suggestions, setSuggestions] = useState<google.maps.places.AutocompletePrediction[]>([]);\n const [showSuggestions, setShowSuggestions] = useState(false);\n const [selectedIndex, setSelectedIndex] = useState(-1);\n\n // Use refs for state values used in event handlers to avoid dependency issues\n const suggestionsRef = useRef<google.maps.places.AutocompletePrediction[]>([]);\n const showSuggestionsRef = useRef(false);\n const selectedIndexRef = useRef(-1);\n\n // Keep refs in sync with state\n useEffect(() => {\n suggestionsRef.current = suggestions;\n }, [suggestions]);\n\n useEffect(() => {\n showSuggestionsRef.current = showSuggestions;\n }, [showSuggestions]);\n\n useEffect(() => {\n selectedIndexRef.current = selectedIndex;\n }, [selectedIndex]);\n\n useEffect(() => {\n // Update input value when value prop changes\n if (value !== undefined) {\n setInputValue(String(value));\n }\n }, [value]);\n\n // Debounce timer ref\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n if (!inputRef.current) return;\n\n let isMounted = true;\n\n // Load Google Maps script and initialize services\n loadGoogleMapsScript()\n .then(() => {\n if (!isMounted || !inputRef.current) return;\n\n // Initialize services\n autocompleteServiceRef.current = new google.maps.places.AutocompleteService();\n placesServiceRef.current = new google.maps.places.PlacesService(document.createElement('div'));\n\n setIsLoading(false);\n })\n .catch((err) => {\n console.error('Error loading Google Maps:', err);\n setIsLoading(false);\n });\n\n return () => {\n isMounted = false;\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n // Handle input changes with debouncing\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setInputValue(query);\n onChange?.(query);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (query.length < 3) {\n setSuggestions([]);\n setShowSuggestions(false);\n return;\n }\n\n // Debounce API calls\n debounceTimerRef.current = setTimeout(() => {\n if (!autocompleteServiceRef.current) return;\n\n autocompleteServiceRef.current.getPlacePredictions(\n {\n input: query,\n types: ['address']\n },\n (predictions, status) => {\n if (status === google.maps.places.PlacesServiceStatus.OK && predictions) {\n setSuggestions(predictions);\n setShowSuggestions(true);\n setSelectedIndex(-1);\n } else {\n setSuggestions([]);\n setShowSuggestions(false);\n }\n }\n );\n }, 300);\n };\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!showSuggestionsRef.current || suggestionsRef.current.length === 0) {\n if (e.key === 'Escape') {\n setShowSuggestions(false);\n showSuggestionsRef.current = false;\n }\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedIndex((prev) => {\n const newIndex = prev < suggestionsRef.current.length - 1 ? prev + 1 : prev;\n selectedIndexRef.current = newIndex;\n return newIndex;\n });\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedIndex((prev) => {\n const newIndex = prev > 0 ? prev - 1 : -1;\n selectedIndexRef.current = newIndex;\n return newIndex;\n });\n break;\n case 'Enter':\n e.preventDefault();\n if (selectedIndexRef.current >= 0 && selectedIndexRef.current < suggestionsRef.current.length) {\n handleSuggestionClick(suggestionsRef.current[selectedIndexRef.current]);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setShowSuggestions(false);\n showSuggestionsRef.current = false;\n break;\n }\n };\n\n // Handle clicks outside to close suggestions\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n suggestionsContainerRef.current &&\n !suggestionsContainerRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setShowSuggestions(false);\n showSuggestionsRef.current = false;\n }\n };\n\n if (showSuggestions) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [showSuggestions]);\n\n const handleSuggestionClick = (prediction: google.maps.places.AutocompletePrediction) => {\n if (!placesServiceRef.current) return;\n\n placesServiceRef.current.getDetails(\n {\n placeId: prediction.place_id,\n fields: ['address_components', 'formatted_address', 'geometry']\n },\n (place, status) => {\n if (status === google.maps.places.PlacesServiceStatus.OK && place) {\n const formattedAddress = place.formatted_address || '';\n setInputValue(formattedAddress);\n setShowSuggestions(false);\n setSuggestions([]);\n showSuggestionsRef.current = false;\n\n const addressComponents = extractAddressComponents(place);\n\n onChange?.(formattedAddress, addressComponents);\n onPlaceSelect?.(place);\n }\n }\n );\n };\n\n return (\n <Field id={id} label={label} hint={hint} error={error} required={required} className={className}>\n <div className=\"relative\">\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n className={`form-input ${error ? 'input-error' : ''}`}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n aria-invalid={!!error}\n aria-describedby={[hint ? `${id}-hint` : null, error ? `${id}-error` : null].filter(Boolean).join(' ') || undefined}\n required={required}\n autoComplete=\"street-address\"\n placeholder={rest.placeholder || 'Enter an address'}\n disabled={isLoading || rest.disabled}\n {...rest}\n />\n {isLoading && <p className=\"mt-1 text-sm text-slate-500\">Loading address suggestions...</p>}\n\n {/* Suggestions dropdown */}\n {showSuggestions && suggestions.length > 0 && (\n <div\n ref={suggestionsContainerRef}\n className=\"absolute z-50 w-full mt-1 bg-white border border-slate-200 rounded-lg shadow-lg max-h-60 overflow-y-auto\"\n role=\"listbox\"\n >\n {suggestions.map((prediction, index) => (\n <div\n key={prediction.place_id}\n className={`px-4 py-3 cursor-pointer transition-colors ${\n index === selectedIndex ? 'bg-blue-50 text-slate-900' : 'bg-white text-slate-900 hover:bg-slate-50'\n } ${index < suggestions.length - 1 ? 'border-b border-slate-100' : ''}`}\n role=\"option\"\n aria-selected={index === selectedIndex}\n onClick={() => handleSuggestionClick(prediction)}\n onMouseEnter={() => setSelectedIndex(index)}\n >\n <div className=\"font-medium text-slate-900\">{prediction.structured_formatting.main_text}</div>\n {prediction.structured_formatting.secondary_text && (\n <div className=\"text-sm text-slate-500 mt-0.5\">{prediction.structured_formatting.secondary_text}</div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n </Field>\n );\n}\n","import type { Question } from '@getcredify/credify-insurance-types';\n\ntype ConditionalNode = NonNullable<Question['conditionals']>[number];\n\nexport function decorateKeys(questions: Question[]): Question[] {\n const walk = (list: Question[], pathParts: string[]): Question[] =>\n list.map((q, qi) => {\n const parentPart = pathParts.length ? pathParts.join('__') : 'root';\n const baseKey = (q.key as string) ?? `${parentPart}__q${qi}_${String(q.question).slice(0, 24).replace(/\\W+/g, '-') || 'field'}`;\n\n const conds: readonly ConditionalNode[] = q.conditionals ?? [];\n const nextConds = conds.map((c, ci) => {\n const nested = c.conditionalQuestions\n ? walk(c.conditionalQuestions as unknown as Question[], [...pathParts, `${baseKey}__c${ci}`])\n : undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { ...c, conditionalQuestions: nested as any };\n });\n\n return { ...q, key: baseKey, conditionals: nextConds };\n });\n\n return walk(questions, []);\n}\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[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/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[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// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n","export const version = {\n major: 4,\n minor: 3,\n patch: 6,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n if (result.issues.length) {\n // For optional-out schemas, ignore errors on absent keys\n if (isOptionalOut && !(key in input)) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalOut) {\n // For optional-out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n ...(tooBig\n ? { code: \"too_big\", maximum: items.length, inclusive: true }\n : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && result.schema._prefault)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n if (typeof exclusiveMinimum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n if (typeof minimum === \"number\") {\n json.minimum = minimum;\n if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMinimum >= minimum)\n delete json.minimum;\n else\n delete json.exclusiveMinimum;\n }\n }\n if (typeof exclusiveMaximum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n if (typeof maximum === \"number\") {\n json.maximum = maximum;\n if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMaximum <= maximum)\n delete json.maximum;\n else\n delete json.exclusiveMaximum;\n }\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), {\n parent: true,\n });\n };\n inst.with = inst.check;\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // encoding/decoding\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.exactOptional = () => exactOptional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n inst.apply = (fn) => fn(inst);\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.safeExtend = (incoming) => {\n return util.safeExtend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\n","// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n invalid_type: \"invalid_type\",\n too_big: \"too_big\",\n too_small: \"too_small\",\n invalid_format: \"invalid_format\",\n not_multiple_of: \"not_multiple_of\",\n unrecognized_keys: \"unrecognized_keys\",\n invalid_union: \"invalid_union\",\n invalid_key: \"invalid_key\",\n invalid_element: \"invalid_element\",\n invalid_value: \"invalid_value\",\n custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n core.config({\n customError: map,\n });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n return core._coercedDate(schemas.ZodDate, params);\n}\n","import { z, type ZodType } from 'zod';\n\n/* ------------------------------------------------------------------ */\n/* Shared schema building blocks */\n/* ------------------------------------------------------------------ */\n\nconst CURRENT_YEAR = new Date().getUTCFullYear();\n\nconst alphabeticName = z\n .string()\n .trim()\n .min(1, 'Required')\n .regex(/^[A-Za-z\\s]+$/, 'Only alphabetic characters are allowed.');\n\nconst optionalAlphabeticName = z\n .union([\n z.literal(''),\n z\n .string()\n .trim()\n .regex(/^[A-Za-z\\s]*$/, 'Only alphabetic characters are allowed.')\n ])\n .optional();\n\nconst positiveInt = (label: string, min: number, max: number) =>\n z.coerce\n .number({ error: `${label} must be a number.` })\n .min(min, `${label} must be between ${min.toLocaleString()} and ${max.toLocaleString()}.`)\n .max(max, `${label} must be between ${min.toLocaleString()} and ${max.toLocaleString()}.`)\n .int(`${label} must be a whole number.`);\n\nconst nonNegativeInt = (label: string, max: number) =>\n z.coerce\n .number({ error: `${label} must be a number.` })\n .min(0, `${label} must be between 0 and ${max.toLocaleString()}.`)\n .max(max, `${label} must be between 0 and ${max.toLocaleString()}.`)\n .int(`${label} must be a whole number.`);\n\nconst pastOrCurrentYear = (label: string, minYear = 1600) =>\n z.coerce\n .number({ error: `${label} must be a valid 4-digit year.` })\n .int(`${label} must be a whole number.`)\n .min(minYear, `${label} should be between ${minYear} and the current year.`)\n .max(CURRENT_YEAR, `${label} cannot be in the future.`);\n\nconst zeroToNinetyNine = (label: string) =>\n z.coerce\n .number({ error: `${label} must be a number.` })\n .int(`${label} must be a whole number.`)\n .min(0, `${label} must be between 0 and 99.`)\n .max(99, `${label} must be between 0 and 99.`);\n\nconst maxDigits = (label: string, digits: number, min = 0) => {\n const max = Math.pow(10, digits) - 1;\n const maxFormatted = max.toLocaleString('en-US');\n const minFormatted = min.toLocaleString('en-US');\n return z.coerce\n .number({ error: `${label} must be a number.` })\n .min(min, `${label}: Value must be between ${minFormatted} and ${maxFormatted}.`)\n .max(max, `${label}: Value must be between ${minFormatted} and ${maxFormatted}.`)\n .int(`${label} must be a whole number.`);\n};\n\n/* ------------------------------------------------------------------ */\n/* Per-field schema registry */\n/* Only fields that need rules beyond \"required\" need an entry. */\n/* ------------------------------------------------------------------ */\n\nexport const FIELD_SCHEMAS: Readonly<Record<string, ZodType>> = {\n // ── Contact / identity fields ──\n email: z.string().trim().min(1, 'Required').email('Please enter a valid email address.'),\n\n phone: z\n .string()\n .trim()\n .min(1, 'Required')\n .refine((v) => {\n // Strip all non-digit characters, then remove a leading country code of 1\n let digits = v.replace(/\\D/g, '');\n if (digits.length === 11 && digits.startsWith('1')) digits = digits.slice(1);\n return digits.length === 10;\n }, 'Please enter a valid 10-digit US phone number.'),\n\n social_security_number: z\n .string()\n .trim()\n .refine((v) => v === '' || /^\\d{3}-\\d{2}-\\d{4}$/.test(v), 'Social Security Number must be in the format XXX-XX-XXXX.')\n .optional(),\n\n sms_code: z\n .string()\n .trim()\n .min(1, 'Required')\n .regex(/^\\d{6}$/, 'Please enter the 6-digit code.'),\n\n // ── Name fields ──\n first_name: alphabeticName,\n last_name: alphabeticName,\n middle_name: optionalAlphabeticName,\n co_applicant_first_name: alphabeticName,\n co_applicant_last_name: alphabeticName,\n co_applicant_middle_name: optionalAlphabeticName,\n\n // ── Home property fields ──\n year_built: pastOrCurrentYear('Year built', 1800),\n // Range is enforced by the cross-field rule (must be between year_built and current year).\n year_roof_updated: z.coerce\n .number({ error: 'Please enter a valid 4-digit year.' })\n .int('Year must be a whole number.')\n .min(1000, 'Please enter a valid 4-digit year.')\n .max(9999, 'Please enter a valid 4-digit year.'),\n heating_update_year: pastOrCurrentYear('Heating update year'),\n plumbing_update_year: pastOrCurrentYear('Plumbing update year'),\n electrical_update_year: pastOrCurrentYear('Electrical update year'),\n\n total_area_sq_ft: positiveInt('Square footage', 1, 999_999),\n\n // Whole dollars in the UI; persisted as `sale_price_cents` (cents) on the quote. Max dollars keeps cents in signed 32-bit range.\n sale_price_cents: z.coerce\n .number({ error: 'Purchase Price must be a number.' })\n .min(1, 'Purchase Price must be between 1 and 21,474,836.')\n .max(21_474_836, 'Purchase Price must be between 1 and 21,474,836.')\n .int('Purchase Price must be a whole number.'),\n\n home_prior_years: zeroToNinetyNine('Number of years with your prior carrier'),\n home_continuous_coverage_years: zeroToNinetyNine('How long you have had continuous home coverage'),\n\n household_size: z.coerce\n .number({ error: 'Household size must be a number.' })\n .min(1, 'Occupants must be between 1 and 8.')\n .max(8, 'Occupants must be between 1 and 8.')\n .int('Occupants must be between 1 and 8.'),\n\n number_of_mortgagees: z.coerce\n .number({ error: 'Number of mortgagees must be a number.' })\n .int()\n .min(0, 'Number of mortgagees cannot be negative.')\n .max(3, 'Number of mortgagees must be between 0 and 3.'),\n\n dwelling_replacement_cost: maxDigits('Replacement cost', 9, 1),\n\n other_structures_coverage: maxDigits('Other structures', 9),\n\n personal_property_coverage: maxDigits('Personal property', 7),\n\n loss_of_use_coverage: maxDigits('Loss of use coverage', 8),\n\n years_at_address: z.coerce\n .number({ error: 'Years at address must be a number.' })\n .int()\n .min(0, 'Years at address cannot be negative.')\n .max(100, 'Years at address must be 100 or less.'),\n\n months_at_address: z.coerce\n .number({ error: 'Months at address must be a number.' })\n .int()\n .min(0, 'Months at address cannot be negative.')\n .max(11, 'Months at address must be between 0 and 11.'),\n\n years_at_prior_address: z.coerce\n .number({ error: 'Years at prior address must be a number.' })\n .int()\n .min(0, 'Years at prior address cannot be negative.')\n .max(100, 'Years at prior address must be 100 or less.'),\n\n number_of_units: z.coerce\n .number({ error: 'Number of units must be a number.' })\n .int()\n .min(1, 'Number of units/apartments should be greater than 0.')\n .max(99, 'Number of units/apartments must be between 1 and 99.'),\n\n number_of_families: z.coerce\n .number({ error: 'Number of families must be a number.' })\n .int('Number of families must be a whole number.')\n .refine((val) => val >= 1 && val <= 5, {\n message: 'Number of families must be between 1 and 5.'\n }),\n\n number_of_dogs: z.coerce\n .number({ error: 'Number of dogs must be a number.' })\n .int()\n .min(0, 'Number of dogs must be between 0 and 99.')\n .max(99, 'Number of dogs must be between 0 and 99.'),\n\n distance_to_coast_miles: z.coerce\n .number({ error: 'Distance to coast must be a number.' })\n .int()\n .min(0, 'Distance to coast cannot be negative.')\n .max(9999, 'Distance to coast must be at most 4 digits.'),\n\n amount_paid_cents: maxDigits('Amount paid', 7),\n\n // distance_from_fire_hydrant_ft and distance_from_fire_station_miles are select\n // fields whose values are opaque string enums (e.g. '_0_500ft', 'Lessthan5miles').\n // A number schema would coerce them to NaN and silently block the Next button,\n // so they are intentionally omitted from FIELD_SCHEMAS.\n\n // ── Auto vehicle fields ──\n /** VIN is optional in the API, but when present must be a standard 17-character VIN (no I/O/Q, no spaces). */\n vin: z.string().superRefine((val, ctx) => {\n if (typeof val !== 'string') return;\n if (val.trim() === '') return;\n if (/\\s/.test(val)) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'VIN cannot contain spaces.' });\n return;\n }\n const t = val.trim();\n if (!/^[A-HJ-NPR-Z0-9]{17}$/i.test(t)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'VIN must be exactly 17 letters and numbers (excluding I, O, and Q).'\n });\n }\n }),\n\n annual_mileage: z.coerce\n .number({ error: 'Annual mileage must be a number.' })\n .int('Annual mileage must be a whole number.')\n .min(1_000, 'Vehicle annual use should be between 1,000 & 100,000 miles.')\n .max(100_000, 'Vehicle annual use should be between 1,000 & 100,000 miles.'),\n miles_to_work: z.coerce\n .number({ error: 'Miles driven to work/school must be a number.' })\n .int('Miles driven to work/school must be a whole number.')\n .min(1, 'Please enter a value greater than 0.')\n .max(9_999, 'Miles driven to work/school must be between 1 and 9,999.'),\n custom_equipment_value_cents: nonNegativeInt('Modifications value', 9_999_999),\n cost_new_value_cents: nonNegativeInt('Cost new value', 9_999_999),\n stated_value_amount_cents: nonNegativeInt('Stated Value Amount', 9_999_999),\n\n // ── Auto driver fields ──\n property_damage_amount_paid_cents: nonNegativeInt('Property damage amount paid', 9_999_999),\n personal_injury_amount_paid_cents: nonNegativeInt('Personal injury amount paid', 9_999_999),\n\n // ── Auto policy fields ──\n auto_current_annual_premium_cents: nonNegativeInt('Current annual premium', 9_999_999),\n auto_prior_years: zeroToNinetyNine('Years with prior auto carrier'),\n auto_prior_months: z.coerce\n .number({ error: 'Months with prior carrier must be a number.' })\n .int()\n .min(0, 'Months with prior carrier must be between 0 and 11.')\n .max(11, 'Months with prior carrier must be between 0 and 11.'),\n auto_continuous_coverage_years: zeroToNinetyNine('Years with continuous auto coverage')\n};\n\n/* ------------------------------------------------------------------ */\n/* Cross-field validation rules */\n/* ------------------------------------------------------------------ */\n\n/**\n * Parse a YYYY-MM-DD string as UTC midnight.\n * `new Date('YYYY-MM-DD')` already parses to UTC, but this wrapper\n * makes the intent explicit and keeps a single parse strategy.\n */\nfunction parseUTCDate(val: string): Date {\n return new Date(`${val}T00:00:00Z`);\n}\n\nfunction utcToday(): Date {\n const now = new Date();\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));\n}\n\nfunction yearsDiff(from: Date, to: Date): number {\n let years = to.getUTCFullYear() - from.getUTCFullYear();\n const m = to.getUTCMonth() - from.getUTCMonth();\n if (m < 0 || (m === 0 && to.getUTCDate() < from.getUTCDate())) years--;\n return years;\n}\n\nexport type CrossFieldRule = {\n targetKey: string;\n dependsOn: readonly string[];\n validate: (values: Readonly<Record<string, unknown>>) => string | undefined;\n};\n\nexport const CROSS_FIELD_RULES: readonly CrossFieldRule[] = [\n {\n targetKey: 'date_of_birth',\n dependsOn: ['date_of_birth'],\n validate: (values) => {\n const dob = values.date_of_birth;\n if (!dob || typeof dob !== 'string') return undefined;\n const dobDate = parseUTCDate(dob);\n if (isNaN(dobDate.getTime())) return 'Invalid date.';\n if (dobDate.getUTCFullYear() < 1900) return \"Date of birth year can't be earlier than 1900.\";\n return yearsDiff(dobDate, utcToday()) < 18 ? \"Applicant can't be under the age of 18.\" : undefined;\n }\n },\n {\n targetKey: 'co_applicant_date_of_birth',\n dependsOn: ['co_applicant_date_of_birth'],\n validate: (values) => {\n const dob = values.co_applicant_date_of_birth;\n if (!dob || typeof dob !== 'string') return undefined;\n const dobDate = parseUTCDate(dob);\n if (isNaN(dobDate.getTime())) return 'Invalid date.';\n if (dobDate.getUTCFullYear() < 1900) return \"Date of birth year can't be earlier than 1900.\";\n return yearsDiff(dobDate, utcToday()) < 16 ? \"Co-applicant can't be under the age of 16.\" : undefined;\n }\n },\n {\n targetKey: 'year_roof_updated',\n dependsOn: ['year_roof_updated', 'year_built'],\n validate: (values) => {\n const roofYear = Number(values.year_roof_updated);\n const builtYear = Number(values.year_built);\n if (isNaN(roofYear)) return undefined;\n const lowerBound = !isNaN(builtYear) ? builtYear : 1000;\n if (roofYear < lowerBound || roofYear > CURRENT_YEAR) {\n return \"Roof renovation/replacement year must be between the home's build year and the current year.\";\n }\n return undefined;\n }\n },\n {\n targetKey: 'move_in_date',\n dependsOn: ['move_in_date', 'year_built'],\n validate: (values) => {\n const moveIn = values.move_in_date;\n const yearBuilt = values.year_built;\n if (!moveIn || yearBuilt == null) return undefined;\n const moveInDate = parseUTCDate(String(moveIn));\n if (isNaN(moveInDate.getTime())) return undefined;\n const builtYear = Number(yearBuilt);\n if (isNaN(builtYear)) return undefined;\n return moveInDate.getUTCFullYear() < builtYear\n ? 'Purchase date cannot be prior to the year the building was originally constructed.'\n : undefined;\n }\n },\n {\n targetKey: 'date_first_licensed',\n dependsOn: ['date_first_licensed'],\n validate: (values) => {\n const val = values.date_first_licensed;\n if (!val || typeof val !== 'string') return undefined;\n const date = parseUTCDate(val);\n if (isNaN(date.getTime())) return 'Invalid date.';\n return date > utcToday() ? 'Date first licensed cannot be in the future.' : undefined;\n }\n },\n {\n targetKey: 'date_first_licensed',\n dependsOn: ['date_first_licensed', 'date_of_birth'],\n validate: (values) => {\n const licensed = values.date_first_licensed;\n const dob = values.date_of_birth;\n if (!licensed || typeof licensed !== 'string' || !dob || typeof dob !== 'string') return undefined;\n const dobDate = parseUTCDate(dob);\n const licDate = parseUTCDate(licensed);\n if (isNaN(dobDate.getTime()) || isNaN(licDate.getTime())) return undefined;\n if (licDate < dobDate) return 'Date licensed cannot be before driver date of birth.';\n const min18 = new Date(Date.UTC(dobDate.getUTCFullYear() + 18, dobDate.getUTCMonth(), dobDate.getUTCDate()));\n return licDate < min18 ? \"Driver can't be licensed to drive before the age of 18.\" : undefined;\n }\n },\n {\n targetKey: 'occurred_at',\n dependsOn: ['occurred_at'],\n validate: (values) => {\n const val = values.occurred_at;\n if (!val || typeof val !== 'string') return undefined;\n const date = parseUTCDate(val);\n if (isNaN(date.getTime())) return 'Invalid date.';\n return date > utcToday() ? 'Incident date cannot be in the future.' : undefined;\n }\n },\n {\n targetKey: 'accident_prevention_course_date',\n dependsOn: ['accident_prevention_course_date'],\n validate: (values) => {\n const val = values.accident_prevention_course_date;\n if (!val || typeof val !== 'string') return undefined;\n const date = parseUTCDate(val);\n if (isNaN(date.getTime())) return 'Invalid date.';\n return date > utcToday() ? 'Course date cannot be in the future.' : undefined;\n }\n },\n {\n targetKey: 'effective_date',\n dependsOn: ['effective_date'],\n validate: (values) => {\n const val = values.effective_date;\n if (!val || typeof val !== 'string') return undefined;\n const date = parseUTCDate(val);\n if (isNaN(date.getTime())) return 'Invalid date.';\n const today = utcToday();\n const maxDate = new Date(Date.UTC(today.getUTCFullYear(), today.getUTCMonth() + 3, today.getUTCDate()));\n if (date < today) return 'Insurance start date cannot be in the past.';\n if (date > maxDate) return 'Insurance must begin within 3 months from today.';\n return undefined;\n }\n },\n {\n targetKey: 'years_at_address',\n dependsOn: ['years_at_address', 'date_of_birth'],\n validate: (values) => {\n const years = values.years_at_address;\n const dob = values.date_of_birth;\n if (years == null || dob == null || typeof dob !== 'string') return undefined;\n const numYears = Number(years);\n if (isNaN(numYears)) return undefined;\n const dobDate = parseUTCDate(dob);\n if (isNaN(dobDate.getTime())) return undefined;\n const age = yearsDiff(dobDate, utcToday());\n return numYears > age ? 'Time at address cannot be greater than the applicant age.' : undefined;\n }\n },\n {\n targetKey: 'years_at_prior_address',\n dependsOn: ['years_at_prior_address', 'date_of_birth'],\n validate: (values) => {\n const years = values.years_at_prior_address;\n const dob = values.date_of_birth;\n if (years == null || dob == null || typeof dob !== 'string') return undefined;\n const numYears = Number(years);\n if (isNaN(numYears)) return undefined;\n const dobDate = parseUTCDate(dob);\n if (isNaN(dobDate.getTime())) return undefined;\n const age = yearsDiff(dobDate, utcToday());\n return numYears > age ? 'Years at prior address cannot be greater than the applicant age.' : undefined;\n }\n },\n {\n targetKey: 'home_prior_years',\n dependsOn: ['home_prior_years', 'home_continuous_coverage_years'],\n validate: (values) => {\n const priorYears = values.home_prior_years;\n const continuousYears = values.home_continuous_coverage_years;\n if (priorYears == null || continuousYears == null) return undefined;\n const prior = Number(priorYears);\n const continuous = Number(continuousYears);\n if (isNaN(prior) || isNaN(continuous)) return undefined;\n return prior > continuous ? 'Years with prior carrier cannot be higher than years with continuous coverage.' : undefined;\n }\n },\n {\n targetKey: 'home_prior_years',\n dependsOn: ['home_prior_years', 'date_of_birth'],\n validate: (values) => {\n const years = values.home_prior_years;\n const dob = values.date_of_birth;\n if (years == null || dob == null || typeof dob !== 'string') return undefined;\n const numYears = Number(years);\n if (isNaN(numYears)) return undefined;\n const dobDate = parseUTCDate(dob);\n if (isNaN(dobDate.getTime())) return undefined;\n const age = yearsDiff(dobDate, utcToday());\n return numYears > age ? \"Years with prior carrier cannot be greater than the Applicant's age.\" : undefined;\n }\n },\n {\n targetKey: 'home_continuous_coverage_years',\n dependsOn: ['home_continuous_coverage_years', 'date_of_birth'],\n validate: (values) => {\n const years = values.home_continuous_coverage_years;\n const dob = values.date_of_birth;\n if (years == null || dob == null || typeof dob !== 'string') return undefined;\n const numYears = Number(years);\n if (isNaN(numYears)) return undefined;\n const dobDate = parseUTCDate(dob);\n if (isNaN(dobDate.getTime())) return undefined;\n const age = yearsDiff(dobDate, utcToday());\n return numYears > age ? \"Years with continuous home coverage cannot be greater than the Applicant's age.\" : undefined;\n }\n },\n {\n targetKey: 'move_in_date',\n dependsOn: ['move_in_date'],\n validate: (values) => {\n const val = values.move_in_date;\n if (!val || typeof val !== 'string') return undefined;\n const date = parseUTCDate(val);\n if (isNaN(date.getTime())) return 'Invalid date.';\n return date > utcToday() ? 'Purchase date cannot be in the future.' : undefined;\n }\n },\n {\n targetKey: 'date_of_incident',\n dependsOn: ['date_of_incident'],\n validate: (values) => {\n const val = values.date_of_incident;\n if (!val || typeof val !== 'string') return undefined;\n const date = parseUTCDate(val);\n if (isNaN(date.getTime())) return 'Invalid date.';\n const today = utcToday();\n return date > today ? 'Loss date cannot be in the future.' : undefined;\n }\n },\n {\n targetKey: 'home_prior_expiration_date',\n dependsOn: ['home_prior_expiration_date'],\n validate: (values) => {\n const val = values.home_prior_expiration_date;\n if (!val || typeof val !== 'string') return undefined;\n const date = parseUTCDate(val);\n if (isNaN(date.getTime())) return 'Invalid date.';\n const today = utcToday();\n const oneYearAgo = new Date(Date.UTC(today.getUTCFullYear() - 1, today.getUTCMonth(), today.getUTCDate()));\n const oneYearLater = new Date(Date.UTC(today.getUTCFullYear() + 1, today.getUTCMonth(), today.getUTCDate()));\n if (date < oneYearAgo || date > oneYearLater) {\n return 'Policy expiration date must be between 1 year ago and 1 year from now.';\n }\n return undefined;\n }\n },\n\n // ── Auto flow cross-field rules ──\n\n {\n targetKey: 'purchase_date',\n dependsOn: ['purchase_date'],\n validate: (values) => {\n const val = values.purchase_date;\n if (!val || typeof val !== 'string') return undefined;\n const date = parseUTCDate(val);\n if (isNaN(date.getTime())) return 'Invalid date.';\n return date > utcToday() ? 'Vehicle purchase date cannot be in the future.' : undefined;\n }\n },\n {\n targetKey: 'purchase_date',\n dependsOn: ['purchase_date', 'year'],\n validate: (values) => {\n const val = values.purchase_date;\n const modelYear = values.year;\n if (!val || typeof val !== 'string' || modelYear == null) return undefined;\n const date = parseUTCDate(val);\n if (isNaN(date.getTime())) return undefined;\n const yearNum = Number(modelYear);\n if (isNaN(yearNum)) return undefined;\n return date.getUTCFullYear() < yearNum ? 'The year the vehicle was purchased is not valid with the model year.' : undefined;\n }\n },\n {\n targetKey: 'auto_prior_expiration_date',\n dependsOn: ['auto_prior_expiration_date'],\n validate: (values) => {\n const val = values.auto_prior_expiration_date;\n if (!val || typeof val !== 'string') return undefined;\n const date = parseUTCDate(val);\n if (isNaN(date.getTime())) return 'Invalid date.';\n const today = utcToday();\n const oneYearAgo = new Date(Date.UTC(today.getUTCFullYear() - 1, today.getUTCMonth(), today.getUTCDate()));\n const oneYearLater = new Date(Date.UTC(today.getUTCFullYear() + 1, today.getUTCMonth(), today.getUTCDate()));\n if (date < oneYearAgo || date > oneYearLater) {\n return 'Auto policy expiration date must be between 1 year ago and 1 year from now.';\n }\n return undefined;\n }\n },\n {\n targetKey: 'auto_prior_years',\n dependsOn: ['auto_prior_years', 'auto_continuous_coverage_years'],\n validate: (values) => {\n const priorYears = values.auto_prior_years;\n const continuousYears = values.auto_continuous_coverage_years;\n if (priorYears == null || continuousYears == null) return undefined;\n const prior = Number(priorYears);\n const continuous = Number(continuousYears);\n if (isNaN(prior) || isNaN(continuous)) return undefined;\n return prior > continuous ? 'Years with prior auto carrier cannot be higher than years with continuous coverage.' : undefined;\n }\n },\n {\n targetKey: 'auto_prior_years',\n dependsOn: ['auto_prior_years', 'date_of_birth'],\n validate: (values) => {\n const years = values.auto_prior_years;\n const dob = values.date_of_birth;\n if (years == null || dob == null || typeof dob !== 'string') return undefined;\n const numYears = Number(years);\n if (isNaN(numYears)) return undefined;\n const dobDate = parseUTCDate(dob);\n if (isNaN(dobDate.getTime())) return undefined;\n const age = yearsDiff(dobDate, utcToday());\n return numYears > age ? \"Years with prior auto carrier cannot be greater than the Applicant's age.\" : undefined;\n }\n },\n {\n targetKey: 'auto_continuous_coverage_years',\n dependsOn: ['auto_continuous_coverage_years', 'date_of_birth'],\n validate: (values) => {\n const years = values.auto_continuous_coverage_years;\n const dob = values.date_of_birth;\n if (years == null || dob == null || typeof dob !== 'string') return undefined;\n const numYears = Number(years);\n if (isNaN(numYears)) return undefined;\n const dobDate = parseUTCDate(dob);\n if (isNaN(dobDate.getTime())) return undefined;\n const age = yearsDiff(dobDate, utcToday());\n return numYears > age ? \"Years with continuous auto coverage cannot be greater than the Applicant's age.\" : undefined;\n }\n },\n {\n targetKey: 'vehicle_coll_deductible',\n dependsOn: ['vehicle_coll_deductible', 'vehicle_comp_deductible'],\n validate: (values) => {\n const coll = values.vehicle_coll_deductible;\n const comp = values.vehicle_comp_deductible;\n if (!coll || typeof coll !== 'string' || !comp || typeof comp !== 'string') return undefined;\n if (comp === 'NoCoverage' && coll !== 'NoCoverage') {\n return 'Collision Coverage cannot be chosen if Comprehensive is No Coverage.';\n }\n return undefined;\n }\n },\n {\n targetKey: 'policy_um',\n dependsOn: ['policy_um', 'policy_bi'],\n validate: (values) => {\n const um = values.policy_um;\n const bi = values.policy_bi;\n if (!um || typeof um !== 'string' || !bi || typeof bi !== 'string') return undefined;\n if (um === 'Reject' || bi === 'Dontknow') return undefined;\n\n const isCSL = (v: string) => v.endsWith('CSL');\n const umIsCSL = isCSL(um);\n const biIsCSL = isCSL(bi);\n\n if (umIsCSL && !biIsCSL) {\n return 'A Combined Single Limit cannot be selected for Uninsured/Underinsured Motorist unless a Combined Single Limit has also been selected for Liability.';\n }\n\n const PER_PERSON_LIMIT: Record<string, number> = {\n cov30to60: 30,\n cov50to100: 50,\n cov100to100: 100,\n cov100to300: 100,\n cov250to500: 250,\n cov300to300: 300,\n cov500to500: 500,\n cov100CSL: 100,\n cov300CSL: 300,\n cov500CSL: 500\n };\n const umLimit = PER_PERSON_LIMIT[um];\n const biLimit = PER_PERSON_LIMIT[bi];\n if (umLimit != null && biLimit != null && umLimit > biLimit) {\n return 'Uninsured/Underinsured Motorist Limit value cannot be greater than Bodily Injury Limit value.';\n }\n\n return undefined;\n }\n },\n {\n targetKey: 'policy_umpd',\n dependsOn: ['policy_umpd', 'policy_pd'],\n validate: (values) => {\n const umpd = values.policy_umpd;\n const pd = values.policy_pd;\n\n // Skip validation if either value is missing, not a string, or special values\n if (!umpd || typeof umpd !== 'string' || !pd || typeof pd !== 'string') return undefined;\n if (umpd === 'NoCoverage' || pd === 'Dontknow') return undefined;\n\n // Parse coverage values from format like 'cov25000' -> 25000\n const parseCoverageAmount = (value: string): number | null => {\n if (!value.startsWith('cov')) return null;\n const amount = parseInt(value.replace('cov', ''), 10);\n return isNaN(amount) ? null : amount;\n };\n\n const umpdAmount = parseCoverageAmount(umpd);\n const pdAmount = parseCoverageAmount(pd);\n\n if (umpdAmount != null && pdAmount != null && umpdAmount > pdAmount) {\n return 'Uninsured Motorist Property Damage Limit value cannot be greater than Liability Property Damage Limit value.';\n }\n\n return undefined;\n }\n },\n {\n targetKey: 'custom_equipment_value_cents',\n dependsOn: ['custom_equipment_value_cents', 'stated_value_amount_cents'],\n validate: (values) => {\n const mods = values.custom_equipment_value_cents;\n const stated = values.stated_value_amount_cents;\n if (mods == null || stated == null) return undefined;\n const modsNum = Number(mods);\n const statedNum = Number(stated);\n if (isNaN(modsNum) || isNaN(statedNum)) return undefined;\n if (statedNum > 0 && modsNum > 0) {\n return 'Modifications should be included in the stated value of the vehicle. If a stated value quote is not required, remove the stated value.';\n }\n return undefined;\n }\n }\n];\n\n/* ------------------------------------------------------------------ */\n/* Public helpers */\n/* ------------------------------------------------------------------ */\n\n/**\n * Run the Zod schema for a single field key. Returns the first error message\n * or `undefined` when valid (or when no schema exists for the key).\n */\nexport function validateFieldSchema(key: string, value: unknown): string | undefined {\n const schema = FIELD_SCHEMAS[key];\n if (!schema) return undefined;\n const result = schema.safeParse(value);\n return result.success ? undefined : result.error.issues[0].message;\n}\n\n/** True when the value is a complete, valid VIN (17 chars, legal charset, no whitespace). */\nexport function isVinValidFormat(value: string): boolean {\n if (/\\s/.test(value)) return false;\n const t = value.trim();\n return t.length === 17 && /^[A-HJ-NPR-Z0-9]{17}$/i.test(t);\n}\n\n/**\n * Run all cross-field rules and return a map of errors keyed by target field.\n * Only returns entries where an error was found.\n */\nexport function runCrossFieldRules(values: Readonly<Record<string, unknown>>, skipKeys?: ReadonlySet<string>): Record<string, string> {\n const errors: Record<string, string> = {};\n for (const rule of CROSS_FIELD_RULES) {\n if (skipKeys?.has(rule.targetKey)) continue;\n const msg = rule.validate(values);\n if (msg) errors[rule.targetKey] = msg;\n }\n return errors;\n}\n","import type { Question } from '@getcredify/credify-insurance-types';\nimport { validateFieldSchema, runCrossFieldRules } from './validation';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type FormValues = Record<string, any>;\n\n// A single stage (screen) in the wizard\nexport type StageMeta<KStage extends string = string> = {\n key: KStage; // stage id\n title: string; // progress header label\n loadQuestions: () => Promise<ReadonlyArray<Question>>; // lazy loader\n};\n\nexport function slugify(s: string) {\n return s\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '');\n}\n\nexport function ensureKey<KSelf extends string = string>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n q: Readonly<Question<KSelf, any, any>>,\n idx: number\n): string {\n return (q.key as string | undefined) ?? `${slugify(q.question)}-${idx}`;\n}\n\nexport function isBlankValue(v: unknown, inputType?: string): boolean {\n if (inputType === 'number') {\n return v === undefined || v === null || (typeof v === 'string' && v.trim() === '');\n }\n if (inputType === 'checkbox') return v !== true;\n if (inputType === 'address') {\n return v === undefined || v === null || (typeof v === 'string' && v.trim() === '');\n }\n return v === undefined || v === null || (typeof v === 'string' && v.trim() === '');\n}\n\n// ----- per-stage validation (visible + required) -----\nexport function validateQuestions<KSelf extends string = string>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n questions: ReadonlyArray<Question<KSelf, any, any>>,\n values: Readonly<Record<string, unknown>>\n): Record<string, string | undefined> {\n const errors: Record<string, string | undefined> = {};\n\n questions.forEach((q, i) => {\n const key = ensureKey(q, i);\n const val = values[key];\n\n // 1. Required check\n if (q.required && isBlankValue(val, q.inputType)) {\n errors[key] = 'Required';\n return;\n }\n\n // 2. Schema validation (only when the field has a value)\n if (!isBlankValue(val, q.inputType)) {\n const schemaError = validateFieldSchema(key, val);\n if (schemaError) {\n errors[key] = schemaError;\n return;\n }\n }\n });\n\n // 3. Cross-field rules (skip fields that already have errors)\n const alreadyErrored = new Set(Object.keys(errors).filter((k) => errors[k]));\n const crossErrors = runCrossFieldRules(values as Record<string, unknown>, alreadyErrored);\n for (const [k, msg] of Object.entries(crossErrors)) {\n errors[k] = msg;\n }\n\n return errors;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function coerceNumber(v: any) {\n if (v === '' || v === null || v === undefined) return undefined;\n const n = Number(v);\n return Number.isNaN(n) ? undefined : n;\n}\n","/** Dwelling stages that include \"How many occupants live in the household?\" (`household_size`). */\nconst HOME_DWELLING_STAGES = new Set(['Home', 'HomeConstruction', 'HomeFeatures']);\n\n/** Stages that include \"Number of mortgagees?\" (`number_of_mortgagees`). */\nconst MORTGAGEE_STAGES = new Set(['HomePolicy', 'BundlePolicy']);\n\n/** Home-only applicant stages where co-applicant fields from the API are shown (auto `Customer` stays unchanged). */\nconst HOME_APPLICANT_STAGES = new Set(['HomeCustomer', 'BundleCustomer']);\n\n/**\n * Per-stage visibility for keys removed from {@link HIDDEN_QUESTION_KEYS} so home-only\n * flows can collect them while auto (and other) stages stay unchanged.\n */\nexport function isQuestionHiddenInWidget(key: string, stageKey: string | undefined): boolean {\n // Bundle applicant page needs to collect this (Bolt question id 267).\n if (key === 'has_health_insurance_auto_accident') {\n return stageKey !== 'BundleCustomer';\n }\n if (key === 'household_size') {\n return !(stageKey && HOME_DWELLING_STAGES.has(stageKey));\n }\n if (key === 'number_of_mortgagees') {\n return !(stageKey && MORTGAGEE_STAGES.has(stageKey));\n }\n if (\n (key === 'has_co_applicant' || key === 'co_applicant_middle_name' || key === 'co_applicant_relationship') &&\n stageKey &&\n HOME_APPLICANT_STAGES.has(stageKey)\n ) {\n return false;\n }\n if (key === 'multi_policy_discount' && stageKey === 'HomePolicy') {\n return true;\n }\n return HIDDEN_QUESTION_KEYS.has(key);\n}\n\n/**\n * Question keys that should never be rendered or validated in the widget UI.\n * The underlying question definitions and DB columns are kept intact —\n * only display and required-field checks are suppressed here so fields can\n * be re-enabled without a schema change.\n */\nexport const HIDDEN_QUESTION_KEYS = new Set([\n // Auto vehicle fields hidden from the widget UI (VIN/VIM intentionally kept visible per \"VIM or\" + required details; keeps only other optionals out of Bolt-aligned flow)\n 'anti_theft_type',\n 'passive_restraint_type',\n 'anti_lock_brakes',\n 'daytime_running_lights',\n 'vehicle_full_glass',\n 'vehicle_loan_lease',\n 'percent_to_work',\n // Keep visible for the required conditional \"Modifications value\" field\n 'stated_value_amount_cents',\n 'vehicle_comp_deductible',\n 'vehicle_coll_deductible',\n 'vehicle_towing_and_labor',\n 'vehicle_transportation_expense',\n // Auto driver/Operator fields hidden (keeps only listed required + conditional additional driver)\n 'accident_prevention_course',\n 'driver_accidents',\n 'driver_violations',\n 'losses',\n 'middle_name',\n 'ssn_display',\n // license_number: shown in widget when license status is not Unlicensed (optional; see DRIVER_QUESTIONS)\n // Policy page fields to hide in auto flow (DOB and health insurance only appear in Policy stage)\n 'has_health_insurance_auto_accident',\n // Policy and Applicant optional fields hidden (only listed required/conditional shown; validation skips these)\n 'auto_prior_years',\n 'auto_prior_months',\n 'auto_continuous_coverage_years',\n 'auto_current_annual_premium_cents',\n 'has_co_applicant',\n 'co_applicant_middle_name',\n 'co_applicant_relationship',\n // NJ-specific fields are un-hidden via isNjUnhiddenField() in FormRenderer.tsx\n // (we keep them in HIDDEN_QUESTION_KEYS so non-NJ flows remain unchanged)\n 'tort_threshold',\n 'pip_coverage_type',\n 'extended_medical',\n 'additional_pip',\n 'policy_pip_deductible',\n 'is_corporation'\n]);\n","// cspell:disable\nexport const BOLT_AUTO_PRIOR_CARRIER_LABELS: Record<string, string> = {\n NoPriorInsurance: 'No Prior Insurance',\n TwentyFirstCentury: '21st Century',\n ACentral: 'A.Central',\n AAA: 'AAA',\n AARP: 'AARP',\n Acadia: 'Acadia',\n Ace: 'Ace',\n Acuity: 'Acuity',\n AdirondackInsExchange: 'Adirondack Ins Exchange',\n Aegis: 'Aegis',\n AIC: 'AIC',\n AIG: 'AIG',\n AlfaAlliance: 'Alfa Alliance',\n Allied: 'Allied',\n Allstate: 'Allstate',\n AmericaFirst: 'America First',\n AmericanCommerce: 'American Commerce',\n AmericanFamily: 'American Family',\n Amica: 'Amica',\n ASILloyds: 'ASI Lloyds',\n AustinMutual: 'Austin Mutual',\n Autoone: 'Autoone',\n AutoOwners: 'Auto-Owners',\n BadgerMutual: 'Badger Mutual',\n Balboa: 'Balboa',\n Bankers: 'Bankers',\n BeaconNational: 'Beacon National',\n BrethernMutual: 'Brethern Mutual',\n BristolWest: 'Bristol West',\n CapitalInsuranceGroup: 'Capital Insurance Group',\n Celina: 'Celina',\n CentralMutualOfOH: 'Central Mutual of OH',\n Chubb: 'Chubb',\n Cincinnati: 'Cincinnati',\n Clearcover: 'Clearcover',\n CNA: 'CNA',\n ColonialPenn: 'Colonial Penn',\n ColoradoCasualty: 'Colorado Casualty',\n Columbia: 'Columbia',\n CommerceWest: 'Commerce West',\n CommonwealthCasualty: 'Commonwealth Casualty',\n Ameriprise: 'CONNECT',\n ConstitutionalCasualty: 'Constitutional Casualty',\n Cornerstone: 'Cornerstone',\n Countrywide: 'Countrywide',\n CSE: 'CSE',\n Cumberland: 'Cumberland',\n Dairyland: 'Dairyland',\n Deerbrook: 'Deerbrook',\n Direct: 'Direct',\n Donegal: 'Donegal',\n Drive: 'Drive',\n Electric: 'Electric',\n EMC: 'EMC',\n Encompass: 'Encompass',\n Erie: 'Erie',\n Esurance: 'Esurance',\n Explorer: 'Explorer',\n FarmBureau: 'Farm Bureau',\n Farmers: 'Farmers',\n FiremansFund: 'Firemans Fund',\n FirstAmerican: 'First American',\n Foremost: 'Foremost',\n Geico: 'Geico',\n GeneralCasualty: 'General Casualty',\n GermantownMutual: 'Germantown Mutual',\n GMAC: 'GMAC',\n Grange: 'Grange',\n GreatAmerican: 'Great American',\n Grinnell: 'Grinnell',\n GuideOne: 'Guide One',\n Hanover: 'Hanover',\n Harbor: 'Harbor',\n Harleysville: 'Harleysville',\n HartfordOMNI: 'Hartford OMNI',\n Hartford: 'Hartford',\n HastingsMutual: 'Hastings Mutual',\n HawkeyeSecurity: 'Hawkeye Security',\n HDI: 'HDI',\n HoraceMann: 'Horace Mann',\n HoustonGeneral: 'Houston General',\n IFA: 'IFA',\n ImperialCasualty: 'Imperial Casualty',\n IndianaFarmers: 'Indiana Farmers',\n Indiana: 'Indiana',\n Infinity: 'Infinity',\n Insurequest: 'Insurequest',\n Integon: 'Integon',\n Integrity: 'Integrity',\n Kemper: 'Kemper',\n LibertyMutual: 'Liberty Mutual',\n LibertyNorthwest: 'Liberty Northwest',\n MainStreetAmerica: 'Main Street America',\n Mapfre: 'Mapfre',\n Mendota: 'Mendota',\n MerchantsGroup: 'Merchants Group',\n Mercury: 'Mercury',\n Metlife: 'MetLife',\n Metropolitan: 'Metropolitan',\n MidContinent: 'Mid-Continent',\n MidwesternIndemnity: 'Midwestern Indemnity',\n Montgomery: 'Montgomery',\n MSA: 'MSA',\n MtWashington: 'Mt. Washington',\n MutualBenefit: 'Mutual Benefit',\n NationalGeneral: 'National General',\n Nationwide: 'Nationwide',\n NewYorkCentralMutual: 'New York Central Mutual',\n NJManufacturers: 'NJ Manufacturers',\n NJSkylands: 'NJ Skylands',\n Northstar: 'Northstar',\n Occidental: 'Occidental',\n OhioCasualty: 'Ohio Casualty',\n OmahaPC: 'Omaha P/C',\n OneBeacon: 'One Beacon',\n OregonMutual: 'Oregon Mutual',\n Palisades: 'Palisades',\n PeerlessMontgomery: 'Peerless/Montgomery',\n Pekin: 'Pekin',\n Pemco: 'Pemco',\n PennNational: 'Penn National',\n PlymouthRock: 'Plymouth Rock',\n PreferredMutual: 'Preferred Mutual',\n // cspell:disable-next-line\n Proformance: 'Proformance',\n Progressive: 'Progressive',\n Prudential: 'Prudential',\n Republic: 'Republic',\n RockfordMutual: 'Rockford Mutual',\n RoyalAndSunAlliance: 'Royal and Sun Alliance',\n Safeco: 'Safeco',\n SECURA: 'SECURA',\n Selective: 'Selective',\n SouthernCounty: 'Southern County',\n SouthernMutual: 'Southern Mutual',\n SouthernTrust: 'Southern Trust',\n StPaulTravelers: 'St. Paul/Travelers',\n StandardMutual: 'Standard Mutual',\n StarCasualty: 'Star Casualty',\n StateAuto: 'State Auto',\n StateFarm: 'State Farm',\n Fidelity: 'Stillwater',\n Travelers: 'Travelers',\n TWFG: 'TWFG',\n Unigard: 'Unigard',\n UnitedFireAndCasualty: 'United Fire and Casualty',\n Unitrin: 'Unitrin',\n Universal: 'Universal',\n USAA: 'USAA',\n UticaNational: 'Utica National',\n Victoria: 'Victoria',\n WestBend: 'West Bend',\n WesternNational: 'Western National',\n WesternReserveGroup: 'Western Reserve Group',\n Westfield: 'Westfield',\n WhiteMountains: 'White Mountains',\n WilsonMutual: 'Wilson Mutual',\n Windsor: 'Windsor',\n Zurich: 'Zurich',\n OtherStandard: 'Other Standard',\n OtherNonStandard: 'Other Non-Standard'\n};\n\nexport const BOLT_TYPE_OF_RESIDENCE_LABELS: Record<string, string> = {\n OwnHome: 'Own Home',\n OwnCondo: 'Own Condo',\n RentHome: 'Rent Home',\n RentCondo: 'Rent Condo',\n RentApartment: 'Rent Apartment',\n LiveWithParents: 'Live With Parents'\n};\n\nexport const BOLT_HOME_PRIOR_CARRIER_LABELS: Record<string, string> = {\n TwentyFirstCentury: '21st Century',\n AAA: 'AAA',\n Acuity: 'Acuity',\n AdirondackInsExchange: 'Adirondack Ins Exchange',\n AIG: 'AIG',\n AlfaAlliance: 'Alfa Alliance',\n AllianzOfAmerica: 'Allianz of America',\n AllianzOfAmericaJefferson: 'Allianz of America-Jefferson',\n Allied: 'Allied',\n Allmerica: 'Allmerica',\n Allstate: 'Allstate',\n AmericaFirst: 'America First',\n AmericanFamily: 'American Family',\n AmericanCommerce: 'American Commerce',\n Amica: 'Amica',\n ASILloyds: 'ASI Lloyds',\n Assurant: 'Assurant',\n AtlasGeneralAgency: 'Atlas General Agency',\n AustinMutual: 'Austin Mutual',\n AutoOwners: 'Auto-Owners',\n BadgerMutual: 'Badger Mutual',\n Balboa: 'Balboa',\n Bamboo: 'Bamboo',\n BeaconNational: 'Beacon National',\n BunkerHill: 'Bunker Hill',\n CapitalInsuranceGroup: 'Capital Insurance Group',\n CentralMutualOfOH: 'Central Mutual of OH',\n ChubbInsurance: 'Chubb',\n Cincinnati: 'Cincinnati',\n Citizens: 'Citizens',\n ColoradoCasualty: 'Colorado Casualty',\n Ameriprise: 'CONNECT',\n CSE: 'CSE',\n Cumberland: 'Cumberland',\n Cypress: 'Cypress',\n Dairyland: 'Dairyland',\n Donegal: 'Donegal',\n Electric: 'Electric',\n EMC: 'EMC',\n Encompass: 'Encompass',\n Erie: 'Erie',\n Esurance: 'Esurance',\n ExcelsiorInsuranceCompany: 'Excelsior Insurance Company',\n FairPlan: 'Fair Plan',\n FarmBureau: 'Farm Bureau',\n Farmers: 'Farmers',\n FiremansFund: 'Firemans Fund',\n FirstAmerican: 'First American',\n ForemostInsuranceCompany: 'Foremost Insurance Company',\n Geico: 'Geico',\n GeneralCasualty: 'General Casualty',\n GermantownMutual: 'Germantown Mutual',\n GMAC: 'GMAC',\n Grange: 'Grange',\n Grinnell: 'Grinnell',\n GuideOne: 'Guide One',\n Hanover: 'Hanover',\n Harleysville: 'Harleysville',\n Hartford: 'Hartford',\n HartfordOMNI: 'Hartford OMNI',\n HawkeyeSecurity: 'Hawkeye Security',\n HippoInsuranceCompany: 'Hippo Insurance Company',\n HomeownersOfAmerica: 'Homeowners of America',\n Homesite: 'Homesite',\n HoraceMann: 'Horace Mann',\n HoustonGeneral: 'Houston General',\n Indiana: 'Indiana',\n IndianaFarmers: 'Indiana Farmers',\n Integrity: 'Integrity',\n Kemper: 'Kemper',\n LibertyMutual: 'Liberty Mutual',\n LibertyNorthwest: 'Liberty Northwest',\n Lloyds: 'Lloyds',\n MainStreetAmerica: 'Main Street America',\n MarkelInsuranceCompany: 'Markel Insurance Company',\n MerchantsGroup: 'Merchants Group',\n Mercury: 'Mercury',\n Metlife: 'MetLife',\n MidwesternIndemnity: 'Midwestern Indemnity',\n Montgomery: 'Montgomery',\n MSA: 'MSA',\n MutualBenefit: 'Mutual Benefit',\n Tower: 'National General',\n NatGenPremier: 'NatGen Premier',\n Nationwide: 'Nationwide',\n NationwideScottsdale: 'Nationwide-Scottsdale',\n NewYorkCentralMutual: 'New York Central Mutual',\n NJSkylands: 'NJ Skylands',\n Northstar: 'Northstar',\n OhioCasualty: 'Ohio Casualty',\n OneBeacon: 'One Beacon',\n OregonMutual: 'Oregon Mutual',\n PeerlessMontgomery: 'Peerless/Montgomery',\n Pekin: 'Pekin',\n PennNational: 'Penn National',\n PlymouthRock: 'Plymouth Rock',\n PreferredMutual: 'Preferred Mutual',\n Prudential: 'Prudential',\n PureHighValue: 'Pure High Value',\n Republic: 'Republic',\n RoyalAndSunAlliance: 'Royal and Sun Alliance',\n Safeco: 'Safeco',\n SECURA: 'SECURA',\n SouthernMutual: 'Southern Mutual',\n SouthernTrust: 'Southern Trust',\n StPaulTravelers: 'St. Paul/Travelers',\n StandardMutual: 'Standard Mutual',\n StateAuto: 'State Auto',\n StateFarm: 'State Farm',\n StateFarmFloridaInsuranceCompany: 'State Farm Florida Insurance Company',\n Fidelity: 'Stillwater',\n SunshineStateInsuranceCompany: 'Sunshine State Insurance Company',\n Travelers: 'Travelers',\n TWFG: 'TWFG',\n Unigard: 'Unigard',\n UnitedFireAndCasualty: 'United Fire and Casualty',\n Unitrin: 'Unitrin',\n Universal: 'Universal',\n USAA: 'USAA',\n UticaNational: 'Utica National',\n Wellington: 'Wellington',\n WestBend: 'West Bend',\n WesternNational: 'Western National',\n WesternReserveGroup: 'Western Reserve Group',\n Westfield: 'Westfield',\n WhiteMountains: 'White Mountains',\n WilsonMutual: 'Wilson Mutual',\n Zurich: 'Zurich',\n Other: 'Other',\n OtherNonStandard: 'Other Non-Standard',\n OtherStandard: 'Other Standard'\n};\n\nexport const BOLT_VEHICLE_PRIMARY_USE_LABELS: Record<string, string> = {\n Business: 'Business',\n Pleasure: 'Pleasure',\n Farming: 'Farming',\n To_FromWork: 'To/From Work',\n To_FromSchool: 'To/From School'\n};\n\nexport const BOLT_PRIOR_LIABILITY_LIMIT_LABELS: Record<string, string> = {\n Dontknow: \"Don't Know\",\n ThirtyToSixty: '30/60',\n FiftyToHundred: '50/100',\n HundredToHundred: '100/100',\n HundredToThreeHundred: '100/300',\n TwoHundredFiftyToFiveHundred: '250/500',\n ThreeHundredToThreeHundred: '300/300',\n FiveHundredToFiveHundred: '500/500',\n HundredCSL: '100CSL',\n ThreeHundredCSL: '300CSL',\n FiveHundredCSL: '500CSL'\n};\n\nexport const BOLT_NO_PRIOR_AUTO_INSURANCE_REASON_LABELS: Record<string, string> = {\n ActiveMilitaryDuty: 'Active Military Duty',\n DrivingCompanyCar: 'Driving A Company Car',\n DrivingCarOwnedByRelative: 'Driving A Car Owned By A Relative',\n HasNotOwnedOrOperatedVehicle: 'Has Not Owned Or Operated A Vehicle',\n OwnedVehParkedStoredOffRoadNotDriven: 'Owned Veh Parked/Stored Off Road/Not Driven',\n NonPayment: 'Non-Payment',\n Other: 'Other'\n};\n\nexport const BOLT_POLICY_BI_LABELS: Record<string, string> = {\n Dontknow: \"Don't Know\",\n cov30to60: '30/60',\n cov35to70: '35/70',\n cov50to100: '50/100',\n cov100to100: '100/100',\n cov100to300: '100/300',\n cov250to500: '250/500',\n cov300to300: '300/300',\n cov500to500: '500/500',\n cov100CSL: '100 CSL',\n cov300CSL: '300 CSL',\n cov500CSL: '500 CSL'\n};\n\nexport const BOLT_POLICY_UM_LABELS: Record<string, string> = {\n Reject: 'Reject',\n cov30to60: '30/60',\n cov35to70: '35/70',\n cov50to100: '50/100',\n cov100to100: '100/100',\n cov100to300: '100/300',\n cov250to500: '250/500',\n cov300to300: '300/300',\n cov500to500: '500/500',\n cov100CSL: '100 CSL',\n cov300CSL: '300 CSL',\n cov500CSL: '500 CSL'\n};\n\nexport const BOLT_POLICY_PD_LABELS: Record<string, string> = {\n Dontknow: \"Don't know\",\n cov25000: '25,000',\n cov50000: '50,000',\n cov100000: '100,000',\n cov250000: '250,000',\n cov500000: '500,000'\n};\n\nexport const BOLT_POLICY_MP_LABELS: Record<string, string> = {\n None: 'None',\n cov500: '500',\n cov1000: '1,000',\n cov2000: '2,000',\n cov2500: '2,500',\n cov5000: '5,000',\n cov10000: '10,000',\n cov15000: '15,000',\n cov25000: '25,000',\n cov50000: '50,000',\n cov100000: '100,000'\n};\n\nexport const BOLT_POLICY_UMPD_LABELS: Record<string, string> = {\n cov25000: '25,000',\n cov35000: '35,000',\n cov50000: '50,000',\n cov100000: '100,000',\n cov200000: '200,000',\n cov250000: '250,000',\n cov300000: '300,000',\n cov500000: '500,000'\n};\n\nexport const BOLT_POLICY_PIP_LABELS: Record<string, string> = {\n cov15000: '15,000',\n cov2500: '2,500',\n cov5000: '5,000',\n cov10000: '10,000',\n cov25000: '25,000',\n cov50000: '50,000',\n cov100000: '100,000',\n cov250000: '250,000',\n cov75000: '75,000',\n cov150000: '150,000'\n};\n\nexport const BOLT_POLICY_AUTO_DEATH_INDEMNITY_LABELS: Record<string, string> = {\n NoCoverage: 'No Coverage',\n cov5000: '5,000',\n cov10000: '10,000'\n};\n\nexport const BOLT_VEHICLE_COMP_COLL_DEDUCTIBLE_LABELS: Record<string, string> = {\n NoCoverage: 'No Coverage',\n Zero: '0',\n Fifty: '50',\n Hundred: '100',\n TwoHunderd: '200',\n TwoHundredfifty: '250',\n FiveHundred: '500',\n Thousand: '1,000',\n TwoThousand: '2,000'\n};\n\nexport const BOLT_VEHICLE_TOWING_AND_LABOR_LABELS: Record<string, string> = {\n NoCoverage: 'No Coverage',\n TwentyFive: '25',\n Forty: '40',\n Fifty: '50',\n SeventyFive: '75',\n Eighty: '80',\n Hundred: '100',\n TwelveHundred: '120',\n TwoHundred: '200',\n Unlimited: 'Unlimited'\n};\n\nexport const BOLT_VEHICLE_TRANSPORTATION_EXPENSE_LABELS: Record<string, string> = {\n NoCoverage: 'No Coverage',\n cov20to600: '20/600',\n cov25to750: '25/750',\n cov30to900: '30/900',\n cov40to1200: '40/1,200',\n cov50to1500: '50/1,500'\n};\n\nexport const BOLT_DRIVER_EDUCATION_LEVEL_LABELS: Record<string, string> = {\n NoHighSchoolDiploma: 'No High School Diploma',\n HighSchoolDiploma: 'High School Diploma',\n SomeCollegeNoDegree: 'Some College - No Degree',\n VocationalTechnicalDegree: 'Vocational Technical Degree',\n AssociatesDegree: 'Associates Degree',\n Bachelors: 'Bachelors',\n Masters: 'Masters',\n Phd: 'Phd',\n MedicalDegree: 'Medical Degree',\n LawDegree: 'Law Degree'\n};\n\nexport const BOLT_HOME_ARCHITECTURAL_STYLE_LABELS: Record<string, string> = {\n TwoFamilyHome: '2-Family Home',\n American4square: 'American 4-square',\n Basic: 'Basic',\n BiLevel: 'Bi-Level',\n Bungalow: 'Bungalow',\n CapeCod: 'Cape Cod',\n Colonial: 'Colonial',\n ColonialSpanish: 'Colonial - Spanish',\n CompletelyCustom: 'Completely Custom',\n Contemporary: 'Contemporary',\n ContractorModern: 'Contractor Modern',\n Farmhouse: 'Farmhouse',\n Folk: 'Folk',\n Log: 'Log',\n Mediterranean: 'Mediterranean',\n Ranch: 'Ranch',\n TriLevel: 'Tri-Level',\n Tudor: 'Tudor',\n Vernacular: 'Vernacular',\n Victorian: 'Victorian'\n};\n\nexport const BOLT_HOME_DWELLING_TYPE_LABELS: Record<string, string> = {\n SingleFamilyHouse: 'Single Family House',\n Townhouse: 'Townhouse',\n Rowhouse: 'Rowhouse',\n Duplex: 'Duplex/Two Family Unit',\n Triplex: 'Tri-plex/Three Family Unit',\n Fourplex: 'Four-plex/Four Family Unit',\n MultFamily: 'Multi-family (more than four units)'\n};\n\nexport const BOLT_HOME_OCCUPANCY_TYPE_LABELS: Record<string, string> = {\n OwnerPrimary: 'Owner Primary',\n OwnerSecondary: 'Owner Secondary',\n OwnerSeasonal: 'Owner Seasonal'\n};\n\nexport const BOLT_HOME_CONSTRUCTION_QUALITY_LABELS: Record<string, string> = {\n Basic: 'Basic',\n Modest: 'Modest',\n Average: 'Average',\n AboveAverage: 'Above Average',\n Expensive: 'Expensive',\n VeryExpensive: 'Very Expensive',\n Opulent: 'Opulent'\n};\n\nexport const BOLT_HOME_CONSTRUCTION_TYPE_LABELS: Record<string, string> = {\n Frame: 'Frame',\n Masonry: 'Masonry',\n MasonryVeneer: 'Masonry Veneer',\n Log: 'Log',\n Asbestos: 'Asbestos',\n EFIS: 'EFIS',\n HardiPlank: 'HardiPlank',\n SuperiorFireResistive: 'Superior Fire Resistive',\n SuperiorMasonryNonCombustible: 'Superior Masonry Non Combustible',\n SuperiorNonCombustible: 'Superior Non Combustible'\n};\n\nexport const BOLT_HOME_FOUNDATION_TYPE_LABELS: Record<string, string> = {\n Slab: 'Slab',\n Basement: 'Basement',\n CrawlSpace: 'Crawl Space',\n PartialBasement: 'Partial Basement',\n PiersPostsPiles: 'Piers / Posts / Piles',\n Open: 'Open'\n};\n\nexport const BOLT_HOME_BUILDING_OVER_WATER_LABELS: Record<string, string> = {\n NotOverWater: 'No',\n PartiallyOverWater: 'Partially Over Water',\n FullyOrEntirelyOverWater: 'Fully or Entirely Over Water'\n};\n\nexport const BOLT_HOME_NUMBER_OF_STORIES_LABELS: Record<string, string> = {\n One: '1',\n OneHalf: '1.5',\n Two: '2',\n TwoHalf: '2.5',\n Three: '3',\n ThreeHalf: '3.5',\n Four: '4',\n BiLevel: 'Bi-Level',\n TriLevel: 'Tri-Level'\n};\n\nexport const BOLT_HOME_EXTERIOR_WALLS_LABELS: Record<string, string> = {\n VinylSiding: 'Vinyl Siding',\n WoodFraming: 'Wood Framing',\n BrickVeneer: 'Brick Veneer',\n Stucco: 'Stucco',\n AdobeBlock: 'Adobe Block',\n AluminumSiding: 'Aluminum Siding',\n CementFiberShingles: 'Cement Fiber Shingles',\n Clapboard: 'Clapboard',\n ConcreteBlock: 'Concrete Block',\n HardboardSiding: 'Hardboard Siding',\n InsulatedConcreteForms: 'Insulated Concrete Forms',\n LightGaugeSteelFraming: 'Light Gauge Steel Framing',\n LogsSolid: 'Logs (Solid)',\n MasoniteSiding: 'Masonite Siding',\n PreEngineeredMetal: 'Pre-Engineered Metal',\n SolidBrickConstruction: 'Solid Brick Construction',\n SolidConcrete: 'Solid Concrete',\n StandardPoleFramed: 'Standard Pole Framed',\n Stone: 'Stone',\n StructuralInsulatedPanels: 'Structural Insulated Panels',\n TimberFraming: 'Timber Framing'\n};\n\nexport const BOLT_HOME_ROOF_TYPE_LABELS: Record<string, string> = {\n ASPHALT_SHINGLES: 'Asphalt Shingles',\n ARCHITECTURAL_SHINGLES: 'Architectural Shingles',\n METAL: 'Metal',\n TILE_CONCRETE: 'Tile (Concrete)',\n ASBESTOS: 'Asbestos',\n BUILT_UP: 'Built-Up',\n COMPOSITION: 'Composition',\n CONCRETE: 'Concrete',\n COPPER: 'Copper',\n CORRUGATED_STEEL: 'Corrugated Steel',\n FIBERGLASS: 'Fiberglass',\n FOAM: 'Foam',\n GRAVEL: 'Gravel',\n MEMBRANE: 'Membrane',\n MINERAL_FIBER_SHAKE: 'Mineral Fiber Shake',\n PLASTIC: 'Plastic',\n ROCK: 'Rock',\n ROLLED_PAPER: 'Rolled Paper',\n RUBBER: 'Rubber',\n SLATE: 'Slate',\n TAR: 'Tar',\n TAR_GRAVEL: 'Tar and Gravel',\n TILE_CLAY: 'Tile (Clay)',\n TILE_MISSION: 'Tile (Mission)',\n TILE_SPANISH: 'Tile (Spanish)',\n TIN: 'Tin',\n WOOD_FIBERGLASS_SHINGLES: 'Wood/Fiberglass Shingles',\n WOOD_SHAKE: 'Wood Shake',\n WOOD_SHINGLES: 'Wood Shingles',\n OTHER: 'Other'\n};\n\nexport const BOLT_HOME_ROOF_SHAPE_LABELS: Record<string, string> = {\n B_Gable: 'Gable',\n C_Hip: 'Hip',\n A_Flat: 'Flat',\n D_Other: 'Other'\n};\n\nexport const BOLT_HOME_ROOF_UPDATED_LABELS: Record<string, string> = {\n NotUpdated: 'Not Updated',\n PartialUpdate: 'Partial Update',\n CompleteUpdate: 'Complete Update'\n};\n\nexport const BOLT_HOME_HEATING_TYPE_LABELS: Record<string, string> = {\n Electric: 'Electric',\n Gas: 'Gas',\n GasForcedAir: 'Gas - Forced Air',\n GasHotWater: 'Gas - Hot Water',\n Oil: 'Oil',\n OilForcedAir: 'Oil - Forced Air',\n OilHotWater: 'Oil - Hot Water',\n SolidFuel: 'Solid Fuel',\n HeatPump: 'Heat Pump',\n Other: 'Other'\n};\n\nexport const BOLT_HOME_OIL_TANK_LOCATION_LABELS: Record<string, string> = {\n AboveGround: 'Above Ground',\n BelowGround: 'Below Ground'\n};\n\nexport const BOLT_HOME_BASEMENT_TYPE_LABELS: Record<string, string> = {\n Basement: 'Below Grade Basement',\n SplitLevelBasement: 'Split Level Basement',\n WalkoutBasement: 'Walkout Basement'\n};\n\nexport const BOLT_HOME_PLUMBING_TYPE_LABELS: Record<string, string> = {\n EntirelyCopper: 'Entirely Copper',\n EntirelyGalvanized: 'Entirely Galvanized',\n EntirelyPEX: 'Entirely PEX',\n EntirelyPVC: 'Entirely PVC',\n Polybutylene: 'Polybutylene'\n};\n\nexport const BOLT_HOME_PERSONAL_LIABILITY_LABELS: Record<string, string> = {\n TwentyFive: '$25,000',\n Fifty: '$50,000',\n OneHundred: '$100,000',\n TwoHundred: '$200,000',\n ThreeHundred: '$300,000',\n FourHundred: '$400,000',\n FiveHundred: '$500,000'\n};\n\nexport const BOLT_HOME_MEDICAL_PAYMENTS_LABELS: Record<string, string> = {\n cov1000: '$1,000',\n cov2000: '$2,000',\n cov3000: '$3,000',\n cov4000: '$4,000',\n cov5000: '$5,000'\n};\n\nexport const BOLT_HOME_ALL_PERILS_DEDUCTIBLE_LABELS: Record<string, string> = {\n TwoHundredFifty: '$250',\n FiveHundred: '$500',\n SevenHundredFifty: '$750',\n OneThousand: '$1,000',\n OneThousandFiveHundred: '$1,500',\n TwoThousand: '$2,000',\n TwoThousandFiveHundred: '$2,500',\n ThreeThousands: '$3,000',\n FourThousands: '$4,000',\n FiveThousands: '$5,000',\n OnePercent: '1%',\n TwoPercent: '2%',\n ThreePercent: '3%',\n FourPercent: '4%',\n FivePercent: '5%'\n};\n\nexport const BOLT_HOME_WINDSTORM_DEDUCTIBLE_LABELS: Record<string, string> = {\n None: 'None',\n OnePercent: '1%',\n TwoPercent: '2%',\n FivePercent: '5%',\n TenPercent: '10%'\n};\n\nexport const BOLT_HOME_DISTANCE_FIRE_HYDRANT_LABELS: Record<string, string> = {\n _0_500ft: '0-500 Feet',\n _501_1000ft: '501-1000 Feet',\n _1001ftAndGreater: '1001 Feet And Greater'\n};\n\nexport const BOLT_HOME_DISTANCE_FIRE_STATION_LABELS: Record<string, string> = {\n Lessthan5miles: 'Less Than 5 Miles',\n Over5miles: 'Over 5 Miles',\n NotAvailable: 'Not Available'\n};\n\nexport const BOLT_HOME_EMPLOYMENT_INDUSTRY_LABELS: Record<string, string> = {\n 'Agriclt/Forestry/Fish': 'Agriculture/Forestry/Fishing',\n 'Art/Design/Media': 'Art/Design/Media',\n 'Banking/Finance/RE': 'Banking/Finance/Real Estate',\n 'Business/Sales/Offi': 'Business/Sales/Office',\n 'Construct/EnrgyTrds': 'Construction/Energy Trades',\n Disabled: 'Disabled',\n 'Education/Library': 'Education/Library',\n 'Engr/Archt/Sci/Math': 'Engineer/Architect/Science/Math',\n 'Government/Military': 'Government/Military',\n 'Homemaker/Houseprsn': 'Homemaker/House Person',\n 'Info Tech': 'Information Technology',\n Insurance: 'Insurance',\n 'Lgl/Law Enfcmt/Sec': 'Legal/Law Enforcement/Security',\n 'Maint/Rpr/Hsekeep': 'Maintenance/Repair/Housekeeping',\n 'Mfg/Production': 'Manufacturing/Production',\n 'Med/Soc Svcs/Relig': 'Medical/Social Services/Religion',\n Other: 'Other',\n 'Person.Care/Service': 'Personal Care/Service',\n 'Rest/Hotel Services': 'Restaurant/Hotel Services',\n Retired: 'Retired',\n 'Sports/Recreation': 'Sports/Recreation',\n Student: 'Student',\n 'Trvl/Trnsprt/Warehs': 'Travel/Transportation/Warehousing',\n Unemployed: 'Unemployed'\n};\n\nexport const BOLT_HOME_MARITAL_STATUS_LABELS: Record<string, string> = {\n Single: 'Single',\n Married: 'Married',\n Seperated: 'Separated',\n Divorced: 'Divorced',\n Widowed: 'Widowed',\n DomesticPartner: 'Domestic Partner'\n};\n\nexport const BOLT_HOME_GENDER_LABELS: Record<string, string> = {\n Female: 'Female',\n Male: 'Male'\n};\n\nexport const BOLT_DRIVER_INDUSTRY_LABELS: Record<string, string> = {\n 'Agriclt/Forestry/Fish': 'Agriculture/Forestry/Fishing',\n 'Art/Design/Media': 'Art/Design/Media',\n 'Banking/Finance/RE': 'Banking/Finance/Real Estate',\n 'Business/Sales/Offi': 'Business/Sales/Office',\n 'Construct/EnrgyTrds': 'Construction/Energy Trades',\n Disabled: 'Disabled',\n 'Education/Library': 'Education/Library',\n 'Engr/Archt/Sci/Math': 'Engineer/Architect/Science/Math',\n 'Government/Military': 'Government/Military',\n 'Homemaker/Houseprsn': 'Homemaker/House person',\n 'Info Tech': 'Information Technology',\n Insurance: 'Insurance',\n 'Lgl/Law Enfcmt/Sec': 'Legal/Law Enforcement/Security',\n 'Maint/Rpr/Hsekeep': 'Maintenance/Repair/Housekeeping',\n 'Mfg/Production': 'Manufacturing/Production',\n 'Med/Soc Svcs/Relig': 'Medical/Social Services/Religion',\n Other: 'Other',\n 'Person.Care/Service': 'Personal Care/Service',\n 'Rest/Hotel Services': 'Restaurant/Hotel Services',\n Retired: 'Retired',\n 'Sports/Recreation': 'Sports/Recreation',\n Student: 'Student',\n 'Trvl/Trnsprt/Warehs': 'Travel/Transportation/Warehousing',\n Unemployed: 'Unemployed'\n};\n\nexport const BOLT_HOME_LOSS_DESCRIPTION_LABELS: Record<string, string> = {\n CONTAMINATION: 'Contamination',\n CREDITCARD: 'Credit Card',\n DAMAGETOPROPERTYOFOTHERS: 'Damage To Property Of Others',\n DOGBITELIABILITY: 'Dog Bite',\n EARTHMOVEMENT: 'Earth Movement',\n EARTHQUAKE: 'Earthquake',\n EXTENDEDCOVERAGEPERILS: 'Extended Coverage Perils',\n FIRE: 'Fire',\n FLOOD: 'Flood',\n FREEZINGWATERINCLUDINGBURSTPIPES: 'Freezing Water',\n HAIL: 'Hail',\n HURRICANE: 'Hurricane',\n LIABILITYALLOTHER: 'Liability',\n LIGHTNING: 'Lightning',\n MEDICALPAYMENTS: 'Medical Payments',\n MYSTERIOUSDISAPPEARANCE: 'Mysterious Disappearance',\n MYSTERIOUSDISAPPEARANCESCHEDULEDPROPERTY: 'Mysterious Disappearance - Scheduled Property',\n PHYSICALDAMAGEALLOTHER: 'Physical Damage',\n SINKHOLE: 'Sinkhole',\n SLIPFALLLIABILITY: 'Slip/Fall',\n SMOKE: 'Smoke',\n THEFTSCHEDULEDPROPERTY: 'Theft - Scheduled Property',\n THEFTBURGLARY: 'Theft - Burglary',\n TORNADO: 'Tornado',\n VANDALISMMALICIOUSMISCHIEF: 'Vandalism',\n WATERDAMAGE: 'Water Damage',\n WIND: 'Wind',\n WORKERSCOMPENSATION: 'Workers Compensation',\n ALLOTHER: 'All Other'\n};\n\n// New Jersey specific fields. Enum keys are HAR-verified from a successful\n// NJ Policy.Next submission\nexport const BOLT_POLICY_TORT_THRESHOLD_LABELS: Record<string, string> = {\n Verbal_Threshold: 'Limited right to sue',\n Zero_Threshold: 'Unlimited right to sue',\n Full: 'Full',\n Limited: 'Limited'\n};\n\nexport const BOLT_PIP_COVERAGE_TYPE_LABELS: Record<string, string> = {\n Primary: 'Primary',\n Secondary: 'Secondary'\n};\n\nexport const BOLT_EXTENDED_MEDICAL_LABELS: Record<string, string> = {\n cov1000: '$1,000',\n cov10000: '$10,000'\n};\n\nexport const BOLT_ADDITIONAL_PIP_LABELS: Record<string, string> = {\n cov100_10400_LIMITED: '100 - 10,400/ LIMITED',\n cov125_13000_LIMITED: '125 - 13,000/ LIMITED',\n cov175_18200_LIMITED: '175 - 18,200/ LIMITED',\n cov250_26000_LIMITED: '250 - 26,000/ LIMITED',\n cov400_41600_LIMITED: '400 - 41,600/ LIMITED',\n cov500_52000_LIMITED: '500 - 52,000/ LIMITED',\n cov600_62400_LIMITED: '600 - 62,400/ LIMITED',\n cov700_72800_LIMITED: '700 - 72,800/ LIMITED',\n cov100_UNLIMITED: '100/UNLIMITED',\n cov125_UNLIMITED: '125/UNLIMITED',\n cov175_UNLIMITED: '175/UNLIMITED',\n cov250_UNLIMITED: '250/UNLIMITED',\n cov400_UNLIMITED: '400/UNLIMITED',\n cov500_UNLIMITED: '500/UNLIMITED',\n cov600_UNLIMITED: '600/UNLIMITED',\n cov700_UNLIMITED: '700/UNLIMITED'\n};\n\nexport const BOLT_NJ_BASE_PIP_LABELS: Record<string, string> = {\n cov15000: '$15,000',\n cov250000: '$250,000'\n};\n\nexport const BOLT_PIP_DEDUCTIBLE_LABELS: Record<string, string> = {\n cov250: '$250',\n cov500: '$500',\n cov1000: '$1,000',\n cov2000: '$2,000',\n cov2500: '$2,500'\n};\n","// cspell:disable\nexport const BOLT_DRIVER_OCCUPATIONS_BY_INDUSTRY = {\n 'Agriclt/Forestry/Fish': [\n 'Agr Inspect/Grader',\n 'Arborist',\n 'Clerk',\n 'Equip. Operator',\n 'Farm/Ranch Owner',\n 'Farm/Ranch Worker',\n 'Fisherman',\n 'Florist',\n 'Laborer/Worker',\n 'Landscape/NursryWkr',\n 'Landscaper',\n 'Logger',\n 'Millworker',\n 'Other',\n 'Ranger',\n 'Supervisor',\n 'Timber Grader/Scale'\n ],\n 'Art/Design/Media': [\n 'Actor',\n 'Admin Assist',\n 'Announcer/Broadcstr',\n 'Artist/Animator',\n 'Author/Writer',\n 'Choreography/Dancer',\n 'Clerk',\n 'Composer/Director',\n 'Curator',\n 'Designer',\n 'Editor',\n 'Journalist/Reporter',\n 'Musician/Singer',\n 'Other',\n 'Printer',\n 'Producer',\n 'Production Crew',\n 'Projectionist',\n 'Receptionist/Sec',\n 'Ticket Sales/Usher'\n ],\n 'Banking/Finance/RE': [\n 'Accountant/Auditor',\n 'Admin Assist',\n 'Analyst/Broker',\n 'Bookkeeper',\n 'Branch Manager',\n 'Clerk',\n 'Collections',\n 'Consultant',\n 'Controller',\n 'CSR/Teller',\n 'Director/Administr',\n 'Executive',\n 'Financial Advisor',\n 'Investment Banker',\n 'Investor',\n 'Loan/EscrowProcess',\n 'Mgr-Credit/Loan',\n 'Mgr-Portfolio/Prod.',\n 'Mgr-Property',\n 'Other',\n 'Realtor',\n 'Receptionist/Sec',\n 'SalesAgt/Represent.',\n 'Trader,Finan Instru',\n 'Underwriter'\n ],\n 'Business/Sales/Offi': [\n 'Account Executive',\n 'Admin Assist',\n 'Buyer',\n 'Clerk-Office',\n 'Consultant',\n 'CSR',\n 'Director/Administr',\n 'Executive',\n 'H.R. Representative',\n 'Marketing Researchr',\n 'Messenger/Courier',\n 'Mgr - District',\n 'Mgr - Finance',\n 'Mgr-Dept/Store',\n 'Mgr-General Opers',\n 'Mgr-H.R./PublicRel',\n 'Mgr-Mkt/Sales',\n 'Mgr/Supervisr-Offic',\n 'Other',\n 'Receptionist/Sec',\n 'Sales-Counter/Rentl',\n 'Sales-Home Based',\n 'Sales-Mfg Rep',\n 'Sales-Retail/Whlsle',\n 'Sales-Route/Vendor'\n ],\n 'Construct/EnrgyTrds': [\n 'Boiler Oper/Maker',\n 'Bricklayer/Mason',\n 'Carpenter',\n 'Carpet Installer',\n 'Concrete Worker',\n 'Constrct Proj Mgr',\n 'Contractor',\n 'Crane Operator',\n 'Electrician/Linesmn',\n 'ElevatorTech/Instl',\n 'Equip. Operator',\n 'FloorLayer/Finisher',\n 'Foreman/Supervisor',\n 'Handyman',\n 'Heat/Air Technician',\n 'Inspector',\n 'Laborer/Worker',\n 'Metalworker',\n 'Miner',\n 'Oil/GasDril/RigOpr',\n 'Other',\n 'Painter',\n 'Plstr/Drywall/Stuc',\n 'Plumber',\n 'Roofer'\n ],\n Disabled: ['Disabled'],\n 'Education/Library': [\n 'Admin Assist',\n 'Audio-Visual Tech.',\n 'Child/DayCare Wrker',\n 'Clerk',\n 'Counselor',\n 'Grad. Teaching/Asst',\n 'Instructor-Vocation',\n 'Librarian/Curator',\n 'Other',\n 'Professor, College',\n 'Receptionist/Sec',\n 'Superintendent',\n 'Teacher, College',\n 'Teacher, K-12',\n 'Teaching Asst/Aide',\n 'Tutor'\n ],\n 'Engr/Archt/Sci/Math': [\n 'Actuary',\n 'Admin Assist',\n 'Analyst',\n 'Architect',\n 'Clerk',\n 'Clinical Data Coord.',\n 'Drafter',\n 'Engineer',\n 'Manager-Project',\n 'Manager-R&D',\n 'Mathematician',\n 'Other',\n 'Receptionist/Sec',\n 'Research Prog. Dir.',\n 'Researcher',\n 'Scientist',\n 'Sociologist',\n 'Surveyor/Mapmaker',\n 'Technician'\n ],\n 'Government/Military': [\n 'Accountant/Auditor',\n 'Admin Assist',\n 'Analyst',\n 'Attorney',\n 'Chief Executive',\n 'Clerk',\n 'Commissioner',\n 'Council member',\n 'Director/Administr',\n 'Enlst Mil Prsnl E1-4',\n 'Legislator',\n 'Mayor/City Manager',\n 'Meter Reader',\n 'NCO (E5-9)',\n 'Officer-Commissiond',\n 'Officer-Warrant',\n 'Other',\n 'Park Ranger',\n 'Planner',\n 'Postmaster',\n 'Receptionist/Sec',\n 'Regulator',\n 'US Postal Worker'\n ],\n 'Homemaker/Houseprsn': ['Homemaker/Houseprsn'],\n 'Info Tech': [\n 'Admin Assist',\n 'Analyst',\n 'Clerk',\n 'Director/Administr',\n 'Engineer-Hardware',\n 'Engineer-Software',\n 'Engineer-Systems',\n 'Executive',\n 'Manager-Systems',\n 'Network Admin',\n 'Other',\n 'Programmer',\n 'Project Coordinator',\n 'Receptionist/Sec',\n 'Support Technician',\n 'Systems Security',\n 'Technical Writer',\n 'Web Developer'\n ],\n Insurance: [\n 'Accountant/Auditor',\n 'Actuarial Clerk',\n 'Actuary',\n 'Admin Assist',\n 'Agent/Broker',\n 'Analyst',\n 'Attorney',\n 'Claims Adjuster',\n 'Clerk',\n 'Commissioner',\n 'CSR',\n 'Director/Administr',\n 'Executive',\n 'Other',\n 'Product Manager',\n 'Receptionist/Sec',\n 'Sales Rep',\n 'Underwriter'\n ],\n 'Lgl/Law Enfcmt/Sec': [\n 'Airport Sec Ofcr',\n 'Animal Control Ofcr',\n 'Attorney',\n 'Bailiff',\n 'Corrections Officer',\n 'Court Clrk/Reporter',\n 'Deputy Sheriff',\n 'Dispatcher',\n 'Examiner',\n 'Fed Agt/Marshall',\n 'Fire Chief',\n 'Fire Fighter/Supv.',\n 'Gaming Ofcr/Invest',\n 'Highway Patrol Ofcr',\n 'Judge/Hearing Ofcr',\n 'Legal Asst./Sec',\n 'Other',\n 'Paralegal/Law Clerk',\n 'Police Chief',\n 'Police Det/Investgr',\n 'Police Offcr/Supvr',\n 'Process Server',\n 'Prvt Invest/Detec.',\n 'Security Guard',\n 'Sheriff'\n ],\n 'Maint/Rpr/Hsekeep': [\n 'Bldg Maint Engineer',\n 'Custodian/Janitor',\n 'Electrician',\n 'Field Service Tech.',\n 'Handyman',\n 'Heat/AirCond Repair',\n 'Housekeeper/Maid',\n 'Lndscpe/Grnds Maint',\n 'Maint Mechanic',\n 'Mechanic',\n 'Other'\n ],\n 'Mfg/Production': [\n 'Admin Assist',\n 'Clerk',\n 'Factory Worker',\n 'Foreman/Supervisor',\n 'Furniture Finisher',\n 'Inspector',\n 'Jeweler',\n 'Machine Operator',\n 'Other',\n 'Packer',\n 'Plant Manager',\n 'Printer/Bookbinder',\n 'Quality Control',\n 'Receptionist/Sec',\n 'Refining Operator',\n 'Shoemaker',\n 'Tailor/Custom Sewer',\n 'Textile Worker',\n 'Upholsterer'\n ],\n 'Med/Soc Svcs/Relig': [\n 'Admin Assist',\n 'Assist-Med/Dent/Vet',\n 'Clergy',\n 'Clerk',\n 'Client Care Worker',\n 'Dental Hygenist',\n 'Dentist',\n 'Doctor',\n 'Hospice Volunteer',\n 'Mortician',\n 'Nurse - C.N.A.',\n 'Nurse - LPN',\n 'Nurse - RN',\n 'Nurse Practitioner',\n 'Optometrist',\n 'Other',\n 'Paramedic/EM Tech',\n 'Pharmacist',\n 'Receptionist/Sec',\n 'Social Worker',\n 'Support Services',\n 'Technician',\n 'Therapist',\n 'Veterinarian'\n ],\n Other: ['Other'],\n 'Person.Care/Service': [\n 'Caregiver',\n 'Dry Cleaner/Laundry',\n 'Hair Stylist/Barber',\n 'Housekeeper',\n 'Manicurist',\n 'Masseuse',\n 'Nanny',\n 'Other',\n 'Pet Services',\n 'Receptionist/Sec'\n ],\n 'Rest/Hotel Services': [\n 'Baker',\n 'Bartender',\n 'Bellhop',\n 'Bus Person',\n 'Caterer',\n 'Chef',\n 'Concessionaire',\n 'Concierge',\n 'Cook-Rest/Cafeteria',\n 'Cook/Wrkr-Fast Food',\n 'Delivery Person',\n 'Desk Clerk',\n 'Dishwasher',\n 'Food Prod/Packing',\n 'Host/Maitre d',\n 'Housekeeper/Maid',\n 'Manager',\n 'Other',\n 'Valet',\n 'Waiter/Waitress',\n 'Wine Steward'\n ],\n Retired: ['Retired'],\n 'Sports/Recreation': [\n 'Activity/Recre.Asst',\n 'Admin Assist',\n 'Agent',\n 'Athlete',\n 'CampCounselor/Lead',\n 'Clerk',\n 'Coach',\n 'Concessionaire',\n 'Director, Program',\n 'Event Mgr/Promoter',\n 'Life Guard',\n 'Mgr - Fitness Club',\n 'Other',\n 'Park Ranger',\n 'Receptionist/Sec',\n 'Sales-Tkt/Mmbrshp',\n 'SportsBrdcstr/Journ',\n 'Trainer/Instructor',\n 'Umpire/Referee'\n ],\n Student: ['Graduate Student', 'High school', 'Other', 'Undergraduate'],\n 'Trvl/Trnsprt/Warehs': [\n 'Admin Assist',\n 'Air Traffic Control',\n 'Airport Ops Crew',\n 'Bellhop/Porter',\n 'Clerk',\n 'Crane Loader/Oper',\n 'Dispatcher',\n 'Driver-Bus/Strcar',\n 'Driver-Taxi/Limo',\n 'Driver-Truck/Delvry',\n 'Flight Attendant',\n 'Forklift Operator',\n 'Laborer',\n 'Longshoreman',\n 'Mate/Sailor',\n 'Mgr Warehse/Dist',\n 'Other',\n 'Parking Lot Attend',\n 'Pilot/Capt/Eng',\n 'Railroad Worker',\n 'Receptionist/Sec',\n 'Shipping/RecClk',\n 'Subway/LgtRail Oper',\n 'Ticket Agent',\n 'Transportation Spec'\n ],\n Unemployed: ['Unemployed']\n} as const;\n\nexport const BOLT_DRIVER_OCCUPATION_LABELS_FROM_BOLT = {\n 'Agr Inspect/Grader': 'Agriculture Inspector/Grader',\n Arborist: 'Arborist',\n Clerk: 'Clerk',\n 'Equip. Operator': 'Equipment Operator',\n 'Farm/Ranch Owner': 'Farm/Ranch Owner',\n 'Farm/Ranch Worker': 'Farm/Ranch Worker',\n Fisherman: 'Fisherman',\n Florist: 'Florist',\n 'Laborer/Worker': 'Laborer/Worker',\n 'Landscape/NursryWkr': 'Landscaper/Nursery Worker',\n Landscaper: 'Landscaper',\n Logger: 'Logger',\n Millworker: 'Mill worker',\n Other: 'Other',\n Ranger: 'Ranger',\n Supervisor: 'Supervisor',\n 'Timber Grader/Scale': 'Timber Grader/Scale',\n Actor: 'Actor',\n 'Admin Assist': 'Administrative Assistant',\n 'Announcer/Broadcstr': 'Announcer/Broadcaster',\n 'Artist/Animator': 'Artist/Animator',\n 'Author/Writer': 'Author/Writer',\n 'Choreography/Dancer': 'Choreography/Dancer',\n 'Composer/Director': 'Composer/Director',\n Curator: 'Curator',\n Designer: 'Designer',\n Editor: 'Editor',\n 'Journalist/Reporter': 'Journalist/Reporter',\n 'Musician/Singer': 'Musician/Singer',\n Printer: 'Printer',\n Producer: 'Producer',\n 'Production Crew': 'Production Crew',\n Projectionist: 'Projectionist',\n 'Receptionist/Sec': 'Receptionist/Secretary',\n 'Ticket Sales/Usher': 'Ticket Sales/Usher',\n 'Accountant/Auditor': 'Accountant/Auditor',\n 'Analyst/Broker': 'Analyst/Broker',\n Bookkeeper: 'Bookkeeper',\n 'Branch Manager': 'Branch Manager',\n Collections: 'Collections',\n Consultant: 'Consultant',\n Controller: 'Controller',\n 'CSR/Teller': 'CSR/Teller',\n 'Director/Administr': 'Director/Administrator',\n Executive: 'Executive',\n 'Financial Advisor': 'Financial Advisor',\n 'Investment Banker': 'Investment Banker',\n Investor: 'Investor',\n 'Loan/EscrowProcess': 'Loan/Escrow Processor',\n 'Mgr-Credit/Loan': 'Manager-Credit/Loan',\n 'Mgr-Portfolio/Prod.': 'Manager-Portfolio/Production',\n 'Mgr-Property': 'Manager-Property',\n Realtor: 'Realtor',\n 'SalesAgt/Represent.': 'Sales Agent/Representative',\n 'Trader,Finan Instru': 'Trader, Financial Instruments',\n Underwriter: 'Underwriter',\n 'Account Executive': 'Account Executive',\n Buyer: 'Buyer',\n 'Clerk-Office': 'Clerk-Office',\n CSR: 'Customer Service Representative',\n 'H.R. Representative': 'H.R. Representative',\n 'Marketing Researchr': 'Marketing Researcher',\n 'Messenger/Courier': 'Messenger/Courier',\n 'Mgr - District': 'Manager - District',\n 'Mgr - Finance': 'Manager - Finance',\n 'Mgr-Dept/Store': 'Manager - Department/Store',\n 'Mgr-General Opers': 'Manager - General Operations',\n 'Mgr-H.R./PublicRel': 'Manager - H.R./Public Relations',\n 'Mgr-Mkt/Sales': 'Manager - Marketing/Sales',\n 'Mgr/Supervisr-Offic': 'Manager/Supervisor - Office',\n 'Sales-Counter/Rentl': 'Sales-Counter/Rental',\n 'Sales-Home Based': 'Sales-Home Based',\n 'Sales-Mfg Rep': 'Sales-Manufacture Rep',\n 'Sales-Retail/Whlsle': 'Sales-Retail/Wholesale',\n 'Sales-Route/Vendor': 'Sales-Route/Vendor',\n 'Boiler Oper/Maker': 'Boiler Operator/Maker',\n 'Bricklayer/Mason': 'Bricklayer/Mason',\n Carpenter: 'Carpenter',\n 'Carpet Installer': 'Carpet Installer',\n 'Concrete Worker': 'Concrete Worker',\n 'Constrct Proj Mgr': 'Construction - Project Manager',\n Contractor: 'Contractor',\n 'Crane Operator': 'Crane Operator',\n 'Electrician/Linesmn': 'Electrician/Linesman',\n 'ElevatorTech/Instl': 'Elevator Technician/Installer',\n 'FloorLayer/Finisher': 'Floor Layer/Finisher',\n 'Foreman/Supervisor': 'Foreman/Supervisor',\n Handyman: 'Handyman',\n 'Heat/Air Technician': 'Heat/Air Technician',\n Inspector: 'Inspector',\n Metalworker: 'Metalworker',\n Miner: 'Miner',\n 'Oil/GasDril/RigOpr': 'Oil/Gas Driller/Rig Operator',\n Painter: 'Painter',\n 'Plstr/Drywall/Stuc': 'Plaster/Drywall/Stucco',\n Plumber: 'Plumber',\n Roofer: 'Roofer',\n Disabled: 'Disabled',\n 'Audio-Visual Tech.': 'Audio-Visual Tech.',\n 'Child/DayCare Wrker': 'Child/Daycare Worker',\n Counselor: 'Counselor',\n 'Grad. Teaching/Asst': 'Graduate Teaching Assistant',\n 'Instructor-Vocation': 'Instructor-Vocation',\n 'Librarian/Curator': 'Librarian/Curator',\n 'Professor, College': 'Professor, College',\n Superintendent: 'Superintendent',\n 'Teacher, College': 'Teacher, College',\n 'Teacher, K-12': 'Teacher, K-12',\n 'Teaching Asst/Aide': 'Teaching Assistant/Aide',\n Tutor: 'Tutor',\n Actuary: 'Actuary',\n Analyst: 'Analyst',\n Architect: 'Architect',\n 'Clinical Data Coord.': 'Clinical Data Coordinator',\n Drafter: 'Drafter',\n Engineer: 'Engineer',\n 'Manager-Project': 'Manager-Project',\n 'Manager-R&D': 'Manager-R&D',\n Mathematician: 'Mathematician',\n 'Research Prog. Dir.': 'Research Program Director',\n Researcher: 'Researcher',\n Scientist: 'Scientist',\n Sociologist: 'Sociologist',\n 'Surveyor/Mapmaker': 'Surveyor/Mapmaker',\n Technician: 'Technician',\n Attorney: 'Attorney',\n 'Chief Executive': 'Chief Executive',\n Commissioner: 'Commissioner',\n 'Council member': 'Council member',\n 'Enlst Mil Prsnl E1-4': 'Enlisted Military Personnel (E1-4)',\n Legislator: 'Legislator',\n 'Mayor/City Manager': 'Mayor/City Manager',\n 'Meter Reader': 'Meter Reader',\n 'NCO (E5-9)': 'NCO (E5-9)',\n 'Officer-Commissiond': 'Officer-Commissioned',\n 'Officer-Warrant': 'Officer-Warrant',\n 'Park Ranger': 'Park Ranger',\n Planner: 'Planner',\n Postmaster: 'Postmaster',\n Regulator: 'Regulator',\n 'US Postal Worker': 'US Postal Worker',\n 'Homemaker/Houseprsn': 'Homemaker/House person',\n 'Engineer-Hardware': 'Engineer-Hardware',\n 'Engineer-Software': 'Engineer-Software',\n 'Engineer-Systems': 'Engineer-Systems',\n 'Manager-Systems': 'Manager-Systems',\n 'Network Admin': 'Network Administrator',\n Programmer: 'Programmer',\n 'Project Coordinator': 'Project Coordinator',\n 'Support Technician': 'Support Technician',\n 'Systems Security': 'Systems Security',\n 'Technical Writer': 'Technical Writer',\n 'Web Developer': 'Web Developer',\n 'Actuarial Clerk': 'Actuarial Clerk',\n 'Agent/Broker': 'Agent/Broker',\n 'Claims Adjuster': 'Claims Adjuster',\n 'Product Manager': 'Product Manager',\n 'Sales Rep': 'Sales Representative',\n 'Airport Sec Ofcr': 'Airport Security Officer',\n 'Animal Control Ofcr': 'Animal Control Officer',\n Bailiff: 'Bailiff',\n 'Corrections Officer': 'Corrections Officer',\n 'Court Clrk/Reporter': 'Court Clerk/Reporter',\n 'Deputy Sheriff': 'Deputy Sheriff',\n Dispatcher: 'Dispatcher',\n Examiner: 'Examiner',\n 'Fed Agt/Marshall': 'Federal Agent/Marshall',\n 'Fire Chief': 'Fire Chief',\n 'Fire Fighter/Supv.': 'Fire Fighter/Supervisor',\n 'Gaming Ofcr/Invest': 'Gaming Officer/Investigator',\n 'Highway Patrol Ofcr': 'Highway Patrol Officer',\n 'Judge/Hearing Ofcr': 'Judge/Hearing Officer',\n 'Legal Asst./Sec': 'Legal Assistant/Secretary',\n 'Paralegal/Law Clerk': 'Paralegal/Law Clerk',\n 'Police Chief': 'Police Chief',\n 'Police Det/Investgr': 'Police Detective/Investigator',\n 'Police Offcr/Supvr': 'Police Officer/Supervisor',\n 'Process Server': 'Process Server',\n 'Prvt Invest/Detec.': 'Private Investigator/Detective',\n 'Security Guard': 'Security Guard',\n Sheriff: 'Sheriff',\n 'Bldg Maint Engineer': 'Building Maintenance Engineer',\n 'Custodian/Janitor': 'Custodian/Janitor',\n Electrician: 'Electrician',\n 'Field Service Tech.': 'Field Service Technician',\n 'Heat/AirCond Repair': 'Heat/Air Conditioner Repairman',\n 'Housekeeper/Maid': 'Housekeeper/Maid',\n 'Lndscpe/Grnds Maint': 'Landscape/Grounds Maintenance',\n 'Maint Mechanic': 'Maintenance Mechanic',\n Mechanic: 'Mechanic',\n 'Factory Worker': 'Factory Worker',\n 'Furniture Finisher': 'Furniture Finisher',\n Jeweler: 'Jeweler',\n 'Machine Operator': 'Machine Operator',\n Packer: 'Packer',\n 'Plant Manager': 'Plant Manager',\n 'Printer/Bookbinder': 'Printer/Bookbinder',\n 'Quality Control': 'Quality Control',\n 'Refining Operator': 'Refining Operator',\n Shoemaker: 'Shoemaker',\n 'Tailor/Custom Sewer': 'Tailor/Custom Sewer',\n 'Textile Worker': 'Textile Worker',\n Upholsterer: 'Upholsterer',\n 'Assist-Med/Dent/Vet': 'Assistant - Medic/Dent/Vet',\n Clergy: 'Clergy',\n 'Client Care Worker': 'Client Care Worker',\n 'Dental Hygenist': 'Dental Hygienist',\n Dentist: 'Dentist',\n Doctor: 'Doctor',\n 'Hospice Volunteer': 'Hospice Volunteer',\n Mortician: 'Mortician',\n 'Nurse - C.N.A.': 'Nurse - C.N.A.',\n 'Nurse - LPN': 'Nurse - LPN',\n 'Nurse - RN': 'Nurse - RN',\n 'Nurse Practitioner': 'Nurse Practitioner',\n Optometrist: 'Optometrist',\n 'Paramedic/EM Tech': 'Paramedic/E.M. Technician',\n Pharmacist: 'Pharmacist',\n 'Social Worker': 'Social Worker',\n 'Support Services': 'Support Services',\n Therapist: 'Therapist',\n Veterinarian: 'Veterinarian',\n Caregiver: 'Caregiver',\n 'Dry Cleaner/Laundry': 'Dry Cleaner/Laundry',\n 'Hair Stylist/Barber': 'Hair Stylist/Barber',\n Housekeeper: 'Housekeeper',\n Manicurist: 'Manicurist',\n Masseuse: 'Masseuse',\n Nanny: 'Nanny',\n 'Pet Services': 'Pet Services',\n Baker: 'Baker',\n Bartender: 'Bartender',\n Bellhop: 'Bellhop',\n 'Bus Person': 'Bus Person',\n Caterer: 'Caterer',\n Chef: 'Chef',\n Concessionaire: 'Concessionaire',\n Concierge: 'Concierge',\n 'Cook-Rest/Cafeteria': 'Cook - Restaurant/Cafeteria',\n 'Cook/Wrkr-Fast Food': 'Cook/Worker-Fast Food',\n 'Delivery Person': 'Delivery Person',\n 'Desk Clerk': 'Desk Clerk',\n Dishwasher: 'Dishwasher',\n 'Food Prod/Packing': 'Food Production/Packing',\n 'Host/Maitre d': 'Host/Maitre d',\n Manager: 'Manager',\n Valet: 'Valet',\n 'Waiter/Waitress': 'Waiter/Waitress',\n 'Wine Steward': 'Wine Steward',\n Retired: 'Retired',\n 'Activity/Recre.Asst': 'Activity/Recreational Assistant',\n Agent: 'Agent',\n Athlete: 'Athlete',\n 'CampCounselor/Lead': 'Camp Counselor/Lead',\n Coach: 'Coach',\n 'Director, Program': 'Director, Program',\n 'Event Mgr/Promoter': 'Event Manager/Promoter',\n 'Life Guard': 'Life Guard',\n 'Mgr - Fitness Club': 'Manager - Fitness Club',\n 'Sales-Tkt/Mmbrshp': 'Sales-Ticket/Membership',\n 'SportsBrdcstr/Journ': 'Sports Broadcaster/Journalist',\n 'Trainer/Instructor': 'Trainer/Instructor',\n 'Umpire/Referee': 'Umpire/Referee',\n 'Graduate Student': 'Graduate Student',\n 'High school': 'High school',\n Undergraduate: 'Undergraduate',\n 'Air Traffic Control': 'Air Traffic Control',\n 'Airport Ops Crew': 'Airport Operations Crew',\n 'Bellhop/Porter': 'Bellhop/Porter',\n 'Crane Loader/Oper': 'Crane Loader/Operator',\n 'Driver-Bus/Strcar': 'Driver - Bus/Streetcar',\n 'Driver-Taxi/Limo': 'Driver-Taxi/Limo',\n 'Driver-Truck/Delvry': 'Driver-Truck/Delivery',\n 'Flight Attendant': 'Flight Attendant',\n 'Forklift Operator': 'Forklift Operator',\n Laborer: 'Laborer',\n Longshoreman: 'Longshoreman',\n 'Mate/Sailor': 'Mate/Sailor',\n 'Mgr Warehse/Dist': 'Manager - Warehouse/District',\n 'Parking Lot Attend': 'Parking Lot Attendant',\n 'Pilot/Capt/Eng': 'Pilot/Captain/Engineer',\n 'Railroad Worker': 'Railroad Worker',\n 'Shipping/RecClk': 'Shipping/Receiving Clerk',\n 'Subway/LgtRail Oper': 'Subway/Light Rail Operator',\n 'Ticket Agent': 'Ticket Agent',\n 'Transportation Spec': 'Transportation Specialist',\n Unemployed: 'Unemployed'\n} as const;\n\nexport const BOLT_OCCUPATIONS_BY_INDUSTRY = BOLT_DRIVER_OCCUPATIONS_BY_INDUSTRY;\nexport const BOLT_OCCUPATION_LABELS_FROM_BOLT = BOLT_DRIVER_OCCUPATION_LABELS_FROM_BOLT;\n","import { BOLT_DRIVER_EDUCATION_LEVEL_LABELS, BOLT_DRIVER_INDUSTRY_LABELS } from '../config/bolt-policy-option-labels';\nimport { BOLT_OCCUPATION_LABELS_FROM_BOLT } from '../config/bolt-industry-occupation-map';\n\nfunction normalizeByLabelMap(value: unknown, labelsByKey: Record<string, string>): unknown {\n if (typeof value !== 'string') return value;\n const raw = value.trim();\n if (!raw) return value;\n\n if (labelsByKey[raw]) return raw;\n\n const lowered = raw.toLowerCase();\n const key = Object.keys(labelsByKey).find((k) => k.toLowerCase() === lowered || labelsByKey[k]?.toLowerCase() === lowered);\n return key ?? value;\n}\n\nexport function normalizeIndustryValue(value: unknown): unknown {\n return normalizeByLabelMap(value, BOLT_DRIVER_INDUSTRY_LABELS);\n}\n\nexport function normalizeEducationLevelValue(value: unknown): unknown {\n return normalizeByLabelMap(value, BOLT_DRIVER_EDUCATION_LEVEL_LABELS);\n}\n\nexport function normalizeOccupationValue(value: unknown): unknown {\n return normalizeByLabelMap(value, BOLT_OCCUPATION_LABELS_FROM_BOLT as Record<string, string>);\n}\n\n// Backward-compatible aliases used across existing widget code.\nexport const normalizeDriverIndustryValue = normalizeIndustryValue;\nexport const normalizeDriverEducationLevelValue = normalizeEducationLevelValue;\nexport const normalizeDriverOccupationValue = normalizeOccupationValue;\n","import type { Question } from '@getcredify/credify-insurance-types';\nimport type { FormValues } from './form';\n\ntype AutoCoverageConditionKeys = {\n currentCarrierKey: string | null;\n effectiveDateKey: string | null;\n expirationDateKey: string | null;\n noInsuranceReasonKeys: ReadonlySet<string>;\n hideWhenNoPriorInsuranceKeys: ReadonlySet<string>;\n};\n\nfunction normalizeText(text: string): string {\n return text.trim().toLowerCase();\n}\n\nfunction parseDateOnly(value: unknown): number | null {\n if (typeof value !== 'string') return null;\n const match = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (!match) return null;\n\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) return null;\n if (month < 1 || month > 12 || day < 1 || day > 31) return null;\n\n const dt = new Date(Date.UTC(year, month - 1, day));\n if (dt.getUTCFullYear() !== year || dt.getUTCMonth() !== month - 1 || dt.getUTCDate() !== day) return null;\n return dt.getTime();\n}\n\nexport function hasAutoCoverageGap(values: FormValues, keys: AutoCoverageConditionKeys): boolean {\n if (!keys.effectiveDateKey || !keys.expirationDateKey) return false;\n const expiration = parseDateOnly(values[keys.expirationDateKey]);\n const effective = parseDateOnly(values[keys.effectiveDateKey]);\n if (expiration == null || effective == null) return false;\n return expiration < effective;\n}\n\nconst HOME_LAPSE_WIDGET_STAGES = new Set(['HomePolicy', 'BundlePolicy']);\n\n/**\n * Hide home-policy \"gap in coverage\" when there is no prior home carrier — only used on\n * {@link HOME_LAPSE_WIDGET_STAGES} where `lapse_in_coverage` appears.\n */\nexport function shouldShowLapseInCoverage(question: Question, values: FormValues, widgetStageKey: string | undefined): boolean {\n if (String(question.key ?? '') !== 'lapse_in_coverage') return true;\n if (!widgetStageKey || !HOME_LAPSE_WIDGET_STAGES.has(widgetStageKey)) return true;\n return values.home_prior_carrier_name !== 'NoPriorInsurance';\n}\n\nexport function resolveAutoCoverageConditionKeys(questions: Question[]): AutoCoverageConditionKeys {\n let currentCarrierKey: string | null = null;\n let effectiveDateKey: string | null = null;\n let expirationDateKey: string | null = null;\n const noInsuranceReasonKeys = new Set<string>();\n const hideWhenNoPriorInsuranceKeys = new Set<string>();\n\n const processQuestion = (q: Question) => {\n const key = String(q.key ?? '');\n const prompt = normalizeText(String(q.question ?? ''));\n\n // First match wins — auto-specific keys take precedence when already set at the top level.\n if (\n !currentCarrierKey &&\n (key === 'auto_prior_carrier_name' || key === 'home_prior_carrier_name' || prompt.includes('current auto insurance company'))\n ) {\n currentCarrierKey = key;\n }\n\n if (!effectiveDateKey && (key === 'effective_date' || prompt.includes('when do you need your insurance to begin'))) {\n effectiveDateKey = key;\n }\n\n if (\n !expirationDateKey &&\n (key === 'auto_prior_expiration_date' || key === 'home_prior_expiration_date' || prompt.includes('when does the current policy expire'))\n ) {\n expirationDateKey = key;\n }\n\n if (\n key === 'auto_reason_for_no_insurance' ||\n prompt.includes('reason you are not currently insured') ||\n prompt.includes('reason for lapse in coverage')\n ) {\n noInsuranceReasonKeys.add(key);\n }\n\n if (\n key === 'auto_prior_years' ||\n key === 'auto_prior_months' ||\n key === 'auto_continuous_coverage_years' ||\n key === 'auto_prior_expiration_date' ||\n key === 'auto_current_annual_premium_cents' ||\n key === 'auto_prior_liability_limit'\n ) {\n hideWhenNoPriorInsuranceKeys.add(key);\n }\n };\n\n // First pass: flat scan of top-level questions so auto-specific keys take precedence\n // over any home-specific keys that may appear in nested conditionals.\n questions.forEach(processQuestion);\n\n // Second pass: recurse into conditional branches to find keys that are nested\n // (e.g. home_prior_expiration_date lives inside a home_prior_carrier_name conditional).\n // \"First match wins\" guards above prevent top-level keys from being overwritten.\n const recurse = (list: ReadonlyArray<Question>) => {\n list.forEach((q) => {\n (q.conditionals ?? []).forEach((c) => {\n const children = (c.conditionalQuestions ?? []) as unknown as Question[];\n children.forEach(processQuestion);\n recurse(children);\n });\n });\n };\n recurse(questions);\n\n return {\n currentCarrierKey,\n effectiveDateKey,\n expirationDateKey,\n noInsuranceReasonKeys,\n hideWhenNoPriorInsuranceKeys\n };\n}\n\nexport function shouldRequireNoInsuranceReason(values: FormValues, keys: AutoCoverageConditionKeys): boolean {\n // Only when the *home* prior-carrier field is the active carrier context (never on pure auto policy stages).\n if (\n keys.currentCarrierKey === 'home_prior_carrier_name' &&\n values.home_prior_carrier_name === 'NoPriorInsurance' &&\n values.auto_prior_carrier_name !== 'NoPriorInsurance'\n ) {\n return false;\n }\n\n const selectedCarrier = keys.currentCarrierKey ? values[keys.currentCarrierKey] : undefined;\n if (selectedCarrier === 'NoPriorInsurance') return true;\n\n if (!keys.effectiveDateKey || !keys.expirationDateKey) return false;\n\n // Home prior expiration vs effective: do not require lapse reason (auto still uses auto expiration below).\n if (keys.expirationDateKey === 'home_prior_expiration_date' && hasAutoCoverageGap(values, keys)) {\n return false;\n }\n\n return hasAutoCoverageGap(values, keys);\n}\n\nexport function shouldShowNoInsuranceReason(question: Question, values: FormValues, keys: AutoCoverageConditionKeys): boolean {\n const key = String(question.key ?? '');\n\n if (keys.noInsuranceReasonKeys.has(key)) {\n if (\n keys.currentCarrierKey === 'home_prior_carrier_name' &&\n values.home_prior_carrier_name === 'NoPriorInsurance' &&\n values.auto_prior_carrier_name !== 'NoPriorInsurance'\n ) {\n return false;\n }\n }\n\n const selectedCarrier = keys.currentCarrierKey ? values[keys.currentCarrierKey] : undefined;\n const hasNoPriorInsurance = selectedCarrier === 'NoPriorInsurance';\n\n if (hasNoPriorInsurance && keys.hideWhenNoPriorInsuranceKeys.has(key)) {\n return false;\n }\n\n if (!keys.noInsuranceReasonKeys.has(key)) return true;\n if (hasNoPriorInsurance) return true;\n return shouldRequireNoInsuranceReason(values, keys);\n}\n\nexport function isNoInsuranceReasonQuestion(question: Question, keys: AutoCoverageConditionKeys): boolean {\n const key = String(question.key ?? '');\n return keys.noInsuranceReasonKeys.has(key);\n}\n","// cspell:disable\n\n/**\n * Static fallback list of vehicle makes. Used when the vehicle options API\n * has not yet responded or is unreachable. The canonical source of makes\n * per year is the getVehicleOptions Lambda endpoint.\n */\nexport const BOLT_VEHICLE_MAKE_OPTIONS = [\n 'ACURA',\n 'ALFA ROMEO',\n 'ASTON MARTIN',\n 'AUDI',\n 'BENTLEY',\n 'BMW',\n 'BUGATTI',\n 'BUICK',\n 'CADILLAC',\n 'CHEVROLET',\n 'CHRYSLER',\n 'CRUISE',\n 'DODGE',\n 'FERRARI',\n 'FIAT',\n 'FORD',\n 'FREIGHTLINER',\n 'GENESIS',\n 'GLOBAL ELECTRIC MOTORS',\n 'GMC',\n 'HONDA',\n 'HYUNDAI',\n 'INFINITI',\n 'JAGUAR',\n 'JEEP',\n 'KARMA AUTOMOTIVE',\n 'KIA',\n 'LAMBORGHINI',\n 'LAND ROVER',\n 'LEXUS',\n 'LINCOLN',\n 'LOTUS',\n 'MASERATI',\n 'MAZDA',\n 'MCLAREN AUTOMOTIVE',\n 'MERCEDES-BENZ',\n 'MINI',\n 'MITSUBISHI',\n 'NISSAN',\n 'POLESTAR',\n 'PORSCHE',\n 'RAM',\n 'ROLLS-ROYCE',\n 'SUBARU',\n 'TESLA',\n 'TOYOTA',\n 'VOLKSWAGEN',\n 'VOLVO'\n] as const;\n","const QUOTE_ID_KEY = 'credify_quote_id';\nconst AUTH_TOKEN_KEY = 'credify_auth_token';\n\n/**\n * Save quoteId to localStorage\n */\nexport function saveQuoteId(quoteId: string): void {\n try {\n localStorage.setItem(QUOTE_ID_KEY, quoteId);\n } catch (error) {\n console.error('Failed to save quoteId to localStorage:', error);\n }\n}\n\n/**\n * Load quoteId from localStorage\n */\nexport function loadQuoteId(): string | null {\n try {\n return localStorage.getItem(QUOTE_ID_KEY);\n } catch (error) {\n console.error('Failed to load quoteId from localStorage:', error);\n return null;\n }\n}\n\n/**\n * Clear quoteId from localStorage\n */\nexport function clearQuoteId(): void {\n try {\n localStorage.removeItem(QUOTE_ID_KEY);\n } catch (error) {\n console.error('Failed to clear quoteId from localStorage:', error);\n }\n}\n\n/**\n * Save authToken to localStorage\n */\nexport function saveAuthToken(token: string): void {\n try {\n localStorage.setItem(AUTH_TOKEN_KEY, token);\n } catch (error) {\n console.error('Failed to save authToken to localStorage:', error);\n }\n}\n\n/**\n * Load authToken from localStorage\n */\nexport function loadAuthToken(): string | null {\n try {\n return localStorage.getItem(AUTH_TOKEN_KEY);\n } catch (error) {\n console.error('Failed to load authToken from localStorage:', error);\n return null;\n }\n}\n\n/**\n * Clear authToken from localStorage\n */\nexport function clearAuthToken(): void {\n try {\n localStorage.removeItem(AUTH_TOKEN_KEY);\n } catch (error) {\n console.error('Failed to clear authToken from localStorage:', error);\n }\n}\n\n/**\n * Clear all quote-related data from localStorage\n */\nexport function clearAllQuoteData(): void {\n clearQuoteId();\n clearAuthToken();\n}\n","import type { Stage, Question, GetRatesResponse } from '@getcredify/credify-insurance-types';\nimport type { Quote } from '@getcredify/credify-insurance-db';\nimport type { FormValues } from './form';\nimport { saveAuthToken, loadAuthToken, clearAuthToken as clearAuthTokenStorage } from './storage';\n\nconst BASE_URL = 'https://api.getcredify.com';\n\n// Store JWT token in memory\nlet authToken: string | null = null;\n\nexport function setAuthToken(token: string): void {\n authToken = token;\n saveAuthToken(token);\n}\n\nexport function getAuthToken(): string | null {\n return authToken;\n}\n\nexport function loadAuthTokenFromStorage(): void {\n const storedToken = loadAuthToken();\n if (storedToken) {\n authToken = storedToken;\n }\n}\n\nexport function clearAuthToken(): void {\n authToken = null;\n clearAuthTokenStorage();\n}\n\nasync function makeAuthenticatedRequest(url: string, body: object): Promise<Response> {\n const headers: HeadersInit = {\n 'Content-Type': 'application/json'\n };\n\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n });\n\n if (!response.ok) {\n let errorMessage = `Request failed with status ${response.status}`;\n try {\n const errorData = await response.json();\n errorMessage = errorData.error || errorMessage;\n } catch {\n errorMessage = response.statusText || errorMessage;\n }\n const error = new Error(errorMessage) as Error & { statusCode?: number };\n error.statusCode = response.status;\n throw error;\n }\n\n return response;\n}\n\nasync function parseJsonOrEmpty<T>(response: Response): Promise<T> {\n try {\n return (await response.json()) as T;\n } catch {\n return {} as T;\n }\n}\n\nexport async function getQuestionsByStage(stage: Stage, quoteId?: string): Promise<{ questions: Question[] }> {\n const payload = quoteId ? { stage, quoteId } : { stage };\n const response = await makeAuthenticatedRequest(`${BASE_URL}/get-questions-by-stage`, payload);\n const data = await response.json();\n return data;\n}\n\nexport async function getStagesForQuote(quoteId?: string): Promise<{ stages: Stage[] }> {\n const body = quoteId ? { quoteId } : {};\n const response = await makeAuthenticatedRequest(`${BASE_URL}/get-stages-for-quote`, body);\n const data = await response.json();\n return data;\n}\n\nexport async function createQuote(phone: string): Promise<{ quoteId: string }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/create-quote`, { phone });\n const data = await response.json();\n if (!data || typeof data !== 'object' || !data.quoteId) {\n throw new Error(`Invalid createQuote response: ${JSON.stringify(data)}`);\n }\n return data;\n}\n\nexport async function updateQuote(\n payload: FormValues & { current_stage?: string },\n getRates: boolean,\n quoteId?: string\n): Promise<Record<string, unknown>> {\n // If we have a token, use it. Otherwise, send quoteId in body (for pre-verification stage)\n // Only include quoteId if it's a valid non-empty string\n const body: { payload: FormValues & { current_stage?: string }; getRates: boolean; quoteId?: string } = { payload, getRates };\n if (quoteId && typeof quoteId === 'string' && quoteId.trim() !== '') {\n body.quoteId = quoteId;\n }\n const response = await makeAuthenticatedRequest(`${BASE_URL}/update-quote`, body);\n const data = await parseJsonOrEmpty<Record<string, unknown>>(response);\n return data;\n}\n\nexport async function verifyQuote(quoteId: string, smsCode: string): Promise<{ isVerified: boolean; token: string | null }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/verify-quote`, { quoteId, smsCode });\n const data = await response.json();\n return data;\n}\n\nexport async function isSupportedState(state: string): Promise<{ isSupported: boolean }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/is-supported-state`, { state });\n const data = await response.json();\n return data;\n}\n\nexport async function getRates(): Promise<{ rates: GetRatesResponse }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/get-rates`, {});\n const data = await response.json();\n return data;\n}\n\nexport async function getQuote(quoteId?: string): Promise<{ quote: Quote }> {\n // If we have a token, use it. Otherwise, send quoteId in body (for pre-verification stage)\n const body = quoteId ? { quoteId } : {};\n const response = await makeAuthenticatedRequest(`${BASE_URL}/get-quote`, body);\n const data = await response.json();\n return data;\n}\n\nexport async function getVehicleOptions(params: {\n quoteId: string;\n year?: number;\n make?: string;\n model?: string;\n}): Promise<{ ready?: boolean; makes?: string[]; models?: string[]; bodyStyles?: string[] }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/get-vehicle-options`, params);\n return response.json();\n}\n\nexport async function decodeVin(params: {\n quoteId: string;\n vin: string;\n}): Promise<{ year?: number; make?: string; model?: string; bodyStyle?: string; error?: string }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/get-vehicle-options`, { ...params, action: 'vinDecode' });\n return response.json();\n}\n\nexport async function requestBind(quoteRateId: string): Promise<{ success?: boolean }> {\n const response = await makeAuthenticatedRequest(`${BASE_URL}/request-bind`, { quoteRateId });\n const data = await response.json();\n // Backend returns {} on success, so return it with success: true\n return data && typeof data === 'object' && 'success' in data ? data : { success: true };\n}\n","import { z } from 'zod';\n\n// NJ-only auto policy field keys (Quote columns). Backend gates by state; widget\n// mirrors that list so non-NJ flows never render or validate these fields.\nexport const NJ_POLICY_FIELD_KEYS = ['additional_pip', 'tort_threshold', 'pip_coverage_type', 'extended_medical', 'policy_pip_deductible'] as const;\n\nexport const NJ_POLICY_FIELD_KEY_SET: ReadonlySet<string> = new Set([...NJ_POLICY_FIELD_KEYS, 'is_corporation']);\n\n// Cross-field validation (current widget requirements):\n// - pip_coverage_type=Secondary requires has_health_insurance_auto_accident=true.\nexport const njPolicySchema = z\n .object({\n additional_pip: z.enum([\n 'cov100_10400_LIMITED',\n 'cov125_13000_LIMITED',\n 'cov175_18200_LIMITED',\n 'cov250_26000_LIMITED',\n 'cov400_41600_LIMITED',\n 'cov500_52000_LIMITED',\n 'cov600_62400_LIMITED',\n 'cov700_72800_LIMITED',\n 'cov100_UNLIMITED',\n 'cov125_UNLIMITED',\n 'cov175_UNLIMITED',\n 'cov250_UNLIMITED',\n 'cov400_UNLIMITED',\n 'cov500_UNLIMITED',\n 'cov600_UNLIMITED',\n 'cov700_UNLIMITED'\n ]),\n tort_threshold: z.enum(['Verbal_Threshold', 'Zero_Threshold', 'Full', 'Limited']),\n pip_coverage_type: z.enum(['Primary', 'Secondary']),\n extended_medical: z.enum(['cov1000', 'cov10000']),\n policy_pip_deductible: z.enum(['cov250', 'cov500', 'cov1000', 'cov2000', 'cov2500']),\n has_health_insurance_auto_accident: z.boolean().nullable().optional()\n })\n .superRefine((data, ctx) => {\n if (data.pip_coverage_type === 'Secondary' && data.has_health_insurance_auto_accident !== true) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['pip_coverage_type'],\n message: 'Secondary PIP coverage requires health insurance that covers auto accidents.'\n });\n }\n });\n\nexport type NJPolicyInput = z.input<typeof njPolicySchema>;\n\nexport function validateNjPolicy(input: Partial<NJPolicyInput>): { success: boolean; errors: Record<string, string> } {\n const result = njPolicySchema.safeParse(input);\n if (result.success) return { success: true, errors: {} };\n const errors: Record<string, string> = {};\n for (const issue of result.error.issues) {\n const key = String(issue.path[0] ?? '');\n if (key && !errors[key]) errors[key] = issue.message;\n }\n return { success: false, errors };\n}\n","import { useMemo, useState, useEffect, useRef, useCallback } from 'react';\n\nimport { type Question } from '@getcredify/credify-insurance-types';\n\nimport {\n TextInput,\n NumericInput,\n EmailInput,\n TelInput,\n UrlInput,\n PasswordInput,\n TextArea,\n DateInput,\n Checkbox,\n Radio,\n RadioGroup,\n SelectInput,\n AddressAutocomplete\n} from './index';\nimport { Field } from './Field';\n\nimport { decorateKeys } from '../utils/decorateKeys';\nimport { slugify, validateQuestions, isBlankValue, coerceNumber, type FormValues } from '../utils/form';\nimport { isQuestionHiddenInWidget } from '../utils/hiddenQuestions';\nimport { validateFieldSchema, CROSS_FIELD_RULES, isVinValidFormat } from '../utils/validation';\nimport { normalizeIndustryValue } from '../utils/industry-occupation-normalizers';\nimport {\n resolveAutoCoverageConditionKeys,\n hasAutoCoverageGap,\n shouldRequireNoInsuranceReason,\n shouldShowNoInsuranceReason,\n shouldShowLapseInCoverage,\n isNoInsuranceReasonQuestion\n} from '../utils/autoCoverageCondition';\nimport {\n BOLT_AUTO_PRIOR_CARRIER_LABELS,\n BOLT_POLICY_AUTO_DEATH_INDEMNITY_LABELS,\n BOLT_POLICY_BI_LABELS,\n BOLT_POLICY_MP_LABELS,\n BOLT_POLICY_PD_LABELS,\n BOLT_POLICY_PIP_LABELS,\n BOLT_POLICY_UM_LABELS,\n BOLT_POLICY_UMPD_LABELS,\n BOLT_VEHICLE_COMP_COLL_DEDUCTIBLE_LABELS,\n BOLT_VEHICLE_TOWING_AND_LABOR_LABELS,\n BOLT_VEHICLE_TRANSPORTATION_EXPENSE_LABELS,\n BOLT_DRIVER_EDUCATION_LEVEL_LABELS,\n BOLT_DRIVER_INDUSTRY_LABELS,\n BOLT_HOME_PRIOR_CARRIER_LABELS,\n BOLT_NO_PRIOR_AUTO_INSURANCE_REASON_LABELS,\n BOLT_PRIOR_LIABILITY_LIMIT_LABELS,\n BOLT_TYPE_OF_RESIDENCE_LABELS,\n BOLT_VEHICLE_PRIMARY_USE_LABELS,\n BOLT_HOME_ARCHITECTURAL_STYLE_LABELS,\n BOLT_HOME_DWELLING_TYPE_LABELS,\n BOLT_HOME_OCCUPANCY_TYPE_LABELS,\n BOLT_HOME_CONSTRUCTION_QUALITY_LABELS,\n BOLT_HOME_CONSTRUCTION_TYPE_LABELS,\n BOLT_HOME_FOUNDATION_TYPE_LABELS,\n BOLT_HOME_BUILDING_OVER_WATER_LABELS,\n BOLT_HOME_NUMBER_OF_STORIES_LABELS,\n BOLT_HOME_EXTERIOR_WALLS_LABELS,\n BOLT_HOME_ROOF_TYPE_LABELS,\n BOLT_HOME_ROOF_SHAPE_LABELS,\n BOLT_HOME_ROOF_UPDATED_LABELS,\n BOLT_HOME_HEATING_TYPE_LABELS,\n BOLT_HOME_OIL_TANK_LOCATION_LABELS,\n BOLT_HOME_BASEMENT_TYPE_LABELS,\n BOLT_HOME_PLUMBING_TYPE_LABELS,\n BOLT_HOME_PERSONAL_LIABILITY_LABELS,\n BOLT_HOME_MEDICAL_PAYMENTS_LABELS,\n BOLT_HOME_ALL_PERILS_DEDUCTIBLE_LABELS,\n BOLT_HOME_WINDSTORM_DEDUCTIBLE_LABELS,\n BOLT_HOME_DISTANCE_FIRE_HYDRANT_LABELS,\n BOLT_HOME_DISTANCE_FIRE_STATION_LABELS,\n BOLT_HOME_EMPLOYMENT_INDUSTRY_LABELS,\n BOLT_HOME_MARITAL_STATUS_LABELS,\n BOLT_HOME_GENDER_LABELS,\n BOLT_HOME_LOSS_DESCRIPTION_LABELS,\n // New Jersey specific fields from Bolt HAR (conditionally shown for NJ state)\n BOLT_POLICY_TORT_THRESHOLD_LABELS,\n BOLT_PIP_COVERAGE_TYPE_LABELS,\n BOLT_EXTENDED_MEDICAL_LABELS,\n BOLT_ADDITIONAL_PIP_LABELS,\n BOLT_PIP_DEDUCTIBLE_LABELS\n} from '../config/bolt-policy-option-labels';\nimport { BOLT_VEHICLE_MAKE_OPTIONS } from '../config/bolt-vehicle-option-chains';\nimport { getVehicleOptions, decodeVin } from '../utils/api';\nimport { BOLT_OCCUPATION_LABELS_FROM_BOLT, BOLT_OCCUPATIONS_BY_INDUSTRY } from '../config/bolt-industry-occupation-map';\n\nconst AUTO_GAP_VISIBLE_KEYS = new Set(['auto_prior_years', 'auto_prior_months', 'auto_continuous_coverage_years']);\n\n/* ------------------------------------------------------------------ */\n/* Human-readable display labels for raw API/DB option values */\n/* ------------------------------------------------------------------ */\n\n/**\n * Maps raw DB/API option values to user-friendly display labels for select inputs.\n * Any value NOT in this map falls back to the raw value itself.\n */\nconst OPTION_DISPLAY_LABELS: Record<string, string> = {\n // Prior liability limit (ZywavePriorLiabilityLimit format → readable label)\n None: 'None',\n '30000/60000/25000': '30/60k',\n '30000/60000/30000': '30/60k',\n '50000/100000/30000': '50/100k',\n '50000/100000/50000': '50/100k',\n '100000/300000/50000': '100/300k',\n '100000/300000/100000': '100/300k',\n '250000/500000/100000': '250/500k',\n '250000/500000/250000': '250/500k',\n '300000/500000/250000': '300/500k',\n '300000/500000/300000': '300/500k',\n '500000/500000/300000': '500k CSL',\n '500000/500000/500000': '500k CSL',\n '500000/1000000/300000': '500k/1M',\n '500000/1000000/500000': '500k/1M'\n};\n\nconst OPTION_DISPLAY_LABELS_BY_KEY: Record<string, Record<string, string>> = {\n auto_prior_carrier_name: BOLT_AUTO_PRIOR_CARRIER_LABELS,\n auto_prior_liability_limit: BOLT_PRIOR_LIABILITY_LIMIT_LABELS,\n auto_reason_for_no_insurance: BOLT_NO_PRIOR_AUTO_INSURANCE_REASON_LABELS,\n residence_type: BOLT_TYPE_OF_RESIDENCE_LABELS,\n home_prior_carrier_name: BOLT_HOME_PRIOR_CARRIER_LABELS,\n policy_bi: BOLT_POLICY_BI_LABELS,\n policy_um: BOLT_POLICY_UM_LABELS,\n policy_pd: BOLT_POLICY_PD_LABELS,\n policy_mp: BOLT_POLICY_MP_LABELS,\n policy_umpd: BOLT_POLICY_UMPD_LABELS,\n policy_pip: BOLT_POLICY_PIP_LABELS,\n policy_auto_death_indemnity: BOLT_POLICY_AUTO_DEATH_INDEMNITY_LABELS,\n vehicle_comp_deductible: BOLT_VEHICLE_COMP_COLL_DEDUCTIBLE_LABELS,\n vehicle_coll_deductible: BOLT_VEHICLE_COMP_COLL_DEDUCTIBLE_LABELS,\n vehicle_towing_and_labor: BOLT_VEHICLE_TOWING_AND_LABOR_LABELS,\n vehicle_transportation_expense: BOLT_VEHICLE_TRANSPORTATION_EXPENSE_LABELS,\n education_level: BOLT_DRIVER_EDUCATION_LEVEL_LABELS,\n industry: BOLT_DRIVER_INDUSTRY_LABELS,\n occupation: BOLT_OCCUPATION_LABELS_FROM_BOLT as Record<string, string>,\n usage: BOLT_VEHICLE_PRIMARY_USE_LABELS,\n architectural_style: BOLT_HOME_ARCHITECTURAL_STYLE_LABELS,\n dwelling_type: BOLT_HOME_DWELLING_TYPE_LABELS,\n occupancy_type: BOLT_HOME_OCCUPANCY_TYPE_LABELS,\n construction_quality: BOLT_HOME_CONSTRUCTION_QUALITY_LABELS,\n construction_type: BOLT_HOME_CONSTRUCTION_TYPE_LABELS,\n foundation_type: BOLT_HOME_FOUNDATION_TYPE_LABELS,\n located_over_water: BOLT_HOME_BUILDING_OVER_WATER_LABELS,\n number_of_stories: BOLT_HOME_NUMBER_OF_STORIES_LABELS,\n exterior_wall_type: BOLT_HOME_EXTERIOR_WALLS_LABELS,\n roof_material_type: BOLT_HOME_ROOF_TYPE_LABELS,\n roof_shape: BOLT_HOME_ROOF_SHAPE_LABELS,\n roof_updated_type: BOLT_HOME_ROOF_UPDATED_LABELS,\n heating_type: BOLT_HOME_HEATING_TYPE_LABELS,\n oil_tank_location: BOLT_HOME_OIL_TANK_LOCATION_LABELS,\n basement_type: BOLT_HOME_BASEMENT_TYPE_LABELS,\n plumbing_type: BOLT_HOME_PLUMBING_TYPE_LABELS,\n personal_liability: BOLT_HOME_PERSONAL_LIABILITY_LABELS,\n dwelling_medical_payments: BOLT_HOME_MEDICAL_PAYMENTS_LABELS,\n all_perils_deductible: BOLT_HOME_ALL_PERILS_DEDUCTIBLE_LABELS,\n windstorm_deductible: BOLT_HOME_WINDSTORM_DEDUCTIBLE_LABELS,\n distance_from_fire_hydrant_ft: BOLT_HOME_DISTANCE_FIRE_HYDRANT_LABELS,\n distance_from_fire_station_miles: BOLT_HOME_DISTANCE_FIRE_STATION_LABELS,\n employment_industry: BOLT_HOME_EMPLOYMENT_INDUSTRY_LABELS,\n marital_status: BOLT_HOME_MARITAL_STATUS_LABELS,\n gender: BOLT_HOME_GENDER_LABELS,\n co_applicant_employment_industry: BOLT_HOME_EMPLOYMENT_INDUSTRY_LABELS,\n co_applicant_marital_status: BOLT_HOME_MARITAL_STATUS_LABELS,\n co_applicant_gender: BOLT_HOME_GENDER_LABELS,\n description: BOLT_HOME_LOSS_DESCRIPTION_LABELS,\n // New Jersey specific auto policy fields from Bolt HAR (conditionally shown for NJ state)\n tort_threshold: BOLT_POLICY_TORT_THRESHOLD_LABELS,\n pip_coverage_type: BOLT_PIP_COVERAGE_TYPE_LABELS,\n extended_medical: BOLT_EXTENDED_MEDICAL_LABELS,\n additional_pip: BOLT_ADDITIONAL_PIP_LABELS,\n policy_pip_deductible: BOLT_PIP_DEDUCTIBLE_LABELS\n};\n\nconst VEHICLE_MODEL_FALLBACK_OPTIONS = ['OTHER / NOT LISTED'] as const;\nconst VEHICLE_BODY_STYLE_FALLBACK_OPTIONS = ['SEDAN', 'SUV', 'COUPE', 'HATCHBACK', 'PICKUP', 'VAN', 'WAGON', 'OTHER'] as const;\nconst DRIVER_OCCUPATION_FALLBACK_OPTIONS = ['Other'] as const;\n\nfunction toDateInputValue(d: Date): string {\n const year = d.getUTCFullYear();\n const month = String(d.getUTCMonth() + 1).padStart(2, '0');\n const day = String(d.getUTCDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\nfunction coerceDigitsOnlyNumber(raw: string): number | undefined {\n const digitsOnly = raw.replace(/\\D+/g, '');\n if (digitsOnly === '') return undefined;\n return coerceNumber(digitsOnly);\n}\n\nfunction isDisallowedNumberKey(key: string): boolean {\n return key === '-' || key === '+' || key === '.' || key === 'e' || key === 'E';\n}\n\n/**\n * Maximum number of digits allowed per field, derived from each field's max value.\n * Used to cap keyboard input before validation runs.\n */\nconst MAX_INPUT_DIGITS_BY_KEY: Record<string, number> = {\n // Year fields — 4 digits (max = current year ~2026)\n year_built: 4,\n year_roof_updated: 4,\n heating_update_year: 4,\n plumbing_update_year: 4,\n electrical_update_year: 4,\n // max 999,999 → 6 digits\n total_area_sq_ft: 6,\n // max 999,999,999 → 9 digits\n sale_price_cents: 9,\n dwelling_replacement_cost: 9,\n other_structures_coverage: 9,\n // max 9,999,999 → 7 digits\n personal_property_coverage: 7,\n amount_paid_cents: 7,\n // max 99,999,999 → 8 digits\n loss_of_use_coverage: 8,\n // max 99 → 2 digits\n home_prior_years: 2,\n home_continuous_coverage_years: 2,\n number_of_dogs: 2,\n number_of_units: 2,\n months_at_address: 2,\n years_at_address: 3,\n years_at_prior_address: 3,\n // max 9,999 → 4 digits\n distance_to_coast_miles: 4,\n // max 8 → 1 digit\n household_size: 1,\n // max 5 → 1 digit\n number_of_families: 1,\n // max 3 → 1 digit\n number_of_mortgagees: 1,\n\n // ── Auto vehicle fields ──\n // max 100,000 → 6 digits\n annual_mileage: 6,\n // max 9,999 → 4 digits\n miles_to_work: 4,\n // max 9,999,999 → 7 digits\n custom_equipment_value_cents: 7,\n cost_new_value_cents: 7,\n stated_value_amount_cents: 7,\n\n // ── Auto driver fields ──\n // max 9,999,999 → 7 digits\n property_damage_amount_paid_cents: 7,\n personal_injury_amount_paid_cents: 7,\n\n // ── Auto policy fields ──\n // max 9,999,999 → 7 digits\n auto_current_annual_premium_cents: 7,\n // max 99 → 2 digits\n auto_prior_years: 2,\n auto_prior_months: 2,\n auto_continuous_coverage_years: 2\n};\n\n// Maps question keys to HTML `autocomplete` tokens.\n// See: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/autocomplete\n// Keys absent from this map render no attribute (browser default).\n// Use 'off' to explicitly block autofill where browser suggestions would be wrong.\nconst AUTOCOMPLETE_BY_KEY: Record<string, string> = {\n first_name: 'given-name',\n last_name: 'family-name',\n co_applicant_first_name: 'given-name',\n co_applicant_last_name: 'family-name',\n date_of_birth: 'bday',\n co_applicant_date_of_birth: 'bday',\n sms_code: 'one-time-code',\n vin: 'off',\n license_number: 'off',\n effective_date: 'off'\n};\n\nfunction getDateInputConstraints(key: string): { min?: string; max?: string } {\n const now = new Date();\n const today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));\n\n if (key === 'effective_date') {\n const max = new Date(Date.UTC(today.getUTCFullYear(), today.getUTCMonth() + 3, today.getUTCDate()));\n return { min: toDateInputValue(today), max: toDateInputValue(max) };\n }\n\n if (key === 'home_prior_expiration_date') {\n const min = new Date(Date.UTC(today.getUTCFullYear() - 1, today.getUTCMonth(), today.getUTCDate()));\n const max = new Date(Date.UTC(today.getUTCFullYear() + 1, today.getUTCMonth(), today.getUTCDate()));\n return { min: toDateInputValue(min), max: toDateInputValue(max) };\n }\n\n // Loss date — cannot be in the future\n if (key === 'date_of_incident') {\n return { max: toDateInputValue(today) };\n }\n\n // Home purchase date — cannot be in the future\n if (key === 'move_in_date') {\n return { max: toDateInputValue(today) };\n }\n\n // Vehicle purchase date — cannot be in the future\n if (key === 'purchase_date') {\n return { max: toDateInputValue(today) };\n }\n\n // Driver date of birth — cannot be in the future\n if (key === 'date_of_birth') {\n return { max: toDateInputValue(today) };\n }\n\n // Date first licensed — cannot be in the future\n if (key === 'date_first_licensed') {\n return { max: toDateInputValue(today) };\n }\n\n // Accident / violation occurred_at — cannot be in the future\n if (key === 'occurred_at') {\n return { max: toDateInputValue(today) };\n }\n\n // Defensive driving course date — cannot be in the future\n if (key === 'accident_prevention_course_date') {\n return { max: toDateInputValue(today) };\n }\n\n // Auto prior policy expiration — 1 year window\n if (key === 'auto_prior_expiration_date') {\n const min = new Date(Date.UTC(today.getUTCFullYear() - 1, today.getUTCMonth(), today.getUTCDate()));\n const max = new Date(Date.UTC(today.getUTCFullYear() + 1, today.getUTCMonth(), today.getUTCDate()));\n return { min: toDateInputValue(min), max: toDateInputValue(max) };\n }\n\n return {};\n}\n\n/* ------------------------------------------------------------------ */\n/* Occupation visibility helper */\n/* ------------------------------------------------------------------ */\n\n/**\n * Industries where an occupation sub-selection does not apply.\n * When the paired employment_industry is one of these, the occupation\n * question is hidden entirely.\n */\nconst INDUSTRIES_WITHOUT_OCCUPATION = new Set(['Disabled', 'Retired', 'Unemployed', 'Other']);\n\nfunction shouldShowOccupation(question: Question, values: FormValues, scopePath?: ScopePath): boolean {\n const key = String(question.key ?? '');\n if (key !== 'occupation' && key !== 'co_applicant_occupation') return true;\n if (key === 'co_applicant_occupation') return true;\n const driverIndustry = scopedRead(values, scopePath, 'industry');\n const homeIndustry = scopedRead(values, scopePath, 'employment_industry');\n const industry = String(driverIndustry ?? homeIndustry ?? '').trim();\n return !INDUSTRIES_WITHOUT_OCCUPATION.has(industry);\n}\n\n/**\n * New Jersey requires additional auto policy fields and applicant questions that other\n * states do not. These fields are conditionally shown based on the selected state.\n */\nimport { NJ_POLICY_FIELD_KEY_SET as NJ_SPECIFIC_KEYS } from '../utils/njPolicyFields';\n\n/**\n * Robust NJ state detection that handles:\n * - \"NJ\", \"nj\", \"N.J.\", \"New Jersey\", \"new jersey\", etc.\n * - Both short code (from Google Places) and full name (from dropdown/DB)\n */\nfunction isNjSelected(values: FormValues): boolean {\n const stateValue = values.state ?? values.State ?? values['state'] ?? values['State'] ?? '';\n if (typeof stateValue !== 'string' || !stateValue.trim()) return false;\n\n const normalized = stateValue.trim().toLowerCase();\n return normalized === 'nj' || normalized === 'n.j.' || normalized === 'n.j' || normalized === 'new jersey';\n}\n\nfunction shouldShowNJField(question: Question, values: FormValues): boolean {\n const key = String(question.key ?? '');\n if (!NJ_SPECIFIC_KEYS.has(key)) return true;\n return isNjSelected(values);\n}\n\n/** Keys listed as globally hidden but shown in NJ (matches applicant/policy expectations). */\nfunction isNjUnhiddenField(key: string, values: FormValues): boolean {\n const keyStr = String(key ?? '');\n const isNjField = NJ_SPECIFIC_KEYS.has(keyStr) || keyStr === 'has_health_insurance_auto_accident' || keyStr === 'is_corporation';\n return isNjSelected(values) && isNjField;\n}\n\nfunction shouldSuppressHiddenWidgetField(key: string, _q: Question, values: FormValues, widgetStageKey?: string): boolean {\n if (!isQuestionHiddenInWidget(key, widgetStageKey)) return false;\n if (isNjUnhiddenField(key, values)) return false;\n return true;\n}\n\n/* ------------------------------------------------------------------ */\n/* Conditional evaluation utilities */\n/* ------------------------------------------------------------------ */\n\ntype ConditionalNode = NonNullable<Question['conditionals']>[number];\ntype ConditionalType = NonNullable<ConditionalNode['conditionalType']> | 'notEquals';\n\nfunction isImplicitYesRepeatableQuestion(q: Question): boolean {\n if (q.inputType !== 'radio') return false;\n if (!q.options || q.options.length !== 1 || q.options[0] !== 'Yes') return false;\n const conds = q.conditionals ?? [];\n return conds.some((c) => c.conditionalQuestionsAllowMultiple && c.conditionalType === 'equals' && c.conditionalValue === 'Yes');\n}\n\nfunction getEffectiveQuestionValue(q: Question, value: unknown): unknown {\n if (isImplicitYesRepeatableQuestion(q)) return 'Yes';\n return value;\n}\n\nfunction toNumber(x: unknown): number | null {\n if (typeof x === 'number' && Number.isFinite(x)) return x;\n if (typeof x === 'string' && x.trim() !== '' && !Number.isNaN(Number(x))) return Number(x);\n return null;\n}\nfunction toTime(x: unknown): number | null {\n if (x instanceof Date && !Number.isNaN(x.getTime())) return x.getTime();\n if (typeof x === 'string') {\n const t = Date.parse(x);\n return Number.isNaN(t) ? null : t;\n }\n return null;\n}\nfunction cmp(a: unknown, b: unknown): number | null {\n const na = toNumber(a),\n nb = toNumber(b);\n if (na != null && nb != null) return na - nb;\n const ta = toTime(a),\n tb = toTime(b);\n if (ta != null && tb != null) return ta - tb;\n if (a == null || b == null) return null;\n return String(a).localeCompare(String(b));\n}\nfunction contains(haystack: unknown, needle: unknown): boolean {\n if (Array.isArray(haystack)) return haystack.some((v) => v === needle);\n if (typeof haystack === 'string') return needle != null && haystack.includes(String(needle));\n return false;\n}\nfunction evalConditional(qValue: unknown, conditionalType: ConditionalType | undefined, conditionalValue: unknown): boolean {\n switch (conditionalType) {\n case 'equals':\n return qValue === conditionalValue;\n case 'notEquals':\n return qValue !== conditionalValue && qValue !== '' && qValue != null;\n case 'lessThan': {\n const c = cmp(qValue, conditionalValue);\n return c != null && c < 0;\n }\n case 'greaterThan': {\n const c = cmp(qValue, conditionalValue);\n return c != null && c > 0;\n }\n case 'contains':\n return contains(qValue, conditionalValue);\n case 'startsWith':\n return qValue != null && conditionalValue != null && String(qValue).startsWith(String(conditionalValue));\n case 'endsWith':\n return qValue != null && conditionalValue != null && String(qValue).endsWith(String(conditionalValue));\n default:\n return false;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Path helpers (immutable) */\n/* ------------------------------------------------------------------ */\n\ntype ScopePath = Array<string | number>;\n\nfunction getIn(obj: unknown, path: ScopePath): unknown {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return path.reduce((acc: any, key) => (acc == null ? undefined : acc[key]), obj as any);\n}\nfunction setInImmutable<T extends object>(obj: T, path: ScopePath, value: unknown): T {\n if (path.length === 0) return obj;\n const [head, ...tail] = path;\n\n if (tail.length === 0) {\n if (typeof head === 'number') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const base = Array.isArray(obj) ? (obj as any[]) : [];\n const arr = base.slice();\n arr[head] = value;\n return arr as unknown as T;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { ...(obj as any), [head]: value } as T;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const current = (obj as any)?.[head];\n const nextContainer = typeof tail[0] === 'number' ? (Array.isArray(current) ? current : []) : current && typeof current === 'object' ? current : {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const next = setInImmutable(nextContainer as any, tail, value);\n\n if (typeof head === 'number') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const base = Array.isArray(obj) ? (obj as any[]) : [];\n const arr = base.slice();\n arr[head] = next;\n return arr as unknown as T;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { ...(obj as any), [head]: next } as T;\n}\n\n/** Read from a values object using a base scope plus a local key */\nfunction scopedRead(values: FormValues, scope: ScopePath | undefined, key: string) {\n return getIn(values, [...(scope ?? []), key]);\n}\n/** Write immutably to values at scope+key */\nfunction scopedWrite(values: FormValues, scope: ScopePath | undefined, key: string, v: unknown): FormValues {\n return setInImmutable(values, [...(scope ?? []), key], v);\n}\n\n/** Stable DOM id for nested repeatables (avoids duplicate id=\"make\" / id=\"model\"). */\nfunction scopedFieldId(scopePath: ScopePath | undefined, key: string): string {\n if (!scopePath?.length) return key;\n return `${scopePath.join('-')}-${key}`;\n}\n\nconst ITEMS_SUFFIX = '__items';\nconst itemsKey = (k: string) => `${k}${ITEMS_SUFFIX}`;\n\n/* ------------------------------------------------------------------ */\n/* Key decoration (stable keys) */\n/* ------------------------------------------------------------------ */\n\n// (moved to ../utils/decorateKeys)\n\n/** Coerce any unknown to a safe text input value */\nfunction asTextValue(v: unknown): string {\n if (v == null) return '';\n return typeof v === 'string' ? v : String(v);\n}\n\n/** Coerce to a number-control-safe value */\nfunction asNumberValue(v: unknown): string | number {\n if (v == null) return '';\n if (typeof v === 'number' && Number.isFinite(v)) return v;\n if (typeof v === 'string') return v; // let the user type partial numbers like \"-\"\n return '';\n}\n\n/** Coerce to a select value (string/number/undefined) */\nfunction asSelectValue(v: unknown): string | number {\n if (v == null) return ''; // <-- force empty string, not undefined\n if (typeof v === 'string' || typeof v === 'number') return v;\n return String(v);\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function FormRenderer({\n questions,\n initialValues,\n controlledValues,\n onChangeValues,\n onSubmit,\n quoteId,\n widgetStageKey\n}: {\n questions: Question[];\n initialValues?: Partial<FormValues>;\n controlledValues?: FormValues;\n onChangeValues?: (values: FormValues) => void;\n onSubmit: (values: FormValues) => void; // called on Enter key\n quoteId?: string;\n /** Current wizard stage — drives home-only visibility without affecting auto stages. */\n widgetStageKey?: string;\n}) {\n const keyedQuestions = useMemo(() => decorateKeys(questions), [questions]);\n const autoCoverageKeys = useMemo(() => resolveAutoCoverageConditionKeys(keyedQuestions), [keyedQuestions]);\n const isBundlePolicyStage = useMemo(() => {\n if (widgetStageKey === 'BundlePolicy') return true;\n // Fallback heuristic (used by tests and as a defensive check when stage key is absent):\n // bundle policy tends to include BOTH a home prior carrier question and driver assignments.\n return (\n keyedQuestions.some((q) => String(q.key) === 'home_prior_carrier_name') &&\n keyedQuestions.some((q) => String(q.key) === 'driver_vehicle_assignments')\n );\n }, [widgetStageKey, keyedQuestions]);\n\n const initialUncontrolled: FormValues = useMemo(() => {\n const acc: FormValues = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (initialValues) Object.assign(acc, initialValues as any);\n return acc;\n }, [initialValues]);\n\n const [uncontrolled, setUncontrolled] = useState<FormValues>(initialUncontrolled);\n useEffect(() => {\n setUncontrolled(initialUncontrolled);\n }, [initialUncontrolled]);\n\n // HYBRID CONTROLLED SUPPORT\n const [localShadow, setLocalShadow] = useState<FormValues>({});\n const values: FormValues = useMemo(\n () => ({ ...localShadow, ...(controlledValues ?? uncontrolled) }),\n [localShadow, controlledValues, uncontrolled]\n );\n useEffect(() => {\n if (controlledValues) setLocalShadow((p) => ({ ...p, ...controlledValues }));\n }, [controlledValues]);\n\n const [errors, setErrors] = useState<Record<string, string | undefined>>({});\n\n // ── Vehicle options cache (async API-backed) ──\n // vehicleOptsCache: cacheKey → API result (persists across renders).\n // vehicleOpts: stateKey → resolved options array (triggers re-render).\n // inflight: tracks active requests to prevent duplicate fetches.\n const vehicleOptsCache = useRef(new Map<string, { makes?: string[]; models?: string[]; bodyStyles?: string[] }>());\n const vehicleInflight = useRef(new Set<string>());\n const [, setVehicleOpts] = useState<Record<string, string[]>>({});\n const [vehicleOptsLoading, setVehicleOptsLoading] = useState<Record<string, boolean>>({});\n\n // Warm up the Bolt vehicle session when quoteId is available and this form has vehicle questions\n const vehicleSessionInitiated = useRef(false);\n useEffect(() => {\n if (!quoteId || vehicleSessionInitiated.current) return;\n const hasVehicleQuestions = keyedQuestions.some((q) => q.key === 'year' || q.key === 'make' || q.key === 'model' || q.key === 'body_style');\n if (!hasVehicleQuestions) return;\n vehicleSessionInitiated.current = true;\n // Fire session-init call (no year/make/model) to pre-create the Bolt session\n getVehicleOptions({ quoteId }).catch(() => {\n /* session init failure is non-fatal; will retry on first dropdown */\n });\n }, [quoteId, keyedQuestions]);\n\n // ── VIN Decode state ──\n const [vinDecodeLoading, setVinDecodeLoading] = useState<Record<string, boolean>>({});\n const [vinDecodeError, setVinDecodeError] = useState<Record<string, string | null>>({});\n\n const handleVinDecode = useCallback(\n async (scopePath: ScopePath | undefined, vinValue: string) => {\n if (!quoteId || !isVinValidFormat(vinValue)) return;\n const scopeKey = scopePath ? scopePath.join('-') : '_root';\n setVinDecodeLoading((prev) => ({ ...prev, [scopeKey]: true }));\n setVinDecodeError((prev) => ({ ...prev, [scopeKey]: null }));\n\n try {\n const result = await decodeVin({ quoteId, vin: vinValue });\n\n if (result.error) {\n setVinDecodeError((prev) => ({ ...prev, [scopeKey]: result.error! }));\n return;\n }\n\n // Fill in year, make, model, body_style from VIN decode\n let nextAll = values;\n if (result.year) nextAll = scopedWrite(nextAll, scopePath, 'year', String(result.year));\n if (result.make) nextAll = scopedWrite(nextAll, scopePath, 'make', result.make);\n if (result.model) nextAll = scopedWrite(nextAll, scopePath, 'model', result.model);\n if (result.bodyStyle) nextAll = scopedWrite(nextAll, scopePath, 'body_style', result.bodyStyle);\n\n if (controlledValues && onChangeValues) onChangeValues(nextAll);\n else setUncontrolled(nextAll);\n setLocalShadow(nextAll);\n\n // Clear vehicle options cache so dropdowns re-resolve with VIN-decoded values\n vehicleOptsCache.current.clear();\n vehicleInflight.current.clear();\n setVehicleOpts({});\n } catch {\n setVinDecodeError((prev) => ({ ...prev, [scopeKey]: 'VIN lookup failed — please enter vehicle details manually' }));\n } finally {\n setVinDecodeLoading((prev) => ({ ...prev, [scopeKey]: false }));\n }\n },\n [quoteId, values, controlledValues, onChangeValues]\n );\n\n /** Resolve vehicle options synchronously from cache, or kick off a fetch. Safe to call during render. */\n const resolveVehicleOpts = useCallback(\n (scopeKey: string, params: { year: number; make?: string; model?: string }): string[] | undefined => {\n if (!quoteId) return undefined; // Can't fetch without quoteId\n\n const cacheKey = `${params.year}|${params.make ?? ''}|${params.model ?? ''}`;\n const level = params.model ? 'bodyStyles' : params.make ? 'models' : 'makes';\n const stateKey = `${scopeKey}:${level}`;\n\n // Return from cache synchronously\n const cached = vehicleOptsCache.current.get(cacheKey);\n if (cached) return cached[level] ?? [];\n\n // Already in flight — return undefined (will resolve on next render)\n if (vehicleInflight.current.has(cacheKey)) return undefined;\n\n // Kick off fetch (side effect is deferred to microtask, not synchronous setState during render)\n vehicleInflight.current.add(cacheKey);\n // Use queueMicrotask to avoid setState-during-render warning\n queueMicrotask(() => {\n setVehicleOptsLoading((prev) => ({ ...prev, [stateKey]: true }));\n getVehicleOptions({ quoteId, ...params })\n .then((result) => {\n vehicleOptsCache.current.set(cacheKey, result);\n setVehicleOpts((prev) => ({ ...prev, [stateKey]: result[level] ?? [] }));\n })\n .catch(() => {\n vehicleOptsCache.current.set(cacheKey, {});\n setVehicleOpts((prev) => ({ ...prev, [stateKey]: [] }));\n })\n .finally(() => {\n vehicleInflight.current.delete(cacheKey);\n setVehicleOptsLoading((prev) => ({ ...prev, [stateKey]: false }));\n });\n });\n\n return undefined; // loading\n },\n [quoteId]\n );\n\n /**\n * Build a flat snapshot of the field values at the given scope for use in\n * cross-field rules. Cross-field rules expect flat keys (e.g. `year`,\n * `purchase_date`) so we read from the scoped item object rather than the\n * root values tree, then merge in the override value that just changed.\n */\n function scopedSnapshot(scopePath: ScopePath | undefined, key: string, override: unknown): Record<string, unknown> {\n const base = scopePath ? ((getIn(values, scopePath) as Record<string, unknown>) ?? {}) : (values as Record<string, unknown>);\n return { ...base, [key]: override };\n }\n\n /**\n * Run cross-field rules for a given key against an explicitly-provided values\n * snapshot. Using an explicit snapshot avoids stale-closure bugs when called\n * from an onChange handler before the React state has re-rendered.\n */\n function runCrossFieldValidation(key: string, snapshot: Record<string, unknown>) {\n const affectedRules = CROSS_FIELD_RULES.filter((r) => r.targetKey === key || r.dependsOn.includes(key));\n // Seed with undefined to clear the blurred key's error by default.\n const updates: Record<string, string | undefined> = { [key]: undefined };\n for (const rule of affectedRules) {\n const msg = rule.validate(snapshot);\n if (!(rule.targetKey in updates)) {\n // First rule touching this target: accept whatever it returns.\n updates[rule.targetKey] = msg;\n } else if (msg !== undefined) {\n // A later rule found an error — keep it; don't let a passing rule clear\n // an error that was already set by an earlier rule for the same target.\n updates[rule.targetKey] = msg;\n }\n }\n setErrors((prev) => ({ ...prev, ...updates }));\n }\n\n const handleBlur = (key: string, inputType?: string, scopePath?: ScopePath) => {\n // Use scopedRead so nested fields (e.g. inside vehicles__items) are resolved correctly.\n const val = scopedRead(values, scopePath, key);\n\n // Required field left blank — show \"Required\" on blur\n // (only for fields that were already touched, i.e. have a value or had an error)\n if (isBlankValue(val, inputType)) {\n // Clear any previous format error if the field is now empty\n if (errors[key]) setErrors((prev) => ({ ...prev, [key]: undefined }));\n return;\n }\n\n // Single-field schema check\n const schemaError = validateFieldSchema(key, val);\n if (schemaError) {\n setErrors((prev) => ({ ...prev, [key]: schemaError }));\n return;\n }\n\n runCrossFieldValidation(key, scopedSnapshot(scopePath, key, val));\n };\n\n useEffect(() => {\n let nextAll = values;\n let changed = false;\n\n keyedQuestions.forEach((q) => {\n if (!isImplicitYesRepeatableQuestion(q)) return;\n const key = String(q.key);\n const current = scopedRead(nextAll, undefined, key);\n if (current === 'Yes') return;\n nextAll = scopedWrite(nextAll, undefined, key, 'Yes');\n changed = true;\n });\n\n if (!changed) return;\n if (controlledValues && onChangeValues) onChangeValues(nextAll);\n else setUncontrolled(nextAll);\n setLocalShadow(nextAll);\n }, [keyedQuestions, values, controlledValues, onChangeValues]);\n\n // single field renderer (aware of scope)\n function renderOne(q: Question, scopePath?: ScopePath) {\n const key = q.key as string;\n\n // Hide \"relationship to Driver #1\" and registered owner question for the first driver (index 0); only for additional drivers\n if ((key === 'relationship_to_insured' || key === 'is_registered_owner') && scopePath) {\n const itemIdx = scopePath[scopePath.length - 1];\n if (typeof itemIdx === 'number' && itemIdx === 0) return null;\n }\n\n // Vehicle Details cleanup (Bolt-aligned): never show these follow-ups in the widget.\n if ((key === 'purchase_date' || key === 'cost_new_value_cents') && scopePath) {\n return null;\n }\n\n // Vehicle Details: show \"Modifications value\" only when modifications are Yes.\n // Backend keys use `vehicle_has_modifications` (Yes/No) with `custom_equipment_value_cents` as the numeric value.\n if (key === 'custom_equipment_value_cents' && scopePath) {\n const hasMods = scopedRead(values, scopePath, 'vehicle_has_modifications');\n if (hasMods !== 'Yes' && hasMods !== true) return null;\n }\n\n const label =\n key === 'auto_reason_for_no_insurance' && autoCoverageKeys.currentCarrierKey\n ? values[autoCoverageKeys.currentCarrierKey] === 'NoPriorInsurance'\n ? 'Reason you are not currently insured'\n : 'Reason for lapse in coverage'\n : q.question;\n const hint = (q as { hint?: string }).hint;\n const val = scopedRead(values, scopePath, key);\n const required = isNoInsuranceReasonQuestion(q, autoCoverageKeys) ? shouldRequireNoInsuranceReason(values, autoCoverageKeys) : q.required;\n const error = errors[key];\n\n const set = (v: unknown) => {\n let nextAll = scopedWrite(values, scopePath, key, v);\n\n // If this is a radio button with conditionals, check if any array items need to be cleared\n if (q.inputType === 'radio' && q.conditionals) {\n const conds = q.conditionals ?? [];\n\n // Check each conditional to see if it will become false\n for (const cond of conds) {\n const currentValue = scopedRead(values, scopePath, key);\n const wasActive = evalConditional(currentValue, cond.conditionalType, cond.conditionalValue);\n const willBeActive = evalConditional(v, cond.conditionalType, cond.conditionalValue);\n\n // If this conditional was active but will become inactive, and it has repeatable questions, clear the array\n if (wasActive && !willBeActive && cond.conditionalQuestionsAllowMultiple) {\n const children = (cond.conditionalQuestions ?? []) as unknown as Question[];\n if (children.length > 0) {\n const arrStorageKey = itemsKey(key);\n\n nextAll = setInImmutable(nextAll, [...(scopePath ?? []), arrStorageKey], []);\n\n // Also clear any nested array items that might exist\n const clearNestedArrays = (questionList: Question[], currentScope: ScopePath) => {\n questionList.forEach((childQ) => {\n const childConds = childQ.conditionals ?? [];\n childConds.forEach((childCond) => {\n if (childCond.conditionalQuestionsAllowMultiple) {\n const nestedArrKey = itemsKey(childQ.key as string);\n nextAll = setInImmutable(nextAll, [...currentScope, nestedArrKey], []);\n }\n const grandChildren = (childCond.conditionalQuestions ?? []) as unknown as Question[];\n if (grandChildren.length > 0) {\n clearNestedArrays(grandChildren, currentScope);\n }\n });\n });\n };\n\n clearNestedArrays(children, [...(scopePath ?? []), arrStorageKey]);\n }\n }\n }\n }\n\n if (controlledValues && onChangeValues) onChangeValues(nextAll);\n else setUncontrolled(nextAll);\n setLocalShadow(nextAll);\n };\n\n if (key === 'vehicle_policy_selections') {\n const vehicles = (values.vehicles__items ?? []) as Array<Record<string, unknown>>;\n const drivers = (values.drivers__items ?? []) as Array<Record<string, unknown>>;\n\n if (vehicles.length === 0) {\n return (\n <p key={key} style={{ color: '#666', fontStyle: 'italic' }}>\n Add vehicles first to configure coverage selections.\n </p>\n );\n }\n\n const assignments = (values.driver_vehicle_assignments ?? {}) as Record<string, Record<string, number>>;\n const showDriverPct = drivers.length > 1;\n\n const toOptions = (labels: Record<string, string>) => Object.entries(labels).map(([value, optLabel]) => ({ value, label: optLabel }));\n\n const compCollOptions = toOptions(BOLT_VEHICLE_COMP_COLL_DEDUCTIBLE_LABELS);\n const towingOptions = toOptions(BOLT_VEHICLE_TOWING_AND_LABOR_LABELS);\n const transportationOptions = toOptions(BOLT_VEHICLE_TRANSPORTATION_EXPENSE_LABELS);\n\n const writeVehicleField = (vIdx: number, fieldKey: string, v: unknown) => {\n const nextAll = setInImmutable(values, ['vehicles__items', vIdx, fieldKey], v);\n if (controlledValues && onChangeValues) onChangeValues(nextAll);\n else setUncontrolled(nextAll);\n setLocalShadow(nextAll);\n };\n\n const updateAssignment = (vIdx: number, dIdx: number, pct: number) => {\n const prev = { ...assignments };\n const vKey = `v${vIdx}`;\n prev[vKey] = { ...(prev[vKey] ?? {}) };\n prev[vKey][`d${dIdx}`] = pct;\n const nextAll = setInImmutable(values, ['driver_vehicle_assignments'], prev);\n if (controlledValues && onChangeValues) onChangeValues(nextAll);\n else setUncontrolled(nextAll);\n setLocalShadow(nextAll);\n };\n\n const getDriverPctError = (vIdx: number): string | null => {\n if (!showDriverPct) return null;\n const vAssignments = assignments[`v${vIdx}`];\n if (!vAssignments) return null;\n // cspell:ignore pcts\n const pcts = drivers.map((_, dIdx) => vAssignments[`d${dIdx}`] ?? 0);\n const nonZero = pcts.filter((p) => p > 0);\n if (nonZero.length >= 2 && nonZero.every((p) => p === nonZero[0]) && nonZero[0] === 50) {\n return `Assignments for Vehicle ${vIdx + 1} cannot be 50 percent for both Drivers.`;\n }\n const total = pcts.reduce((a, b) => a + b, 0);\n if (total > 0 && total !== 100) {\n return `Driver percentages for this vehicle must add up to 100% (currently ${total}%).`;\n }\n return null;\n };\n\n return (\n <div key={key}>\n {vehicles.map((v, vIdx) => {\n const vLabel = [v.year, v.make, v.model].filter(Boolean).join(' ') || `Vehicle ${vIdx + 1}`;\n const pctError = getDriverPctError(vIdx);\n const getStr = (k: string) => (typeof v[k] === 'string' ? (v[k] as string) : '');\n return (\n <fieldset\n key={vIdx}\n style={{ border: `1px solid ${pctError ? '#dc3545' : '#ddd'}`, borderRadius: '8px', padding: '16px', marginBottom: '16px' }}\n >\n <legend style={{ fontWeight: 600, padding: '0 8px' }}>{vLabel}</legend>\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))', gap: '12px' }}>\n <SelectInput\n id={`veh-${vIdx}-comp`}\n label=\"Comprehensive deductible\"\n required\n placeholder=\"Select...\"\n options={compCollOptions}\n value={getStr('vehicle_comp_deductible')}\n onChange={(e) => writeVehicleField(vIdx, 'vehicle_comp_deductible', e.currentTarget.value)}\n />\n <SelectInput\n id={`veh-${vIdx}-coll`}\n label=\"Collision deductible\"\n required\n placeholder=\"Select...\"\n options={compCollOptions}\n value={getStr('vehicle_coll_deductible')}\n onChange={(e) => writeVehicleField(vIdx, 'vehicle_coll_deductible', e.currentTarget.value)}\n />\n <SelectInput\n id={`veh-${vIdx}-tow`}\n label=\"Towing and Labor\"\n required\n placeholder=\"Select...\"\n options={towingOptions}\n value={getStr('vehicle_towing_and_labor')}\n onChange={(e) => writeVehicleField(vIdx, 'vehicle_towing_and_labor', e.currentTarget.value)}\n />\n <SelectInput\n id={`veh-${vIdx}-trans`}\n label=\"Transportation expense\"\n required\n placeholder=\"Select...\"\n options={transportationOptions}\n value={getStr('vehicle_transportation_expense')}\n onChange={(e) => writeVehicleField(vIdx, 'vehicle_transportation_expense', e.currentTarget.value)}\n />\n </div>\n {showDriverPct && (\n <div style={{ marginTop: '16px' }}>\n <p style={{ fontWeight: 600, margin: '0 0 8px' }}>Drivers usage (%)</p>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '12px' }}>\n {drivers.map((d, dIdx) => {\n const dLabel = [d.first_name, d.last_name].filter(Boolean).join(' ') || `Driver ${dIdx + 1}`;\n const pctVal = assignments[`v${vIdx}`]?.[`d${dIdx}`];\n return (\n <div key={`${vIdx}-${dIdx}`} style={{ flex: '0 0 140px' }}>\n <NumericInput\n id={`assignment-v${vIdx}-d${dIdx}`}\n label={`${dLabel} %`}\n value={pctVal ?? ''}\n min={0}\n max={100}\n step={1}\n inputMode=\"numeric\"\n onChange={(e) => {\n const raw = e.currentTarget.value.replace(/\\D+/g, '');\n updateAssignment(vIdx, dIdx, raw === '' ? 0 : Math.min(100, parseInt(raw, 10)));\n }}\n />\n </div>\n );\n })}\n </div>\n {pctError && <p style={{ color: '#dc3545', fontSize: '0.85rem', marginTop: '8px', marginBottom: 0 }}>{pctError}</p>}\n </div>\n )}\n </fieldset>\n );\n })}\n </div>\n );\n }\n\n if (key === 'driver_vehicle_assignments') {\n const vehicles = (values.vehicles__items ?? []) as Array<Record<string, unknown>>;\n const drivers = (values.drivers__items ?? []) as Array<Record<string, unknown>>;\n\n // Show driver percentage screen for:\n // - Bundle with 2+ drivers\n // - Auto with 2+ drivers (multi-vehicle or multi-driver)\n if (isBundlePolicyStage && drivers.length <= 1) {\n return null;\n }\n\n if (vehicles.length === 0 || drivers.length === 0) {\n return (\n <p key={key} style={{ color: '#666', fontStyle: 'italic' }}>\n Add vehicles and drivers first to configure driver usage percentages.\n </p>\n );\n }\n\n const assignments = (values.driver_vehicle_assignments ?? {}) as Record<string, Record<string, number>>;\n\n const updateAssignment = (vIdx: number, dIdx: number, pct: number) => {\n const prev = { ...assignments };\n const vKey = `v${vIdx}`;\n prev[vKey] = { ...(prev[vKey] ?? {}) };\n prev[vKey][`d${dIdx}`] = pct;\n set(prev);\n };\n\n const getVehicleValidationError = (vIdx: number): string | null => {\n if (drivers.length < 2) return null;\n const vAssignments = assignments[`v${vIdx}`];\n if (!vAssignments) return null;\n // cspell:ignore pcts\n const pcts = drivers.map((_, dIdx) => vAssignments[`d${dIdx}`] ?? 0);\n const nonZero = pcts.filter((p) => p > 0);\n if (nonZero.length >= 2 && nonZero.every((p) => p === nonZero[0]) && nonZero[0] === 50) {\n return `Assignments for Vehicle ${vIdx + 1} cannot be 50 percent for both Drivers.`;\n }\n const total = pcts.reduce((a, b) => a + b, 0);\n if (total > 0 && total !== 100) {\n return `Driver percentages for this vehicle must add up to 100% (currently ${total}%).`;\n }\n return null;\n };\n\n return (\n <div key={key}>\n <h4 style={{ marginBottom: '12px' }}>{label}</h4>\n {vehicles.map((v, vIdx) => {\n const vLabel = [v.year, v.make, v.model].filter(Boolean).join(' ') || `Vehicle ${vIdx + 1}`;\n const validationError = getVehicleValidationError(vIdx);\n return (\n <fieldset\n key={vIdx}\n style={{ border: `1px solid ${validationError ? '#dc3545' : '#ddd'}`, borderRadius: '8px', padding: '16px', marginBottom: '16px' }}\n >\n <legend style={{ fontWeight: 600, padding: '0 8px' }}>{vLabel}</legend>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '12px' }}>\n {drivers.map((d, dIdx) => {\n const dLabel = [d.first_name, d.last_name].filter(Boolean).join(' ') || `Driver ${dIdx + 1}`;\n const pctVal = assignments[`v${vIdx}`]?.[`d${dIdx}`];\n return (\n <div key={`${vIdx}-${dIdx}`} style={{ flex: '0 0 140px' }}>\n <NumericInput\n id={`assignment-v${vIdx}-d${dIdx}`}\n label={`${dLabel} %`}\n value={pctVal ?? ''}\n min={0}\n max={100}\n step={1}\n inputMode=\"numeric\"\n onChange={(e) => {\n const raw = e.currentTarget.value.replace(/\\D+/g, '');\n updateAssignment(vIdx, dIdx, raw === '' ? 0 : Math.min(100, parseInt(raw, 10)));\n }}\n />\n </div>\n );\n })}\n </div>\n {validationError && <p style={{ color: '#dc3545', fontSize: '0.85rem', marginTop: '8px', marginBottom: 0 }}>{validationError}</p>}\n </fieldset>\n );\n })}\n </div>\n );\n }\n\n switch (q.inputType) {\n case 'text': {\n // VIN field: add \"Get VIN Data\" button\n if (key === 'vin' && quoteId) {\n const vinScopeKey = scopePath ? scopePath.join('-') : '_root';\n const isVinLoading = vinDecodeLoading[vinScopeKey] ?? false;\n const vinError = vinDecodeError[vinScopeKey] ?? null;\n const describedBy = [hint ? `${key}-hint` : null, error ? `${key}-error` : null, vinError ? `${key}-vin-error` : null]\n .filter(Boolean)\n .join(' ');\n return (\n <div key={key}>\n <Field id={key} label={label} hint={hint} error={error} required={required}>\n <div className=\"flex items-end gap-2\">\n <div className=\"flex-1 min-w-0\">\n <input\n id={key}\n className={`form-input ${error ? 'input-error' : ''}`}\n aria-invalid={!!error}\n aria-describedby={describedBy || undefined}\n aria-required={required || undefined}\n required={required}\n value={asTextValue(val)}\n maxLength={17}\n onChange={(e) => set(e.currentTarget.value)}\n onBlur={() => handleBlur(key, 'text', scopePath)}\n autoComplete={AUTOCOMPLETE_BY_KEY[key]}\n type=\"text\"\n />\n </div>\n <button\n type=\"button\"\n disabled={isVinLoading || !isVinValidFormat(asTextValue(val))}\n className=\"btn btn-outline shrink-0 self-end !w-auto min-w-[8.5rem] px-4 whitespace-nowrap disabled:opacity-50\"\n onClick={() => handleVinDecode(scopePath, asTextValue(val))}\n >\n {isVinLoading ? 'Looking up...' : 'Verify VIN'}\n </button>\n </div>\n </Field>\n {vinError && (\n <p id={`${key}-vin-error`} className=\"text-sm text-red-600 mt-1\">\n {vinError}\n </p>\n )}\n </div>\n );\n }\n if (key === 'sms_code') {\n const current = asTextValue(val);\n return (\n <TextInput\n key={key}\n id={key}\n label={label}\n hint={hint}\n value={current}\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={6}\n onChange={(e) => {\n const digitsOnly = e.currentTarget.value.replace(/\\D+/g, '').slice(0, 6);\n set(digitsOnly);\n }}\n onBlur={() => handleBlur(key, 'text', scopePath)}\n aria-required={required || undefined}\n error={error}\n autoComplete={AUTOCOMPLETE_BY_KEY[key]}\n />\n );\n }\n return (\n <TextInput\n key={key}\n id={key}\n label={label}\n hint={hint}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n onBlur={() => handleBlur(key, 'text', scopePath)}\n aria-required={required || undefined}\n error={error}\n autoComplete={AUTOCOMPLETE_BY_KEY[key]}\n />\n );\n }\n case 'email':\n return (\n <EmailInput\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n onBlur={() => handleBlur(key, 'email', scopePath)}\n aria-required={required || undefined}\n error={error}\n />\n );\n case 'password':\n return (\n <PasswordInput\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n onBlur={() => handleBlur(key, 'password', scopePath)}\n aria-required={required || undefined}\n error={error}\n />\n );\n case 'tel':\n return (\n <>\n <TelInput\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n onBlur={() => handleBlur(key, 'tel', scopePath)}\n aria-required={required || undefined}\n error={error}\n />\n {key === 'phone' && (\n <div className=\"mt-3 text-xs text-slate-600 space-y-1\">\n <p>By entering your phone number, you agree to receive a one-time SMS from Credify Insurance with a verification code.</p>\n <p>Message & data rates may apply. One message per request.</p>\n {/* <p>Reply STOP to opt out, HELP for help.</p> */}\n <p>\n See our{' '}\n <a href=\"https://getcredify.com\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"credify-link-underline\">\n Privacy Policy\n </a>{' '}\n and{' '}\n <a href=\"https://getcredify.com\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"credify-link-underline\">\n Terms of Service\n </a>\n .\n </p>\n </div>\n )}\n </>\n );\n case 'url':\n return (\n <UrlInput\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n onBlur={() => handleBlur(key, 'url', scopePath)}\n aria-required={required || undefined}\n error={error}\n />\n );\n case 'number': {\n const maxDigits = MAX_INPUT_DIGITS_BY_KEY[key];\n return (\n <NumericInput\n key={key}\n id={key}\n label={label}\n hint={hint}\n value={asNumberValue(val)}\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n onKeyDown={(e) => {\n if (isDisallowedNumberKey(e.key)) {\n e.preventDefault();\n return;\n }\n if (maxDigits !== undefined && /^\\d$/.test(e.key)) {\n const digits = String(e.currentTarget.value).replace(/\\D/g, '');\n if (digits.length >= maxDigits) e.preventDefault();\n }\n }}\n onChange={(e) => {\n let raw = e.currentTarget.value;\n if (maxDigits !== undefined) raw = raw.slice(0, maxDigits);\n set(coerceDigitsOnlyNumber(raw));\n }}\n onBlur={() => handleBlur(key, 'number', scopePath)}\n aria-required={required || undefined}\n error={error}\n />\n );\n }\n case 'textarea':\n return (\n <TextArea\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(e) => set(e.currentTarget.value)}\n onBlur={() => handleBlur(key, 'textarea', scopePath)}\n aria-required={required || undefined}\n error={error}\n rows={4}\n />\n );\n case 'date': {\n const { min: dateMin, max: dateMax } = getDateInputConstraints(key);\n return (\n <DateInput\n key={key}\n id={key}\n label={label}\n hint={hint}\n value={asTextValue(val)}\n min={dateMin}\n max={dateMax}\n onChange={(e) => {\n const newVal = e.currentTarget.value;\n set(newVal);\n // Cross-field validation must also run on change for date fields.\n // When a date is picked from the native calendar picker, onBlur\n // often does not fire, and even when it does, the state closure in\n // handleBlur still holds the pre-change value. Passing an explicit\n // snapshot with the new value avoids both issues.\n if (!isBlankValue(newVal, 'date') && !validateFieldSchema(key, newVal)) {\n runCrossFieldValidation(key, scopedSnapshot(scopePath, key, newVal));\n }\n }}\n onBlur={() => handleBlur(key, 'date', scopePath)}\n aria-required={required || undefined}\n error={error}\n autoComplete={AUTOCOMPLETE_BY_KEY[key]}\n />\n );\n }\n\n case 'checkbox': {\n if (q.options) {\n const current: string[] = Array.isArray(val) ? (val as string[]) : [];\n return (\n <div key={key} className=\"space-y-2\">\n <div className=\"form-label\">\n {label}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </div>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {q.options.map((opt) => {\n const idOpt = `${key}-${slugify(opt)}`;\n const checked = current.includes(opt);\n return (\n <Checkbox\n key={idOpt}\n id={idOpt}\n label={opt}\n checked={checked}\n onChange={(e) => {\n const next = new Set(current);\n if (e.currentTarget.checked) next.add(opt);\n else next.delete(opt);\n set(Array.from(next));\n }}\n aria-required={required || undefined}\n />\n );\n })}\n </div>\n {error && <p className=\"mt-1 text-sm text-red-600\">{error}</p>}\n </div>\n );\n }\n return (\n <Checkbox\n key={key}\n id={key}\n label={required ? `${label} *` : label}\n checked={!!val}\n onChange={(e) => set(e.currentTarget.checked)}\n aria-required={required || undefined}\n />\n );\n }\n\n case 'radio': {\n if (isImplicitYesRepeatableQuestion(q)) {\n return null;\n }\n const opts = q.options ?? [];\n // Create a scoped name to avoid conflicts between array items\n const scopedName = scopePath && scopePath.length > 0 ? `${key}__${scopePath.join('__')}` : key;\n return (\n <RadioGroup key={key} legend={label} legendClassName={required ? 'legend-required' : undefined}>\n {opts.map((opt) => (\n <Radio\n key={`${key}-${slugify(opt)}`}\n name={scopedName}\n value={opt}\n checked={val === opt}\n onChange={() => {\n set(opt);\n runCrossFieldValidation(key, scopedSnapshot(scopePath, key, opt));\n }}\n >\n {OPTION_DISPLAY_LABELS_BY_KEY[key]?.[opt] ?? opt}\n </Radio>\n ))}\n </RadioGroup>\n );\n }\n\n case 'select': {\n let opts = q.options ?? [];\n // Add special case for `quote_vehicle_id` key\n if (key === 'quote_vehicle_id') {\n opts = controlledValues?.vehicles__items?.map((v: { vin: string }) => v.vin) ?? [];\n }\n // ── Vehicle cascading dropdowns (async, API-backed) ──\n let vehicleFieldDisabled = false;\n let vehicleFieldPlaceholder: string | undefined;\n if (key === 'make' || key === 'model' || key === 'body_style') {\n const scopeKey = scopePath ? scopePath.join('-') : '_root';\n const selectedYear = scopedRead(values, scopePath, 'year');\n const yearNum = typeof selectedYear === 'number' ? selectedYear : Number(selectedYear);\n\n if (key === 'make') {\n const loadingKey = `${scopeKey}:makes`;\n if (!yearNum || !Number.isFinite(yearNum)) {\n vehicleFieldDisabled = true;\n vehicleFieldPlaceholder = 'Select a year first';\n } else {\n const resolved = resolveVehicleOpts(scopeKey, { year: yearNum });\n if (resolved && resolved.length > 0) {\n opts = resolved;\n } else if (vehicleOptsLoading[loadingKey]) {\n vehicleFieldDisabled = true;\n vehicleFieldPlaceholder = 'Loading makes...';\n } else {\n opts = [...BOLT_VEHICLE_MAKE_OPTIONS];\n }\n }\n } else if (key === 'model') {\n const loadingKey = `${scopeKey}:models`;\n const selectedMake = String(scopedRead(values, scopePath, 'make') ?? '');\n if (!selectedMake) {\n vehicleFieldDisabled = true;\n vehicleFieldPlaceholder = 'Select a make first';\n } else if (yearNum && Number.isFinite(yearNum)) {\n const resolved = resolveVehicleOpts(scopeKey, { year: yearNum, make: selectedMake });\n if (resolved && resolved.length > 0) {\n opts = resolved;\n } else if (vehicleOptsLoading[loadingKey]) {\n vehicleFieldDisabled = true;\n vehicleFieldPlaceholder = 'Loading models...';\n } else {\n opts = [...VEHICLE_MODEL_FALLBACK_OPTIONS];\n }\n }\n if (typeof val === 'string' && val && !opts.includes(val)) opts = [val, ...opts];\n } else {\n const loadingKey = `${scopeKey}:bodyStyles`;\n const selectedMake = String(scopedRead(values, scopePath, 'make') ?? '');\n const selectedModel = String(scopedRead(values, scopePath, 'model') ?? '');\n if (!selectedModel) {\n vehicleFieldDisabled = true;\n vehicleFieldPlaceholder = 'Select a model first';\n } else if (yearNum && Number.isFinite(yearNum) && selectedMake) {\n const resolved = resolveVehicleOpts(scopeKey, { year: yearNum, make: selectedMake, model: selectedModel });\n if (resolved && resolved.length > 0) {\n opts = resolved;\n } else if (vehicleOptsLoading[loadingKey]) {\n vehicleFieldDisabled = true;\n vehicleFieldPlaceholder = 'Loading body styles...';\n } else {\n opts = [...VEHICLE_BODY_STYLE_FALLBACK_OPTIONS];\n }\n }\n if (typeof val === 'string' && val && !opts.includes(val)) opts = [val, ...opts];\n }\n }\n if (key === 'occupation' || key === 'co_applicant_occupation') {\n const industryKey = key === 'co_applicant_occupation' ? 'co_applicant_employment_industry' : undefined;\n const driverIndustry = industryKey ? undefined : scopedRead(values, scopePath, 'industry');\n const homeIndustry = scopedRead(values, scopePath, industryKey ?? 'employment_industry');\n const rawIndustry = driverIndustry ?? homeIndustry;\n const selectedIndustry = String(normalizeIndustryValue(rawIndustry) ?? '').trim();\n opts = [...((BOLT_OCCUPATIONS_BY_INDUSTRY as Record<string, readonly string[]>)[selectedIndustry] ?? DRIVER_OCCUPATION_FALLBACK_OPTIONS)];\n if (typeof val === 'string' && val && !opts.includes(val)) opts = [val, ...opts];\n }\n\n const fieldId = scopedFieldId(scopePath, key);\n\n return (\n <SelectInput\n key={fieldId}\n id={fieldId}\n label={vehicleFieldPlaceholder ? `${label} — ${vehicleFieldPlaceholder}` : label}\n aria-required={required || undefined}\n error={error}\n disabled={vehicleFieldDisabled}\n value={asSelectValue(val)}\n onChange={(e) => {\n const nextValue = e.currentTarget.value;\n\n if (\n key !== 'year' &&\n key !== 'make' &&\n key !== 'model' &&\n key !== 'industry' &&\n key !== 'employment_industry' &&\n key !== 'co_applicant_employment_industry'\n ) {\n set(nextValue);\n runCrossFieldValidation(key, scopedSnapshot(scopePath, key, nextValue));\n return;\n }\n\n let nextAll = scopedWrite(values, scopePath, key, nextValue);\n if (key === 'year') {\n nextAll = scopedWrite(nextAll, scopePath, 'make', '');\n nextAll = scopedWrite(nextAll, scopePath, 'model', '');\n nextAll = scopedWrite(nextAll, scopePath, 'body_style', '');\n } else if (key === 'make') {\n nextAll = scopedWrite(nextAll, scopePath, 'model', '');\n nextAll = scopedWrite(nextAll, scopePath, 'body_style', '');\n } else if (key === 'model') {\n nextAll = scopedWrite(nextAll, scopePath, 'body_style', '');\n } else if (key === 'industry' || key === 'employment_industry') {\n nextAll = scopedWrite(nextAll, scopePath, 'occupation', '');\n } else if (key === 'co_applicant_employment_industry') {\n const normalizedIndustry = String(normalizeIndustryValue(nextValue) ?? '').trim();\n const occupationOptions = ((BOLT_OCCUPATIONS_BY_INDUSTRY as Record<string, readonly string[]>)[normalizedIndustry] ??\n []) as readonly string[];\n const coApplicantDefaultOccupation = occupationOptions.find((o) => o === normalizedIndustry) ?? occupationOptions[0] ?? '';\n nextAll = scopedWrite(nextAll, scopePath, 'co_applicant_occupation', coApplicantDefaultOccupation ?? '');\n }\n\n if (controlledValues && onChangeValues) onChangeValues(nextAll);\n else setUncontrolled(nextAll);\n setLocalShadow(nextAll);\n const nextScopedBase = scopePath\n ? ((getIn(nextAll, scopePath) as Record<string, unknown>) ?? {})\n : (nextAll as Record<string, unknown>);\n runCrossFieldValidation(key, { ...nextScopedBase, [key]: nextValue });\n }}\n placeholder={vehicleFieldPlaceholder ?? 'Select an option'}\n options={opts.map((o) => ({\n value: o,\n label: OPTION_DISPLAY_LABELS_BY_KEY[key]?.[o] ?? OPTION_DISPLAY_LABELS[o] ?? o\n }))}\n />\n );\n }\n\n case 'address':\n return (\n <AddressAutocomplete\n key={key}\n id={key}\n label={label}\n value={asTextValue(val)}\n onChange={(address, components) => {\n // Set the full address string\n let nextAll = scopedWrite(values, scopePath, key, address);\n\n // Also set the parsed state from Google Places so NJ-specific questions work\n if (components?.state) {\n const stateKey = scopePath ? [...scopePath, 'state'] : ['state'];\n nextAll = setInImmutable(nextAll, stateKey, components.state);\n }\n\n if (controlledValues && onChangeValues) onChangeValues(nextAll);\n else setUncontrolled(nextAll);\n setLocalShadow(nextAll);\n }}\n onBlur={() => handleBlur(key, 'address', scopePath)}\n required={required}\n aria-required={required || undefined}\n error={error}\n />\n );\n\n default:\n return null;\n }\n }\n\n function renderRecursive(list: Question[], scopePath?: ScopePath) {\n return list.map((q, qIndex) => {\n const key = String(q.key);\n if (!shouldShowNoInsuranceReason(q, values, autoCoverageKeys)) return null;\n if (!shouldShowOccupation(q, values, scopePath)) return null;\n if (!shouldShowNJField(q, values)) return null;\n if (!shouldShowLapseInCoverage(q, values, widgetStageKey)) return null;\n if (shouldSuppressHiddenWidgetField(key, q, values, widgetStageKey)) {\n const selectedCarrier = autoCoverageKeys.currentCarrierKey ? values[autoCoverageKeys.currentCarrierKey] : undefined;\n const hasNamedCarrier = selectedCarrier && selectedCarrier !== 'NoPriorInsurance';\n if (!(hasNamedCarrier && hasAutoCoverageGap(values, autoCoverageKeys) && AUTO_GAP_VISIBLE_KEYS.has(key))) return null;\n }\n const elem = renderOne(q, scopePath);\n\n const conds = q.conditionals ?? [];\n if (!conds.length) {\n // Bundle policy only: visually group the base auto coverage selections under a single heading.\n if (widgetStageKey === 'BundlePolicy' && key === 'policy_bi') {\n return (\n <div key={`wrap-${key}-${qIndex}`}>\n <h3 className=\"text-lg font-semibold mt-6 mb-3\">Vehicle Coverage Information</h3>\n {elem}\n </div>\n );\n }\n return <div key={`wrap-${key}-${qIndex}`}>{elem}</div>;\n }\n\n const v = getEffectiveQuestionValue(q, scopedRead(values, scopePath, key));\n const matches = conds.filter((c) => evalConditional(v, c.conditionalType, c.conditionalValue));\n const branches = matches.length > 1 && !matches.some((m) => m.conditionalQuestionsAllowMultiple) ? matches.slice(0, 1) : matches;\n\n return (\n <div key={`wrap-${key}-${qIndex}`}>\n {elem}\n\n {branches.map((branch, bi) => {\n const children = (branch.conditionalQuestions ?? []) as unknown as Question[];\n if (!children.length) return null;\n\n // NON-REPEATABLE child branch at current scope\n if (!branch.conditionalQuestionsAllowMultiple) {\n return (\n <div key={`branch-${key}-${bi}`} className=\"mt-3\">\n {renderRecursive(children, scopePath)}\n </div>\n );\n }\n\n // REPEATABLE child branch at current scope\n const arrStorageKey = itemsKey(key);\n const arr: unknown[] = (getIn(values, [...(scopePath ?? []), arrStorageKey]) as unknown[]) ?? [];\n const count = Math.max(1, arr.length || 1);\n\n const pushEmpty = () => {\n const next = setInImmutable(values, [...(scopePath ?? []), arrStorageKey, arr.length], {});\n if (controlledValues && onChangeValues) onChangeValues(next);\n else setUncontrolled(next);\n setLocalShadow(next);\n };\n\n const popLast = () => {\n const nextArr = arr.slice(0, Math.max(0, arr.length - 1));\n const next = setInImmutable(values, [...(scopePath ?? []), arrStorageKey], nextArr);\n if (controlledValues && onChangeValues) onChangeValues(next);\n else setUncontrolled(next);\n setLocalShadow(next);\n };\n\n const groupIdBase = `${key}__c${bi}`;\n\n return (\n <div key={`branch-${key}-${bi}`} className=\"mt-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"text-sm font-medium opacity-75\">Add one or more entries</div>\n <div className=\"space-x-2\">\n <button type=\"button\" className=\"btn-outline px-3 py-1\" onClick={pushEmpty}>\n Add another\n </button>\n {count > 1 && (\n <button type=\"button\" className=\"btn-outline px-3 py-1\" onClick={popLast}>\n Remove last\n </button>\n )}\n </div>\n </div>\n\n {Array.from({ length: count }).map((_, idx) => {\n const itemScope: ScopePath = [...(scopePath ?? []), arrStorageKey, idx];\n const groupId = `${groupIdBase}__i${idx}`;\n const itemValues = (arr[idx] ?? {}) as FormValues;\n const isDriverGroup = key === 'drivers';\n const isLossGroup = key === 'home_losses' || key === 'losses';\n const isVehicleGroup = key === 'vehicles';\n const entryLabel = isDriverGroup\n ? `Driver #${idx + 1}`\n : isVehicleGroup\n ? `Vehicle #${idx + 1}`\n : isLossGroup\n ? `Loss #${idx + 1}`\n : `Entry #${idx + 1}`;\n const hasSsnDisplay = isDriverGroup && typeof itemValues.ssn_display === 'string' && itemValues.ssn_display;\n const ssnSuffix = hasSsnDisplay ? ` — ${itemValues.ssn_display}` : '';\n\n return (\n <div key={`group-${groupId}`} className=\"rounded-lg border p-3 mb-3\">\n <div className=\"text-sm font-semibold mb-2\">\n {entryLabel}\n {ssnSuffix}\n </div>\n\n {children.map((childQ) => {\n const ck = String(childQ.key);\n if (!shouldShowNoInsuranceReason(childQ, values, autoCoverageKeys)) return null;\n if (!shouldShowOccupation(childQ, values, itemScope)) return null;\n if (!shouldShowNJField(childQ, values)) return null;\n if (!shouldShowLapseInCoverage(childQ, values, widgetStageKey)) return null;\n if (shouldSuppressHiddenWidgetField(ck, childQ, values, widgetStageKey)) {\n const selectedCarrier = autoCoverageKeys.currentCarrierKey ? values[autoCoverageKeys.currentCarrierKey] : undefined;\n const hasNamedCarrier = selectedCarrier && selectedCarrier !== 'NoPriorInsurance';\n if (!(hasNamedCarrier && hasAutoCoverageGap(values, autoCoverageKeys) && AUTO_GAP_VISIBLE_KEYS.has(ck))) return null;\n }\n return (\n <div key={`${groupId}-${ck}`} className=\"mt-3\">\n {renderOne(childQ, itemScope)}\n\n {/* Nested conditionals under childQ (supports nested repeatables too) */}\n {(() => {\n const childConds = childQ.conditionals ?? [];\n if (!childConds.length) return null;\n\n const childVal = scopedRead(values, itemScope, childQ.key as string);\n const childMatches = childConds.filter((c) => evalConditional(childVal, c.conditionalType, c.conditionalValue));\n const childBranches =\n childMatches.length > 1 && !childMatches.some((m) => m.conditionalQuestionsAllowMultiple)\n ? childMatches.slice(0, 1)\n : childMatches;\n\n return childBranches.map((bc, bci) => {\n const grandChildren = (bc.conditionalQuestions ?? []) as unknown as Question[];\n if (!grandChildren.length) return null;\n\n // NON-REPEATABLE nested branch: same item scope\n if (!bc.conditionalQuestionsAllowMultiple) {\n return (\n <div key={`nested-${groupId}-${bci}`} className=\"mt-3\">\n {renderRecursive(grandChildren, itemScope)}\n </div>\n );\n }\n\n // REPEATABLE nested branch: store under <itemScope> + itemsKey(childQ.key)\n const nestedArrKey = itemsKey(childQ.key as string);\n const nestedArr: unknown[] = (getIn(values, [...itemScope, nestedArrKey]) as unknown[]) ?? [];\n const nestedCount = Math.max(1, nestedArr.length || 1);\n\n const nestedPush = () => {\n const next = setInImmutable(values, [...itemScope, nestedArrKey, nestedArr.length], {});\n if (controlledValues && onChangeValues) onChangeValues(next);\n else setUncontrolled(next);\n setLocalShadow(next);\n };\n const nestedPop = () => {\n const nextArr = nestedArr.slice(0, Math.max(0, nestedArr.length - 1));\n const next = setInImmutable(values, [...itemScope, nestedArrKey], nextArr);\n if (controlledValues && onChangeValues) onChangeValues(next);\n else setUncontrolled(next);\n setLocalShadow(next);\n };\n\n return (\n <div key={`nested-repeat-${groupId}-${bci}`} className=\"mt-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"text-sm font-medium opacity-75\">Add one or more entries</div>\n <div className=\"space-x-2\">\n <button type=\"button\" className=\"btn-outline px-3 py-1\" onClick={nestedPush}>\n Add another\n </button>\n {nestedCount > 1 && (\n <button type=\"button\" className=\"btn-outline px-3 py-1\" onClick={nestedPop}>\n Remove last\n </button>\n )}\n </div>\n </div>\n\n {Array.from({ length: nestedCount }).map((__, nIdx) => {\n const nestedScope: ScopePath = [...itemScope, nestedArrKey, nIdx];\n return (\n <div key={`nested-item-${groupId}-${bci}-${nIdx}`} className=\"rounded-lg border p-3 mb-3\">\n <div className=\"text-sm font-semibold mb-2\">Entry #{nIdx + 1}</div>\n {renderRecursive(grandChildren, nestedScope)}\n </div>\n );\n })}\n </div>\n );\n });\n })()}\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n });\n }\n\n // Visible (non-repeatable) only — used for Enter-to-continue validation feedback\n const visibleFlat = useMemo(() => {\n const out: Question[] = [];\n const walk = (list: Question[], scopePath?: ScopePath) => {\n list.forEach((q) => {\n if (!shouldShowNoInsuranceReason(q, values, autoCoverageKeys)) return;\n if (!shouldShowOccupation(q, values, scopePath)) return;\n if (!shouldShowNJField(q, values)) return;\n if (!shouldShowLapseInCoverage(q, values, widgetStageKey)) return;\n const k = String(q.key);\n if (shouldSuppressHiddenWidgetField(k, q, values, widgetStageKey)) {\n const selectedCarrier = autoCoverageKeys.currentCarrierKey ? values[autoCoverageKeys.currentCarrierKey] : undefined;\n const hasNamedCarrier = selectedCarrier && selectedCarrier !== 'NoPriorInsurance';\n if (!(hasNamedCarrier && hasAutoCoverageGap(values, autoCoverageKeys) && AUTO_GAP_VISIBLE_KEYS.has(k))) return;\n }\n if (!isImplicitYesRepeatableQuestion(q)) {\n out.push(q);\n }\n const conds = q.conditionals ?? [];\n if (!conds.length) return;\n\n const v = getEffectiveQuestionValue(q, scopedRead(values, scopePath, k));\n const matches = conds.filter((c) => evalConditional(v, c.conditionalType, c.conditionalValue));\n const branches = matches.length > 1 && !matches.some((m) => m.conditionalQuestionsAllowMultiple) ? matches.slice(0, 1) : matches;\n\n branches.forEach((m) => {\n const children = (m.conditionalQuestions ?? []) as unknown as Question[];\n if (!children.length) return;\n if (m.conditionalQuestionsAllowMultiple) return; // item-level handled on wizard side\n walk(children, scopePath);\n });\n });\n };\n walk(keyedQuestions);\n return out;\n }, [keyedQuestions, values, autoCoverageKeys, widgetStageKey]);\n\n function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n e.preventDefault();\n const dynamicRequired = shouldRequireNoInsuranceReason(values, autoCoverageKeys);\n const validationQuestions = visibleFlat.map((q) => (isNoInsuranceReasonQuestion(q, autoCoverageKeys) ? { ...q, required: dynamicRequired } : q));\n const eMap = validateQuestions(validationQuestions as Question[], values);\n setErrors(eMap);\n\n if (Object.keys(eMap).length > 0) {\n const firstIdx = visibleFlat.findIndex((q) => eMap[q.key as string]);\n if (firstIdx >= 0) document.getElementById(visibleFlat[firstIdx].key as string)?.focus();\n return;\n }\n onSubmit(values);\n }\n\n return (\n <form className=\"space-y-6 px-1\" onSubmit={handleSubmit} noValidate>\n {renderRecursive(keyedQuestions)}\n </form>\n );\n}\n\nexport default FormRenderer;\n","/**\n * Google Tag Manager dataLayer helpers for the Credify Insurance Widget.\n * Pushes events at each step so GTM can trigger tags (e.g. GTM-NK8LGHTQ).\n */\n\nexport const GTM_CONTAINER_ID = 'GTM-NK8LGHTQ';\n\ndeclare global {\n interface Window {\n dataLayer?: Record<string, unknown>[];\n }\n}\n\nfunction getDataLayer(): Record<string, unknown>[] {\n if (typeof window === 'undefined') return [];\n window.dataLayer = window.dataLayer ?? [];\n return window.dataLayer;\n}\n\nexport function pushDataLayerEvent(eventName: string, payload: Record<string, unknown> = {}): void {\n const dataLayer = getDataLayer();\n dataLayer.push({\n event: eventName,\n credifyWidget: {\n ...payload,\n containerId: GTM_CONTAINER_ID\n }\n });\n}\n\n/** Widget was opened */\nexport function pushWidgetOpened(): void {\n pushDataLayerEvent('credify_widget_opened');\n}\n\n/** Widget was closed */\nexport function pushWidgetClosed(): void {\n pushDataLayerEvent('credify_widget_closed');\n}\n\n/** User viewed a form stage (step) */\nexport function pushStageViewed(payload: { stageKey: string; stageTitle: string; stepIndex: number; totalSteps: number }): void {\n pushDataLayerEvent('credify_widget_stage_viewed', payload);\n}\n\n/** User completed a form stage (clicked Next successfully) */\nexport function pushStageCompleted(payload: { stageKey: string; stageTitle: string; stepIndex: number; totalSteps: number }): void {\n pushDataLayerEvent('credify_widget_stage_completed', payload);\n}\n\n/** User completed all stages and rates were requested */\nexport function pushFlowCompleted(): void {\n pushDataLayerEvent('credify_widget_flow_completed');\n}\n\n/** User is viewing the rates screen */\nexport function pushRatesViewed(payload?: { rateCount?: number }): void {\n pushDataLayerEvent('credify_widget_rates_viewed', payload ?? {});\n}\n\n/** User clicked Back from the rates screen */\nexport function pushRatesBack(): void {\n pushDataLayerEvent('credify_widget_rates_back');\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { Question } from '@getcredify/credify-insurance-types';\n\nimport FormRenderer from './FormRenderer';\nimport { decorateKeys } from '../utils/decorateKeys';\n\nimport { ensureKey, validateQuestions, isBlankValue, type StageMeta, type FormValues } from '../utils/form';\nimport { isQuestionHiddenInWidget } from '../utils/hiddenQuestions';\nimport {\n resolveAutoCoverageConditionKeys,\n hasAutoCoverageGap,\n shouldRequireNoInsuranceReason,\n shouldShowNoInsuranceReason,\n shouldShowLapseInCoverage,\n isNoInsuranceReasonQuestion\n} from '../utils/autoCoverageCondition';\nimport { pushStageViewed } from '../utils/gtm';\n\n/* ---------- NJ-specific field visibility (mirrors renderer) ---------- */\nimport { NJ_POLICY_FIELD_KEY_SET } from '../utils/njPolicyFields';\n\nfunction shouldShowNJField(q: Question, values: FormValues): boolean {\n const key = String(q.key ?? '');\n if (!NJ_POLICY_FIELD_KEY_SET.has(key)) return true;\n\n // Use the same robust detection as FormRenderer\n const stateValue = values.state ?? values.State ?? values['state'] ?? values['State'] ?? '';\n if (typeof stateValue !== 'string' || !stateValue.trim()) return false;\n\n const normalized = stateValue.trim().toLowerCase();\n const isNj = normalized === 'nj' || normalized === 'n.j.' || normalized === 'n.j' || normalized === 'new jersey';\n\n return isNj;\n}\n\nfunction isNjSelected(values: FormValues): boolean {\n const stateValue = values.state ?? values.State ?? values['state'] ?? values['State'] ?? '';\n if (typeof stateValue !== 'string' || !stateValue.trim()) return false;\n const normalized = stateValue.trim().toLowerCase();\n return normalized === 'nj' || normalized === 'n.j.' || normalized === 'n.j' || normalized === 'new jersey';\n}\n\n/** Keys listed as globally hidden but shown in NJ (mirrors FormRenderer). */\nfunction isNjUnhiddenField(key: string, values: FormValues): boolean {\n const keyStr = String(key ?? '');\n const isNjField = NJ_POLICY_FIELD_KEY_SET.has(keyStr) || keyStr === 'has_health_insurance_auto_accident' || keyStr === 'is_corporation';\n return isNjSelected(values) && isNjField;\n}\n\n/* ---------- occupation visibility (mirrors renderer) ---------- */\nconst INDUSTRIES_WITHOUT_OCCUPATION = new Set(['Disabled', 'Retired', 'Unemployed', 'Other']);\n\nfunction shouldShowOccupation(q: Question, values: FormValues): boolean {\n const key = String(q.key ?? '');\n if (key === 'co_applicant_occupation') return true;\n if (key !== 'occupation') return true;\n const driverIndustry = values.industry;\n const homeIndustry = values.employment_industry;\n const industry = String(driverIndustry ?? homeIndustry ?? '').trim();\n return !INDUSTRIES_WITHOUT_OCCUPATION.has(industry);\n}\n\n/** Occupation visibility inside a repeatable item (e.g. driver) where `industry` lives on the item object. */\nfunction shouldShowOccupationInRepeatableItem(q: Question, itemValues: FormValues): boolean {\n const key = String(q.key ?? '');\n if (key === 'co_applicant_occupation') return true;\n if (key !== 'occupation') return true;\n const driverIndustry = itemValues.industry;\n const homeIndustry = itemValues.employment_industry;\n const industry = String(driverIndustry ?? homeIndustry ?? '').trim();\n return !INDUSTRIES_WITHOUT_OCCUPATION.has(industry);\n}\n\n/* ---------- conditional helpers (mirrors renderer) ---------- */\ntype ConditionalNode = NonNullable<Question['conditionals']>[number];\ntype ConditionalType = NonNullable<ConditionalNode['conditionalType']> | 'notEquals';\n\nfunction isImplicitYesRepeatableQuestion(q: Question): boolean {\n if (q.inputType !== 'radio') return false;\n if (!q.options || q.options.length !== 1 || q.options[0] !== 'Yes') return false;\n const conds = q.conditionals ?? [];\n return conds.some((c) => c.conditionalQuestionsAllowMultiple && c.conditionalType === 'equals' && c.conditionalValue === 'Yes');\n}\n\nfunction getEffectiveQuestionValue(q: Question, value: unknown): unknown {\n if (isImplicitYesRepeatableQuestion(q)) return 'Yes';\n return value;\n}\n\nfunction toNumber(x: unknown): number | null {\n if (typeof x === 'number' && Number.isFinite(x)) return x;\n if (typeof x === 'string' && x.trim() !== '' && !Number.isNaN(Number(x))) return Number(x);\n return null;\n}\nfunction toTime(x: unknown): number | null {\n if (x instanceof Date && !Number.isNaN(x.getTime())) return x.getTime();\n if (typeof x === 'string') {\n const t = Date.parse(x);\n return Number.isNaN(t) ? null : t;\n }\n return null;\n}\nfunction cmp(a: unknown, b: unknown): number | null {\n const na = toNumber(a),\n nb = toNumber(b);\n if (na != null && nb != null) return na - nb;\n const ta = toTime(a),\n tb = toTime(b);\n if (ta != null && tb != null) return ta - tb;\n if (a == null || b == null) return null;\n return String(a).localeCompare(String(b));\n}\nfunction contains(haystack: unknown, needle: unknown): boolean {\n if (Array.isArray(haystack)) return haystack.some((v) => v === needle);\n if (typeof haystack === 'string') return needle != null && haystack.includes(String(needle));\n return false;\n}\nfunction evalConditional(v: unknown, type: ConditionalType | undefined, rhs: unknown): boolean {\n switch (type) {\n case 'equals':\n return v === rhs;\n case 'notEquals':\n return v !== rhs && v !== '' && v != null;\n case 'lessThan': {\n const c = cmp(v, rhs);\n return c != null && c < 0;\n }\n case 'greaterThan': {\n const c = cmp(v, rhs);\n return c != null && c > 0;\n }\n case 'contains':\n return contains(v, rhs);\n case 'startsWith':\n return v != null && rhs != null && String(v).startsWith(String(rhs));\n case 'endsWith':\n return v != null && rhs != null && String(v).endsWith(String(rhs));\n default:\n return false;\n }\n}\n\n/* ---------- visibility (non-repeatable) ---------- */\nconst AUTO_GAP_VISIBLE_KEYS = new Set(['auto_prior_years', 'auto_prior_months', 'auto_continuous_coverage_years']);\n\nfunction flattenVisibleQuestions(root: ReadonlyArray<Question>, values: FormValues, widgetStageKey: string | undefined): ReadonlyArray<Question> {\n // Match FormRenderer: same key decoration + recursive conditional walk so \"Next\" validates the same fields the user sees.\n const keyed = decorateKeys([...root] as Question[]);\n const autoCoverageKeys = resolveAutoCoverageConditionKeys(keyed);\n const out: Question[] = [];\n const visit = (list: ReadonlyArray<Question>) => {\n list.forEach((q) => {\n if (!shouldShowNoInsuranceReason(q, values, autoCoverageKeys)) return;\n if (!shouldShowOccupation(q, values)) return;\n if (!shouldShowNJField(q, values)) return;\n if (!shouldShowLapseInCoverage(q, values, widgetStageKey)) return;\n const keyStr = String(q.key);\n if (isQuestionHiddenInWidget(keyStr, widgetStageKey)) {\n // NJ-specific fields are kept hidden globally so non-NJ flows remain unchanged,\n // but they MUST be validated (and therefore block Next) when NJ is selected.\n if (isNjUnhiddenField(keyStr, values)) {\n // visible; keep going\n } else {\n // Auto policy: when there is a coverage gap (expiration < effective) and the user has a named carrier,\n // temporarily surface the associated follow-up fields even though they are normally hidden.\n const selectedCarrier = autoCoverageKeys.currentCarrierKey ? values[autoCoverageKeys.currentCarrierKey] : undefined;\n const hasNamedCarrier = selectedCarrier && selectedCarrier !== 'NoPriorInsurance';\n if (!(hasNamedCarrier && hasAutoCoverageGap(values, autoCoverageKeys) && AUTO_GAP_VISIBLE_KEYS.has(keyStr))) return;\n }\n }\n if (!isImplicitYesRepeatableQuestion(q)) {\n out.push(q);\n }\n const v = getEffectiveQuestionValue(q, values[keyStr]);\n const conds = q.conditionals ?? [];\n if (!conds.length) return;\n\n const matches = conds.filter((c) => evalConditional(v, c.conditionalType, c.conditionalValue));\n const branches = matches.length > 1 && !matches.some((m) => m.conditionalQuestionsAllowMultiple) ? matches.slice(0, 1) : matches;\n\n branches.forEach((m) => {\n const children = (m.conditionalQuestions ?? []) as unknown as Question[];\n if (!children.length) return;\n if (m.conditionalQuestionsAllowMultiple) return; // handled per-item below\n visit(children);\n });\n });\n };\n visit(keyed);\n return out;\n}\n\n/* ---------- repeatable validation (any depth) ---------- */\nconst ITEMS_SUFFIX = '__items';\nconst itemsKey = (k: string) => `${k}${ITEMS_SUFFIX}`;\n\ntype ScopePath = Array<string | number>;\n\nfunction shouldSkipRequiredValidation(q: Question, scopePath: ScopePath): boolean {\n // Keep repeatable required validation aligned with renderer visibility rules.\n if (q.key === 'relationship_to_insured' || q.key === 'is_registered_owner') {\n const itemIdx = scopePath[scopePath.length - 1];\n return typeof itemIdx === 'number' && itemIdx === 0;\n }\n return false;\n}\n\nfunction validateRepeatablesRecursive(\n questions: ReadonlyArray<Question>,\n valuesAtScope: FormValues,\n scopePath: ScopePath = [],\n widgetStageKey: string | undefined = undefined\n): boolean {\n // returns true if any blocking error exists\n for (const q of questions) {\n const qKey = String(q.key);\n const qVal = getEffectiveQuestionValue(q, valuesAtScope[qKey]);\n const conds = q.conditionals ?? [];\n if (!conds.length) continue;\n\n const matches = conds.filter((c) => evalConditional(qVal, c.conditionalType, c.conditionalValue));\n const branches = matches.length > 1 && !matches.some((m) => m.conditionalQuestionsAllowMultiple) ? matches.slice(0, 1) : matches;\n\n for (const b of branches) {\n const children = (b.conditionalQuestions ?? []) as unknown as Question[];\n if (!children.length) continue;\n\n if (!b.conditionalQuestionsAllowMultiple) {\n // non-repeatable: keep walking for deeper repeats\n if (validateRepeatablesRecursive(children, valuesAtScope, scopePath, widgetStageKey)) return true;\n continue;\n }\n\n // repeatable at this scope\n const arr = (valuesAtScope[itemsKey(qKey)] as unknown[]) ?? [];\n if (arr.length === 0) return true; // must have at least one entry\n\n for (const [idx, item] of (arr as Array<Record<string, unknown>>).entries()) {\n const itemScopePath = [...scopePath, itemsKey(qKey), idx];\n\n // 1) validate required fields for this item's children (exclude hidden questions)\n const visibleChildren = children.filter((childQ) => {\n if (shouldSkipRequiredValidation(childQ, itemScopePath)) return false;\n if (isQuestionHiddenInWidget(String(childQ.key), widgetStageKey)) return false;\n if (!shouldShowOccupationInRepeatableItem(childQ, item as FormValues)) return false;\n return true;\n });\n const itemErrors = validateQuestions(visibleChildren, item as FormValues);\n if (Object.values(itemErrors).some(Boolean)) return true;\n\n // 2) recursively validate nested repeatables within this item\n if (validateRepeatablesRecursive(children, item as FormValues, itemScopePath, widgetStageKey)) return true;\n }\n }\n }\n return false;\n}\n\n/** True when any visible repeatable branch (at any depth) is missing items or has invalid items */\nfunction hasRepeatableBlockingErrors(questions: ReadonlyArray<Question>, rootValues: FormValues, widgetStageKey: string | undefined): boolean {\n return validateRepeatablesRecursive(questions, rootValues, [], widgetStageKey);\n}\n\nfunction hasVehiclePolicySelectionsBlockingErrors(values: FormValues): boolean {\n const vehicles = (values.vehicles__items ?? []) as Array<Record<string, unknown>>;\n if (!Array.isArray(vehicles) || vehicles.length === 0) return false;\n for (const v of vehicles) {\n if (isBlankValue(v.vehicle_comp_deductible, 'select')) return true;\n if (isBlankValue(v.vehicle_coll_deductible, 'select')) return true;\n if (isBlankValue(v.vehicle_towing_and_labor, 'select')) return true;\n if (isBlankValue(v.vehicle_transportation_expense, 'select')) return true;\n }\n return false;\n}\n\ntype CompleteCallback = (values: FormValues, stageKey: string) => Promise<{ success: boolean; error?: string }>;\n\n/* -------------------------------- component -------------------------------- */\nexport function FormWizard({\n stages,\n onStageComplete,\n onComplete,\n initialValues,\n initialActive,\n quoteId\n}: {\n stages: StageMeta[];\n onStageComplete: CompleteCallback;\n onComplete: CompleteCallback;\n initialValues?: FormValues;\n initialActive?: number;\n quoteId?: string;\n}) {\n const [active, setActive] = useState(initialActive ?? 0);\n const [allValues, setAllValues] = useState<FormValues>(initialValues ?? {});\n const [perStageQuestions, setPerStageQuestions] = useState<Record<string, Question[]>>({});\n const [loading, setLoading] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [stageError, setStageError] = useState<string | null>(null);\n const stepRefs = useRef<(HTMLLIElement | null)[]>([]);\n const latestStagesRef = useRef<StageMeta[]>(stages);\n\n const hasStages = Array.isArray(stages) && stages.length > 0;\n const clampedActive = hasStages ? Math.min(active, stages.length - 1) : 0;\n const stage = hasStages ? stages[clampedActive] : null;\n const stageKey = stage?.key ?? null;\n\n // Update active stage when initialActive changes (e.g., when going back from rates)\n useEffect(() => {\n if (initialActive !== undefined) {\n setActive(initialActive);\n }\n }, [initialActive]);\n\n latestStagesRef.current = stages;\n\n const isEffectivelyLastStage = useMemo(() => {\n if (clampedActive >= stages.length - 1) return true;\n const remaining = stages.slice(clampedActive + 1);\n if (remaining.every((s) => s.key === 'AutoPolicy')) {\n const driverItems = (allValues.drivers__items ?? []) as unknown[];\n if (driverItems.length <= 1) return true;\n }\n return false;\n }, [clampedActive, stages, allValues]);\n\n useEffect(() => {\n if (hasStages && active >= stages.length) {\n setActive(stages.length - 1);\n }\n }, [active, stages.length, hasStages]);\n\n // Scroll active step into view\n useEffect(() => {\n const activeElement = stepRefs.current[clampedActive];\n if (activeElement) {\n activeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n }\n }, [clampedActive]);\n\n // Update form values when initialValues changes (e.g., when going back from rates)\n // Only update if initialValues is provided (not undefined/null)\n useEffect(() => {\n if (initialValues !== undefined) {\n setAllValues(initialValues);\n }\n }, [initialValues]);\n\n useEffect(() => {\n if (!stage || !stageKey) {\n setLoading(false);\n setStageError(null);\n return;\n }\n if (perStageQuestions[stageKey]) {\n setLoading(false);\n setStageError(null);\n return;\n }\n\n let cancelled = false;\n setLoading(true);\n setStageError(null);\n\n Promise.resolve(stage.loadQuestions())\n .then((qs) => {\n if (cancelled) return;\n if (!Array.isArray(qs)) throw new Error(`loadQuestions(\"${stageKey}\") did not return an array`);\n setPerStageQuestions((m) => ({ ...m, [stageKey]: qs }));\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((err: any) => {\n if (cancelled) return;\n setStageError(`Failed to load stage \"${stage?.title ?? ''}\": ${err?.message ?? 'Unknown error'}`);\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [stage, stageKey, perStageQuestions]);\n\n const questions = stageKey ? perStageQuestions[stageKey] : undefined;\n const autoCoverageKeys = useMemo(() => resolveAutoCoverageConditionKeys(decorateKeys((questions ?? []) as Question[])), [questions]);\n\n // GTM: stage viewed (when questions for this stage have loaded)\n useEffect(() => {\n if (stage && stageKey && questions) {\n pushStageViewed({\n stageKey,\n stageTitle: stage.title ?? stageKey,\n stepIndex: active + 1,\n totalSteps: stages.length\n });\n }\n }, [stageKey, active, stages.length, stage, questions]);\n\n // Values slice for current stage (+ keep any __items arrays)\n const currentValues = useMemo(() => {\n if (!questions) return {};\n const slice: FormValues = {};\n\n // Helper function to recursively collect all nested question keys\n const collectAllQuestionKeys = (questionList: Question[]): string[] => {\n const keys: string[] = [];\n const walk = (list: Question[]) => {\n list.forEach((q, i) => {\n const k = ensureKey(q, i);\n keys.push(k);\n const kItems = itemsKey(k);\n keys.push(kItems);\n\n // Recursively collect keys from conditional questions\n const conds = q.conditionals ?? [];\n conds.forEach((c) => {\n const children = (c.conditionalQuestions ?? []) as unknown as Question[];\n if (children.length > 0) {\n walk(children);\n }\n });\n });\n };\n walk(questionList);\n return keys;\n };\n\n // Get all keys that could be relevant to this stage (including nested conditionals)\n const allRelevantKeys = collectAllQuestionKeys(questions);\n\n // Include values for all relevant keys\n allRelevantKeys.forEach((k) => {\n if (k in allValues) slice[k] = allValues[k];\n });\n\n // Always include global context keys that affect conditional rendering across stages.\n // Example: NJ-specific policy fields are conditionally shown based on `state`, but\n // most stages do not include a `state` question key, so it would be dropped here.\n for (const k of ['state', 'State', 'address', 'product'] as const) {\n if (k in allValues) slice[k] = allValues[k];\n }\n\n // include any orphaned *_ _items keys to keep sub-arrays alive\n for (const [k, v] of Object.entries(allValues)) {\n if (k.endsWith(ITEMS_SUFFIX) && !(k in slice)) slice[k] = v;\n }\n return slice;\n }, [questions, allValues]);\n\n const updateCurrentValues = (next: FormValues) => {\n setAllValues((prev) => ({ ...prev, ...next }));\n };\n\n const goPrev = () => {\n setActive((i) => (i > 0 ? i - 1 : 0));\n document.querySelector<HTMLElement>('.panel-body')?.scrollTo({ top: 0, behavior: 'instant' as ScrollBehavior });\n };\n\n const goNext = async () => {\n if (!questions || !stage || loading || stageError || isSubmitting) return;\n\n // flat (visible, non-repeatable) validation\n // Use currentValues (includes global context like `state` for NJ visibility + current stage fields)\n // so that required NJ policy fields properly block navigation if unfilled.\n const visible = flattenVisibleQuestions(questions, currentValues, stageKey ?? undefined);\n const dynamicRequired = shouldRequireNoInsuranceReason(allValues, autoCoverageKeys);\n const validationQuestions = visible.map((q) => (isNoInsuranceReasonQuestion(q, autoCoverageKeys) ? { ...q, required: dynamicRequired } : q));\n const flatErrors = validateQuestions(validationQuestions as Question[], currentValues);\n const visibleKeys = new Set(validationQuestions.map((q, i) => ensureKey(q, i)));\n const flatBlock = Object.entries(flatErrors).some(([k, v]) => v && visibleKeys.has(k));\n\n // repeatable validation (any depth)\n const repeatBlock = hasRepeatableBlockingErrors(questions, allValues, stageKey ?? undefined);\n\n // vehicle policy selections (custom UI inside FormRenderer; must still block Next)\n const hasVehiclePolicySelections = visible.some((q) => String(q.key ?? '') === 'vehicle_policy_selections');\n const vehiclePolicyBlock = hasVehiclePolicySelections ? hasVehiclePolicySelectionsBlockingErrors(allValues) : false;\n\n // driver-vehicle assignment validation (50/50 not allowed, must sum to 100)\n const dva = allValues.driver_vehicle_assignments as Record<string, Record<string, number>> | undefined;\n const dvaDrivers = (allValues.drivers__items ?? []) as unknown[];\n let dvaBlock = false;\n if (dva && dvaDrivers.length >= 2) {\n const vehicles = (allValues.vehicles__items ?? []) as unknown[];\n for (let vi = 0; vi < vehicles.length; vi++) {\n const vAssign = dva[`v${vi}`];\n if (!vAssign) continue;\n // cspell:ignore pcts\n const pcts = dvaDrivers.map((_, di) => vAssign[`d${di}`] ?? 0);\n const nonZero = pcts.filter((p) => p > 0);\n if (nonZero.length >= 2 && nonZero.every((p) => p === 50)) {\n dvaBlock = true;\n break;\n }\n const total = pcts.reduce((a, b) => a + b, 0);\n if (total > 0 && total !== 100) {\n dvaBlock = true;\n break;\n }\n }\n }\n\n if (flatBlock || repeatBlock || vehiclePolicyBlock || dvaBlock) return;\n\n setIsSubmitting(true);\n try {\n const isComplete = isEffectivelyLastStage;\n const { success, error } = isComplete ? await onComplete(allValues, stageKey ?? '') : await onStageComplete(currentValues, stageKey ?? '');\n if (!success) {\n setStageError(error ?? 'An error occurred');\n return;\n }\n if (!isComplete) {\n const latestStages = latestStagesRef.current;\n const latestCurrentIndex = latestStages.findIndex((s) => s.key === stageKey);\n const latestNextIndex =\n latestCurrentIndex >= 0 ? Math.min(latestCurrentIndex + 1, latestStages.length - 1) : Math.min(active + 1, latestStages.length - 1);\n setActive(latestNextIndex);\n }\n } finally {\n setIsSubmitting(false);\n }\n };\n\n // LIVE disabled state for the Next button (always rendered)\n const disableNext = useMemo(() => {\n if (!questions || loading || !!stageError || isSubmitting) return true;\n // Use currentValues (includes global context like `state` for NJ visibility + current stage fields)\n // so that required NJ policy fields (and other coverage fields) properly disable Next if unfilled.\n const visible = flattenVisibleQuestions(questions, currentValues, stageKey ?? undefined);\n const dynamicRequired = shouldRequireNoInsuranceReason(allValues, autoCoverageKeys);\n const validationQuestions = visible.map((q) => (isNoInsuranceReasonQuestion(q, autoCoverageKeys) ? { ...q, required: dynamicRequired } : q));\n const flatErrors = validateQuestions(validationQuestions as Question[], currentValues);\n const visibleKeys = new Set(validationQuestions.map((q, i) => ensureKey(q, i)));\n const flatBlock = Object.entries(flatErrors).some(([k, v]) => v && visibleKeys.has(k));\n const repeatBlock = hasRepeatableBlockingErrors(questions, allValues, stageKey ?? undefined);\n\n const hasVehiclePolicySelections = visible.some((q) => String(q.key ?? '') === 'vehicle_policy_selections');\n const vehiclePolicyBlock = hasVehiclePolicySelections ? hasVehiclePolicySelectionsBlockingErrors(allValues) : false;\n\n const dva = allValues.driver_vehicle_assignments as Record<string, Record<string, number>> | undefined;\n const dvaDrivers = (allValues.drivers__items ?? []) as unknown[];\n let dvaBlock = false;\n if (dva && dvaDrivers.length >= 2) {\n const vehicles = (allValues.vehicles__items ?? []) as unknown[];\n for (let vi = 0; vi < vehicles.length; vi++) {\n const vAssign = dva[`v${vi}`];\n if (!vAssign) continue;\n // cspell:ignore pcts\n const pcts = dvaDrivers.map((_, di) => vAssign[`d${di}`] ?? 0);\n const nonZero = pcts.filter((p) => p > 0);\n if (nonZero.length >= 2 && nonZero.every((p) => p === 50)) {\n dvaBlock = true;\n break;\n }\n const total = pcts.reduce((a, b) => a + b, 0);\n if (total > 0 && total !== 100) {\n dvaBlock = true;\n break;\n }\n }\n }\n\n return flatBlock || repeatBlock || vehiclePolicyBlock || dvaBlock;\n }, [questions, currentValues, allValues, loading, stageError, isSubmitting, autoCoverageKeys, stageKey]);\n\n if (!hasStages) return <div className=\"text-slate-600\">Loading...</div>;\n\n return (\n <div className=\"space-y-6\">\n {/* progress header */}\n <div className=\"form-wizard-steps-header flex items-center justify-between gap-4\">\n <ol\n className=\"form-wizard-steps flex gap-2 text-xs overflow-x-auto flex-1 pb-1 scrollbar-hide items-center\"\n style={{ scrollbarWidth: 'none', msOverflowStyle: 'none' }}\n >\n {stages.flatMap((s, i) => [\n <li\n key={s.key ?? `stage-${i}`}\n ref={(el) => {\n stepRefs.current[i] = el;\n }}\n className={`form-wizard-step-pill px-2.5 py-1 rounded-full border whitespace-nowrap flex-shrink-0 ${\n i < clampedActive\n ? 'bg-blue-600 text-white border-blue-600'\n : i === clampedActive\n ? 'border-blue-600 text-blue-600 bg-white'\n : 'border-slate-200 text-slate-600'\n }`}\n >\n {s.title}\n </li>,\n ...(i < stages.length - 1\n ? [\n <li key={`arrow-${s.key ?? i}`} className=\"form-wizard-step-arrow text-slate-400 flex-shrink-0\">\n →\n </li>\n ]\n : [])\n ])}\n </ol>\n <div className=\"form-wizard-step-counter text-sm text-slate-500 flex-shrink-0\">\n {clampedActive + 1} / {stages.length}\n </div>\n </div>\n\n {/* stage content */}\n <div>\n {loading && <div className=\"text-slate-500\">Loading…</div>}\n\n {stage && (\n <FormRenderer\n key={stage.key}\n questions={questions ?? []}\n controlledValues={currentValues}\n onChangeValues={updateCurrentValues}\n onSubmit={() => goNext()} // Enter key advances\n quoteId={quoteId}\n widgetStageKey={stageKey ?? undefined}\n />\n )}\n </div>\n\n {/* error message */}\n {!loading && stageError && (\n <div className=\"text-red-600 text-sm -mt-4\">\n <div>{stageError}</div>\n {stage && (\n <button\n type=\"button\"\n className=\"credify-retry-btn underline mt-1 font-bold\"\n onClick={() => {\n setPerStageQuestions((m) => {\n if (!stageKey) return m;\n const copy = { ...m };\n delete copy[stageKey];\n return copy;\n });\n }}\n >\n Retry\n </button>\n )}\n </div>\n )}\n\n {/* footer (always visible) */}\n <div className={clampedActive > 0 ? 'grid grid-cols-2 gap-3' : ''}>\n {clampedActive > 0 && (\n <button\n type=\"button\"\n onClick={goPrev}\n disabled={loading}\n className=\"credify-btn-back h-12 rounded-full border border-gray-300 text-text-primary hover:bg-gray-50 transition\"\n >\n Back\n </button>\n )}\n\n <button\n type=\"button\"\n data-widget-ctrl=\"next\"\n onClick={goNext}\n disabled={disableNext}\n className={[\n 'form-wizard-next-btn',\n clampedActive > 0 ? '' : 'w-full',\n 'h-12 rounded-full text-white transition',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'flex items-center justify-center gap-2',\n disableNext\n ? 'bg-gray-300'\n : 'bg-blue-600 hover:bg-blue-600/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600/40 bg-primary hover:bg-primary/90 focus-visible:ring-primary/40'\n ].join(' ')}\n >\n {isSubmitting && (\n <svg className=\"animate-spin h-5 w-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n {isEffectivelyLastStage ? 'Finish' : 'Next'}\n </button>\n </div>\n </div>\n );\n}\n\nexport default FormWizard;\n","import { useState, useEffect, useMemo } from 'react';\n\nimport type { GetRatesResponse } from '@getcredify/credify-insurance-types';\n\nimport { requestBind, loadAuthTokenFromStorage, getAuthToken, clearAuthToken } from '../utils/api';\nimport { clearAllQuoteData } from '../utils/storage';\nimport { pushRatesBack } from '../utils/gtm';\n\nconst currencyFormatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n});\n\nconst LOB_DISPLAY_NAMES: Record<string, string> = {\n PersonalHome: 'Homeowners',\n PersonalAuto: 'Personal Auto',\n Flood: 'Flood',\n ExcessFlood: 'Excess Flood',\n _other: 'Other'\n};\n\nconst LOB_ORDER = ['PersonalHome', 'PersonalAuto', 'Flood', 'ExcessFlood'];\n\n/** Outer shell for bundle + single-LOB featured blocks (matches bundle styling). */\nconst FEATURED_BLOCK_SHELL = 'rounded-2xl border-2 border-blue-300 bg-blue-50/30 p-4 shadow-blue-100/60 ring-1 ring-blue-100';\n\nconst FEATURED_BLOCK_BADGE = 'mb-3 inline-flex w-fit items-center rounded-full bg-blue-100 px-2.5 py-1 text-xs font-semibold text-blue-700';\n\n/** Matches one column of `grid gap-4 sm:grid-cols-2` so featured shell width = “More” cards (gap-4 = 1rem). */\nconst LOB_FEATURED_BLOCK_WIDTH = 'w-full max-w-md min-w-0 sm:max-w-[calc((100%-1rem)/2)]';\n\n/** Same border + padding as `FEATURED_BLOCK_SHELL` so paired cards share inner width (transparent border). */\nconst LOB_RATE_PAIR_MATCH_SHELL = 'rounded-2xl border-2 border-transparent p-4';\n\ntype RateItem = GetRatesResponse[number] &\n Partial<{\n lob: string | null;\n admitted_status: 'admitted' | 'non_admitted' | 'unknown';\n monthly_premium_cents: number | null;\n effective_date: string | null;\n policy_end_date: string | null;\n }>;\ntype RequestStatus = 'idle' | 'loading' | 'success' | 'error';\ntype AdmittedTab = 'admitted' | 'non_admitted';\n\nfunction BackButton({ onBack }: { onBack?: () => void }) {\n const handleBack = () => {\n pushRatesBack();\n onBack?.();\n };\n return (\n <button\n type=\"button\"\n onClick={handleBack}\n className=\"credify-btn-back credify-btn-back-rates h-12 rounded-full border border-gray-300 text-text-primary hover:bg-gray-50 transition w-full\"\n >\n Back\n </button>\n );\n}\n\nexport function RateCard({\n rate,\n status,\n onRequestBind,\n featured = false,\n showLobLabel = true,\n showFeaturedBadge,\n className\n}: {\n rate: RateItem;\n status: RequestStatus;\n onRequestBind: () => void;\n featured?: boolean;\n showLobLabel?: boolean;\n /** When false, hides the per-card \"Featured\" pill (e.g. bundle uses the outer \"Featured Bundle\" badge). */\n showFeaturedBadge?: boolean;\n className?: string;\n}) {\n const termMonths = Number.isFinite(rate.term_months) && rate.term_months > 0 ? rate.term_months : 1;\n const monthlyPremiumCents = rate.monthly_premium_cents != null ? rate.monthly_premium_cents : Math.round((rate.premium_cents || 0) / termMonths);\n const premiumDollars = monthlyPremiumCents / 100;\n const formattedPremium = currencyFormatter.format(premiumDollars);\n const isRequesting = status === 'loading';\n const isRequested = status === 'success';\n const hasPolicyDates = Boolean(rate.effective_date && rate.policy_end_date);\n const lobLabel = rate.lob ? LOB_DISPLAY_NAMES[rate.lob] || rate.lob : null;\n const displayFeaturedBadge = showFeaturedBadge ?? featured;\n\n return (\n <div\n className={`flex w-full flex-col rounded-xl bg-white p-6 shadow-sm transition hover:shadow-md ${\n featured ? 'border-2 border-blue-300 shadow-blue-100/60 ring-1 ring-blue-100' : 'border border-slate-200'\n }${className ? ` ${className}` : ''}`}\n >\n {showLobLabel && lobLabel && <div className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-slate-500\">{lobLabel}</div>}\n {displayFeaturedBadge && (\n <div className=\"mb-3 inline-flex w-fit items-center rounded-full bg-blue-50 px-2.5 py-1 text-xs font-semibold text-blue-700\">Featured</div>\n )}\n <div className=\"mb-4 flex flex-col items-start gap-2\">\n {rate.carrier_logo_base64 ? (\n <img src={`data:image/png;base64,${rate.carrier_logo_base64}`} alt={rate.carrier_name} className=\"h-12 w-auto max-w-full object-contain\" />\n ) : (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md bg-slate-100 text-sm font-semibold text-slate-500\">\n {rate.carrier_name.charAt(0).toUpperCase()}\n </div>\n )}\n <h4 className=\"w-full break-words text-left font-semibold text-slate-900\">{rate.carrier_name}</h4>\n </div>\n\n <div className=\"mb-2\">\n <p className=\"text-2xl font-bold text-slate-900\">\n {formattedPremium}\n <span className=\"ml-1 text-sm font-medium text-slate-500\">/month</span>\n </p>\n </div>\n\n {hasPolicyDates && (\n <div className=\"mb-2\">\n <p className=\"text-xs text-slate-500\">\n Effective {rate.effective_date} - {rate.policy_end_date}\n </p>\n </div>\n )}\n\n {rate.carrier_quote_id && (\n <div className=\"mb-4\">\n <p className=\"text-xs text-slate-400\">Quote ID: {rate.carrier_quote_id}</p>\n </div>\n )}\n\n <div className=\"mt-auto pt-4\">\n <button\n type=\"button\"\n onClick={onRequestBind}\n disabled={isRequesting || isRequested}\n className={`rates-bind-btn w-full rounded-full px-4 py-2.5 text-sm font-semibold transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600/40 disabled:cursor-not-allowed ${\n isRequested ? 'rates-bind-btn-requested' : 'hover:bg-blue-600/90 disabled:bg-slate-300 disabled:text-slate-500'\n }`}\n >\n {isRequesting ? 'Requesting…' : isRequested ? 'Requested' : 'Request Bind'}\n </button>\n {status === 'error' && <p className=\"mt-2 text-xs text-red-600\">Something went wrong. Please try again.</p>}\n {status === 'success' && <p className=\"mt-2 text-xs text-emerald-600\">We received your bind request.</p>}\n </div>\n </div>\n );\n}\n\nexport function Rates({ rates, onBack, isBundleFlow = false }: { rates: GetRatesResponse; onBack?: () => void; isBundleFlow?: boolean }) {\n const rateItems: RateItem[] = rates as RateItem[];\n const hasRawRates = Array.isArray(rateItems) && rateItems.length > 0;\n const [requestStatuses, setRequestStatuses] = useState<Record<string, RequestStatus>>({});\n const [activeMarketTab, setActiveMarketTab] = useState<AdmittedTab>('admitted');\n\n const admittedRates = useMemo(() => {\n if (!hasRawRates) return [];\n return rateItems.filter((rate) => (rate.admitted_status ?? 'admitted') === 'admitted');\n }, [rateItems, hasRawRates]);\n\n const nonAdmittedRates = useMemo(() => {\n if (!hasRawRates) return [];\n return rateItems.filter((rate) => rate.admitted_status === 'non_admitted');\n }, [rateItems, hasRawRates]);\n\n const admittedCount = admittedRates.length;\n const nonAdmittedCount = nonAdmittedRates.length;\n const hasDisplayableRates = admittedCount + nonAdmittedCount > 0;\n\n useEffect(() => {\n if (!hasDisplayableRates) {\n return;\n }\n if (activeMarketTab === 'admitted' && admittedCount === 0 && nonAdmittedCount > 0) {\n setActiveMarketTab('non_admitted');\n }\n }, [activeMarketTab, admittedCount, nonAdmittedCount, hasDisplayableRates]);\n\n const visibleRates = useMemo(() => {\n if (!hasDisplayableRates) return [];\n return activeMarketTab === 'admitted' ? admittedRates : nonAdmittedRates;\n }, [hasDisplayableRates, activeMarketTab, admittedRates, nonAdmittedRates]);\n\n useEffect(() => {\n loadAuthTokenFromStorage();\n }, []);\n\n const groupedRates = useMemo(() => {\n if (visibleRates.length === 0) return [];\n\n const hasLobData = visibleRates.some((r) => r.lob);\n if (!hasLobData) {\n const sorted = [...visibleRates].sort((a, b) => {\n const aTerm = Number.isFinite(a.term_months) && a.term_months > 0 ? a.term_months : 1;\n const bTerm = Number.isFinite(b.term_months) && b.term_months > 0 ? b.term_months : 1;\n const aMonthly = a.monthly_premium_cents ?? Math.round((a.premium_cents || 0) / aTerm);\n const bMonthly = b.monthly_premium_cents ?? Math.round((b.premium_cents || 0) / bTerm);\n return aMonthly - bMonthly;\n });\n return [{ lob: null, title: 'Rates', rates: sorted }];\n }\n\n const groups = new Map<string, RateItem[]>();\n for (const rate of visibleRates) {\n const key = rate.lob || '_other';\n const existing = groups.get(key);\n if (existing) {\n existing.push(rate);\n } else {\n groups.set(key, [rate]);\n }\n }\n\n const sorted = [...groups.entries()].sort(([a], [b]) => {\n const ai = LOB_ORDER.indexOf(a);\n const bi = LOB_ORDER.indexOf(b);\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi);\n });\n\n return sorted.map(([lob, lobRates]) => ({\n lob,\n title: LOB_DISPLAY_NAMES[lob] ?? lob,\n rates: [...lobRates].sort((a, b) => {\n const aTerm = Number.isFinite(a.term_months) && a.term_months > 0 ? a.term_months : 1;\n const bTerm = Number.isFinite(b.term_months) && b.term_months > 0 ? b.term_months : 1;\n const aMonthly = a.monthly_premium_cents ?? Math.round((a.premium_cents || 0) / aTerm);\n const bMonthly = b.monthly_premium_cents ?? Math.round((b.premium_cents || 0) / bTerm);\n return aMonthly - bMonthly;\n })\n }));\n }, [visibleRates]);\n\n const bundleMissingLobMessages = useMemo(() => {\n if (!isBundleFlow) return [] as string[];\n const hasAutoRates = rateItems.some((rate) => rate.lob === 'PersonalAuto');\n const hasHomeRates = rateItems.some((rate) => rate.lob === 'PersonalHome');\n const messages: string[] = [];\n if (!hasAutoRates) messages.push('Sorry, no rates found for Personal Auto.');\n if (!hasHomeRates) messages.push('Sorry, no rates found for Homeowners.');\n return messages;\n }, [isBundleFlow, rateItems]);\n\n if (!hasDisplayableRates) {\n return (\n <section className=\"mt-8\">\n <h3 className=\"text-lg font-semibold text-slate-900\">Rates</h3>\n <p className=\"mt-2 text-sm text-slate-500\">Sorry, no rates are available at this time.</p>\n {onBack && <BackButton onBack={onBack} />}\n </section>\n );\n }\n\n const handleRequestBind = async (cardKey: string) => {\n setRequestStatuses((prev) => ({ ...prev, [cardKey]: 'loading' }));\n try {\n loadAuthTokenFromStorage();\n const token = getAuthToken();\n if (!token) {\n throw new Error('Authentication required. Please verify your phone number first.');\n }\n const result = await requestBind(cardKey);\n const success = result?.success !== false;\n if (!success) throw new Error('Request failed');\n\n clearAllQuoteData();\n clearAuthToken();\n\n setRequestStatuses((prev) => ({ ...prev, [cardKey]: 'success' }));\n } catch {\n setRequestStatuses((prev) => ({ ...prev, [cardKey]: 'error' }));\n }\n };\n\n const autoGroup = groupedRates.find((g) => g.lob === 'PersonalAuto');\n const homeGroup = groupedRates.find((g) => g.lob === 'PersonalHome');\n const hasFeaturedBundle = Boolean(autoGroup?.rates.length && homeGroup?.rates.length);\n\n const groupsOutsideBundle = groupedRates.filter((g) => !hasFeaturedBundle || (g.lob !== 'PersonalAuto' && g.lob !== 'PersonalHome'));\n\n const featuredBundleCardEntries = hasFeaturedBundle && autoGroup && homeGroup ? [{ rate: autoGroup.rates[0] }, { rate: homeGroup.rates[0] }] : [];\n const singleCardInFeaturedBundle = featuredBundleCardEntries.length === 1;\n\n return (\n <section className=\"mt-8\">\n <h3 className=\"text-lg font-semibold text-slate-900\">Rates</h3>\n {bundleMissingLobMessages.length > 0 && (\n <div className=\"mt-3 space-y-1\">\n {bundleMissingLobMessages.map((message) => (\n <p key={message} className=\"text-sm text-slate-600\">\n {message}\n </p>\n ))}\n </div>\n )}\n <div className=\"mt-4 border-b border-slate-200\">\n <div className=\"flex items-center gap-6\">\n <button\n type=\"button\"\n onClick={() => setActiveMarketTab('admitted')}\n className={`border-b-2 px-1 py-2 text-sm font-semibold transition ${\n activeMarketTab === 'admitted' ? 'border-cyan-500 text-slate-900' : 'border-transparent text-slate-500 hover:text-slate-800'\n }`}\n >\n Admitted ({admittedCount})\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveMarketTab('non_admitted')}\n className={`border-b-2 px-1 py-2 text-sm font-semibold transition ${\n activeMarketTab === 'non_admitted' ? 'border-cyan-500 text-slate-900' : 'border-transparent text-slate-500 hover:text-slate-800'\n }`}\n >\n Non-admitted ({nonAdmittedCount})\n </button>\n </div>\n </div>\n\n {visibleRates.length === 0 && (\n <p className=\"mt-4 text-sm text-slate-500\">\n {activeMarketTab === 'admitted'\n ? 'Sorry, no admitted rates are available at this time.'\n : 'Sorry, no non-admitted rates are available at this time.'}\n </p>\n )}\n\n {visibleRates.length > 0 && hasFeaturedBundle && autoGroup && homeGroup && (\n <>\n <div className={singleCardInFeaturedBundle ? 'mt-6 flex justify-center' : 'mt-6'}>\n <div className={singleCardInFeaturedBundle ? `w-full max-w-md ${FEATURED_BLOCK_SHELL}` : FEATURED_BLOCK_SHELL}>\n <div className={FEATURED_BLOCK_BADGE}>Featured Bundle</div>\n <div className={singleCardInFeaturedBundle ? 'grid justify-items-center gap-4' : 'grid gap-4 sm:grid-cols-2'}>\n {featuredBundleCardEntries.map(({ rate }) => (\n <div key={rate.quote_rate_id} className=\"mx-auto w-full min-w-0 max-w-md\">\n <RateCard\n rate={rate}\n featured={false}\n showLobLabel\n showFeaturedBadge={false}\n status={requestStatuses[rate.quote_rate_id] ?? 'idle'}\n onRequestBind={() => handleRequestBind(rate.quote_rate_id)}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {autoGroup.rates.length > 1 && (\n <div className=\"mt-6\">\n <h4 className=\"mb-3 text-base font-semibold text-slate-800\">More {autoGroup.title} Options</h4>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {autoGroup.rates.slice(1).map((rate) => (\n <div key={rate.quote_rate_id} className=\"mx-auto w-full min-w-0 max-w-md\">\n <RateCard\n rate={rate}\n featured={false}\n showLobLabel\n showFeaturedBadge={false}\n status={requestStatuses[rate.quote_rate_id] ?? 'idle'}\n onRequestBind={() => handleRequestBind(rate.quote_rate_id)}\n />\n </div>\n ))}\n </div>\n </div>\n )}\n\n {homeGroup.rates.length > 1 && (\n <div className=\"mt-6\">\n <h4 className=\"mb-3 text-base font-semibold text-slate-800\">More {homeGroup.title} Options</h4>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {homeGroup.rates.slice(1).map((rate) => (\n <div key={rate.quote_rate_id} className=\"mx-auto w-full min-w-0 max-w-md\">\n <RateCard\n rate={rate}\n featured={false}\n showLobLabel\n showFeaturedBadge={false}\n status={requestStatuses[rate.quote_rate_id] ?? 'idle'}\n onRequestBind={() => handleRequestBind(rate.quote_rate_id)}\n />\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n )}\n\n {visibleRates.length > 0 &&\n groupsOutsideBundle.map((group) => {\n const [featuredRate, ...moreRates] = group.rates;\n return (\n <div key={group.lob ?? 'all'} className=\"mt-6\">\n <h4 className=\"mb-3 text-base font-semibold text-slate-800\">{group.title}</h4>\n {moreRates.length === 0 ? (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"col-span-full flex justify-center\">\n <div className={`${LOB_FEATURED_BLOCK_WIDTH} ${FEATURED_BLOCK_SHELL}`}>\n <div className={FEATURED_BLOCK_BADGE}>Featured</div>\n <RateCard\n rate={featuredRate}\n featured={false}\n showLobLabel={group.lob == null}\n showFeaturedBadge={false}\n status={requestStatuses[featuredRate.quote_rate_id] ?? 'idle'}\n onRequestBind={() => handleRequestBind(featuredRate.quote_rate_id)}\n />\n </div>\n </div>\n </div>\n ) : moreRates.length === 1 ? (\n <div className=\"grid items-stretch gap-4 sm:grid-cols-2\">\n <div className={`flex h-full min-h-0 w-full min-w-0 flex-col ${FEATURED_BLOCK_SHELL}`}>\n <div className={FEATURED_BLOCK_BADGE}>Featured</div>\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <RateCard\n rate={featuredRate}\n featured={false}\n showLobLabel={group.lob == null}\n showFeaturedBadge={false}\n status={requestStatuses[featuredRate.quote_rate_id] ?? 'idle'}\n onRequestBind={() => handleRequestBind(featuredRate.quote_rate_id)}\n className=\"h-full min-h-0\"\n />\n </div>\n </div>\n <div className={`flex h-full min-h-0 w-full min-w-0 flex-col ${LOB_RATE_PAIR_MATCH_SHELL}`}>\n <div className={`${FEATURED_BLOCK_BADGE} pointer-events-none invisible shrink-0`} aria-hidden>\n Featured\n </div>\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <RateCard\n rate={moreRates[0]}\n featured={false}\n showLobLabel={group.lob == null}\n showFeaturedBadge={false}\n status={requestStatuses[moreRates[0].quote_rate_id] ?? 'idle'}\n onRequestBind={() => handleRequestBind(moreRates[0].quote_rate_id)}\n className=\"h-full min-h-0\"\n />\n </div>\n </div>\n </div>\n ) : (\n <>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"col-span-full flex justify-center\">\n <div className={`${LOB_FEATURED_BLOCK_WIDTH} ${FEATURED_BLOCK_SHELL}`}>\n <div className={FEATURED_BLOCK_BADGE}>Featured</div>\n <RateCard\n rate={featuredRate}\n featured={false}\n showLobLabel={group.lob == null}\n showFeaturedBadge={false}\n status={requestStatuses[featuredRate.quote_rate_id] ?? 'idle'}\n onRequestBind={() => handleRequestBind(featuredRate.quote_rate_id)}\n />\n </div>\n </div>\n </div>\n <div className=\"mt-6 grid gap-4 sm:grid-cols-2\">\n {moreRates.map((rate) => (\n <div key={rate.quote_rate_id} className=\"mx-auto w-full min-w-0 max-w-md\">\n <RateCard\n rate={rate}\n featured={false}\n showLobLabel={group.lob == null}\n showFeaturedBadge={false}\n status={requestStatuses[rate.quote_rate_id] ?? 'idle'}\n onRequestBind={() => handleRequestBind(rate.quote_rate_id)}\n />\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n );\n })}\n\n {onBack && <BackButton onBack={onBack} />}\n </section>\n );\n}\n","import type { Quote } from '@getcredify/credify-insurance-db';\nimport type { FormValues } from './form';\nimport { normalizeEducationLevelValue, normalizeIndustryValue, normalizeOccupationValue } from './industry-occupation-normalizers';\n\n/**\n * Convert boolean to \"Yes\"/\"No\" string (reverse of transformFormValues)\n */\nexport function convertBooleanToYesNo(value: boolean | null | undefined): string | undefined {\n if (value === true) return 'Yes';\n if (value === false) return 'No';\n return undefined;\n}\n\n/**\n * Format date to YYYY-MM-DD string format\n */\nexport function formatDate(date: Date | string | null | undefined): string | undefined {\n if (!date) return undefined;\n try {\n const d = typeof date === 'string' ? new Date(date) : date;\n if (isNaN(d.getTime())) return undefined;\n return d.toISOString().split('T')[0];\n } catch {\n return undefined;\n }\n}\n\n/**\n * Transform quote data from database format to form values\n */\nexport function quoteToFormValues(quoteRaw: Quote): FormValues {\n // Cast to a broader type so fields added after the published type definitions are accessible\n const quote = quoteRaw as typeof quoteRaw & Record<string, unknown>;\n const formValues: FormValues = {};\n\n // Root quote fields\n if (quote.phone) formValues.phone = quote.phone;\n if (quote.first_name) formValues.first_name = quote.first_name;\n if (quote.last_name) formValues.last_name = quote.last_name;\n if (quote.email) formValues.email = quote.email;\n if (quote.date_of_birth) formValues.date_of_birth = formatDate(quote.date_of_birth as Date);\n if (quote.product) formValues.product = quote.product;\n if (quote.state) formValues.state = quote.state;\n\n // Combine address fields into a single address string\n const addressParts: string[] = [];\n if (quote.line_1) addressParts.push(quote.line_1);\n if (quote.line_2) addressParts.push(quote.line_2);\n if (quote.city) addressParts.push(quote.city);\n if (quote.state) addressParts.push(quote.state);\n if (quote.postal_code) addressParts.push(quote.postal_code);\n if (addressParts.length > 0) {\n formValues.address = addressParts.join(', ');\n }\n\n if (quote.years_at_address !== null && quote.years_at_address !== undefined) formValues.years_at_address = quote.years_at_address;\n if (quote.months_at_address !== null && quote.months_at_address !== undefined) formValues.months_at_address = quote.months_at_address;\n if (quote.move_in_date) formValues.move_in_date = formatDate(quote.move_in_date as Date);\n\n // Combine prior address fields into a single prior_address string\n const priorAddressParts: string[] = [];\n if (quote.prior_line_1) priorAddressParts.push(quote.prior_line_1);\n if (quote.prior_line_2) priorAddressParts.push(quote.prior_line_2);\n if (quote.prior_city) priorAddressParts.push(quote.prior_city);\n if (quote.prior_state) priorAddressParts.push(quote.prior_state);\n if (quote.prior_postal_code) priorAddressParts.push(quote.prior_postal_code);\n if (priorAddressParts.length > 0) {\n formValues.prior_address = priorAddressParts.join(', ');\n }\n\n if (quote.years_at_prior_address !== null && quote.years_at_prior_address !== undefined)\n formValues.years_at_prior_address = quote.years_at_prior_address;\n if (quote.is_mailing_address_different !== null && quote.is_mailing_address_different !== undefined) {\n formValues.is_mailing_address_different = convertBooleanToYesNo(quote.is_mailing_address_different as boolean);\n }\n if (quote.mailing_address) formValues.mailing_address = quote.mailing_address;\n\n // Auto policy fields\n if (quote.effective_date) formValues.effective_date = formatDate(quote.effective_date as Date);\n\n // Auto prior insurance fields\n if (quote.auto_has_prior_insurance !== null && quote.auto_has_prior_insurance !== undefined) {\n formValues.auto_has_prior_insurance = convertBooleanToYesNo(quote.auto_has_prior_insurance);\n }\n if (quote.auto_prior_expiration_date) formValues.auto_prior_expiration_date = formatDate(quote.auto_prior_expiration_date as Date);\n if (quote.auto_prior_carrier_name) formValues.auto_prior_carrier_name = quote.auto_prior_carrier_name;\n if (quote.auto_prior_liability_limit) formValues.auto_prior_liability_limit = quote.auto_prior_liability_limit;\n if (quote.auto_reason_for_no_insurance) formValues.auto_reason_for_no_insurance = quote.auto_reason_for_no_insurance;\n if (quote.auto_prior_years !== null && quote.auto_prior_years !== undefined) formValues.auto_prior_years = quote.auto_prior_years;\n if (quote.auto_prior_months !== null && quote.auto_prior_months !== undefined) formValues.auto_prior_months = quote.auto_prior_months;\n if (quote.auto_continuous_coverage_years !== null && quote.auto_continuous_coverage_years !== undefined) {\n formValues.auto_continuous_coverage_years = quote.auto_continuous_coverage_years;\n }\n if (quote.auto_cancelled_declined_refused_to_renew !== null && quote.auto_cancelled_declined_refused_to_renew !== undefined) {\n formValues.auto_cancelled_declined_refused_to_renew = convertBooleanToYesNo(quote.auto_cancelled_declined_refused_to_renew);\n }\n if (quote.auto_current_annual_premium_cents !== null && quote.auto_current_annual_premium_cents !== undefined) {\n formValues.auto_current_annual_premium_cents = quote.auto_current_annual_premium_cents;\n }\n if (quote.policy_bi) formValues.policy_bi = quote.policy_bi;\n if (quote.policy_um) formValues.policy_um = quote.policy_um;\n if (quote.policy_pd) formValues.policy_pd = quote.policy_pd;\n if (quote.policy_mp) formValues.policy_mp = quote.policy_mp;\n if (quote.policy_umpd) formValues.policy_umpd = quote.policy_umpd;\n if (quote.policy_pip) formValues.policy_pip = quote.policy_pip;\n if (quote.policy_auto_death_indemnity) formValues.policy_auto_death_indemnity = quote.policy_auto_death_indemnity;\n if (quote.driver_vehicle_assignments) formValues.driver_vehicle_assignments = quote.driver_vehicle_assignments;\n\n // Home prior insurance fields\n if (quote.home_has_prior_insurance !== null && quote.home_has_prior_insurance !== undefined) {\n formValues.home_has_prior_insurance = convertBooleanToYesNo(quote.home_has_prior_insurance);\n }\n if (quote.home_prior_expiration_date) formValues.home_prior_expiration_date = formatDate(quote.home_prior_expiration_date as Date);\n if (quote.home_prior_carrier_name) formValues.home_prior_carrier_name = quote.home_prior_carrier_name;\n if (quote.home_prior_years !== null && quote.home_prior_years !== undefined) formValues.home_prior_years = quote.home_prior_years;\n if (quote.home_continuous_coverage_years !== null && quote.home_continuous_coverage_years !== undefined) {\n formValues.home_continuous_coverage_years = quote.home_continuous_coverage_years;\n }\n if (quote.property_insurance_cancelled !== null && quote.property_insurance_cancelled !== undefined) {\n formValues.property_insurance_cancelled = convertBooleanToYesNo(quote.property_insurance_cancelled as boolean);\n }\n if (quote.lapse_in_coverage !== null && quote.lapse_in_coverage !== undefined) {\n formValues.lapse_in_coverage = convertBooleanToYesNo(quote.lapse_in_coverage as boolean);\n }\n\n // Home property fields\n if (quote.year_built !== null && quote.year_built !== undefined) formValues.year_built = quote.year_built;\n if (quote.number_of_units !== null && quote.number_of_units !== undefined) formValues.number_of_units = quote.number_of_units;\n if (quote.number_of_stories !== null && quote.number_of_stories !== undefined) formValues.number_of_stories = quote.number_of_stories;\n if (quote.number_of_beds !== null && quote.number_of_beds !== undefined) formValues.number_of_beds = quote.number_of_beds;\n if (quote.number_of_full_baths !== null && quote.number_of_full_baths !== undefined) formValues.number_of_full_baths = quote.number_of_full_baths;\n if (quote.number_of_partial_baths !== null && quote.number_of_partial_baths !== undefined) {\n formValues.number_of_partial_baths = quote.number_of_partial_baths;\n }\n if (quote.under_construction !== null && quote.under_construction !== undefined) {\n formValues.under_construction = convertBooleanToYesNo(quote.under_construction);\n }\n if (quote.distance_from_fire_hydrant_ft) formValues.distance_from_fire_hydrant_ft = quote.distance_from_fire_hydrant_ft;\n if (quote.distance_from_fire_station_miles) formValues.distance_from_fire_station_miles = quote.distance_from_fire_station_miles;\n if (quote.architectural_style) formValues.architectural_style = quote.architectural_style;\n if (quote.dwelling_type) formValues.dwelling_type = quote.dwelling_type;\n if (quote.construction_quality) formValues.construction_quality = quote.construction_quality;\n if (quote.located_over_water !== null && quote.located_over_water !== undefined) {\n formValues.located_over_water = quote.located_over_water;\n }\n if (quote.construction_type) formValues.construction_type = quote.construction_type;\n if (quote.exterior_wall_type) formValues.exterior_wall_type = quote.exterior_wall_type;\n if (quote.foundation_type) formValues.foundation_type = quote.foundation_type;\n if (quote.roof_material_type) formValues.roof_material_type = quote.roof_material_type;\n if (quote.roof_shape) formValues.roof_shape = quote.roof_shape;\n if (quote.roof_updated_type) formValues.roof_updated_type = quote.roof_updated_type;\n if (quote.year_roof_updated !== null && quote.year_roof_updated !== undefined) formValues.year_roof_updated = quote.year_roof_updated;\n if (quote.mit_credit_form !== null && quote.mit_credit_form !== undefined) {\n formValues.mit_credit_form = convertBooleanToYesNo(quote.mit_credit_form as boolean);\n }\n if (quote.storm_shutters !== null && quote.storm_shutters !== undefined) {\n formValues.storm_shutters = convertBooleanToYesNo(quote.storm_shutters as boolean);\n }\n if (quote.heating_type) formValues.heating_type = quote.heating_type;\n if (quote.oil_tank_location) formValues.oil_tank_location = quote.oil_tank_location;\n if (quote.heating_fuel_type) formValues.heating_fuel_type = quote.heating_fuel_type;\n if (quote.number_of_fireplaces !== null && quote.number_of_fireplaces !== undefined) {\n formValues.number_of_fireplaces = quote.number_of_fireplaces;\n }\n if (quote.basement_type) formValues.basement_type = quote.basement_type;\n if (quote.parking_type) formValues.parking_type = quote.parking_type;\n if (quote.number_of_parking_spaces !== null && quote.number_of_parking_spaces !== undefined) {\n formValues.number_of_parking_spaces = quote.number_of_parking_spaces;\n }\n if (quote.plumbing_type) formValues.plumbing_type = quote.plumbing_type;\n if (quote.pool_type) formValues.pool_type = quote.pool_type;\n if (quote.total_area_sq_ft !== null && quote.total_area_sq_ft !== undefined) formValues.total_area_sq_ft = quote.total_area_sq_ft;\n if (quote.parcel_area_sq_ft !== null && quote.parcel_area_sq_ft !== undefined) formValues.parcel_area_sq_ft = quote.parcel_area_sq_ft;\n if (quote.residence_type) formValues.residence_type = quote.residence_type;\n if (quote.usage_type) formValues.usage_type = quote.usage_type;\n if (quote.household_size !== null && quote.household_size !== undefined) formValues.household_size = quote.household_size;\n if (quote.number_of_mortgagees !== null && quote.number_of_mortgagees !== undefined) {\n formValues.number_of_mortgagees = quote.number_of_mortgagees;\n }\n if (quote.has_dog !== null && quote.has_dog !== undefined) formValues.has_dog = convertBooleanToYesNo(quote.has_dog);\n if (quote.dog_breed_type) formValues.dog_breed_type = quote.dog_breed_type;\n if (quote.number_of_dogs !== null && quote.number_of_dogs !== undefined) formValues.number_of_dogs = quote.number_of_dogs;\n if (quote.has_vicious_animals !== null && quote.has_vicious_animals !== undefined) {\n formValues.has_vicious_animals = convertBooleanToYesNo(quote.has_vicious_animals as boolean | null | undefined);\n }\n if (quote.has_business_on_premises !== null && quote.has_business_on_premises !== undefined) {\n formValues.has_business_on_premises = convertBooleanToYesNo(quote.has_business_on_premises);\n }\n if (quote.business_class) formValues.business_class = quote.business_class;\n if (quote.occupancy_type) formValues.occupancy_type = quote.occupancy_type;\n if (quote.short_term_rental !== null && quote.short_term_rental !== undefined) {\n formValues.short_term_rental = convertBooleanToYesNo(quote.short_term_rental as boolean);\n }\n // `sale_price_cents` on the quote is stored as cents; the widget question collects whole dollars.\n if (quote.sale_price_cents !== null && quote.sale_price_cents !== undefined) {\n formValues.sale_price_cents = Math.round(Number(quote.sale_price_cents) / 100);\n }\n if (quote.number_of_families !== null && quote.number_of_families !== undefined) formValues.number_of_families = quote.number_of_families;\n if (quote.number_of_units_in_firewall !== null && quote.number_of_units_in_firewall !== undefined) {\n formValues.number_of_units_in_firewall = quote.number_of_units_in_firewall;\n }\n\n // Utility update fields\n if (quote.heating_update_yn !== null && quote.heating_update_yn !== undefined) {\n formValues.heating_update_yn = convertBooleanToYesNo(quote.heating_update_yn as boolean);\n }\n if (quote.heating_update_type) formValues.heating_update_type = quote.heating_update_type;\n if (quote.heating_update_year !== null && quote.heating_update_year !== undefined) formValues.heating_update_year = quote.heating_update_year;\n if (quote.plumbing_update_yn !== null && quote.plumbing_update_yn !== undefined) {\n formValues.plumbing_update_yn = convertBooleanToYesNo(quote.plumbing_update_yn as boolean);\n }\n if (quote.plumbing_update_type) formValues.plumbing_update_type = quote.plumbing_update_type;\n if (quote.plumbing_update_year !== null && quote.plumbing_update_year !== undefined) formValues.plumbing_update_year = quote.plumbing_update_year;\n if (quote.electrical_update_yn !== null && quote.electrical_update_yn !== undefined) {\n formValues.electrical_update_yn = convertBooleanToYesNo(quote.electrical_update_yn as boolean);\n }\n if (quote.electrical_update_type) formValues.electrical_update_type = quote.electrical_update_type;\n if (quote.electrical_update_year !== null && quote.electrical_update_year !== undefined) {\n formValues.electrical_update_year = quote.electrical_update_year;\n }\n if (quote.electric_circuit_breaker !== null && quote.electric_circuit_breaker !== undefined) {\n formValues.electric_circuit_breaker = convertBooleanToYesNo(quote.electric_circuit_breaker as boolean);\n }\n\n // Home coverage amounts\n if (quote.dwelling_replacement_cost !== null && quote.dwelling_replacement_cost !== undefined) {\n formValues.dwelling_replacement_cost = quote.dwelling_replacement_cost;\n }\n if (quote.other_structures_coverage !== null && quote.other_structures_coverage !== undefined) {\n formValues.other_structures_coverage = quote.other_structures_coverage;\n }\n if (quote.personal_property_coverage !== null && quote.personal_property_coverage !== undefined) {\n formValues.personal_property_coverage = quote.personal_property_coverage;\n }\n if (quote.loss_of_use_coverage !== null && quote.loss_of_use_coverage !== undefined) {\n formValues.loss_of_use_coverage = quote.loss_of_use_coverage;\n }\n if (quote.personal_liability) formValues.personal_liability = quote.personal_liability;\n if (quote.dwelling_medical_payments) formValues.dwelling_medical_payments = quote.dwelling_medical_payments;\n if (quote.all_perils_deductible) formValues.all_perils_deductible = quote.all_perils_deductible;\n if (quote.windstorm_deductible) formValues.windstorm_deductible = quote.windstorm_deductible;\n\n // Home additional structures\n if (quote.has_garage !== null && quote.has_garage !== undefined) {\n formValues.has_garage = convertBooleanToYesNo(quote.has_garage as boolean);\n }\n if (quote.has_pool !== null && quote.has_pool !== undefined) {\n formValues.has_pool = convertBooleanToYesNo(quote.has_pool as boolean);\n }\n if (quote.has_trampoline !== null && quote.has_trampoline !== undefined) {\n formValues.has_trampoline = convertBooleanToYesNo(quote.has_trampoline as boolean);\n }\n\n // Applicant fields for home\n if (quote.gender) formValues.gender = quote.gender;\n if (quote.marital_status) formValues.marital_status = quote.marital_status;\n if (quote.employment_industry) formValues.employment_industry = quote.employment_industry;\n if (quote.occupation) formValues.occupation = quote.occupation;\n\n // Co-applicant fields\n if (quote.has_co_applicant !== null && quote.has_co_applicant !== undefined) {\n formValues.has_co_applicant = convertBooleanToYesNo(quote.has_co_applicant as boolean);\n }\n if (quote.co_applicant_first_name) formValues.co_applicant_first_name = quote.co_applicant_first_name;\n if (quote.co_applicant_middle_name) formValues.co_applicant_middle_name = quote.co_applicant_middle_name;\n if (quote.co_applicant_last_name) formValues.co_applicant_last_name = quote.co_applicant_last_name;\n if (quote.co_applicant_gender) formValues.co_applicant_gender = quote.co_applicant_gender;\n if (quote.co_applicant_marital_status) formValues.co_applicant_marital_status = quote.co_applicant_marital_status;\n if (quote.co_applicant_relationship) formValues.co_applicant_relationship = quote.co_applicant_relationship;\n if (quote.co_applicant_date_of_birth) formValues.co_applicant_date_of_birth = formatDate(quote.co_applicant_date_of_birth as Date);\n if (quote.co_applicant_employment_industry) formValues.co_applicant_employment_industry = quote.co_applicant_employment_industry;\n if (quote.co_applicant_occupation) formValues.co_applicant_occupation = quote.co_applicant_occupation;\n\n // Discount fields\n if (quote.retiree_discount !== null && quote.retiree_discount !== undefined) {\n formValues.retiree_discount = convertBooleanToYesNo(quote.retiree_discount);\n }\n if (quote.gated_community_discount !== null && quote.gated_community_discount !== undefined) {\n formValues.gated_community_discount = convertBooleanToYesNo(quote.gated_community_discount);\n }\n if (quote.multi_policy_discount !== null && quote.multi_policy_discount !== undefined) {\n formValues.multi_policy_discount = convertBooleanToYesNo(quote.multi_policy_discount);\n }\n if (quote.non_smoker_discount !== null && quote.non_smoker_discount !== undefined) {\n formValues.non_smoker_discount = convertBooleanToYesNo(quote.non_smoker_discount);\n }\n if (quote.first_time_buyer_discount !== null && quote.first_time_buyer_discount !== undefined) {\n formValues.first_time_buyer_discount = convertBooleanToYesNo(quote.first_time_buyer_discount);\n }\n\n // Safety features\n if (quote.fire_detection_system !== null && quote.fire_detection_system !== undefined) {\n formValues.fire_detection_system = convertBooleanToYesNo(quote.fire_detection_system);\n }\n if (quote.burglar_alarm_system !== null && quote.burglar_alarm_system !== undefined) {\n formValues.burglar_alarm_system = convertBooleanToYesNo(quote.burglar_alarm_system);\n }\n if (quote.burglar_alarm_system_type) formValues.burglar_alarm_system_type = quote.burglar_alarm_system_type;\n if (quote.smoke_detectors !== null && quote.smoke_detectors !== undefined) {\n formValues.smoke_detectors = convertBooleanToYesNo(quote.smoke_detectors);\n }\n if (quote.sprinkler_system !== null && quote.sprinkler_system !== undefined) {\n formValues.sprinkler_system = convertBooleanToYesNo(quote.sprinkler_system);\n }\n if (quote.sprinkler_system_type) formValues.sprinkler_system_type = quote.sprinkler_system_type;\n if (quote.gas_leakage_detector !== null && quote.gas_leakage_detector !== undefined) {\n formValues.gas_leakage_detector = convertBooleanToYesNo(quote.gas_leakage_detector);\n }\n if (quote.deadbolt_locks !== null && quote.deadbolt_locks !== undefined) {\n formValues.deadbolt_locks = convertBooleanToYesNo(quote.deadbolt_locks);\n }\n if (quote.fire_extinguisher !== null && quote.fire_extinguisher !== undefined) {\n formValues.fire_extinguisher = convertBooleanToYesNo(quote.fire_extinguisher);\n }\n\n // Other boolean fields\n if (quote.order_credit_authorized !== null && quote.order_credit_authorized !== undefined) {\n formValues.order_credit_authorized = convertBooleanToYesNo(quote.order_credit_authorized);\n }\n if (quote.has_health_insurance_auto_accident !== null && quote.has_health_insurance_auto_accident !== undefined) {\n formValues.has_health_insurance_auto_accident = convertBooleanToYesNo(quote.has_health_insurance_auto_accident);\n }\n if (quote.is_corporation !== null && quote.is_corporation !== undefined) {\n formValues.is_corporation = convertBooleanToYesNo(quote.is_corporation as boolean);\n }\n if (quote.named_insured_foreclosure_repo_bankruptcy !== null && quote.named_insured_foreclosure_repo_bankruptcy !== undefined) {\n formValues.named_insured_foreclosure_repo_bankruptcy = convertBooleanToYesNo(quote.named_insured_foreclosure_repo_bankruptcy);\n }\n if (quote.named_insured_convicted_insurance_fraud !== null && quote.named_insured_convicted_insurance_fraud !== undefined) {\n formValues.named_insured_convicted_insurance_fraud = convertBooleanToYesNo(quote.named_insured_convicted_insurance_fraud);\n }\n\n // Build a vehicle-id-to-VIN map for resolving FKs in accidents/losses\n const vehicleIdToVin: Record<string, string> = {};\n if (quote.vehicles) {\n for (const v of quote.vehicles) {\n if (v.quote_vehicle_id && v.vin) vehicleIdToVin[v.quote_vehicle_id] = v.vin;\n }\n }\n\n // Set \"Add Drivers\" checkbox based on whether drivers exist\n if (quote.drivers && quote.drivers.length > 0) {\n formValues.drivers = 'Yes';\n formValues.drivers__items = quote.drivers.map((driverRaw) => {\n const driver = driverRaw as typeof driverRaw & Record<string, unknown>;\n const driverValues: FormValues = {};\n if (driver.first_name) driverValues.first_name = driver.first_name;\n if (driver.middle_name) driverValues.middle_name = driver.middle_name;\n if (driver.last_name) driverValues.last_name = driver.last_name;\n if (driver.date_of_birth) driverValues.date_of_birth = formatDate(driver.date_of_birth as Date);\n if (driver.gender) driverValues.gender = driver.gender;\n if (driver.marital_status) driverValues.marital_status = driver.marital_status;\n if (driver.relationship_to_insured) driverValues.relationship_to_insured = driver.relationship_to_insured;\n if (driver.is_registered_owner !== null && driver.is_registered_owner !== undefined) {\n driverValues.is_registered_owner = (driver.is_registered_owner as boolean) ? 'Yes' : 'No';\n }\n if (driver.license_state) driverValues.license_state = driver.license_state;\n if (driver.license_status) driverValues.license_status = driver.license_status;\n if (driver.license_number) driverValues.license_number = driver.license_number;\n if (driver.date_first_licensed) driverValues.date_first_licensed = formatDate(driver.date_first_licensed as Date);\n if (driver.education_level) driverValues.education_level = normalizeEducationLevelValue(driver.education_level as string);\n if (driver.occupation) driverValues.occupation = normalizeOccupationValue(driver.occupation as string);\n if (driver.industry) driverValues.industry = normalizeIndustryValue(driver.industry as string);\n if (driver.employment_status) driverValues.employment_status = driver.employment_status;\n if (driver.last_5_years_license_suspended_or_revoked !== null && driver.last_5_years_license_suspended_or_revoked !== undefined) {\n driverValues.last_5_years_license_suspended_or_revoked = convertBooleanToYesNo(driver.last_5_years_license_suspended_or_revoked as boolean);\n }\n if (driver.accident_prevention_course !== null && driver.accident_prevention_course !== undefined) {\n driverValues.accident_prevention_course = convertBooleanToYesNo(driver.accident_prevention_course as boolean);\n }\n if (driver.accident_prevention_course_date) {\n driverValues.accident_prevention_course_date = formatDate(driver.accident_prevention_course_date as Date);\n }\n if (driver.sr22 !== null && driver.sr22 !== undefined) {\n driverValues.sr22 = convertBooleanToYesNo(driver.sr22 as boolean);\n }\n const ssnDisplay = (driver as Record<string, unknown>).ssn_display;\n if (typeof ssnDisplay === 'string') driverValues.ssn_display = ssnDisplay;\n\n // Driver violations\n const driverViolations = driver.driver_violations as unknown as Array<Record<string, unknown>> | undefined;\n if (driverViolations && driverViolations.length > 0) {\n driverValues.driver_violations = 'Yes';\n driverValues.driver_violations__items = driverViolations.map((violation) => {\n const violationValues: FormValues = {};\n if (violation.code) violationValues.code = violation.code;\n if (violation.occurred_at) violationValues.occurred_at = formatDate(violation.occurred_at as Date);\n return violationValues;\n });\n }\n\n // Driver accidents\n const driverAccidents = driver.driver_accidents as unknown as Array<Record<string, unknown>> | undefined;\n if (driverAccidents && driverAccidents.length > 0) {\n driverValues.driver_accidents = 'Yes';\n driverValues.driver_accidents__items = driverAccidents.map((accident) => {\n const accidentValues: FormValues = {};\n if (accident.occurred_at) accidentValues.occurred_at = formatDate(accident.occurred_at as Date);\n if (accident.description) accidentValues.description = accident.description;\n if (accident.quote_vehicle_id) {\n accidentValues.quote_vehicle_id = vehicleIdToVin[accident.quote_vehicle_id as string] ?? accident.quote_vehicle_id;\n }\n if (accident.property_damage_amount_paid_cents !== null && accident.property_damage_amount_paid_cents !== undefined) {\n accidentValues.property_damage_amount_paid_cents = accident.property_damage_amount_paid_cents;\n }\n if (accident.personal_injury_amount_paid_cents !== null && accident.personal_injury_amount_paid_cents !== undefined) {\n accidentValues.personal_injury_amount_paid_cents = accident.personal_injury_amount_paid_cents;\n }\n return accidentValues;\n });\n }\n\n // Driver losses (nested under driver, using 'losses' association)\n const driverLosses = driver.losses as unknown as Array<Record<string, unknown>> | undefined;\n if (driverLosses && driverLosses.length > 0) {\n driverValues.losses = 'Yes';\n driverValues.losses__items = driverLosses.map((loss) => {\n const lossValues: FormValues = {};\n if (loss.description) lossValues.description = loss.description;\n if (loss.date_of_incident) lossValues.date_of_incident = formatDate(loss.date_of_incident as Date);\n if (loss.amount_paid_cents !== null && loss.amount_paid_cents !== undefined) {\n lossValues.amount_paid_cents = loss.amount_paid_cents;\n }\n if (loss.quote_vehicle_id) {\n lossValues.quote_vehicle_id = vehicleIdToVin[loss.quote_vehicle_id as string] ?? loss.quote_vehicle_id;\n }\n return lossValues;\n });\n }\n\n return driverValues;\n });\n } else {\n formValues.drivers = 'No';\n }\n\n // Set \"Add Vehicles\" checkbox based on whether vehicles exist\n if (quote.vehicles && quote.vehicles.length > 0) {\n formValues.vehicles = 'Yes';\n formValues.vehicles__items = quote.vehicles.map((vehicleRaw) => {\n const vehicle = vehicleRaw as typeof vehicleRaw & Record<string, unknown>;\n const vehicleValues: FormValues = {};\n if (vehicle.vin) vehicleValues.vin = vehicle.vin;\n if (vehicle.year !== null && vehicle.year !== undefined) vehicleValues.year = String(vehicle.year);\n if (vehicle.make) vehicleValues.make = vehicle.make;\n if (vehicle.model) vehicleValues.model = vehicle.model;\n if (vehicle.body_style) vehicleValues.body_style = vehicle.body_style;\n if (vehicle.ownership_type) vehicleValues.ownership_type = vehicle.ownership_type;\n if (vehicle.usage) vehicleValues.usage = vehicle.usage;\n if (vehicle.annual_mileage !== null && vehicle.annual_mileage !== undefined) {\n vehicleValues.annual_mileage = vehicle.annual_mileage;\n }\n if (vehicle.miles_to_work !== null && vehicle.miles_to_work !== undefined) {\n vehicleValues.miles_to_work = vehicle.miles_to_work;\n }\n if (vehicle.percent_to_work !== null && vehicle.percent_to_work !== undefined) {\n vehicleValues.percent_to_work = vehicle.percent_to_work;\n }\n\n const garagingAddressParts: string[] = [];\n if (vehicle.garaging_address_line_1) garagingAddressParts.push(vehicle.garaging_address_line_1 as string);\n if (vehicle.garaging_address_line_2) garagingAddressParts.push(vehicle.garaging_address_line_2 as string);\n if (vehicle.garaging_address_city) garagingAddressParts.push(vehicle.garaging_address_city as string);\n if (vehicle.garaging_address_state) garagingAddressParts.push(vehicle.garaging_address_state as string);\n if (vehicle.garaging_address_postal_code) garagingAddressParts.push(vehicle.garaging_address_postal_code as string);\n if (garagingAddressParts.length > 0) {\n vehicleValues.garaging_address = garagingAddressParts.join(', ');\n }\n\n if (vehicle.new_when_purchased !== null && vehicle.new_when_purchased !== undefined) {\n vehicleValues.new_when_purchased = convertBooleanToYesNo(vehicle.new_when_purchased as boolean);\n }\n if (vehicle.purchase_date) vehicleValues.purchase_date = formatDate(vehicle.purchase_date as Date);\n if (vehicle.anti_theft_type) vehicleValues.anti_theft_type = vehicle.anti_theft_type;\n if (vehicle.passive_restraint_type) vehicleValues.passive_restraint_type = vehicle.passive_restraint_type;\n if (vehicle.anti_lock_brakes !== null && vehicle.anti_lock_brakes !== undefined) {\n vehicleValues.anti_lock_brakes = convertBooleanToYesNo(vehicle.anti_lock_brakes as boolean);\n }\n if (vehicle.daytime_running_lights !== null && vehicle.daytime_running_lights !== undefined) {\n vehicleValues.daytime_running_lights = convertBooleanToYesNo(vehicle.daytime_running_lights as boolean);\n }\n if (vehicle.custom_equipment_value_cents !== null && vehicle.custom_equipment_value_cents !== undefined) {\n vehicleValues.custom_equipment_value_cents = vehicle.custom_equipment_value_cents;\n }\n if (vehicle.cost_new_value_cents !== null && vehicle.cost_new_value_cents !== undefined) {\n vehicleValues.cost_new_value_cents = vehicle.cost_new_value_cents;\n }\n if (vehicle.stated_value_amount_cents !== null && vehicle.stated_value_amount_cents !== undefined) {\n vehicleValues.stated_value_amount_cents = vehicle.stated_value_amount_cents;\n }\n if (vehicle.vehicle_has_modifications !== null && vehicle.vehicle_has_modifications !== undefined) {\n vehicleValues.vehicle_has_modifications = convertBooleanToYesNo(vehicle.vehicle_has_modifications as boolean);\n }\n if (vehicle.vehicle_garaged_at_residence !== null && vehicle.vehicle_garaged_at_residence !== undefined) {\n vehicleValues.vehicle_garaged_at_residence = convertBooleanToYesNo(vehicle.vehicle_garaged_at_residence as boolean);\n }\n if (vehicle.vehicle_comp_deductible) vehicleValues.vehicle_comp_deductible = vehicle.vehicle_comp_deductible;\n if (vehicle.vehicle_coll_deductible) vehicleValues.vehicle_coll_deductible = vehicle.vehicle_coll_deductible;\n if (vehicle.vehicle_towing_and_labor) vehicleValues.vehicle_towing_and_labor = vehicle.vehicle_towing_and_labor;\n if (vehicle.vehicle_transportation_expense) vehicleValues.vehicle_transportation_expense = vehicle.vehicle_transportation_expense;\n if (vehicle.vehicle_full_glass !== null && vehicle.vehicle_full_glass !== undefined) {\n vehicleValues.vehicle_full_glass = convertBooleanToYesNo(vehicle.vehicle_full_glass as boolean);\n }\n if (vehicle.vehicle_loan_lease !== null && vehicle.vehicle_loan_lease !== undefined) {\n vehicleValues.vehicle_loan_lease = convertBooleanToYesNo(vehicle.vehicle_loan_lease as boolean);\n }\n\n // Vehicle coverages\n if (vehicle.coverages && vehicle.coverages.length > 0) {\n vehicleValues.coverages__items = vehicle.coverages.map((coverage) => {\n const coverageValues: FormValues = {};\n if (coverage.type) coverageValues.type = coverage.type;\n if (coverage.per_person_limit_cents !== null && coverage.per_person_limit_cents !== undefined) {\n coverageValues.per_person_limit_cents = coverage.per_person_limit_cents;\n }\n if (coverage.per_incident_limit_cents !== null && coverage.per_incident_limit_cents !== undefined) {\n coverageValues.per_incident_limit_cents = coverage.per_incident_limit_cents;\n }\n if (coverage.per_incident_limit_percent !== null && coverage.per_incident_limit_percent !== undefined) {\n coverageValues.per_incident_limit_percent = coverage.per_incident_limit_percent;\n }\n if (coverage.per_day_limit_cents !== null && coverage.per_day_limit_cents !== undefined) {\n coverageValues.per_day_limit_cents = coverage.per_day_limit_cents;\n }\n if (coverage.deductible_cents !== null && coverage.deductible_cents !== undefined) {\n coverageValues.deductible_cents = coverage.deductible_cents;\n }\n if (coverage.is_declined !== null && coverage.is_declined !== undefined) {\n coverageValues.is_declined = convertBooleanToYesNo(coverage.is_declined);\n }\n return coverageValues;\n });\n }\n\n // Vehicle lienholders\n if (vehicle.vehicle_lienholders && vehicle.vehicle_lienholders.length > 0) {\n vehicleValues.vehicle_lienholders__items = vehicle.vehicle_lienholders.map((lienholder) => {\n const lienholderValues: FormValues = {};\n if (lienholder.name) lienholderValues.name = lienholder.name;\n if (lienholder.type) lienholderValues.type = lienholder.type;\n if (lienholder.line_1) lienholderValues.line_1 = lienholder.line_1;\n if (lienholder.line_2) lienholderValues.line_2 = lienholder.line_2;\n if (lienholder.city) lienholderValues.city = lienholder.city;\n if (lienholder.state) lienholderValues.state = lienholder.state;\n if (lienholder.postal_code) lienholderValues.postal_code = lienholder.postal_code;\n if (lienholder.phone) lienholderValues.phone = lienholder.phone;\n if (lienholder.fax) lienholderValues.fax = lienholder.fax;\n return lienholderValues;\n });\n }\n\n return vehicleValues;\n });\n } else {\n formValues.vehicles = 'No';\n }\n\n // Home losses array -> home_losses__items\n if (quote.losses && quote.losses.length > 0) {\n formValues.home_losses = 'Yes';\n formValues.home_losses__items = quote.losses.map((loss) => {\n const lossValues: FormValues = {};\n if (loss.description) lossValues.description = loss.description;\n if (loss.date_of_incident) lossValues.date_of_incident = formatDate(loss.date_of_incident);\n if (loss.amount_paid_cents !== null && loss.amount_paid_cents !== undefined) {\n lossValues.amount_paid_cents = Math.round(Number(loss.amount_paid_cents) / 100);\n }\n return lossValues;\n });\n }\n\n return formValues;\n}\n","import { useEffect, useCallback, useState, useRef } from 'react';\n\nimport type { GetRatesResponse, Question, Stage } from '@getcredify/credify-insurance-types';\n\nimport { FormWizard, Rates } from './index';\n\nimport type { FormValues, StageMeta } from '../utils/form';\nimport {\n createQuote,\n getQuestionsByStage,\n getRates,\n getStagesForQuote,\n isSupportedState,\n setAuthToken,\n updateQuote,\n verifyQuote,\n getQuote,\n loadAuthTokenFromStorage,\n getAuthToken,\n clearAuthToken\n} from '../utils/api';\nimport { loadQuoteId, saveQuoteId, clearQuoteId } from '../utils/storage';\nimport { quoteToFormValues } from '../utils/quoteToFormValues';\nimport { pushWidgetOpened, pushWidgetClosed, pushFlowCompleted, pushRatesViewed, pushStageCompleted } from '../utils/gtm';\nimport { normalizeEducationLevelValue, normalizeIndustryValue, normalizeOccupationValue } from '../utils/industry-occupation-normalizers';\n\nconst FLOW_RESHAPING_STAGES: ReadonlySet<Stage> = new Set(['Product', 'Driver', 'Vehicle']);\n\nfunction getDriverCountForStageVisibility(values: FormValues | null | undefined): number | null {\n if (!values) return null;\n if (Array.isArray(values.drivers__items)) return values.drivers__items.length;\n if (Array.isArray(values.drivers)) return values.drivers.length;\n return null;\n}\n\nfunction applyAutoPolicyStageVisibility<KStage extends string>(\n stageMetas: Array<StageMeta<KStage>>,\n values: FormValues | null | undefined\n): Array<StageMeta<KStage>> {\n const driverCount = getDriverCountForStageVisibility(values);\n // Auto flow: driver percentage is rendered inline on the Policy page.\n // Never show AutoPolicy as a standalone stage in the widget.\n const withoutAutoPolicy = stageMetas.filter((stage) => stage.key !== 'AutoPolicy');\n const filtered = withoutAutoPolicy.length > 0 ? withoutAutoPolicy : stageMetas;\n\n // Keep the historical behavior for 1-driver flows (defensive: should already be removed above).\n if (driverCount === 1) return filtered;\n return filtered;\n}\n\nfunction transformFormValues(values: FormValues): FormValues {\n const transformed: FormValues = {};\n\n // Helper function to convert \"Yes\"/\"No\" to boolean\n const convertYesNoToBoolean = (value: unknown): unknown => {\n if (typeof value === 'string') {\n if (value === 'Yes') return true;\n if (value === 'No') return false;\n }\n return value;\n };\n\n // Get all non-__items keys to determine which fields are in the current stage\n const nonItemsKeys = Object.keys(values).filter((key) => !key.includes('__items'));\n\n // Get all field names that exist within any __items arrays\n const fieldsInArrays = new Set<string>();\n // Track keys that have a corresponding __items array so we don't overwrite the\n // transformed array with the raw radio/select value (e.g. drivers: 'Yes').\n const keysWithItemsArrays = new Set<string>();\n for (const [key, value] of Object.entries(values)) {\n if (key.endsWith('__items') && Array.isArray(value)) {\n keysWithItemsArrays.add(key.replace('__items', ''));\n value.forEach((item) => {\n if (typeof item === 'object' && item !== null) {\n Object.keys(item).forEach((fieldName) => {\n fieldsInArrays.add(fieldName);\n });\n }\n });\n }\n }\n\n for (const [key, value] of Object.entries(values)) {\n if (key.endsWith('__items')) {\n // Convert \"drivers__items\" to \"drivers\" with the array value\n const baseKey = key.replace('__items', '');\n\n // Only include this array if there's a corresponding root-level field with the same name\n // This indicates the array is actively being used in the current stage\n const hasCorrespondingRootField = nonItemsKeys.includes(baseKey);\n\n if (hasCorrespondingRootField) {\n // Recursively transform each item in the array\n const transformedArray = Array.isArray(value) ? value.map((item) => transformFormValues(item as FormValues)) : value;\n transformed[baseKey] = transformedArray;\n }\n } else if (!key.includes('__items')) {\n // Skip root-level keys whose value has been replaced by a __items array\n // (e.g. drivers: 'Yes' must not overwrite the drivers array from drivers__items)\n if (keysWithItemsArrays.has(key)) continue;\n // Include root-level fields that don't exist in any array items\n // This prevents including fields from previous stages that are now represented in arrays\n if (!fieldsInArrays.has(key)) {\n transformed[key] = convertYesNoToBoolean(value);\n }\n }\n // Skip any other __items related keys that we've already processed\n }\n\n // Derive the prior-insurance boolean from carrier selection while keeping\n // the carrier value so user input is persisted in DB.\n const selectedCarrier = transformed.auto_prior_carrier_name;\n if (typeof selectedCarrier === 'string' && selectedCarrier.trim() !== '') {\n const isNoPrior = selectedCarrier === 'NoPriorInsurance';\n transformed.auto_has_prior_insurance = !isNoPrior;\n if (isNoPrior) {\n delete transformed.auto_prior_years;\n delete transformed.auto_prior_months;\n delete transformed.auto_prior_expiration_date;\n delete transformed.auto_prior_liability_limit;\n delete transformed.auto_continuous_coverage_years;\n delete transformed.auto_cancelled_declined_refused_to_renew;\n delete transformed.auto_current_annual_premium_cents;\n }\n }\n\n const selectedHomeCarrier = transformed.home_prior_carrier_name;\n if (typeof selectedHomeCarrier === 'string' && selectedHomeCarrier.trim() !== '') {\n const isNoPriorHome = selectedHomeCarrier === 'NoPriorInsurance';\n transformed.home_has_prior_insurance = !isNoPriorHome;\n if (isNoPriorHome) {\n delete transformed.home_prior_years;\n delete transformed.home_continuous_coverage_years;\n delete transformed.home_prior_expiration_date;\n delete transformed.property_insurance_cancelled;\n }\n }\n\n if (Array.isArray(transformed.drivers)) {\n transformed.drivers = transformed.drivers.map((driver) => {\n if (!driver || typeof driver !== 'object') return driver;\n const item = { ...(driver as Record<string, unknown>) };\n item.industry = normalizeIndustryValue(item.industry);\n item.education_level = normalizeEducationLevelValue(item.education_level);\n item.occupation = normalizeOccupationValue(item.occupation);\n return item;\n });\n }\n\n console.log(\n '[DEBUG_TRANSFORM] transformed.drivers type:',\n typeof transformed.drivers,\n 'isArray:',\n Array.isArray(transformed.drivers),\n Array.isArray(transformed.drivers) ? `count=${transformed.drivers.length}` : `value=${JSON.stringify(transformed.drivers)?.slice(0, 100)}`\n );\n if (Array.isArray(transformed.drivers)) {\n transformed.drivers.forEach((d: unknown, i: number) => {\n const drv = d as Record<string, unknown>;\n console.log(`[DEBUG_TRANSFORM] Driver ${i}:`, {\n first_name: drv.first_name,\n gender: drv.gender,\n marital_status: drv.marital_status,\n education_level: drv.education_level,\n industry: drv.industry,\n occupation: drv.occupation,\n sr22: drv.sr22,\n keys: Object.keys(drv)\n });\n });\n }\n\n // Purchase price is entered as whole dollars; DB column `sale_price_cents` stores cents.\n const MAX_PURCHASE_PRICE_DOLLARS = 21_474_836;\n if ('sale_price_cents' in transformed) {\n const raw = transformed.sale_price_cents;\n if (typeof raw === 'number' && Number.isFinite(raw)) {\n const dollars = Math.trunc(raw);\n if (dollars >= 1) {\n const clamped = Math.min(dollars, MAX_PURCHASE_PRICE_DOLLARS);\n transformed.sale_price_cents = clamped * 100;\n }\n }\n }\n\n // Home loss \"amount paid\" is whole dollars in the UI; DB stores cents.\n if (Array.isArray(transformed.home_losses)) {\n transformed.home_losses = transformed.home_losses.map((entry) => {\n if (!entry || typeof entry !== 'object') return entry;\n const row = entry as Record<string, unknown>;\n const paid = row.amount_paid_cents;\n if (typeof paid !== 'number' || !Number.isFinite(paid)) return row;\n const dollars = Math.trunc(paid);\n const clamped = Math.min(Math.max(dollars, 0), MAX_PURCHASE_PRICE_DOLLARS);\n return { ...row, amount_paid_cents: clamped * 100 };\n });\n }\n\n return transformed;\n}\n\nfunction getNextStageKey(stages: Array<StageMeta<Stage>>, stageKey: Stage): Stage {\n const currentStageIndex = stages.findIndex((s) => s.key === stageKey);\n if (currentStageIndex < 0) return stageKey;\n const nextStage = stages[currentStageIndex + 1];\n return (nextStage?.key as Stage | undefined) ?? stageKey;\n}\n\nfunction isBundleFlow(stages: Array<StageMeta<Stage>>): boolean {\n return stages.some((stage) => String(stage.key) === 'BundlePolicy' || String(stage.key) === 'BundleCustomer');\n}\n\nfunction ensureAutoCurrentPolicyRequiredQuestions(stage: Stage, questions: Question[]): Question[] {\n if (stage !== 'AutoCurrentCarrier') return questions;\n\n const hasCancellationQuestion = questions.some((q) => String(q.key) === 'auto_cancelled_declined_refused_to_renew');\n const hasVehiclePolicyQuestion = questions.some((q) => String(q.key) === 'vehicle_policy_selections');\n\n const patched = [...questions];\n if (!hasCancellationQuestion) {\n patched.push({\n question: 'Has any auto insurance company cancelled, declined or refused to renew you in the last 5 years?',\n inputType: 'radio',\n options: ['Yes', 'No'],\n key: 'auto_cancelled_declined_refused_to_renew',\n required: true\n });\n }\n\n // Per-vehicle coverage selections (comp/coll deductible, towing, transportation,\n // full glass, loan/lease) and driver usage percentage are grouped per-vehicle on\n // the Policy page — mirrors Bolt dashboard layout. Custom-rendered in FormRenderer.\n if (!hasVehiclePolicyQuestion) {\n patched.push({\n question: 'Vehicle coverage selections',\n inputType: 'custom',\n key: 'vehicle_policy_selections',\n required: false\n } as unknown as Question);\n }\n\n return patched;\n}\n\nfunction ensureVehicleVinOptional(stage: Stage, questions: Question[]): Question[] {\n if (stage !== 'Vehicle') return questions;\n\n const patch = (list: Question[]): Question[] =>\n list.map((q) => {\n const nextConditionals = q.conditionals?.map((c) => {\n const nested = (c.conditionalQuestions ?? []) as unknown as Question[];\n if (!nested.length) return c;\n return {\n ...c,\n conditionalQuestions: patch(nested)\n };\n });\n\n if (String(q.key) !== 'vin') {\n return nextConditionals ? { ...q, conditionals: nextConditionals } : q;\n }\n\n return {\n ...q,\n required: false,\n ...(nextConditionals ? { conditionals: nextConditionals } : {})\n };\n });\n\n return patch(questions);\n}\n\nexport default function Widget({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) {\n const [stages, setStages] = useState<Array<StageMeta<Stage>>>([]);\n const [quoteId, setQuoteId] = useState<string | null>(null);\n const quoteIdRef = useRef<string | null>(null);\n useEffect(() => {\n quoteIdRef.current = quoteId;\n }, [quoteId]);\n const [rates, setRates] = useState<GetRatesResponse | null>(null);\n const [isFetchingRates, setIsFetchingRates] = useState(false);\n const [savedFormValues, setSavedFormValues] = useState<FormValues | null>(null);\n const [initialActiveStage, setInitialActiveStage] = useState<number | undefined>(undefined);\n const [isRestoringQuote, setIsRestoringQuote] = useState(false);\n\n function mapStagesToStageMetas(stages: Stage[]): Array<StageMeta<Stage>> {\n // Map stage keys to human-friendly titles matching Bolt dashboard auto flow\n const stageTitleMap: Record<string, string> = {\n SMSVerification: 'Verify',\n Product: 'Product & Address',\n AutoCurrentCarrier: 'Policy',\n HomeCurrentCarrier: 'Current Home Policy',\n AutoPolicy: 'Policy',\n Vehicle: 'Vehicle Details',\n Driver: 'Operator',\n Customer: 'Applicant',\n HomeConstruction: 'Structure',\n HomeFeatures: 'Features',\n HomePolicy: 'Policy',\n HomeCustomer: 'Applicant',\n BundlePolicy: 'Policy',\n BundleCustomer: 'Customer'\n };\n\n let stageMetas: Array<StageMeta<Stage>> = stages.map((stage) => ({\n key: stage,\n title: stageTitleMap[stage] || stage,\n loadQuestions: async () => {\n const data = await getQuestionsByStage(stage, quoteIdRef.current ?? undefined);\n let qs = ensureAutoCurrentPolicyRequiredQuestions(stage, data.questions);\n qs = ensureVehicleVinOptional(stage, qs);\n return qs;\n }\n }));\n\n // Auto flow: preserve the initial shared stages exactly as provided by backend.\n // Only reshape the stages AFTER Product into: Vehicle -> Operator -> Policy -> Applicant.\n const isAutoFlow =\n stages.includes('Vehicle') && stages.includes('Driver') && stages.includes('AutoCurrentCarrier') && stages.includes('Customer');\n if (isAutoFlow) {\n const productIdx = stageMetas.findIndex((s) => s.key === 'Product');\n if (productIdx >= 0) {\n const prefix = stageMetas.slice(0, productIdx + 1);\n const suffix = stageMetas.slice(productIdx + 1);\n\n const pick = (k: Stage) => suffix.find((s) => s.key === k) ?? null;\n const desired = [pick('Vehicle'), pick('Driver'), pick('AutoCurrentCarrier'), pick('Customer')].filter((s): s is StageMeta<Stage> =>\n Boolean(s)\n );\n const remaining = suffix.filter((s) => !['Vehicle', 'Driver', 'AutoCurrentCarrier', 'Customer', 'AutoPolicy'].includes(String(s.key)));\n\n stageMetas = [...prefix, ...desired, ...remaining];\n }\n }\n\n return stageMetas;\n }\n\n // Restore quote state on mount\n useEffect(() => {\n const restoreQuoteState = async () => {\n try {\n // Load quoteId and authToken from localStorage\n const storedQuoteId = loadQuoteId();\n loadAuthTokenFromStorage();\n\n if (storedQuoteId) {\n setIsRestoringQuote(true);\n setQuoteId(storedQuoteId);\n\n // Try to fetch quote data - use token if available, otherwise send quoteId in body\n try {\n const token = getAuthToken();\n const response = await getQuote(token ? undefined : storedQuoteId);\n\n if (!response || !response.quote) {\n throw new Error('Invalid response from getQuote: missing quote data');\n }\n\n const { quote } = response;\n\n // Find the stage index based on current_stage FIRST\n // This ensures we have the correct stages before setting form values\n const { stages: currentStages } = await getStagesForQuote(storedQuoteId);\n const stageMetas = mapStagesToStageMetas(currentStages);\n // Keep stage rendering resilient even if quote-to-form transformation fails.\n setStages(stageMetas);\n\n // Transform quote data to form values\n let formValues: FormValues;\n try {\n formValues = quoteToFormValues(quote);\n setSavedFormValues(formValues);\n } catch (transformError) {\n throw new Error(`Failed to transform quote data: ${transformError instanceof Error ? transformError.message : 'Unknown error'}`);\n }\n\n const visibleStageMetas = applyAutoPolicyStageVisibility(stageMetas, formValues);\n setStages(visibleStageMetas);\n\n // Set the initial active stage based on current_stage\n if (quote.current_stage) {\n const normalizedStage = quote.current_stage === 'State' ? 'Product' : quote.current_stage;\n const stageIndex = visibleStageMetas.findIndex((s) => s.key === normalizedStage);\n if (stageIndex >= 0) {\n setInitialActiveStage(stageIndex);\n } else {\n // If current_stage not found, default to last stage\n setInitialActiveStage(visibleStageMetas.length - 1);\n }\n } else {\n // If no current_stage, default to last stage\n setInitialActiveStage(visibleStageMetas.length - 1);\n }\n } catch (error) {\n // If quote fetch fails, check if it's a 404 (quote not found)\n const apiError = error as Error & { statusCode?: number };\n if (apiError.statusCode === 404) {\n // Quote doesn't exist - clear invalid quoteId and let user start fresh\n clearQuoteId();\n setQuoteId(null);\n } else {\n // Other errors (e.g., token expired) - clear token but keep quoteId\n clearAuthToken();\n // Don't clear quoteId - user can continue and verify SMS again\n }\n } finally {\n setIsRestoringQuote(false);\n }\n } else {\n // No quote to restore, fetch default stages\n const { stages: defaultStages } = await getStagesForQuote();\n setStages(mapStagesToStageMetas(defaultStages));\n }\n } catch {\n // Silently handle restore errors\n setIsRestoringQuote(false);\n }\n };\n\n if (isOpen) {\n restoreQuoteState();\n }\n }, [isOpen]);\n\n // Lock background scroll\n useEffect(() => {\n if (!isOpen) return;\n const { overflow } = document.body.style;\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = overflow;\n };\n }, [isOpen]);\n\n // Close on Escape\n const onKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n pushWidgetClosed();\n onClose();\n }\n },\n [onClose]\n );\n useEffect(() => {\n if (!isOpen) return;\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [isOpen, onKeyDown]);\n\n // Clear saved form values and reset state when widget closes\n useEffect(() => {\n if (!isOpen) {\n setSavedFormValues(null);\n setInitialActiveStage(undefined);\n setIsRestoringQuote(false);\n setIsFetchingRates(false);\n }\n }, [isOpen]);\n\n // GTM: widget opened\n useEffect(() => {\n if (isOpen) pushWidgetOpened();\n }, [isOpen]);\n\n // GTM: rates viewed\n useEffect(() => {\n if (rates && Array.isArray(rates)) pushRatesViewed({ rateCount: rates.length });\n }, [rates]);\n\n if (!isOpen) return null;\n\n const handleClose = () => {\n pushWidgetClosed();\n onClose();\n };\n\n return (\n <div className=\"fixed inset-0 z-[9999] flex items-center justify-center\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"insurance-modal-title\">\n <div className=\"backdrop\" aria-hidden=\"true\" />\n\n <div className=\"modal-panel bg-white relative w-full max-w-2xl flex flex-col max-h-[90vh] overflow-hidden\" role=\"document\">\n <button\n onClick={handleClose}\n className=\"modal-close-btn absolute top-4 right-4 text-slate-400 hover:text-slate-600 text-xl\"\n aria-label=\"Close\"\n type=\"button\"\n >\n ×\n </button>\n\n <div className=\"text-center mb-6\">\n <h2 id=\"insurance-modal-title\" className=\"h1-title\">\n Let's get you the best insurance rates.\n </h2>\n {isFetchingRates && <p className=\"p-subtitle\">This should only take a few minutes.</p>}\n </div>\n\n {/* The ONLY scrollable area */}\n <div className=\"panel-body flex-1 min-h-0 overflow-y-auto\">\n {!rates && (\n <>\n {isRestoringQuote || stages.length === 0 ? (\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"text-slate-600\">Loading...</div>\n </div>\n ) : (\n <FormWizard\n stages={stages}\n initialValues={savedFormValues ?? undefined}\n initialActive={initialActiveStage}\n quoteId={quoteId ?? undefined}\n onStageComplete={async (stageValues, stageKey) => {\n try {\n const transformedValues = transformFormValues(stageValues);\n let activeQuoteId = quoteId;\n\n let stageMetas = stages;\n\n const currentStageIndex = stageMetas.findIndex((s) => s.key === stageKey);\n const currentMeta = stageMetas[currentStageIndex];\n const nextStageKey = getNextStageKey(stageMetas, stageKey as Stage);\n\n if (!activeQuoteId) {\n const createQuoteResponse = await createQuote(transformedValues.phone as string);\n const newQuoteId = createQuoteResponse?.quoteId;\n if (!newQuoteId || typeof newQuoteId !== 'string' || newQuoteId.trim() === '') {\n throw new Error(`Failed to create quote - invalid quoteId returned: ${newQuoteId}`);\n }\n activeQuoteId = newQuoteId;\n setQuoteId(newQuoteId);\n saveQuoteId(newQuoteId);\n // Save next stage as current_stage after creating quote (no token yet, so pass quoteId)\n await updateQuote({ current_stage: nextStageKey }, false, newQuoteId);\n } else if (stageKey === 'SMSVerification') {\n const { isVerified, token } = await verifyQuote(activeQuoteId, transformedValues.sms_code as string);\n if (!isVerified) {\n throw new Error('Invalid SMS code');\n }\n if (token) {\n setAuthToken(token);\n }\n // Save next stage as current_stage after SMS verification (now we have a token)\n await updateQuote({ current_stage: nextStageKey }, false);\n } else if (stageKey === 'Product') {\n const { isSupported } = await isSupportedState(transformedValues.state as string);\n if (!isSupported) {\n throw new Error('State is not supported');\n }\n const token = getAuthToken();\n await updateQuote({ ...transformedValues, current_stage: nextStageKey }, false, token ? undefined : activeQuoteId);\n } else {\n // Include next stage as current_stage in the payload\n // Pass quoteId if we have it but no token (for pre-verification stages)\n const token = getAuthToken();\n await updateQuote(\n { ...transformedValues, current_stage: nextStageKey },\n false,\n token ? undefined : activeQuoteId || undefined\n );\n }\n\n // Refresh stage flow after persisting flow-shaping answers so next navigation uses latest backend state.\n if (FLOW_RESHAPING_STAGES.has(stageKey as Stage)) {\n try {\n const { stages: newStages } = await getStagesForQuote(activeQuoteId || undefined);\n stageMetas = mapStagesToStageMetas(newStages);\n stageMetas = applyAutoPolicyStageVisibility(stageMetas, stageValues);\n setStages(stageMetas);\n } catch (stageRefreshError) {\n // Do not block stage persistence if stage metadata refresh fails.\n console.warn('Unable to refresh stages after flow-shaping step', stageRefreshError);\n }\n }\n\n pushStageCompleted({\n stageKey,\n stageTitle: currentMeta?.title ?? stageKey,\n stepIndex: currentStageIndex + 1,\n totalSteps: stageMetas.length\n });\n return { success: true };\n } catch (error) {\n return { success: false, error: error instanceof Error ? error.message : 'An error occurred' };\n }\n }}\n onComplete={async (allValues) => {\n try {\n const transformedValues = transformFormValues(allValues);\n\n if (!quoteId) {\n throw new Error('Quote ID is required');\n }\n await updateQuote(transformedValues, true);\n\n // Save form values so we can restore them when going back\n setSavedFormValues(allValues);\n\n setIsFetchingRates(true);\n try {\n const { rates } = await getRates();\n setRates(rates);\n } finally {\n setIsFetchingRates(false);\n }\n\n const totalSteps = stages.length;\n const lastStage = stages[totalSteps - 1];\n pushStageCompleted({\n stageKey: lastStage?.key ?? 'unknown',\n stageTitle: lastStage?.title ?? 'unknown',\n stepIndex: totalSteps,\n totalSteps\n });\n pushFlowCompleted();\n return { success: true };\n } catch (error) {\n void error;\n return { success: false, error: 'Oops, something went wrong. Please try again later.' };\n }\n }}\n />\n )}\n </>\n )}{' '}\n {rates && quoteId && <Rates rates={rates} onBack={() => setRates(null)} isBundleFlow={isBundleFlow(stages)} />}\n </div>\n\n {/* Footer */}\n <div className=\"mt-4 pt-4 border-t border-slate-200\">\n <p className=\"text-center text-sm text-slate-500\">Insurance products offered through Credify Corporation, a licensed insurance agency.</p>\n </div>\n </div>\n </div>\n );\n}\n","import Widget from '../components/Widget';\nimport CredifyInsuranceWidget from '../widget';\n\nexport default function WidgetController({ isOpen }: { isOpen: boolean }) {\n return (\n <Widget\n isOpen={isOpen}\n onClose={() => {\n CredifyInsuranceWidget.close();\n }}\n />\n );\n}\n","/* @refresh skip */\nimport { createElement } from 'react';\nimport { createRoot, type Root } from 'react-dom/client';\nimport WidgetController from './internal/WidgetController';\nimport './index.css';\n// CSS is injected at runtime by vite-plugin-css-injected-by-js so the widget always has its styles on any host.\n\ntype InitOptions = { autoOpen?: boolean };\n\nlet container: HTMLDivElement | null = null;\nlet root: Root | null = null;\nlet isOpen = false;\n\nfunction ensureRoot() {\n if (!container) {\n container = document.createElement('div');\n container.id = 'insurance-widget-root';\n // Mount on documentElement so host transforms/filters on body don't make\n // our fixed overlay position relative to body (which would look inline).\n document.documentElement.appendChild(container);\n }\n if (!root && container) {\n root = createRoot(container);\n }\n}\n\nfunction render() {\n ensureRoot();\n if (root) {\n root.render(createElement(WidgetController, { isOpen })); // controlled prop\n }\n}\n\nfunction destroy() {\n if (root && container) {\n root.unmount();\n container.remove();\n }\n root = null;\n container = null;\n}\n\nexport interface CredifyInsuranceWidgetAPI {\n init(options?: InitOptions): void;\n open(): void;\n close(): void;\n destroy(): void;\n}\n\nexport const CredifyInsuranceWidget: CredifyInsuranceWidgetAPI = {\n init: (options) => {\n isOpen = !!options?.autoOpen; // default false\n render();\n },\n open: () => {\n isOpen = true;\n render();\n },\n close: () => {\n isOpen = false;\n render();\n },\n destroy\n};\n\n// expose globally for script-tag usage\ndeclare global {\n interface Window {\n CredifyInsuranceWidget?: CredifyInsuranceWidgetAPI;\n }\n}\nif (typeof window !== 'undefined') window.CredifyInsuranceWidget = CredifyInsuranceWidget;\n\nexport default CredifyInsuranceWidget;\n"],"names":["Field","id","label","hint","error","required","className","children","jsxs","jsx","TextInput","rest","NumericInput","EmailInput","formatPhoneNumber","value","digits","tenDigits","extractDigits","TelInput","onChange","displayValue","setDisplayValue","useState","inputRef","useRef","cursorPositionRef","useEffect","limitedDigits","handleChange","e","input","inputValue","formatted","rawValue","syntheticEvent","beforeCursor","digitsBeforeCursor","formattedBeforeCursor","newPosition","UrlInput","PasswordInput","TextArea","rows","DateInput","Checkbox","Radio","name","checked","RadioGroup","legend","legendClassName","SelectInput","placeholder","options","describedBy","hasCustomChildren","opt","GOOGLE_MAPS_API_KEY","loadGoogleMapsScript","resolve","reject","existingScript","script","extractAddressComponents","place","components","component","types","AddressAutocomplete","onPlaceSelect","autocompleteServiceRef","placesServiceRef","suggestionsContainerRef","isLoading","setIsLoading","setInputValue","suggestions","setSuggestions","showSuggestions","setShowSuggestions","selectedIndex","setSelectedIndex","suggestionsRef","showSuggestionsRef","selectedIndexRef","debounceTimerRef","isMounted","err","handleInputChange","query","predictions","status","handleKeyDown","prev","newIndex","handleSuggestionClick","handleClickOutside","event","prediction","formattedAddress","addressComponents","index","decorateKeys","questions","walk","list","pathParts","q","qi","parentPart","baseKey","nextConds","c","ci","nested","$constructor","initializer","params","init","inst","def","_","proto","keys","i","k","Parent","Definition","_a","fn","$ZodAsyncError","$ZodEncodeError","globalConfig","config","newConfig","getEnumValues","entries","numericValues","v","jsonStringifyReplacer","cached","getter","nullish","cleanRegex","source","start","end","floatSafeRemainder","val","step","valDecCount","stepString","stepDecCount","match","decCount","valInt","stepInt","EVALUATING","defineLazy","object","key","assignProp","target","prop","mergeDefs","defs","mergedDescriptors","descriptors","esc","str","slugify","captureStackTrace","_args","isObject","data","allowsEval","F","isPlainObject","o","ctor","prot","shallowClone","propertyKeyTypes","escapeRegex","clone","cl","normalizeParams","_params","optionalKeys","shape","NUMBER_FORMAT_RANGES","pick","schema","mask","currDef","checks","newShape","omit","extend","existingShape","_shape","safeExtend","merge","a","b","partial","Class","oldShape","aborted","x","startIndex","prefixIssues","path","issues","iss","unwrapMessage","message","finalizeIssue","ctx","full","getLengthableOrigin","issue","args","util.jsonStringifyReplacer","$ZodError","$ZodRealError","flattenError","mapper","fieldErrors","formErrors","sub","formatError","processError","curr","el","_parse","_Err","_ctx","result","core.$ZodAsyncError","util.finalizeIssue","core.config","util.captureStackTrace","_parseAsync","_safeParse","errors.$ZodError","safeParse","errors.$ZodRealError","_safeParseAsync","safeParseAsync","_encode","_decode","_encodeAsync","_decodeAsync","_safeEncode","_safeDecode","_safeEncodeAsync","_safeDecodeAsync","cuid","cuid2","ulid","xid","ksuid","nanoid","duration","guid","uuid","version","email","_emoji","emoji","ipv4","ipv6","cidrv4","cidrv6","base64","base64url","e164","dateSource","date","timeSource","hhmm","time","datetime","opts","timeRegex","string","regex","integer","number","boolean","lowercase","uppercase","$ZodCheck","core.$constructor","numericOriginMap","$ZodCheckLessThan","origin","bag","payload","$ZodCheckGreaterThan","$ZodCheckMultipleOf","util.floatSafeRemainder","$ZodCheckNumberFormat","isInt","minimum","maximum","util.NUMBER_FORMAT_RANGES","regexes.integer","$ZodCheckMaxLength","util.nullish","util.getLengthableOrigin","$ZodCheckMinLength","$ZodCheckLengthEquals","length","tooBig","$ZodCheckStringFormat","_b","$ZodCheckRegex","$ZodCheckLowerCase","regexes.lowercase","$ZodCheckUpperCase","regexes.uppercase","$ZodCheckIncludes","escapedRegex","util.escapeRegex","pattern","$ZodCheckStartsWith","$ZodCheckEndsWith","$ZodCheckOverwrite","Doc","arg","lines","minIndent","dedented","line","$ZodType","ch","runChecks","isAborted","util.aborted","asyncResult","currLen","handleCanaryResult","canary","checkResult","util.defineLazy","r","$ZodString","regexes.string","$ZodStringFormat","checks.$ZodCheckStringFormat","$ZodGUID","regexes.guid","$ZodUUID","regexes.uuid","$ZodEmail","regexes.email","$ZodURL","trimmed","url","$ZodEmoji","regexes.emoji","$ZodNanoID","regexes.nanoid","$ZodCUID","regexes.cuid","$ZodCUID2","regexes.cuid2","$ZodULID","regexes.ulid","$ZodXID","regexes.xid","$ZodKSUID","regexes.ksuid","$ZodISODateTime","regexes.datetime","$ZodISODate","regexes.date","$ZodISOTime","regexes.time","$ZodISODuration","regexes.duration","$ZodIPv4","regexes.ipv4","$ZodIPv6","regexes.ipv6","$ZodCIDRv4","regexes.cidrv4","$ZodCIDRv6","regexes.cidrv6","parts","address","prefix","prefixNum","isValidBase64","$ZodBase64","regexes.base64","isValidBase64URL","regexes.base64url","padded","$ZodBase64URL","$ZodE164","regexes.e164","isValidJWT","token","algorithm","tokensParts","header","parsedHeader","$ZodJWT","$ZodNumber","regexes.number","received","$ZodNumberFormat","checks.$ZodCheckNumberFormat","$ZodBoolean","regexes.boolean","$ZodUnknown","$ZodNever","handleArrayResult","final","util.prefixIssues","$ZodArray","proms","item","handlePropertyResult","isOptionalOut","normalizeDef","okeys","util.optionalKeys","handleCatchall","unrecognized","keySet","_catchall","t","$ZodObject","sh","newSh","_normalized","util.cached","propValues","field","util.isObject","catchall","$ZodObjectJIT","superParse","generateFastpass","doc","normalized","parseStr","util.esc","ids","counter","fastpass","jit","core.globalConfig","fastEnabled","util.allowsEval","handleUnionResults","results","nonaborted","$ZodUnion","option","patterns","p","util.cleanRegex","single","first","async","$ZodIntersection","left","right","handleIntersectionResults","mergeValues","util.isPlainObject","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","unrecKeys","unrecIssue","bothKeys","f","merged","$ZodEnum","values","util.getEnumValues","valuesSet","util.propertyKeyTypes","$ZodLiteral","$ZodTransform","core.$ZodEncodeError","_out","output","handleOptionalResult","$ZodOptional","$ZodExactOptional","$ZodNullable","$ZodDefault","handleDefaultResult","$ZodPrefault","$ZodNonOptional","handleNonOptionalResult","$ZodCatch","$ZodPipe","handlePipeResult","next","$ZodReadonly","handleReadonlyResult","$ZodCustom","checks.$ZodCheck","handleRefineResult","_iss","util.issue","$ZodRegistry","_meta","meta","pm","registry","globalRegistry","_string","util.normalizeParams","_email","_guid","_uuid","_uuidv4","_uuidv6","_uuidv7","_url","_nanoid","_cuid","_cuid2","_ulid","_xid","_ksuid","_ipv4","_ipv6","_cidrv4","_cidrv6","_base64","_base64url","_e164","_jwt","_isoDateTime","_isoDate","_isoTime","_isoDuration","_coercedNumber","_int","_boolean","_unknown","_never","_lt","checks.$ZodCheckLessThan","_lte","_gt","checks.$ZodCheckGreaterThan","_gte","_multipleOf","checks.$ZodCheckMultipleOf","_maxLength","checks.$ZodCheckMaxLength","_minLength","checks.$ZodCheckMinLength","_length","checks.$ZodCheckLengthEquals","_regex","checks.$ZodCheckRegex","_lowercase","checks.$ZodCheckLowerCase","_uppercase","checks.$ZodCheckUpperCase","_includes","includes","checks.$ZodCheckIncludes","_startsWith","checks.$ZodCheckStartsWith","_endsWith","suffix","checks.$ZodCheckEndsWith","_overwrite","tx","checks.$ZodCheckOverwrite","_normalize","form","_trim","_toLowerCase","_toUpperCase","_slugify","util.slugify","_array","element","_refine","_superRefine","_check","_issue","initializeContext","process","seen","overrideSchema","_json","processor","parent","isTransforming","extractDefs","root","idToSchema","entry","existing","makeURI","defsSegment","externalId","uriGenerator","defUriPrefix","defId","extractToDef","ref","ext","finalize","flattenRef","zodSchema","_cached","refSeen","refSchema","parentSeen","finalized","createStandardJSONSchemaMethod","_schema","createToJSONSchemaMethod","processors","io","libraryOptions","formatMap","stringProcessor","json","format","contentEncoding","regexes","numberProcessor","multipleOf","exclusiveMaximum","exclusiveMinimum","booleanProcessor","neverProcessor","unknownProcessor","enumProcessor","literalProcessor","vals","customProcessor","transformProcessor","arrayProcessor","objectProcessor","allKeys","requiredKeys","unionProcessor","isExclusive","intersectionProcessor","isSimpleIntersection","allOf","nullableProcessor","inner","nonoptionalProcessor","defaultProcessor","prefaultProcessor","catchProcessor","catchValue","pipeProcessor","innerType","readonlyProcessor","optionalProcessor","ZodISODateTime","core.$ZodISODateTime","schemas.ZodStringFormat","core._isoDateTime","ZodISODate","core.$ZodISODate","core._isoDate","ZodISOTime","core.$ZodISOTime","core._isoTime","ZodISODuration","core.$ZodISODuration","core._isoDuration","ZodRealError","core.formatError","core.flattenError","parse","core._parse","parseAsync","core._parseAsync","core._safeParse","core._safeParseAsync","encode","core._encode","decode","core._decode","encodeAsync","core._encodeAsync","decodeAsync","core._decodeAsync","safeEncode","core._safeEncode","safeDecode","core._safeDecode","safeEncodeAsync","core._safeEncodeAsync","safeDecodeAsync","core._safeDecodeAsync","ZodType","core.$ZodType","util.mergeDefs","core.clone","reg","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","check","refine","refinement","superRefine","checks.overwrite","optional","exactOptional","nullable","nonoptional","array","union","intersection","pipe","transform","_default","prefault","_catch","readonly","description","core.globalRegistry","_ZodString","core.$ZodString","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","ZodString","core._email","ZodEmail","core._url","ZodURL","core._jwt","ZodJWT","core._emoji","ZodEmoji","core._guid","ZodGUID","core._uuid","ZodUUID","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","ZodNanoID","core._cuid","ZodCUID","core._cuid2","ZodCUID2","core._ulid","ZodULID","core._base64","ZodBase64","core._base64url","ZodBase64URL","core._xid","ZodXID","core._ksuid","ZodKSUID","core._ipv4","ZodIPv4","core._ipv6","ZodIPv6","core._cidrv4","ZodCIDRv4","core._cidrv6","ZodCIDRv6","core._e164","ZodE164","iso.datetime","iso.date","iso.time","iso.duration","core._string","ZodStringFormat","core.$ZodStringFormat","core.$ZodEmail","core.$ZodGUID","core.$ZodUUID","core.$ZodURL","core.$ZodEmoji","core.$ZodNanoID","core.$ZodCUID","core.$ZodCUID2","core.$ZodULID","core.$ZodXID","core.$ZodKSUID","core.$ZodIPv4","core.$ZodIPv6","core.$ZodCIDRv4","core.$ZodCIDRv6","core.$ZodBase64","core.$ZodBase64URL","core.$ZodE164","core.$ZodJWT","ZodNumber","core.$ZodNumber","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","int","checks.multipleOf","ZodNumberFormat","core.$ZodNumberFormat","core._int","ZodBoolean","core.$ZodBoolean","processors.booleanProcessor","core._boolean","ZodUnknown","core.$ZodUnknown","processors.unknownProcessor","unknown","core._unknown","ZodNever","core.$ZodNever","processors.neverProcessor","never","core._never","ZodArray","core.$ZodArray","processors.arrayProcessor","minLength","maxLength","len","core._array","ZodObject","core.$ZodObjectJIT","processors.objectProcessor","_enum","incoming","util.extend","util.safeExtend","other","util.merge","util.pick","util.omit","util.partial","ZodOptional","util.required","ZodNonOptional","ZodUnion","core.$ZodUnion","processors.unionProcessor","ZodIntersection","core.$ZodIntersection","processors.intersectionProcessor","ZodEnum","core.$ZodEnum","processors.enumProcessor","newEntries","ZodLiteral","core.$ZodLiteral","processors.literalProcessor","literal","ZodTransform","core.$ZodTransform","processors.transformProcessor","core.$ZodOptional","processors.optionalProcessor","ZodExactOptional","core.$ZodExactOptional","ZodNullable","core.$ZodNullable","processors.nullableProcessor","ZodDefault","core.$ZodDefault","processors.defaultProcessor","defaultValue","util.shallowClone","ZodPrefault","core.$ZodPrefault","processors.prefaultProcessor","core.$ZodNonOptional","processors.nonoptionalProcessor","ZodCatch","core.$ZodCatch","processors.catchProcessor","ZodPipe","core.$ZodPipe","processors.pipeProcessor","in_","out","ZodReadonly","core.$ZodReadonly","processors.readonlyProcessor","ZodCustom","core.$ZodCustom","processors.customProcessor","core._refine","core._superRefine","ZodIssueCode","core._coercedNumber","schemas.ZodNumber","CURRENT_YEAR","alphabeticName","z.string","optionalAlphabeticName","z.union","z.literal","positiveInt","min","max","z.coerce.number","nonNegativeInt","pastOrCurrentYear","minYear","zeroToNinetyNine","maxDigits","maxFormatted","minFormatted","FIELD_SCHEMAS","z.ZodIssueCode","parseUTCDate","utcToday","now","yearsDiff","from","to","years","m","CROSS_FIELD_RULES","dob","dobDate","roofYear","builtYear","lowerBound","moveIn","yearBuilt","moveInDate","licensed","licDate","min18","today","maxDate","numYears","age","priorYears","continuousYears","prior","continuous","oneYearAgo","oneYearLater","modelYear","yearNum","coll","comp","um","bi","isCSL","umIsCSL","biIsCSL","PER_PERSON_LIMIT","umLimit","biLimit","umpd","pd","parseCoverageAmount","amount","umpdAmount","pdAmount","mods","stated","modsNum","statedNum","validateFieldSchema","isVinValidFormat","runCrossFieldRules","skipKeys","errors","rule","msg","s","ensureKey","idx","isBlankValue","inputType","validateQuestions","schemaError","alreadyErrored","crossErrors","coerceNumber","n","HOME_DWELLING_STAGES","MORTGAGEE_STAGES","HOME_APPLICANT_STAGES","isQuestionHiddenInWidget","stageKey","HIDDEN_QUESTION_KEYS","BOLT_AUTO_PRIOR_CARRIER_LABELS","BOLT_TYPE_OF_RESIDENCE_LABELS","BOLT_HOME_PRIOR_CARRIER_LABELS","BOLT_VEHICLE_PRIMARY_USE_LABELS","BOLT_PRIOR_LIABILITY_LIMIT_LABELS","BOLT_NO_PRIOR_AUTO_INSURANCE_REASON_LABELS","BOLT_POLICY_BI_LABELS","BOLT_POLICY_UM_LABELS","BOLT_POLICY_PD_LABELS","BOLT_POLICY_MP_LABELS","BOLT_POLICY_UMPD_LABELS","BOLT_POLICY_PIP_LABELS","BOLT_POLICY_AUTO_DEATH_INDEMNITY_LABELS","BOLT_VEHICLE_COMP_COLL_DEDUCTIBLE_LABELS","BOLT_VEHICLE_TOWING_AND_LABOR_LABELS","BOLT_VEHICLE_TRANSPORTATION_EXPENSE_LABELS","BOLT_DRIVER_EDUCATION_LEVEL_LABELS","BOLT_HOME_ARCHITECTURAL_STYLE_LABELS","BOLT_HOME_DWELLING_TYPE_LABELS","BOLT_HOME_OCCUPANCY_TYPE_LABELS","BOLT_HOME_CONSTRUCTION_QUALITY_LABELS","BOLT_HOME_CONSTRUCTION_TYPE_LABELS","BOLT_HOME_FOUNDATION_TYPE_LABELS","BOLT_HOME_BUILDING_OVER_WATER_LABELS","BOLT_HOME_NUMBER_OF_STORIES_LABELS","BOLT_HOME_EXTERIOR_WALLS_LABELS","BOLT_HOME_ROOF_TYPE_LABELS","BOLT_HOME_ROOF_SHAPE_LABELS","BOLT_HOME_ROOF_UPDATED_LABELS","BOLT_HOME_HEATING_TYPE_LABELS","BOLT_HOME_OIL_TANK_LOCATION_LABELS","BOLT_HOME_BASEMENT_TYPE_LABELS","BOLT_HOME_PLUMBING_TYPE_LABELS","BOLT_HOME_PERSONAL_LIABILITY_LABELS","BOLT_HOME_MEDICAL_PAYMENTS_LABELS","BOLT_HOME_ALL_PERILS_DEDUCTIBLE_LABELS","BOLT_HOME_WINDSTORM_DEDUCTIBLE_LABELS","BOLT_HOME_DISTANCE_FIRE_HYDRANT_LABELS","BOLT_HOME_DISTANCE_FIRE_STATION_LABELS","BOLT_HOME_EMPLOYMENT_INDUSTRY_LABELS","BOLT_HOME_MARITAL_STATUS_LABELS","BOLT_HOME_GENDER_LABELS","BOLT_DRIVER_INDUSTRY_LABELS","BOLT_HOME_LOSS_DESCRIPTION_LABELS","BOLT_POLICY_TORT_THRESHOLD_LABELS","BOLT_PIP_COVERAGE_TYPE_LABELS","BOLT_EXTENDED_MEDICAL_LABELS","BOLT_ADDITIONAL_PIP_LABELS","BOLT_PIP_DEDUCTIBLE_LABELS","BOLT_DRIVER_OCCUPATIONS_BY_INDUSTRY","BOLT_DRIVER_OCCUPATION_LABELS_FROM_BOLT","BOLT_OCCUPATIONS_BY_INDUSTRY","BOLT_OCCUPATION_LABELS_FROM_BOLT","normalizeByLabelMap","labelsByKey","raw","lowered","normalizeIndustryValue","normalizeEducationLevelValue","normalizeOccupationValue","normalizeText","text","parseDateOnly","year","month","day","dt","hasAutoCoverageGap","expiration","effective","HOME_LAPSE_WIDGET_STAGES","shouldShowLapseInCoverage","question","widgetStageKey","resolveAutoCoverageConditionKeys","currentCarrierKey","effectiveDateKey","expirationDateKey","noInsuranceReasonKeys","hideWhenNoPriorInsuranceKeys","processQuestion","prompt","recurse","shouldRequireNoInsuranceReason","shouldShowNoInsuranceReason","hasNoPriorInsurance","isNoInsuranceReasonQuestion","BOLT_VEHICLE_MAKE_OPTIONS","QUOTE_ID_KEY","AUTH_TOKEN_KEY","saveQuoteId","quoteId","loadQuoteId","clearQuoteId","saveAuthToken","loadAuthToken","clearAuthToken","clearAllQuoteData","BASE_URL","authToken","setAuthToken","getAuthToken","loadAuthTokenFromStorage","storedToken","clearAuthTokenStorage","makeAuthenticatedRequest","body","headers","response","errorMessage","parseJsonOrEmpty","getQuestionsByStage","stage","getStagesForQuote","createQuote","phone","updateQuote","getRates","verifyQuote","smsCode","isSupportedState","state","getQuote","getVehicleOptions","decodeVin","requestBind","quoteRateId","NJ_POLICY_FIELD_KEYS","NJ_POLICY_FIELD_KEY_SET","z.object","z.enum","z.boolean","AUTO_GAP_VISIBLE_KEYS","OPTION_DISPLAY_LABELS","OPTION_DISPLAY_LABELS_BY_KEY","VEHICLE_MODEL_FALLBACK_OPTIONS","VEHICLE_BODY_STYLE_FALLBACK_OPTIONS","DRIVER_OCCUPATION_FALLBACK_OPTIONS","toDateInputValue","d","coerceDigitsOnlyNumber","digitsOnly","isDisallowedNumberKey","MAX_INPUT_DIGITS_BY_KEY","AUTOCOMPLETE_BY_KEY","getDateInputConstraints","INDUSTRIES_WITHOUT_OCCUPATION","shouldShowOccupation","scopePath","driverIndustry","scopedRead","homeIndustry","industry","isNjSelected","stateValue","shouldShowNJField","NJ_SPECIFIC_KEYS","isNjUnhiddenField","keyStr","isNjField","shouldSuppressHiddenWidgetField","_q","isImplicitYesRepeatableQuestion","getEffectiveQuestionValue","toNumber","toTime","cmp","na","nb","ta","tb","contains","haystack","needle","evalConditional","qValue","conditionalType","conditionalValue","getIn","obj","acc","setInImmutable","head","tail","arr","current","nextContainer","scope","scopedWrite","scopedFieldId","ITEMS_SUFFIX","itemsKey","asTextValue","asNumberValue","asSelectValue","FormRenderer","initialValues","controlledValues","onChangeValues","onSubmit","keyedQuestions","useMemo","autoCoverageKeys","isBundlePolicyStage","initialUncontrolled","uncontrolled","setUncontrolled","localShadow","setLocalShadow","setErrors","vehicleOptsCache","vehicleInflight","setVehicleOpts","vehicleOptsLoading","setVehicleOptsLoading","vehicleSessionInitiated","vinDecodeLoading","setVinDecodeLoading","vinDecodeError","setVinDecodeError","handleVinDecode","useCallback","vinValue","scopeKey","nextAll","resolveVehicleOpts","cacheKey","level","stateKey","scopedSnapshot","override","runCrossFieldValidation","snapshot","affectedRules","updates","handleBlur","changed","renderOne","itemIdx","hasMods","set","conds","cond","currentValue","wasActive","willBeActive","arrStorageKey","clearNestedArrays","questionList","currentScope","childQ","childCond","nestedArrKey","grandChildren","vehicles","drivers","assignments","showDriverPct","toOptions","labels","optLabel","compCollOptions","towingOptions","transportationOptions","writeVehicleField","vIdx","fieldKey","updateAssignment","dIdx","pct","vKey","getDriverPctError","vAssignments","pcts","nonZero","total","vLabel","pctError","getStr","dLabel","pctVal","getVehicleValidationError","validationError","vinScopeKey","isVinLoading","vinError","Fragment","dateMin","dateMax","newVal","idOpt","scopedName","vehicleFieldDisabled","vehicleFieldPlaceholder","selectedYear","loadingKey","resolved","selectedMake","selectedModel","industryKey","selectedIndustry","fieldId","nextValue","normalizedIndustry","occupationOptions","coApplicantDefaultOccupation","nextScopedBase","renderRecursive","qIndex","selectedCarrier","elem","matches","branches","branch","count","pushEmpty","popLast","nextArr","groupIdBase","itemScope","groupId","itemValues","isDriverGroup","entryLabel","ssnSuffix","ck","childConds","childVal","childMatches","bc","bci","nestedArr","nestedCount","nestedPush","nestedPop","__","nIdx","nestedScope","visibleFlat","handleSubmit","dynamicRequired","validationQuestions","eMap","firstIdx","GTM_CONTAINER_ID","getDataLayer","pushDataLayerEvent","eventName","pushWidgetOpened","pushWidgetClosed","pushStageViewed","pushStageCompleted","pushFlowCompleted","pushRatesViewed","pushRatesBack","shouldShowOccupationInRepeatableItem","type","rhs","flattenVisibleQuestions","keyed","visit","shouldSkipRequiredValidation","validateRepeatablesRecursive","valuesAtScope","qKey","qVal","itemScopePath","visibleChildren","itemErrors","hasRepeatableBlockingErrors","rootValues","hasVehiclePolicySelectionsBlockingErrors","FormWizard","stages","onStageComplete","onComplete","initialActive","active","setActive","allValues","setAllValues","perStageQuestions","setPerStageQuestions","loading","setLoading","isSubmitting","setIsSubmitting","stageError","setStageError","stepRefs","latestStagesRef","hasStages","clampedActive","isEffectivelyLastStage","activeElement","cancelled","qs","currentValues","slice","kItems","updateCurrentValues","goPrev","goNext","visible","flatErrors","visibleKeys","flatBlock","repeatBlock","vehiclePolicyBlock","dva","dvaDrivers","dvaBlock","vi","vAssign","di","isComplete","success","latestStages","latestCurrentIndex","latestNextIndex","disableNext","copy","currencyFormatter","LOB_DISPLAY_NAMES","LOB_ORDER","FEATURED_BLOCK_SHELL","FEATURED_BLOCK_BADGE","LOB_FEATURED_BLOCK_WIDTH","LOB_RATE_PAIR_MATCH_SHELL","BackButton","onBack","handleBack","RateCard","rate","onRequestBind","featured","showLobLabel","showFeaturedBadge","termMonths","premiumDollars","formattedPremium","isRequesting","isRequested","hasPolicyDates","lobLabel","displayFeaturedBadge","Rates","rates","isBundleFlow","rateItems","hasRawRates","requestStatuses","setRequestStatuses","activeMarketTab","setActiveMarketTab","admittedRates","nonAdmittedRates","admittedCount","nonAdmittedCount","hasDisplayableRates","visibleRates","groupedRates","aTerm","bTerm","aMonthly","bMonthly","groups","ai","lob","lobRates","bundleMissingLobMessages","hasAutoRates","hasHomeRates","messages","handleRequestBind","cardKey","autoGroup","g","homeGroup","hasFeaturedBundle","groupsOutsideBundle","featuredBundleCardEntries","singleCardInFeaturedBundle","group","featuredRate","moreRates","convertBooleanToYesNo","formatDate","quoteToFormValues","quoteRaw","quote","formValues","addressParts","priorAddressParts","vehicleIdToVin","driverRaw","driver","driverValues","ssnDisplay","driverViolations","violation","violationValues","driverAccidents","accident","accidentValues","driverLosses","loss","lossValues","vehicleRaw","vehicle","vehicleValues","garagingAddressParts","coverage","coverageValues","lienholder","lienholderValues","FLOW_RESHAPING_STAGES","getDriverCountForStageVisibility","applyAutoPolicyStageVisibility","stageMetas","driverCount","withoutAutoPolicy","filtered","transformFormValues","transformed","convertYesNoToBoolean","nonItemsKeys","fieldsInArrays","keysWithItemsArrays","fieldName","transformedArray","isNoPrior","selectedHomeCarrier","isNoPriorHome","drv","MAX_PURCHASE_PRICE_DOLLARS","dollars","clamped","row","paid","getNextStageKey","currentStageIndex","ensureAutoCurrentPolicyRequiredQuestions","hasCancellationQuestion","hasVehiclePolicyQuestion","patched","ensureVehicleVinOptional","patch","nextConditionals","Widget","isOpen","onClose","setStages","setQuoteId","quoteIdRef","setRates","isFetchingRates","setIsFetchingRates","savedFormValues","setSavedFormValues","initialActiveStage","setInitialActiveStage","isRestoringQuote","setIsRestoringQuote","mapStagesToStageMetas","stageTitleMap","productIdx","desired","remaining","storedQuoteId","currentStages","transformError","visibleStageMetas","normalizedStage","stageIndex","defaultStages","overflow","onKeyDown","handleClose","stageValues","transformedValues","activeQuoteId","currentMeta","nextStageKey","isVerified","isSupported","newQuoteId","newStages","stageRefreshError","totalSteps","lastStage","WidgetController","CredifyInsuranceWidget","container","ensureRoot","createRoot","render","createElement","destroy"],"mappings":"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sB,wBACtB,qBAAsB,wBACtB,qBAAsB,wBACtB,qBAAsB,wBACtB,qBAAsB,wBACtB,qBAAsB,wBACtB,qBAAsB,wBACtB,qBAAsB,wBACtB,iBAAkB,gBAClB,iBAAkB,gBAClB,iBAAkB,gBAClB,iBAAkB,gBAClB,iBAAkB,gBAClB,iBAAkB,gBAClB,iBAAkB,gBAClB,iBAAkB,eACpB,EAOaC,GAAqD,CAChE,OAAQ,OACR,OAAQ,OACR,QAAS,SACT,QAAS,SACT,QAAS,QACX,ECj2BaC,GAAsC,CACjD,wBAAyB,CACvB,qBACA,WACA,QACA,kBACA,mBACA,oBACA,YACA,UACA,iBACA,sBACA,aACA,SACA,aACA,QACA,SACA,aACA,qBAAA,EAEF,mBAAoB,CAClB,QACA,eACA,sBACA,kBACA,gBACA,sBACA,QACA,oBACA,UACA,WACA,SACA,sBACA,kBACA,QACA,UACA,WACA,kBACA,gBACA,mBACA,oBAAA,EAEF,qBAAsB,CACpB,qBACA,eACA,iBACA,aACA,iBACA,QACA,cACA,aACA,aACA,aACA,qBACA,YACA,oBACA,oBACA,WACA,qBACA,kBACA,sBACA,eACA,QACA,UACA,mBACA,sBACA,sBACA,aAAA,EAEF,sBAAuB,CACrB,oBACA,eACA,QACA,eACA,aACA,MACA,qBACA,YACA,sBACA,sBACA,oBACA,iBACA,gBACA,iBACA,oBACA,qBACA,gBACA,sBACA,QACA,mBACA,sBACA,mBACA,gBACA,sBACA,oBAAA,EAEF,sBAAuB,CACrB,oBACA,mBACA,YACA,mBACA,kBACA,oBACA,aACA,iBACA,sBACA,qBACA,kBACA,sBACA,qBACA,WACA,sBACA,YACA,iBACA,cACA,QACA,qBACA,QACA,UACA,qBACA,UACA,QAAA,EAEF,SAAU,CAAC,UAAU,EACrB,oBAAqB,CACnB,eACA,qBACA,sBACA,QACA,YACA,sBACA,sBACA,oBACA,QACA,qBACA,mBACA,iBACA,mBACA,gBACA,qBACA,OAAA,EAEF,sBAAuB,CACrB,UACA,eACA,UACA,YACA,QACA,uBACA,UACA,WACA,kBACA,cACA,gBACA,QACA,mBACA,sBACA,aACA,YACA,cACA,oBACA,YAAA,EAEF,sBAAuB,CACrB,qBACA,eACA,UACA,WACA,kBACA,QACA,eACA,iBACA,qBACA,uBACA,aACA,qBACA,eACA,aACA,sBACA,kBACA,QACA,cACA,UACA,aACA,mBACA,YACA,kBAAA,EAEF,sBAAuB,CAAC,qBAAqB,EAC7C,YAAa,CACX,eACA,UACA,QACA,qBACA,oBACA,oBACA,mBACA,YACA,kBACA,gBACA,QACA,aACA,sBACA,mBACA,qBACA,mBACA,mBACA,eAAA,EAEF,UAAW,CACT,qBACA,kBACA,UACA,eACA,eACA,UACA,WACA,kBACA,QACA,eACA,MACA,qBACA,YACA,QACA,kBACA,mBACA,YACA,aAAA,EAEF,qBAAsB,CACpB,mBACA,sBACA,WACA,UACA,sBACA,sBACA,iBACA,aACA,WACA,mBACA,aACA,qBACA,qBACA,sBACA,qBACA,kBACA,QACA,sBACA,eACA,sBACA,qBACA,iBACA,qBACA,iBACA,SAAA,EAEF,oBAAqB,CACnB,sBACA,oBACA,cACA,sBACA,WACA,sBACA,mBACA,sBACA,iBACA,WACA,OAAA,EAEF,iBAAkB,CAChB,eACA,QACA,iBACA,qBACA,qBACA,YACA,UACA,mBACA,QACA,SACA,gBACA,qBACA,kBACA,mBACA,oBACA,YACA,sBACA,iBACA,aAAA,EAEF,qBAAsB,CACpB,eACA,sBACA,SACA,QACA,qBACA,kBACA,UACA,SACA,oBACA,YACA,iBACA,cACA,aACA,qBACA,cACA,QACA,oBACA,aACA,mBACA,gBACA,mBACA,aACA,YACA,cAAA,EAEF,MAAO,CAAC,OAAO,EACf,sBAAuB,CACrB,YACA,sBACA,sBACA,cACA,aACA,WACA,QACA,QACA,eACA,kBAAA,EAEF,sBAAuB,CACrB,QACA,YACA,UACA,aACA,UACA,OACA,iBACA,YACA,sBACA,sBACA,kBACA,aACA,aACA,oBACA,gBACA,mBACA,UACA,QACA,QACA,kBACA,cAAA,EAEF,QA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","x_google_ignoreList":[14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]}
|