@letar/forms 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +308 -0
- package/README.md +9 -9
- package/README.ru.md +115 -30
- package/analytics.js +3 -0
- package/analytics.js.map +1 -0
- package/chunk-2PSXYC3I.js +1782 -0
- package/chunk-2PSXYC3I.js.map +1 -0
- package/chunk-5D6S6EGF.js +206 -0
- package/chunk-5D6S6EGF.js.map +1 -0
- package/{chunk-6QOPSQ3Z.js → chunk-6E7VJAJT.js} +3 -3
- package/{chunk-6QOPSQ3Z.js.map → chunk-6E7VJAJT.js.map} +1 -1
- package/chunk-CGXKRCSM.js +117 -0
- package/chunk-CGXKRCSM.js.map +1 -0
- package/{chunk-M2PNAAIR.js → chunk-DQUVUMCX.js} +30 -19
- package/chunk-DQUVUMCX.js.map +1 -0
- package/chunk-K3J4L26K.js +345 -0
- package/chunk-K3J4L26K.js.map +1 -0
- package/{chunk-PJETA6YN.js → chunk-MAYUFA5K.js} +5 -4
- package/chunk-MAYUFA5K.js.map +1 -0
- package/{chunk-4V6WBJ76.js → chunk-MVGXZNHP.js} +2 -2
- package/{chunk-4V6WBJ76.js.map → chunk-MVGXZNHP.js.map} +1 -1
- package/{chunk-XKKJKYWZ.js → chunk-MZDTJSF7.js} +3 -3
- package/{chunk-XKKJKYWZ.js.map → chunk-MZDTJSF7.js.map} +1 -1
- package/{chunk-KUNT5MSU.js → chunk-Q5EOF36Y.js} +3 -3
- package/chunk-Q5EOF36Y.js.map +1 -0
- package/{chunk-7FEQFDJ7.js → chunk-R2RTCKXY.js} +2 -2
- package/{chunk-7FEQFDJ7.js.map → chunk-R2RTCKXY.js.map} +1 -1
- package/{chunk-HWVOFWAT.js → chunk-XFWLD5EO.js} +225 -26
- package/chunk-XFWLD5EO.js.map +1 -0
- package/fields/boolean.js +3 -3
- package/fields/datetime.js +3 -3
- package/fields/number.js +3 -3
- package/fields/selection.js +3 -3
- package/fields/specialized.js +3 -3
- package/fields/text.js +3 -3
- package/hcaptcha-U4XIT3HS.js +64 -0
- package/hcaptcha-U4XIT3HS.js.map +1 -0
- package/i18n.js +1 -1
- package/index.js +3268 -51
- package/index.js.map +1 -1
- package/offline.js +1 -1
- package/package.json +33 -4
- package/recaptcha-PKAUAY2S.js +56 -0
- package/recaptcha-PKAUAY2S.js.map +1 -0
- package/server-errors.js +3 -0
- package/server-errors.js.map +1 -0
- package/turnstile-7FXTBSLW.js +36 -0
- package/turnstile-7FXTBSLW.js.map +1 -0
- package/validators/ru.js +73 -0
- package/validators/ru.js.map +1 -0
- package/chunk-GOELIS6T.js +0 -849
- package/chunk-GOELIS6T.js.map +0 -1
- package/chunk-HWVOFWAT.js.map +0 -1
- package/chunk-KUNT5MSU.js.map +0 -1
- package/chunk-M2PNAAIR.js.map +0 -1
- package/chunk-PJETA6YN.js.map +0 -1
package/chunk-GOELIS6T.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/declarative/form-fields/specialized/providers/dadata.ts","../src/lib/declarative/form-fields/specialized/field-address.tsx","../src/lib/declarative/form-fields/specialized/field-color-picker.tsx","../src/lib/declarative/form-fields/specialized/field-file-upload.tsx","../src/lib/declarative/form-fields/specialized/field-otp-input.tsx","../src/lib/declarative/form-fields/specialized/field-phone.tsx","../src/lib/declarative/form-fields/specialized/field-pin-input.tsx","../src/lib/declarative/form-fields/specialized/field-city.tsx"],"names":["jsxs","Field","jsx","HStack","Box","Text","Input","useState","useEffect","useCallback","Button","PinInput","useRef","Spinner","List"],"mappings":"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","file":"chunk-GOELIS6T.js","sourcesContent":["import type { AddressProvider, AddressSuggestion, SuggestionOptions } from './types'\n\nconst DADATA_URL = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address'\n\ninterface DaDataConfig {\n /** DaData API token */\n token: string\n /** Custom API base URL (default: DaData production) */\n baseUrl?: string\n}\n\n/**\n * Create a DaData address provider (Russia).\n *\n * @example\n * ```typescript\n * import { createDaDataProvider } from '@letar/forms'\n *\n * const dadata = createDaDataProvider({ token: process.env.DADATA_TOKEN })\n *\n * <Form.Field.Address name=\"address\" provider={dadata} />\n * ```\n */\nexport function createDaDataProvider(config: DaDataConfig): AddressProvider {\n const { token, baseUrl = DADATA_URL } = config\n\n return {\n async getSuggestions(query: string, options?: SuggestionOptions): Promise<AddressSuggestion[]> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body: Record<string, any> = {\n query,\n count: options?.count ?? 10,\n }\n\n // DaData-specific: from_bound/to_bound for city-level restriction\n if (options?.bounds) {\n if (options.bounds.from) body.from_bound = { value: options.bounds.from }\n if (options.bounds.to) body.to_bound = { value: options.bounds.to }\n }\n\n // DaData-specific: locations filter\n if (options?.filters) {\n body.locations = [options.filters]\n }\n\n const response = await fetch(baseUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n Authorization: `Token ${token}`,\n },\n body: JSON.stringify(body),\n })\n\n if (!response.ok) {\n return []\n }\n\n const data = await response.json()\n const suggestions = data.suggestions ?? []\n\n return suggestions.map(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (s: any): AddressSuggestion => ({\n label: s.value,\n value: s.value,\n data: s.data,\n }),\n )\n },\n }\n}\n","'use client'\n\nimport { Box, Field, Input, List, Spinner, Text } from '@chakra-ui/react'\nimport { type ReactElement, useCallback, useEffect, useRef, useState } from 'react'\nimport { useDeclarativeFormOptional } from '../../form-context'\nimport type { AddressFieldProps, AddressValue } from '../../types'\nimport { createField, FieldError, FieldLabel, useDebounce } from '../base'\nimport { createDaDataProvider } from './providers'\nimport type { AddressProvider, AddressSuggestion } from './providers'\n\n/**\n * Resolve address provider from props, context, or token fallback.\n */\nfunction useAddressProvider(\n propProvider?: AddressProvider,\n token?: string,\n): AddressProvider | null {\n const formContext = useDeclarativeFormOptional()\n\n // Priority: prop > createForm context > token fallback\n if (propProvider) return propProvider\n if (formContext?.addressProvider) return formContext.addressProvider\n if (token) return createDaDataProvider({ token })\n return null\n}\n\n/**\n * State for address field\n */\ninterface AddressFieldState {\n inputValue: string\n setInputValue: (value: string) => void\n suggestions: AddressSuggestion[]\n setSuggestions: (suggestions: AddressSuggestion[]) => void\n isLoading: boolean\n setIsLoading: (loading: boolean) => void\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n highlightedIndex: number\n setHighlightedIndex: (index: number) => void\n containerRef: React.RefObject<HTMLDivElement | null>\n debouncedQuery: string\n fetchSuggestions: (query: string) => Promise<void>\n initializedRef: React.RefObject<boolean>\n}\n\n/**\n * Form.Field.Address — address input with autocomplete suggestions.\n *\n * Supports pluggable address providers. DaData (Russia) is built-in;\n * pass any `AddressProvider` for other geocoding services.\n *\n * @example With provider (recommended)\n * ```tsx\n * const dadata = createDaDataProvider({ token: '...' })\n * <Form.Field.Address name=\"address\" provider={dadata} />\n * ```\n *\n * @example With token (backward compatible, auto-creates DaData provider)\n * ```tsx\n * <Form.Field.Address name=\"address\" token=\"dadata-token\" />\n * ```\n *\n * @example Return only string value\n * ```tsx\n * <Form.Field.Address name=\"address\" provider={dadata} valueOnly />\n * ```\n */\nexport const FieldAddress = createField<AddressFieldProps, AddressValue | string, AddressFieldState>({\n displayName: 'FieldAddress',\n\n useFieldState: (props) => {\n const { provider: propProvider, token, minChars = 3, debounceMs = 300, locations } = props\n const provider = useAddressProvider(propProvider, token)\n\n const [inputValue, setInputValue] = useState('')\n const [suggestions, setSuggestions] = useState<AddressSuggestion[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [isOpen, setIsOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const initializedRef = useRef(false)\n\n const debouncedQuery = useDebounce(inputValue, debounceMs)\n\n // Fetch suggestions from provider\n const fetchSuggestions = useCallback(\n async (query: string) => {\n if (query.length < minChars || !provider) {\n setSuggestions([])\n return\n }\n\n setIsLoading(true)\n try {\n const results = await provider.getSuggestions(query, {\n count: 10,\n filters: locations ? Object.assign({}, ...locations) : undefined,\n })\n setSuggestions(results)\n setIsOpen(true)\n } catch (error) {\n console.error('Error loading address suggestions:', error)\n setSuggestions([])\n } finally {\n setIsLoading(false)\n }\n },\n [provider, minChars, locations],\n )\n\n // Load on debounced query change\n useEffect(() => {\n if (debouncedQuery) {\n fetchSuggestions(debouncedQuery)\n } else {\n setSuggestions([])\n setIsOpen(false)\n }\n }, [debouncedQuery, fetchSuggestions])\n\n // Close on click outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n return {\n inputValue,\n setInputValue,\n suggestions,\n setSuggestions,\n isLoading,\n setIsLoading,\n isOpen,\n setIsOpen,\n highlightedIndex,\n setHighlightedIndex,\n containerRef,\n debouncedQuery,\n fetchSuggestions,\n initializedRef,\n }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps, fieldState }): ReactElement => {\n const { valueOnly = false } = componentProps\n const {\n inputValue,\n setInputValue,\n suggestions,\n setSuggestions,\n isLoading,\n isOpen,\n setIsOpen,\n highlightedIndex,\n setHighlightedIndex,\n containerRef,\n initializedRef,\n } = fieldState\n\n const fieldValue = field.state.value as AddressValue | string | undefined\n\n // Initialize input value from field (only on first render)\n if (!initializedRef.current && fieldValue) {\n const displayValue = typeof fieldValue === 'string' ? fieldValue : fieldValue.value\n if (displayValue && displayValue !== inputValue) {\n setInputValue(displayValue)\n }\n initializedRef.current = true\n }\n\n // Handler for suggestion selection\n const handleSelect = (suggestion: AddressSuggestion) => {\n setInputValue(suggestion.value)\n setIsOpen(false)\n setSuggestions([])\n\n if (valueOnly) {\n field.handleChange(suggestion.value)\n } else {\n const addressValue: AddressValue = {\n value: suggestion.value,\n data: suggestion.data,\n }\n field.handleChange(addressValue)\n }\n }\n\n // Keyboard navigation handler\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isOpen || suggestions.length === 0) {\n return\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIndex(highlightedIndex < suggestions.length - 1 ? highlightedIndex + 1 : 0)\n break\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIndex(highlightedIndex > 0 ? highlightedIndex - 1 : suggestions.length - 1)\n break\n case 'Enter':\n e.preventDefault()\n if (highlightedIndex >= 0) {\n handleSelect(suggestions[highlightedIndex])\n }\n break\n case 'Escape':\n setIsOpen(false)\n break\n }\n }\n\n return (\n <Field.Root\n invalid={hasError}\n required={resolved.required}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n >\n <FieldLabel label={resolved.label} tooltip={resolved.tooltip} required={resolved.required} />\n <Box ref={containerRef} position=\"relative\" width=\"100%\">\n <Input\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value)\n setHighlightedIndex(-1)\n }}\n onFocus={() => {\n if (suggestions.length > 0) {\n setIsOpen(true)\n }\n }}\n onBlur={field.handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={resolved.placeholder ?? 'Start typing address...'}\n data-field-name={fullPath}\n />\n {isLoading && (\n <Box position=\"absolute\" right={3} top=\"50%\" transform=\"translateY(-50%)\">\n <Spinner size=\"sm\" />\n </Box>\n )}\n {isOpen && suggestions.length > 0 && (\n <List.Root\n position=\"absolute\"\n zIndex={10}\n width=\"100%\"\n bg=\"bg.panel\"\n borderWidth=\"1px\"\n borderRadius=\"md\"\n shadow=\"md\"\n maxH=\"200px\"\n overflowY=\"auto\"\n mt={1}\n >\n {suggestions.map((suggestion, index) => (\n <List.Item\n key={suggestion.value + index}\n px={3}\n py={2}\n cursor=\"pointer\"\n bg={highlightedIndex === index ? 'bg.muted' : undefined}\n _hover={{ bg: 'bg.muted' }}\n onClick={() => handleSelect(suggestion)}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n <Text fontSize=\"sm\">{suggestion.label}</Text>\n </List.Item>\n ))}\n </List.Root>\n )}\n </Box>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport { ColorPicker, Field, HStack, parseColor, Portal } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { BaseFieldProps, FieldTooltipMeta } from '../../types'\nimport { createField, FieldError } from '../base'\nimport { FieldTooltip } from '../base/field-tooltip'\n\n/**\n * Props for ColorPicker field\n */\nexport interface ColorPickerFieldProps extends Omit<BaseFieldProps, 'placeholder'> {\n /** Tooltip for field label */\n tooltip?: FieldTooltipMeta\n /** Color palette for quick selection */\n swatches?: string[]\n /** Size (by default: md) */\n size?: '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n /** Show area picker (saturation/brightness) (by default: true) */\n showArea?: boolean\n /** Show eyedropper button (by default: true) */\n showEyeDropper?: boolean\n /** Show hue/alpha sliders (by default: true) */\n showSliders?: boolean\n /** Show hex input (by default: true) */\n showInput?: boolean\n}\n\n/**\n * Default palette\n */\nconst defaultSwatches = [\n '#000000',\n '#4A5568',\n '#F56565',\n '#ED64A6',\n '#9F7AEA',\n '#6B46C1',\n '#4299E1',\n '#0BC5EA',\n '#38B2AC',\n '#48BB78',\n '#ECC94B',\n '#DD6B20',\n]\n\n/**\n * Form.Field.ColorPicker - Color selection with picker\n *\n * Renders color picker with optional palette, area picker,\n * sliders and hex input.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.ColorPicker\n * name=\"color\"\n * label=\"Select color\"\n * />\n * ```\n *\n * @example With custom palette\n * ```tsx\n * <Form.Field.ColorPicker\n * name=\"brandColor\"\n * label=\"Brand color\"\n * swatches={['#FF0000', '#00FF00', '#0000FF']}\n * />\n * ```\n *\n * @example Minimal (palette only)\n * ```tsx\n * <Form.Field.ColorPicker\n * name=\"accent\"\n * showArea={false}\n * showSliders={false}\n * showInput={false}\n * swatches={['#FF0000', '#00FF00', '#0000FF', '#FFFF00']}\n * />\n * ```\n */\nexport const FieldColorPicker = createField<ColorPickerFieldProps, string>({\n displayName: 'FieldColorPicker',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const {\n swatches = defaultSwatches,\n size = 'md',\n showArea = true,\n showEyeDropper = true,\n showSliders = true,\n showInput = true,\n } = componentProps\n\n const currentValue = (field.state.value as string) || '#000000'\n\n // Parse color safely\n let parsedColor\n try {\n parsedColor = parseColor(currentValue)\n } catch {\n parsedColor = parseColor('#000000')\n }\n\n return (\n <Field.Root\n invalid={hasError}\n required={resolved.required}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n >\n <ColorPicker.Root\n value={parsedColor}\n onValueChange={(details) => {\n // Use valueAsString which is already in correct format\n field.handleChange(details.valueAsString)\n }}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n size={size}\n >\n <ColorPicker.HiddenInput name={fullPath} />\n\n {resolved.label && (\n <ColorPicker.Label>\n {resolved.tooltip ? (\n <HStack gap={1}>\n <span>{resolved.label}</span>\n <FieldTooltip {...resolved.tooltip} />\n </HStack>\n ) : (\n resolved.label\n )}\n {resolved.required && <Field.RequiredIndicator />}\n </ColorPicker.Label>\n )}\n\n <ColorPicker.Control>\n {showInput && <ColorPicker.ChannelInput channel=\"hex\" />}\n <ColorPicker.Trigger />\n </ColorPicker.Control>\n\n <Portal>\n <ColorPicker.Positioner>\n <ColorPicker.Content>\n {showArea && <ColorPicker.Area />}\n\n {(showEyeDropper || showSliders) && (\n <HStack>\n {showEyeDropper && <ColorPicker.EyeDropper size=\"xs\" variant=\"outline\" />}\n {showSliders && <ColorPicker.Sliders />}\n </HStack>\n )}\n\n {swatches.length > 0 && (\n <ColorPicker.SwatchGroup>\n {swatches.map((swatch) => (\n <ColorPicker.SwatchTrigger key={swatch} value={swatch}>\n <ColorPicker.Swatch value={swatch} boxSize=\"4.5\" />\n </ColorPicker.SwatchTrigger>\n ))}\n </ColorPicker.SwatchGroup>\n )}\n </ColorPicker.Content>\n </ColorPicker.Positioner>\n </Portal>\n </ColorPicker.Root>\n\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport {\n Box,\n Button,\n Field,\n FileUpload,\n Float,\n HStack,\n Icon,\n IconButton,\n Input,\n Text,\n useFileUploadContext,\n} from '@chakra-ui/react'\nimport type { ReactElement, ReactNode } from 'react'\nimport { LuFile, LuUpload, LuX } from 'react-icons/lu'\nimport type { FieldTooltipMeta } from '../../types'\nimport { createField, FieldError, FieldLabel } from '../base'\n\n/**\n * Props for FileUpload field\n */\nexport interface FileUploadFieldProps {\n /** Field name */\n name?: string\n /** Field label */\n label?: string\n /** Helper text below the field */\n helperText?: string\n /** Required field */\n required?: boolean\n /** Disabled field */\n disabled?: boolean\n /** Tooltip for field label */\n tooltip?: FieldTooltipMeta\n\n /**\n * Accepted file types\n * @example \"image/*\"\n * @example [\"image/png\", \"image/jpeg\"]\n * @example \".pdf,.doc,.docx\"\n */\n accept?: string | string[]\n /** Maximum file size in bytes */\n maxFileSize?: number\n /** Maximum number of files (by default: 1) */\n maxFiles?: number\n /**\n * Display variant\n * - 'button': Simple trigger button\n * - 'dropzone': Drag & drop zone\n * - 'input': Input-like appearance\n */\n variant?: 'button' | 'dropzone' | 'input'\n /** Show file sizes in list */\n showSize?: boolean\n /** Allow removing files from list */\n clearable?: boolean\n /** Dropzone label text */\n dropzoneLabel?: ReactNode\n /** Dropzone description */\n dropzoneDescription?: ReactNode\n /** Button text (for 'button' variant) */\n buttonText?: ReactNode\n}\n\n/**\n * File list with image previews\n */\nfunction FileImageList({ clearable }: { clearable?: boolean }) {\n const fileUpload = useFileUploadContext()\n\n if (fileUpload.acceptedFiles.length === 0) {\n return null\n }\n\n return (\n <HStack wrap=\"wrap\" gap=\"3\" mt=\"2\">\n {fileUpload.acceptedFiles.map((file) => (\n <FileUpload.Item key={file.name} file={file} p=\"2\" width=\"auto\" pos=\"relative\">\n {clearable && (\n <Float placement=\"top-end\">\n <FileUpload.ItemDeleteTrigger asChild>\n <IconButton size=\"2xs\" variant=\"solid\" colorPalette=\"red\" rounded=\"full\">\n <LuX />\n </IconButton>\n </FileUpload.ItemDeleteTrigger>\n </Float>\n )}\n <FileUpload.ItemPreview type=\"image/*\" asChild>\n <FileUpload.ItemPreviewImage boxSize=\"16\" rounded=\"md\" objectFit=\"cover\" />\n </FileUpload.ItemPreview>\n <FileUpload.ItemPreview type=\".*\" asChild>\n <Icon fontSize=\"4xl\" color=\"fg.muted\">\n <LuFile />\n </Icon>\n </FileUpload.ItemPreview>\n </FileUpload.Item>\n ))}\n </HStack>\n )\n}\n\n/**\n * Standard file list (non-images)\n */\nfunction FileList({ showSize, clearable }: { showSize?: boolean; clearable?: boolean }) {\n const fileUpload = useFileUploadContext()\n\n if (fileUpload.acceptedFiles.length === 0) {\n return null\n }\n\n return (\n <FileUpload.ItemGroup mt=\"2\">\n {fileUpload.acceptedFiles.map((file) => (\n <FileUpload.Item key={file.name} file={file}>\n <FileUpload.ItemPreview asChild>\n <Icon fontSize=\"lg\" color=\"fg.muted\">\n <LuFile />\n </Icon>\n </FileUpload.ItemPreview>\n\n {showSize ? (\n <FileUpload.ItemContent>\n <FileUpload.ItemName />\n <FileUpload.ItemSizeText />\n </FileUpload.ItemContent>\n ) : (\n <FileUpload.ItemName flex=\"1\" />\n )}\n\n {clearable && (\n <FileUpload.ItemDeleteTrigger asChild>\n <IconButton variant=\"ghost\" color=\"fg.muted\" size=\"xs\">\n <LuX />\n </IconButton>\n </FileUpload.ItemDeleteTrigger>\n )}\n </FileUpload.Item>\n ))}\n </FileUpload.ItemGroup>\n )\n}\n\n/**\n * Form.Field.FileUpload - File upload field with multiple variants\n *\n * Supports uploading single or multiple files with drag & drop,\n * file preview and automatic form integration.\n *\n * @example Button variant (by default)\n * ```tsx\n * <Form.Field.FileUpload name=\"avatar\" label=\"Avatar\" accept=\"image/*\" />\n * ```\n *\n * @example Dropzone variant\n * ```tsx\n * <Form.Field.FileUpload\n * name=\"documents\"\n * label=\"Documents\"\n * variant=\"dropzone\"\n * maxFiles={5}\n * accept=\".pdf,.doc,.docx\"\n * dropzoneLabel=\"Drop files here\"\n * dropzoneDescription=\"PDF, DOC up to 10MB\"\n * />\n * ```\n *\n * @example Input variant\n * ```tsx\n * <Form.Field.FileUpload\n * name=\"file\"\n * label=\"Select file\"\n * variant=\"input\"\n * placeholder=\"Select file...\"\n * />\n * ```\n *\n * @example Multiple images with preview\n * ```tsx\n * <Form.Field.FileUpload\n * name=\"gallery\"\n * label=\"Gallery\"\n * variant=\"dropzone\"\n * accept=\"image/*\"\n * maxFiles={10}\n * showSize\n * clearable\n * />\n * ```\n */\nexport const FieldFileUpload = createField<FileUploadFieldProps, File[]>({\n displayName: 'FieldFileUpload',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const {\n accept,\n maxFileSize,\n maxFiles = 1,\n variant = 'button',\n showSize = false,\n clearable = true,\n dropzoneLabel = 'Drag and drop files here',\n dropzoneDescription,\n buttonText = 'Upload file',\n } = componentProps\n\n const placeholder = resolved.placeholder ?? 'Select file(s)'\n\n // Normalize accept to array for Chakra\n const normalizedAccept = accept\n ? typeof accept === 'string'\n ? accept.split(',').map((s) => s.trim())\n : accept\n : undefined\n\n // Check if working with images for preview\n const isImageUpload = normalizedAccept?.some((type) => type.startsWith('image/') || type === 'image/*')\n\n return (\n <Field.Root invalid={hasError} required={resolved.required} disabled={resolved.disabled}>\n <FieldLabel label={resolved.label} tooltip={resolved.tooltip} required={resolved.required} />\n\n <FileUpload.Root\n maxFiles={maxFiles}\n maxFileSize={maxFileSize}\n accept={normalizedAccept}\n disabled={resolved.disabled}\n onFileChange={(details) => {\n field.handleChange(details.acceptedFiles)\n }}\n data-field-name={fullPath}\n >\n <FileUpload.HiddenInput onBlur={field.handleBlur} />\n\n {variant === 'button' && (\n <>\n <FileUpload.Trigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <LuUpload />\n {buttonText}\n </Button>\n </FileUpload.Trigger>\n {isImageUpload ? (\n <FileImageList clearable={clearable} />\n ) : (\n <FileList showSize={showSize} clearable={clearable} />\n )}\n </>\n )}\n\n {variant === 'dropzone' && (\n <>\n <FileUpload.Dropzone>\n <Icon size=\"md\" color=\"fg.muted\">\n <LuUpload />\n </Icon>\n <FileUpload.DropzoneContent>\n <Box>{dropzoneLabel}</Box>\n {dropzoneDescription && <Text color=\"fg.muted\">{dropzoneDescription}</Text>}\n </FileUpload.DropzoneContent>\n </FileUpload.Dropzone>\n {isImageUpload ? (\n <FileImageList clearable={clearable} />\n ) : (\n <FileList showSize={showSize} clearable={clearable} />\n )}\n </>\n )}\n\n {variant === 'input' && (\n <Input asChild>\n <FileUpload.Trigger>\n <FileUpload.Context>\n {({ acceptedFiles }) => {\n if (acceptedFiles.length === 1) {\n return <span>{acceptedFiles[0].name}</span>\n }\n if (acceptedFiles.length > 1) {\n return <span>{acceptedFiles.length} files</span>\n }\n return <Text color=\"fg.subtle\">{placeholder}</Text>\n }}\n </FileUpload.Context>\n </FileUpload.Trigger>\n </Input>\n )}\n </FileUpload.Root>\n\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport { Box, Button, HStack, PinInput, Text } from '@chakra-ui/react'\nimport { type ReactElement, useCallback, useEffect, useState } from 'react'\nimport { useDeclarativeForm } from '../../form-context'\nimport type { DeclarativeFormContextValue, OTPInputFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * State for OTP field with timer\n */\ninterface OTPFieldState {\n /** Seconds counter until retry is available */\n countdown: number\n /** Whether resend is in progress */\n isResending: boolean\n /** Resend handler */\n handleResend: () => Promise<void>\n /** Formatted countdown (MM:SS) */\n formatCountdown: (seconds: number) => string\n /** Context declarative form for auto-submit */\n formContext: DeclarativeFormContextValue\n}\n\n/**\n * Form.Field.OTPInput - OTP input field with resend timer\n *\n * Renders a PIN input for OTP verification with optional resend functionality.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.OTPInput name=\"code\" label=\"Confirmation Code\" />\n * ```\n *\n * @example With resend\n * ```tsx\n * <Form.Field.OTPInput\n * name=\"code\"\n * length={6}\n * resendTimeout={60}\n * onResend={async () => { await sendCode() }}\n * autoSubmit\n * />\n * ```\n *\n * @example Alphanumeric input\n * ```tsx\n * <Form.Field.OTPInput name=\"code\" type=\"alphanumeric\" />\n * ```\n */\nexport const FieldOTPInput = createField<OTPInputFieldProps, string, OTPFieldState>({\n displayName: 'FieldOTPInput',\n\n useFieldState: (props) => {\n const [countdown, setCountdown] = useState(0)\n const [isResending, setIsResending] = useState(false)\n\n // Countdown timer effect\n useEffect(() => {\n if (countdown <= 0) {\n return\n }\n\n const timer = setInterval(() => {\n setCountdown((prev) => prev - 1)\n }, 1000)\n\n return () => clearInterval(timer)\n }, [countdown])\n\n const handleResend = useCallback(async () => {\n if (!props.onResend || countdown > 0) {\n return\n }\n\n setIsResending(true)\n try {\n await props.onResend()\n setCountdown(props.resendTimeout ?? 60)\n } finally {\n setIsResending(false)\n }\n }, [props.onResend, countdown, props.resendTimeout])\n\n // Format countdown as MM:SS\n const formatCountdown = (seconds: number): string => {\n const mins = Math.floor(seconds / 60)\n const secs = seconds % 60\n return `${mins}:${secs.toString().padStart(2, '0')}`\n }\n\n // Form context for auto-submit (hook called at top level)\n const formContext = useDeclarativeForm()\n\n return { countdown, isResending, handleResend, formatCountdown, formContext }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps, fieldState }): ReactElement => {\n const { length = 6, autoSubmit = false, type = 'numeric', mask = false, onResend } = componentProps\n const { countdown, isResending, handleResend, formatCountdown, formContext } = fieldState\n\n const value = (field.state.value as string) ?? ''\n\n const handleValueComplete = (details: { value: string[]; valueAsString: string }) => {\n field.handleChange(details.valueAsString)\n\n // Auto-submit when filled\n if (autoSubmit && details.valueAsString.length === length) {\n formContext.form.handleSubmit()\n }\n }\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <Box>\n <PinInput.Root\n value={value.split('')}\n onValueComplete={handleValueComplete}\n onValueChange={(details) => field.handleChange(details.valueAsString)}\n count={length}\n type={type}\n mask={mask}\n otp\n >\n <PinInput.Control>\n <HStack gap={2}>\n {Array.from({ length }).map((_, index) => (\n <PinInput.Input key={index} index={index} data-field-name={index === 0 ? fullPath : undefined} />\n ))}\n </HStack>\n </PinInput.Control>\n <PinInput.HiddenInput />\n </PinInput.Root>\n\n {onResend && (\n <HStack mt={3} justify=\"center\">\n {countdown > 0 ? (\n <Text fontSize=\"sm\" color=\"fg.muted\">\n Redo in {formatCountdown(countdown)}\n </Text>\n ) : (\n <Button variant=\"ghost\" size=\"sm\" onClick={handleResend} disabled={isResending} loading={isResending}>\n Submit again\n </Button>\n )}\n </HStack>\n )}\n </Box>\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { Field, Group, Input, Text } from '@chakra-ui/react'\nimport { useCallback, type ReactElement } from 'react'\nimport { withMask } from 'use-mask-input'\nimport type { PhoneCountry, PhoneFieldProps } from '../../types'\nimport { createField, FieldError, FieldLabel } from '../base'\n\n/**\n * Phone masks by country\n */\nconst PHONE_MASKS: Record<PhoneCountry, string | string[]> = {\n RU: '+7 (999) 999-99-99',\n US: '+1 (999) 999-9999',\n UK: '+44 9999 999999',\n DE: '+49 999 99999999',\n FR: '+33 9 99 99 99 99',\n IT: '+39 999 999 9999',\n ES: '+34 999 99 99 99',\n CN: '+86 999 9999 9999',\n JP: '+81 99 9999 9999',\n KR: '+82 99 9999 9999',\n BY: '+375 (99) 999-99-99',\n KZ: '+7 (999) 999-99-99',\n UA: '+380 (99) 999-99-99',\n}\n\n/**\n * Country flags\n */\nconst COUNTRY_FLAGS: Record<PhoneCountry, string> = {\n RU: '🇷🇺',\n US: '🇺🇸',\n UK: '🇬🇧',\n DE: '🇩🇪',\n FR: '🇫🇷',\n IT: '🇮🇹',\n ES: '🇪🇸',\n CN: '🇨🇳',\n JP: '🇯🇵',\n KR: '🇰🇷',\n BY: '🇧🇾',\n KZ: '🇰🇿',\n UA: '🇺🇦',\n}\n\n/**\n * State for phone field\n */\ninterface PhoneFieldState {\n /** Ref callback for applying mask */\n maskRef: (element: HTMLInputElement | null) => void\n}\n\n/**\n * Form.Field.Phone - Phone input with country mask\n *\n * Renders phone field with automatic mask based on country.\n *\n * @example Russian phone (by default)\n * ```tsx\n * <Form.Field.Phone name=\"phone\" label=\"Phone\" />\n * ```\n *\n * @example US phone with flag\n * ```tsx\n * <Form.Field.Phone name=\"phone\" country=\"US\" showFlag />\n * ```\n *\n * @example Return value without mask\n * ```tsx\n * <Form.Field.Phone name=\"phone\" autoUnmask />\n * ```\n */\nexport const FieldPhone = createField<PhoneFieldProps, string, PhoneFieldState>({\n displayName: 'FieldPhone',\n\n useFieldState: (props) => {\n const { country = 'RU', autoUnmask = false } = props\n const mask = PHONE_MASKS[country]\n\n // Create ref callback for applying mask\n const maskRef = useCallback(\n (element: HTMLInputElement | null) => {\n if (element && mask) {\n const maskCallback = withMask(mask, {\n showMaskOnFocus: true,\n clearIncomplete: true,\n autoUnmask,\n })\n maskCallback(element)\n }\n },\n [mask, autoUnmask]\n )\n\n return { maskRef }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps, fieldState }): ReactElement => {\n const { country = 'RU', showFlag = false } = componentProps\n const flag = COUNTRY_FLAGS[country]\n const mask = PHONE_MASKS[country]\n\n const value = (field.state.value as string) ?? ''\n const resolvedPlaceholder = resolved.placeholder ?? mask?.toString().replace(/9/g, '_')\n\n return (\n <Field.Root\n invalid={hasError}\n required={resolved.required}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n >\n <FieldLabel label={resolved.label} tooltip={resolved.tooltip} required={resolved.required} />\n <Group attached>\n {showFlag && (\n <Text px={3} display=\"flex\" alignItems=\"center\" bg=\"bg.muted\" borderWidth=\"1px\" borderRightWidth=\"0\">\n {flag}\n </Text>\n )}\n <Input\n ref={fieldState.maskRef}\n value={value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n placeholder={resolvedPlaceholder}\n data-field-name={fullPath}\n type=\"tel\"\n inputMode=\"tel\"\n autoComplete=\"tel\"\n />\n </Group>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport { PinInput } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { BaseFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Props for PinInput field\n */\nexport interface PinInputFieldProps extends BaseFieldProps {\n /** Number of input boxes (default: 4) */\n count?: number\n /** Mask as password */\n mask?: boolean\n /** Enable OTP autofill */\n otp?: boolean\n /** Type input: numeric, alphanumeric, alphabetic (by default: numeric) */\n type?: 'numeric' | 'alphanumeric' | 'alphabetic'\n /** Size: 2xs, xs, sm, md, lg, xl, 2xl (by default: md) */\n size?: '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n /** Variant: outline, subtle, flushed (default: outline) */\n variant?: 'outline' | 'subtle' | 'flushed'\n /** Attach inputs together (no gap) */\n attached?: boolean\n /** Callback when all fields are filled */\n onComplete?: (value: string) => void\n}\n\n/**\n * Form.Field.PinInput - PIN/OTP code input field\n *\n * Renders a series of single-character inputs for PIN codes, OTP etc.\n * Form value is stored as a string (e.g., \"1234\").\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.PinInput name=\"pin\" label=\"Enter PIN\" />\n * ```\n *\n * @example OTP with 6 digits\n * ```tsx\n * <Form.Field.PinInput\n * name=\"otp\"\n * label=\"Confirmation Code\"\n * count={6}\n * otp\n * onComplete={(code) => verifyCode(code)}\n * />\n * ```\n *\n * @example Masked as password\n * ```tsx\n * <Form.Field.PinInput name=\"secret\" mask count={6} />\n * ```\n */\nexport const FieldPinInput = createField<PinInputFieldProps, string>({\n displayName: 'FieldPinInput',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const {\n count = 4,\n mask,\n otp,\n type = 'numeric',\n size = 'md',\n variant = 'outline',\n attached,\n onComplete,\n } = componentProps\n\n // Convert string to array for PinInput\n const stringValue = (field.state.value as string) ?? ''\n const arrayValue = stringValue.split('').slice(0, count)\n // Pad with empty strings up to count\n while (arrayValue.length < count) {\n arrayValue.push('')\n }\n\n const handleValueChange = (details: { value: string[] }) => {\n // Convert array back to string\n const newValue = details.value.join('')\n field.handleChange(newValue)\n }\n\n const handleValueComplete = (details: { value: string[] }) => {\n const completeValue = details.value.join('')\n onComplete?.(completeValue)\n }\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <PinInput.Root\n value={arrayValue}\n onValueChange={handleValueChange}\n onValueComplete={handleValueComplete}\n placeholder={resolved.placeholder}\n mask={mask}\n otp={otp}\n type={type}\n size={size}\n variant={variant}\n attached={attached}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n invalid={hasError}\n count={count}\n onBlur={field.handleBlur}\n data-field-name={fullPath}\n >\n <PinInput.HiddenInput />\n <PinInput.Control>\n {Array.from({ length: count }).map((_, index) => (\n <PinInput.Input key={index} index={index} />\n ))}\n </PinInput.Control>\n </PinInput.Root>\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { Box, Field, Input, List, Spinner, Text } from '@chakra-ui/react'\nimport { type ReactElement, useCallback, useEffect, useRef, useState } from 'react'\nimport { useDeclarativeFormOptional } from '../../form-context'\nimport type { CityFieldProps } from '../../types'\nimport { createField, FieldError, FieldLabel, useDebounce } from '../base'\nimport { createDaDataProvider } from './providers'\nimport type { AddressProvider, AddressSuggestion } from './providers'\n\n/**\n * Resolve address provider from props, context, token, or env fallback.\n */\nfunction useCityProvider(\n propProvider?: AddressProvider,\n token?: string,\n): AddressProvider | null {\n const formContext = useDeclarativeFormOptional()\n\n // Priority: prop > createForm context > token > env\n if (propProvider) return propProvider\n if (formContext?.addressProvider) return formContext.addressProvider\n if (token) return createDaDataProvider({ token })\n\n // Backward compatible: try env variable\n const envKey = typeof window !== 'undefined' ? process.env.NEXT_PUBLIC_DADATA_API_KEY : ''\n if (envKey) return createDaDataProvider({ token: envKey })\n\n return null\n}\n\n/**\n * City field state\n */\ninterface CityFieldState {\n inputValue: string\n setInputValue: (value: string) => void\n suggestions: AddressSuggestion[]\n setSuggestions: (suggestions: AddressSuggestion[]) => void\n isLoading: boolean\n setIsLoading: (loading: boolean) => void\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n highlightedIndex: number\n setHighlightedIndex: (index: number) => void\n containerRef: React.RefObject<HTMLDivElement | null>\n debouncedQuery: string\n}\n\n/**\n * Form.Field.City — city selection with autocomplete suggestions.\n *\n * Supports pluggable address providers. DaData (Russia) is built-in;\n * pass any `AddressProvider` for other geocoding services.\n * Uses bounds to restrict suggestions to city/settlement level.\n *\n * @example With provider (recommended)\n * ```tsx\n * <Form.Field.City name=\"city\" label=\"City\" provider={dadata} />\n * ```\n *\n * @example With token (backward compatible)\n * ```tsx\n * <Form.Field.City name=\"city\" token=\"your-token\" />\n * ```\n *\n * @example Auto-detect from env (NEXT_PUBLIC_DADATA_API_KEY)\n * ```tsx\n * <Form.Field.City name=\"city\" label=\"City\" />\n * ```\n */\nexport const FieldCity = createField<CityFieldProps, string, CityFieldState>({\n displayName: 'FieldCity',\n\n useFieldState: (props) => {\n const { provider: propProvider, token, minChars = 2, debounceMs = 300 } = props\n const provider = useCityProvider(propProvider, token)\n\n const [inputValue, setInputValue] = useState('')\n const [suggestions, setSuggestions] = useState<AddressSuggestion[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [isOpen, setIsOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const debouncedQuery = useDebounce(inputValue, debounceMs)\n // Flag: just selected city, skip next fetch\n const justSelectedRef = useRef(false)\n // Flag: inputValue already initialized from field value\n const initializedRef = useRef(false)\n\n // Fetch city suggestions from provider\n const fetchSuggestions = useCallback(\n async (query: string) => {\n if (query.length < minChars || !provider) {\n setSuggestions([])\n return\n }\n\n setIsLoading(true)\n try {\n const results = await provider.getSuggestions(query, {\n count: 7,\n bounds: { from: 'city', to: 'settlement' },\n })\n setSuggestions(results)\n setIsOpen(results.length > 0)\n } catch (error) {\n console.error('Error loading city suggestions:', error)\n setSuggestions([])\n } finally {\n setIsLoading(false)\n }\n },\n [provider, minChars],\n )\n\n // Load on debounced query change\n useEffect(() => {\n if (justSelectedRef.current) {\n justSelectedRef.current = false\n return\n }\n\n if (debouncedQuery) {\n fetchSuggestions(debouncedQuery)\n } else {\n setSuggestions([])\n setIsOpen(false)\n }\n }, [debouncedQuery, fetchSuggestions])\n\n // Close on click outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n return {\n inputValue,\n setInputValue,\n suggestions,\n setSuggestions,\n isLoading,\n setIsLoading,\n isOpen,\n setIsOpen,\n highlightedIndex,\n setHighlightedIndex,\n containerRef,\n debouncedQuery,\n justSelectedRef,\n initializedRef,\n } as CityFieldState & { justSelectedRef: React.RefObject<boolean>; initializedRef: React.RefObject<boolean> }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, fieldState }): ReactElement => {\n const {\n inputValue,\n setInputValue,\n suggestions,\n setSuggestions,\n isLoading,\n isOpen,\n setIsOpen,\n highlightedIndex,\n setHighlightedIndex,\n containerRef,\n } = fieldState\n const { justSelectedRef, initializedRef } = fieldState as CityFieldState & {\n justSelectedRef: React.RefObject<boolean>\n initializedRef: React.RefObject<boolean>\n }\n\n const fieldValue = field.state.value as string | undefined\n\n // Initialize input value from field (once, without useEffect)\n if (!initializedRef.current && fieldValue && fieldValue !== inputValue) {\n initializedRef.current = true\n setInputValue(fieldValue)\n }\n\n // Handler for city selection\n const handleSelect = (suggestion: AddressSuggestion) => {\n // Extract city name from provider data, fallback to suggestion value\n const cityName = (suggestion.data?.city as string)\n || (suggestion.data?.settlement as string)\n || suggestion.value\n justSelectedRef.current = true\n setInputValue(cityName)\n setIsOpen(false)\n setSuggestions([])\n field.handleChange(cityName)\n }\n\n // Keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isOpen || suggestions.length === 0) {\n return\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIndex(highlightedIndex < suggestions.length - 1 ? highlightedIndex + 1 : 0)\n break\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIndex(highlightedIndex > 0 ? highlightedIndex - 1 : suggestions.length - 1)\n break\n case 'Enter':\n e.preventDefault()\n if (highlightedIndex >= 0) {\n handleSelect(suggestions[highlightedIndex])\n }\n break\n case 'Escape':\n setIsOpen(false)\n break\n }\n }\n\n return (\n <Field.Root\n invalid={hasError}\n required={resolved.required}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n >\n <FieldLabel label={resolved.label} tooltip={resolved.tooltip} required={resolved.required} />\n <Box ref={containerRef} position=\"relative\" width=\"100%\">\n <Input\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value)\n setHighlightedIndex(-1)\n // If user erases text, update form value\n if (!e.target.value) {\n field.handleChange('')\n }\n }}\n onFocus={() => {\n if (suggestions.length > 0) {\n setIsOpen(true)\n }\n }}\n onBlur={() => {\n // If user typed without selecting from suggestions — save as is\n if (inputValue && inputValue !== (field.state.value as string)) {\n field.handleChange(inputValue)\n }\n field.handleBlur()\n }}\n onKeyDown={handleKeyDown}\n placeholder={resolved.placeholder ?? 'Enter city'}\n data-field-name={fullPath}\n />\n {isLoading && (\n <Box position=\"absolute\" right={3} top=\"50%\" transform=\"translateY(-50%)\">\n <Spinner size=\"sm\" />\n </Box>\n )}\n {isOpen && suggestions.length > 0 && (\n <List.Root\n position=\"absolute\"\n zIndex={10}\n width=\"100%\"\n bg=\"bg.panel\"\n borderWidth=\"1px\"\n borderRadius=\"md\"\n shadow=\"md\"\n maxH=\"250px\"\n overflowY=\"auto\"\n mt={1}\n listStyle=\"none\"\n >\n {suggestions.map((suggestion, index) => (\n <List.Item\n key={`${suggestion.value}-${index}`}\n px={3}\n py={2}\n cursor=\"pointer\"\n bg={highlightedIndex === index ? 'bg.muted' : undefined}\n _hover={{ bg: 'bg.muted' }}\n onClick={() => handleSelect(suggestion)}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n <Text fontSize=\"sm\">{suggestion.label}</Text>\n </List.Item>\n ))}\n </List.Root>\n )}\n </Box>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n"]}
|
package/chunk-HWVOFWAT.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/form-group.tsx","../src/lib/declarative/form-context.tsx","../src/lib/declarative/form-fields/base/field-tooltip.tsx","../src/lib/declarative/form-fields/base/field-label.tsx","../src/lib/declarative/zod-utils.ts","../src/lib/declarative/schema-constraints.ts","../src/lib/declarative/schema-meta.ts","../src/lib/declarative/form-fields/base/base-field.tsx","../src/lib/declarative/form-fields/base/use-debounce.ts","../src/lib/declarative/form-fields/base/use-async-search.ts","../src/lib/declarative/form-fields/base/field-error-boundary.tsx","../src/lib/declarative/form-fields/base/field-utils.ts","../src/lib/declarative/constraint-hints.ts","../src/lib/declarative/form-fields/base/use-resolved-field-props.ts","../src/lib/declarative/form-fields/base/create-field.tsx","../src/lib/declarative/form-fields/base/field-wrapper.tsx","../src/lib/declarative/form-fields/base/selection-field-label.tsx","../src/lib/declarative/form-fields/base/use-grouped-options.ts"],"names":["createContext","useContext","ChakraTooltip","jsx","jsxs","getSchemaAtPath","useState","Box","Text","Field","FieldWrapper","HStack"],"mappings":";;;;;;AAcA,IAAM,gBAAA,GAAmB,cAA4C,IAAI,CAAA;AAsBlE,SAAS,SAAA,CAAU,EAAE,IAAA,EAAM,QAAA,EAAS,EAAmB;AAC5D,EAAA,MAAM,aAAA,GAAgB,WAAW,gBAAgB,CAAA;AAEjD,EAAA,MAAM,YAAA,GAAsC;AAAA,IAC1C,YAAA,EAAc,IAAA;AAAA,IACd,MAAM,aAAA,GAAgB,CAAA,EAAG,cAAc,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK;AAAA,GAC1D;AAEA,EAAA,2BAAQ,gBAAA,CAAiB,QAAA,EAAjB,EAA0B,KAAA,EAAO,cAAe,QAAA,EAAS,CAAA;AACnE;AAiBO,SAAS,YAAA,GAA6C;AAC3D,EAAA,OAAO,WAAW,gBAAgB,CAAA;AACpC;ACvDO,IAAM,sBAAA,GAAyBA,cAAkD,IAAI;AAMrF,SAAS,kBAAA,GAAkD;AAChE,EAAA,MAAM,OAAA,GAAUC,WAAW,sBAAsB,CAAA;AACjD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,0BAAA,GAAiE;AAC/E,EAAA,OAAOA,WAAW,sBAAsB,CAAA;AAC1C;ACPO,SAAS,aAAa,EAAE,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,QAAO,EAAoC;AACrG,EAAA,uBACE,IAAA,CAACC,OAAA,CAAc,IAAA,EAAd,EAAmB,SAAA,EAAW,KAAK,WAAA,EAAa,EAAE,SAAA,EAAW,KAAA,EAAM,EAClE,QAAA,EAAA;AAAA,oBAAAC,IAACD,OAAA,CAAc,OAAA,EAAd,EAAsB,OAAA,EAAO,MAC5B,QAAA,kBAAAC,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,GAAA;AAAA,QACL,MAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAM,UAAA;AAAA,QACN,MAAA,EAAQ,EAAE,KAAA,EAAO,iBAAA,EAAkB;AAAA,QACnC,UAAA,EAAW,YAAA;AAAA,QACX,OAAA,EAAQ,aAAA;AAAA,QAER,QAAA,kBAAAA,GAAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,KAC1B,EACF,CAAA;AAAA,oBACAA,GAAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAACD,OAAA,CAAc,UAAA,EAAd,EACC,QAAA,kBAAA,IAAA,CAACA,OAAA,CAAc,OAAA,EAAd,EACC,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAACD,QAAc,KAAA,EAAd,EACC,0BAAAC,GAAAA,CAACD,OAAA,CAAc,QAAA,EAAd,EAAuB,CAAA,EAC1B,CAAA;AAAA,sBACA,IAAA,CAAC,UAAO,KAAA,EAAM,OAAA,EAAQ,KAAK,CAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,CAAA,EAAG,CAAA,EAC3C,QAAA,EAAA;AAAA,QAAA,KAAA,oBACCC,GAAAA,CAAC,IAAA,EAAA,EAAK,YAAW,UAAA,EAAW,QAAA,EAAS,MAClC,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,wBAEFA,GAAAA,CAAC,IAAA,EAAA,EAAK,QAAA,EAAS,MAAM,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,QAChC,OAAA,oBACC,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAG,eAAA,EAAgB,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,YAAA,EAAa,IAAA,EAAK,CAAA,EAAE,MAAA,EACxD,QAAA,EAAA;AAAA,0BAAAA,IAAC,IAAA,EAAA,EAAK,QAAA,EAAS,IAAA,EAAK,KAAA,EAAM,YAAW,QAAA,EAAA,UAAA,EAErC,CAAA;AAAA,0BACA,IAAA,CAAC,IAAA,EAAA,EAAK,QAAA,EAAS,IAAA,EAAK,WAAU,QAAA,EAAS,QAAA,EAAA;AAAA,YAAA,GAAA;AAAA,YAC9B,OAAA;AAAA,YAAQ;AAAA,WAAA,EACjB;AAAA,SAAA,EACF,CAAA;AAAA,QAED,MAAA,oBACCA,GAAAA,CAAC,IAAA,EAAA,EAAK,UAAS,IAAA,EAAK,KAAA,EAAM,YACvB,QAAA,EAAA,MAAA,EACH;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF,GACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACpCO,SAAS,UAAA,CAAW,EAAE,KAAA,EAAO,OAAA,EAAS,UAAS,EAAyC;AAC7F,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEC,IAAAA,CAAC,KAAA,CAAM,KAAA,EAAN,EACE,QAAA,EAAA;AAAA,IAAA,OAAA,mBACCA,IAAAA,CAAC,MAAA,EAAA,EAAO,GAAA,EAAK,CAAA,EACX,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACbA,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAG,OAAA,EAAS;AAAA,KAAA,EAC7B,CAAA,GAEA,KAAA;AAAA,IAED,QAAA,oBAAYA,GAAAA,CAAC,KAAA,CAAM,mBAAN,EAAwB;AAAA,GAAA,EACxC,CAAA;AAEJ;;;ACvBO,SAAS,aAAa,MAAA,EAAkB;AAC7C,EAAA,IAAI,CAAC,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK;AACtB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAA;AAI7B,EAAA,IAAI,IAAA,KAAS,UAAA,IAAc,IAAA,KAAS,UAAA,IAAc,SAAS,SAAA,EAAW;AACpE,IAAA,MAAM,QAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,KAAA,IAAS,MAAA,CAAO,KAAK,GAAA,CAAI,SAAA;AACvD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,aAAa,KAAK,CAAA;AAAA,IAC3B;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAcO,SAAS,yBAAyB,MAAA,EAA2B;AAClE,EAAA,IAAI,CAAC,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK;AACtB,IAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAK;AAAA,EAClC;AAEA,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAA;AAG7B,EAAA,IAAI,IAAA,KAAS,UAAA,IAAc,IAAA,KAAS,UAAA,EAAY;AAC9C,IAAA,MAAM,QAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,KAAA,IAAS,MAAA,CAAO,KAAK,GAAA,CAAI,SAAA;AACvD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,MAAA,GAAS,yBAAyB,KAAK,CAAA;AAC7C,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,UAAU,KAAA,EAAM;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,SAAA,EAAW;AAEtB,IAAA,MAAM,QAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,KAAA,IAAS,MAAA,CAAO,KAAK,GAAA,CAAI,SAAA;AACvD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,MAAA,GAAS,yBAAyB,KAAK,CAAA;AAC7C,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,UAAU,KAAA,EAAM;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAK;AAClC;;;ACCO,SAAS,iBAAA,CAAkB,QAAa,IAAA,EAA8B;AAC3E,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,EAAE,YAAY,SAAA,EAAU;AAAA,EACjC;AAEA,EAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,MAAA,EAAQ,IAAI,CAAA;AAChD,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,EAAE,YAAY,SAAA,EAAU;AAAA,EACjC;AAEA,EAAA,MAAM,GAAA,GAAM,YAAY,IAAA,EAAM,GAAA;AAC9B,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,EAAE,YAAY,SAAA,EAAU;AAAA,EACjC;AAEA,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,IAAU,EAAC;AAE9B,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA;AACH,MAAA,OAAO;AAAA,QACL,UAAA,EAAY,QAAA;AAAA,QACZ,MAAA,EAAQ,yBAAyB,MAAM;AAAA,OACzC;AAAA,IAEF,KAAK,QAAA;AACH,MAAA,OAAO;AAAA,QACL,UAAA,EAAY,QAAA;AAAA,QACZ,MAAA,EAAQ,yBAAyB,MAAM;AAAA,OACzC;AAAA,IAEF,KAAK,MAAA;AACH,MAAA,OAAO;AAAA,QACL,UAAA,EAAY,MAAA;AAAA,QACZ,IAAA,EAAM,uBAAuB,MAAM;AAAA,OACrC;AAAA,IAEF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,UAAA,EAAY,OAAA;AAAA,QACZ,KAAA,EAAO,wBAAwB,MAAM;AAAA,OACvC;AAAA,IAEF,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,YAAY,SAAA,EAAU;AAAA,IAEjC,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,YAAY,MAAA,EAAO;AAAA,IAE9B;AACE,MAAA,OAAO,EAAE,YAAY,SAAA,EAAU;AAAA;AAErC;AAwBA,SAAS,kBAAA,CAAqC,QAAe,QAAA,EAA8C;AACzG,EAAA,MAAM,cAAc,EAAC;AAErB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,EAAM,GAAA;AAC7B,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA;AACvC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,aAAa,QAAQ,CAAA;AAAA,IAC/B;AAAA,EACF;AAEA,EAAA,OAAO,WAAA;AACT;AAMA,IAAM,wBAAA,GAA+E;AAAA,EACnF,UAAA,EAAY,CAAC,CAAA,EAAG,GAAA,KAAQ;AACtB,IAAA,CAAA,CAAE,YAAY,GAAA,CAAI,OAAA;AAAA,EACpB,CAAA;AAAA,EACA,UAAA,EAAY,CAAC,CAAA,EAAG,GAAA,KAAQ;AACtB,IAAA,CAAA,CAAE,YAAY,GAAA,CAAI,OAAA;AAAA,EACpB,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,CAAA,EAAG,GAAA,KAAQ;AAEzB,IAAA,CAAA,CAAE,YAAY,GAAA,CAAI,MAAA;AAClB,IAAA,CAAA,CAAE,YAAY,GAAA,CAAI,MAAA;AAAA,EACpB,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,CAAA,EAAG,GAAA,KAAQ;AAEzB,IAAA,IAAI,GAAA,CAAI,WAAW,OAAA,EAAS;AAC1B,MAAA,CAAA,CAAE,SAAA,GAAY,OAAA;AAAA,IAChB,CAAA,MAAA,IAAW,GAAA,CAAI,MAAA,KAAW,KAAA,EAAO;AAC/B,MAAA,CAAA,CAAE,SAAA,GAAY,KAAA;AAAA,IAChB,WAAW,GAAA,CAAI,MAAA,KAAW,OAAA,IAAW,GAAA,CAAI,SAAS,MAAA,EAAQ;AACxD,MAAA,CAAA,CAAE,OAAA,GAAU,IAAI,OAAA,CAAQ,MAAA;AAAA,IAC1B;AAAA,EACF;AACF,CAAA;AAMA,SAAS,yBAAyB,MAAA,EAAqC;AACrE,EAAA,OAAO,kBAAA,CAAmB,QAAQ,wBAAwB,CAAA;AAC5D;AAMA,IAAM,wBAAA,GAA+E;AAAA,EACnF,YAAA,EAAc,CAAC,CAAA,EAAG,GAAA,KAAQ;AAExB,IAAA,CAAA,CAAE,MAAM,GAAA,CAAI,KAAA;AAAA,EACd,CAAA;AAAA,EACA,SAAA,EAAW,CAAC,CAAA,EAAG,GAAA,KAAQ;AAErB,IAAA,CAAA,CAAE,MAAM,GAAA,CAAI,KAAA;AAAA,EACd,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,CAAA,EAAG,GAAA,KAAQ;AAEzB,IAAA,IAAI,GAAA,CAAI,WAAW,SAAA,EAAW;AAC5B,MAAA,CAAA,CAAE,SAAA,GAAY,IAAA;AACd,MAAA,CAAA,CAAE,IAAA,GAAO,CAAA;AAAA,IACX;AAAA,EACF,CAAA;AAAA,EACA,WAAA,EAAa,CAAC,CAAA,EAAG,GAAA,KAAQ;AACvB,IAAA,CAAA,CAAE,OAAO,GAAA,CAAI,KAAA;AAAA,EACf;AACF,CAAA;AAMA,SAAS,yBAAyB,MAAA,EAAqC;AACrE,EAAA,OAAO,kBAAA,CAAmB,QAAQ,wBAAwB,CAAA;AAC5D;AAMA,IAAM,sBAAA,GAA2E;AAAA,EAC/E,YAAA,EAAc,CAAC,CAAA,EAAG,GAAA,KAAQ;AAExB,IAAA,IAAI,IAAI,KAAA,EAAO;AACb,MAAA,CAAA,CAAE,GAAA,GAAM,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AAAA,IACnC;AAAA,EACF,CAAA;AAAA,EACA,SAAA,EAAW,CAAC,CAAA,EAAG,GAAA,KAAQ;AAErB,IAAA,IAAI,IAAI,KAAA,EAAO;AACb,MAAA,CAAA,CAAE,GAAA,GAAM,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AAAA,IACnC;AAAA,EACF;AACF,CAAA;AAMA,SAAS,uBAAuB,MAAA,EAAmC;AACjE,EAAA,OAAO,kBAAA,CAAmB,QAAQ,sBAAsB,CAAA;AAC1D;AAMA,IAAM,uBAAA,GAA6E;AAAA,EACjF,UAAA,EAAY,CAAC,CAAA,EAAG,GAAA,KAAQ;AACtB,IAAA,CAAA,CAAE,WAAW,GAAA,CAAI,OAAA;AAAA,EACnB,CAAA;AAAA,EACA,UAAA,EAAY,CAAC,CAAA,EAAG,GAAA,KAAQ;AACtB,IAAA,CAAA,CAAE,WAAW,GAAA,CAAI,OAAA;AAAA,EACnB,CAAA;AAAA,EACA,MAAA,EAAQ,CAAC,CAAA,EAAG,GAAA,KAAQ;AAClB,IAAA,CAAA,CAAE,WAAW,GAAA,CAAI,MAAA;AACjB,IAAA,CAAA,CAAE,WAAW,GAAA,CAAI,MAAA;AAAA,EACnB;AACF,CAAA;AAMA,SAAS,wBAAwB,MAAA,EAAoC;AACnE,EAAA,OAAO,kBAAA,CAAmB,QAAQ,uBAAuB,CAAA;AAC3D;AAWA,SAAS,eAAA,CAAgB,QAAa,IAAA,EAAmB;AACvD,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,EAAM;AACpB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,IAAI,OAAA,GAAU,MAAA;AAEd,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,OAAA,GAAU,aAAa,OAAO,CAAA;AAE9B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AACtB,MAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,GAAA,EAAK,IAAA,KAAS,OAAA,EAAS;AACvC,QAAA,OAAA,GAAU,OAAA,CAAQ,KAAK,GAAA,CAAI,OAAA;AAAA,MAC7B;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,GAAA,EAAK,IAAA,KAAS,QAAA,EAAU;AACxC,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,KAAA;AAC/B,MAAA,IAAI,KAAA,IAAS,QAAQ,KAAA,EAAO;AAC1B,QAAA,OAAA,GAAU,MAAM,IAAI,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,aAAa,OAAO,CAAA;AAC7B;AAOA,SAAS,gBAAgB,KAAA,EAAoB;AAC3C,EAAA,IAAI,IAAA;AAEJ,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,IAAA,GAAO,KAAA;AAAA,EACT,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,IAAA,IAAA,GAAO,IAAI,KAAK,KAAK,CAAA;AAAA,EACvB,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,IAAA,IAAA,GAAO,IAAI,KAAK,KAAK,CAAA;AAAA,EACvB,CAAA,MAAO;AACL,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AACzB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,QAAA,KAAa,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACzD,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,GAAG,CAAA,CAAA;AAChC;;;ACzVO,SAAS,YAAA,CAAa,QAAa,IAAA,EAA+B;AACvE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,EAAE,UAAU,KAAA,EAAM;AAAA,EAC3B;AAEA,EAAA,MAAM,MAAA,GAASE,gBAAAA,CAAgB,MAAA,EAAQ,IAAI,CAAA;AAC3C,EAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,IAAA,OAAO,EAAE,UAAU,KAAA,EAAM;AAAA,EAC3B;AAIA,EAAA,MAAM,cAAc,MAAA,CAAO,MAAA;AAC3B,EAAA,MAAM,OAAO,OAAO,WAAA,EAAa,SAAS,UAAA,GAAa,WAAA,CAAY,MAAK,GAAI,MAAA;AAE5E,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,EAAM,EAAA;AAAA,IACV,UAAU,MAAA,CAAO;AAAA,GACnB;AACF;AAcA,SAAS,mBAAmB,MAAA,EAAkB;AAC5C,EAAA,IAAI,CAAC,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK;AACtB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAA;AAG7B,EAAA,IAAI,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,WAAA,IAAe,SAAS,YAAA,EAAc;AACvE,IAAA,MAAM,QAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,KAAA,IAAS,MAAA,CAAO,KAAK,GAAA,CAAI,MAAA;AACvD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,IACjC;AAAA,EACF;AAGA,EAAA,IAAI,SAAS,UAAA,EAAY;AACvB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,EAAA;AAC9B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,IACjC;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAQA,SAASA,gBAAAA,CAAgB,QAAa,IAAA,EAAgC;AACpE,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,EAAM;AACpB,IAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAK;AAAA,EAClC;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,IAAI,OAAA,GAAU,MAAA;AACd,EAAA,IAAI,UAAA,GAAa,IAAA;AAEjB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AAExB,IAAA,OAAA,GAAU,mBAAmB,OAAO,CAAA;AAEpC,IAAA,MAAM,SAAA,GAAY,yBAAyB,OAAO,CAAA;AAClD,IAAA,OAAA,GAAU,SAAA,CAAU,MAAA;AAEpB,IAAA,IAAI,CAAC,UAAU,QAAA,EAAU;AACvB,MAAA,UAAA,GAAa,KAAA;AAAA,IACf;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAW,QAAA,EAAU,KAAA,EAAM;AAAA,IAC9C;AAGA,IAAA,OAAA,GAAU,mBAAmB,OAAO,CAAA;AAGpC,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AAEtB,MAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,GAAA,EAAK,IAAA,KAAS,OAAA,EAAS;AACvC,QAAA,OAAA,GAAU,OAAA,CAAQ,KAAK,GAAA,CAAI,OAAA;AAAA,MAC7B;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,GAAA,EAAK,IAAA,KAAS,QAAA,EAAU;AACxC,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,KAAA;AAC/B,MAAA,IAAI,KAAA,IAAS,QAAQ,KAAA,EAAO;AAC1B,QAAA,OAAA,GAAU,MAAM,IAAI,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAW,QAAA,EAAU,KAAA,EAAM;AAAA,MAC9C;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAW,QAAA,EAAU,KAAA,EAAM;AAAA,IAC9C;AAAA,EACF;AAGA,EAAA,OAAA,GAAU,mBAAmB,OAAO,CAAA;AAIpC,EAAA,MAAM,WAAA,GAAc,yBAAyB,OAAO,CAAA;AAEpD,EAAA,OAAO;AAAA;AAAA,IAEL,MAAA,EAAQ,OAAA;AAAA,IACR,QAAA,EAAU,cAAc,WAAA,CAAY;AAAA,GACtC;AACF;;;ACjJO,SAAS,oBAAoB,IAAA,EAalC;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,qBAAqB,QAAA,EAAU,QAAA,KAAa,kBAAA,EAAmB;AACrF,EAAA,MAAM,cAAc,YAAA,EAAa;AAGjC,EAAA,IAAI,QAAA;AAEJ,EAAA,IAAI,IAAA,EAAM;AAER,IAAA,QAAA,GAAW,cAAc,CAAA,EAAG,WAAA,CAAY,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,IAAA;AAAA,EAC3D,WAAW,WAAA,EAAa;AAEtB,IAAA,QAAA,GAAW,WAAA,CAAY,IAAA;AAAA,EACzB,CAAA,MAAO;AACL,IAAA,MAAM,IAAI,MAAM,+EAA+E,CAAA;AAAA,EACjG;AAGA,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,MAAA,EAAQ,QAAQ,CAAA;AAGhD,EAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,MAAA,EAAQ,QAAQ,CAAA;AAEtD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA,EAAM,IAAA,IAAQ,MAAA,CAAO,mBAAmB,CAAA;AAAA,IACxC,MAAM,UAAA,CAAW,EAAA;AAAA,IACjB,UAAU,UAAA,CAAW,QAAA;AAAA,IACrB,cAAc,QAAA,IAAY,KAAA;AAAA,IAC1B,cAAc,QAAA,IAAY,KAAA;AAAA,IAC1B;AAAA,GACF;AACF;ACjCO,SAAS,WAAA,CAAe,KAAA,EAAU,KAAA,GAAQ,GAAA,EAAQ;AACvD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA;AAE1D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,iBAAA,CAAkB,KAAK,GAAG,KAAK,CAAA;AAC9D,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,OAAO,cAAA;AACT;AC2EO,SAAS,cAAA,CACd,OAAA,GAAwC,EAAC,EACZ;AAC7B,EAAA,MAAM,EAAE,UAAU,QAAA,GAAW,GAAA,EAAK,WAAW,CAAA,EAAG,YAAA,GAAe,IAAG,GAAI,OAAA;AAGtE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIC,SAAS,YAAY,CAAA;AAGzD,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,UAAA,EAAY,QAAQ,CAAA;AAGxD,EAAA,MAAM,WAAA,GAAc,gBAAgB,MAAA,IAAU,QAAA;AAI9C,EAAA,MAAM,WAAA,GAAc,QAAA,GAAW,WAAA,GAAc,eAAA,GAAkB,EAAE,CAAA;AAGjE,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,GAAY,OAAO,KAAA,EAAM,GAAI,eAAe,EAAC;AAE3D,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;ACrHO,IAAM,kBAAA,GAAN,cAAiC,SAAA,CAA4D;AAAA,EAClG,YAAY,KAAA,EAAgC;AAC1C,IAAA,KAAA,CAAM,KAAK,CAAA;AACX,IAAA,IAAA,CAAK,KAAA,GAAQ,EAAE,QAAA,EAAU,KAAA,EAAO,OAAO,IAAA,EAAK;AAAA,EAC9C;AAAA,EAEA,OAAO,yBAAyB,KAAA,EAAuC;AACrE,IAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,KAAA,EAAM;AAAA,EACjC;AAAA,EAES,iBAAA,CAAkB,OAAc,SAAA,EAA4B;AACnE,IAAA,OAAA,CAAQ,MAAM,CAAA,6EAAA,EAAyB,IAAA,CAAK,MAAM,SAAS,CAAA,EAAA,CAAA,EAAM,OAAO,SAAS,CAAA;AAAA,EACnF;AAAA,EAES,MAAA,GAAoB;AAC3B,IAAA,IAAI,IAAA,CAAK,MAAM,QAAA,EAAU;AACvB,MAAA,uBACEH,GAAAA,CAACI,GAAAA,EAAA,EAAI,CAAA,EAAG,CAAA,EAAG,WAAA,EAAY,KAAA,EAAM,WAAA,EAAY,SAAA,EAAU,YAAA,EAAa,IAAA,EAAK,IAAG,QAAA,EAAS,KAAA,EAAO,EAAE,EAAA,EAAI,SAAA,EAAU,EACtG,QAAA,kBAAAH,IAAAA,CAACI,MAAA,EAAK,KAAA,EAAM,SAAA,EAAU,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAU,EAAG,UAAS,IAAA,EAAK,QAAA,EAAA;AAAA,QAAA,wEAAA;AAAA,QAC1C,KAAK,KAAA,CAAM,SAAA;AAAA,QAAU,KAAA;AAAA,QAAS,IAAA,CAAK,MAAM,KAAA,EAAO;AAAA,OAAA,EACvE,CAAA,EACF,CAAA;AAAA,IAEJ;AAEA,IAAA,OAAO,KAAK,KAAA,CAAM,QAAA;AAAA,EACpB;AACF,CAAA;;;AC7BO,SAAS,kBAAkB,MAAA,EAAmC;AACnE,EAAA,OAAO,MAAA,CACJ,GAAA,CAAI,CAAC,CAAA,KAAM,mBAAA,CAAoB,CAAC,CAAC,CAAA,CACjC,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,IAAI,CAAA;AACd;AAOA,SAAS,oBAAoB,CAAA,EAA4B;AAEvD,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,IAAA,OAAO,CAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,EAAW;AACjC,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AAEzB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACpB,MAAA,OAAO,CAAA,CACJ,GAAA,CAAI,CAAC,IAAA,KAAkB;AAEtB,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,IAAQ,aAAa,IAAA,EAAM;AACzD,UAAA,OAAQ,IAAA,CAA6B,OAAA;AAAA,QACvC;AAEA,QAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,OAAO,EAAA;AAAA,MACT,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AAAA,IACd;AAGA,IAAA,IAAI,SAAA,IAAa,CAAA,IAAK,OAAO,CAAA,CAAE,YAAY,QAAA,EAAU;AACnD,MAAA,OAAO,CAAA,CAAE,OAAA;AAAA,IACX;AAGA,IAAA,IAAI,YAAY,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,MAAM,CAAA,EAAG;AAC5C,MAAA,OAAO,CAAA,CAAE,MAAA,CACN,GAAA,CAAI,CAAC,KAAA,KAAmB;AACvB,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,IAAS,aAAa,KAAA,EAAO;AAC5D,UAAA,OAAQ,KAAA,CAA8B,OAAA;AAAA,QACxC;AACA,QAAA,OAAO,EAAA;AAAA,MACT,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AAAA,IACd;AAGA,IAAA,IAAI,iBAAiB,CAAA,IAAK,OAAO,EAAE,WAAA,KAAgB,QAAA,IAAY,EAAE,WAAA,EAAa;AAC5E,MAAA,MAAM,cAAc,CAAA,CAAE,WAAA;AACtB,MAAA,OAAO,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA,CAAE,IAAA,GAAO,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,IACpE;AAGA,IAAA,IAAI,aAAa,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG;AAC9C,MAAA,OAAQ,EAAE,OAAA,CAAqB,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,IAC1D;AAIA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA;AAE7B,MAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,GAAA,EAAK;AACtC,QAAA,OAAO,EAAA;AAAA,MACT;AAEA,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,aAAA,EAAe;AAC1C,QAAA,OAAA,CAAQ,IAAA,CAAK,2CAA2C,CAAC,CAAA;AAAA,MAC3D;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,OAAO,OAAO,CAAC,CAAA;AACjB;AAWO,SAAS,eAAe,MAAA,EAAoE;AACjG,EAAA,OAAO,OAAA,CAAQ,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC5C;AAmCO,SAAS,eAAe,KAAA,EAA+E;AAC5G,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,UAAU,EAAC;AAC3C,EAAA,MAAM,QAAA,GAAW,eAAe,MAAM,CAAA;AACtC,EAAA,MAAM,YAAA,GAAe,QAAA,GAAW,iBAAA,CAAkB,MAAM,CAAA,GAAI,EAAA;AAC5D,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,YAAA,EAAa;AAC1C;;;AC7HA,IAAM,eAAA,GAA8C;AAAA,EAClD,YAAA,EAAc,qBAAA;AAAA,EACd,YAAA,EAAc,gCAAA;AAAA,EACd,UAAA,EAAY,qBAAA;AAAA,EACZ,UAAA,EAAY,qBAAA;AAAA,EACZ,YAAA,EAAc,6BAAA;AAAA,EACd,UAAA,EAAY,uBAAA;AAAA,EACZ,UAAA,EAAY,uBAAA;AAAA,EACZ,cAAA,EAAgB,SAAA;AAAA,EAChB,qBAAA,EAAuB,YAAA;AAAA,EACvB,UAAA,EAAY,qBAAA;AAAA,EACZ,UAAA,EAAY,kBAAA;AAAA,EACZ,WAAA,EAAa,iBAAA;AAAA,EACb,WAAA,EAAa,qBAAA;AAAA,EACb,WAAA,EAAa,2BAAA;AAAA,EACb,SAAA,EAAW,qBAAA;AAAA,EACX,SAAA,EAAW;AACb,CAAA;AAEA,IAAM,eAAA,GAA8C;AAAA,EAClD,YAAA,EAAc,4CAAA;AAAA,EACd,YAAA,EAAc,wFAAA;AAAA,EACd,UAAA,EAAY,8DAAA;AAAA,EACZ,UAAA,EAAY,wDAAA;AAAA,EACZ,YAAA,EAAc,+CAAA;AAAA,EACd,UAAA,EAAY,gEAAA;AAAA,EACZ,UAAA,EAAY,0DAAA;AAAA,EACZ,cAAA,EAAgB,+DAAA;AAAA,EAChB,qBAAA,EAAuB,mCAAA;AAAA,EACvB,UAAA,EAAY,iCAAA;AAAA,EACZ,UAAA,EAAY,mDAAA;AAAA,EACZ,WAAA,EAAa,+DAAA;AAAA,EACb,WAAA,EAAa,4CAAA;AAAA,EACb,WAAA,EAAa,8FAAA;AAAA,EACb,SAAA,EAAW,8DAAA;AAAA,EACX,SAAA,EAAW;AACb,CAAA;AAEA,IAAM,oBAAA,GAAmE;AAAA,EACvE,EAAA,EAAI,eAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAQA,IAAM,YAAA,GAA4C;AAAA,EAChD,EAAA,EAAI,EAAE,GAAA,EAAK,WAAA,EAAa,OAAO,YAAA,EAAa;AAAA,EAC5C,EAAA,EAAI,EAAE,GAAA,EAAK,sCAAA,EAAU,KAAK,4CAAA,EAAW,IAAA,EAAM,kDAAA,EAAY,KAAA,EAAO,kDAAA;AAChE,CAAA;AAEA,IAAM,YAAA,GAA4C;AAAA,EAChD,EAAA,EAAI,EAAE,GAAA,EAAK,MAAA,EAAQ,OAAO,OAAA,EAAQ;AAAA,EAClC,EAAA,EAAI,EAAE,GAAA,EAAK,4CAAA,EAAW,KAAK,kDAAA,EAAY,IAAA,EAAM,wDAAA,EAAa,KAAA,EAAO,wDAAA;AACnE,CAAA;AAEA,SAAS,aAAA,CAAc,CAAA,EAAW,MAAA,EAAgB,OAAA,EAA8C;AAC9F,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAI,CAAA,IAAK,OAAA,CAAQ,EAAA;AACvC,EAAA,MAAM,OAAO,IAAI,IAAA,CAAK,YAAY,MAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AAClD,EAAA,OAAQ,KAAA,CAAiC,IAAI,CAAA,IAAK,KAAA,CAAM,KAAA;AAC1D;AAMA,SAAS,YAAA,CAAa,GAAW,MAAA,EAAwB;AACvD,EAAA,IAAI,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,EAAG;AACvB,IAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,EAAE,uBAAuB,CAAA,EAAG,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA;AAC7E;AAEA,SAAS,UAAA,CAAW,SAAiB,MAAA,EAAwB;AAC3D,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,OAAO,CAAA;AAC7B,IAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ;AAAA,MACrC,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACP,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,EAChB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAMA,SAAS,QAAA,CAAS,KAAa,IAAA,EAA+C;AAC5E,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,YAAA,EAAc,CAAC,CAAA,EAAG,GAAA,KAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,IAAK,EAAE,CAAC,CAAA;AACtE;AAMA,SAAS,eAAA,CAAgB,QAAgB,MAAA,EAA0E;AACjH,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAChC,EAAA,MAAM,OAAO,oBAAA,CAAqB,IAAI,CAAA,IAAK,oBAAA,CAAqB,MAAM,CAAA,IAAK,eAAA;AAI3E,EAAA,OAAO,IAAA;AACT;AAsBO,SAAS,sBAAA,CACd,WAAA,EACA,MAAA,GAAiB,IAAA,EACjB,kBAAA,EACoB;AACpB,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,CAAA,GAAI,eAAA,CAAgB,MAA0B,CAAA;AAEpD,EAAA,QAAQ,YAAY,UAAA;AAAY,IAC9B,KAAK,QAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,WAAA,CAAY,MAAA,EAAQ,MAAA,EAAQ,CAAC,CAAA;AAAA,IACzD,KAAK,QAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,WAAA,CAAY,MAAA,EAAQ,MAAA,EAAQ,CAAC,CAAA;AAAA,IACzD,KAAK,MAAA;AACH,MAAA,OAAO,gBAAA,CAAiB,WAAA,CAAY,IAAA,EAAM,MAAA,EAAQ,CAAC,CAAA;AAAA,IACrD,KAAK,OAAA;AACH,MAAA,OAAO,iBAAA,CAAkB,WAAA,CAAY,KAAA,EAAO,MAAA,EAAQ,CAAC,CAAA;AAAA,IACvD;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAMA,SAAS,kBAAA,CACP,WAAA,EACA,MAAA,EACA,CAAA,EACoB;AACpB,EAAA,IAAI,CAAC,aAAa,OAAO,MAAA;AAEzB,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAW,SAAA,EAAU,GAAI,WAAA;AAG5C,EAAA,IAAI,SAAA,KAAc,OAAA,IAAW,SAAA,KAAc,KAAA,EAAO;AAChD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO,QAAA,CAAS,CAAA,CAAE,UAAA,EAAY,EAAE,CAAA,EAAG,SAAA,EAAW,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,MAAA,EAAQ,YAAY,CAAA,EAAG,CAAA;AAAA,IACvG;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,SAAA,KAAc,MAAA,EAAW;AACtD,IAAA,IAAI,cAAc,SAAA,EAAW;AAC3B,MAAA,OAAO,QAAA,CAAS,CAAA,CAAE,YAAA,EAAc,EAAE,CAAA,EAAG,SAAA,EAAW,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,MAAA,EAAQ,YAAY,CAAA,EAAG,CAAA;AAAA,IACzG;AACA,IAAA,OAAO,QAAA,CAAS,EAAE,YAAA,EAAc,EAAE,KAAK,SAAA,EAAW,GAAA,EAAK,WAAW,CAAA;AAAA,EACpE;AAEA,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,OAAO,QAAA,CAAS,CAAA,CAAE,UAAA,EAAY,EAAE,CAAA,EAAG,SAAA,EAAW,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,MAAA,EAAQ,YAAY,CAAA,EAAG,CAAA;AAAA,EACvG;AAEA,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,OAAO,QAAA,CAAS,CAAA,CAAE,UAAA,EAAY,EAAE,CAAA,EAAG,SAAA,EAAW,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,MAAA,EAAQ,YAAY,CAAA,EAAG,CAAA;AAAA,EACvG;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAA,CACP,WAAA,EACA,MAAA,EACA,CAAA,EACoB;AACpB,EAAA,IAAI,CAAC,aAAa,OAAO,MAAA;AAEzB,EAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAK,SAAA,EAAU,GAAI,WAAA;AAChC,EAAA,MAAM,MAAA,GAAS,SAAA,GAAY,CAAA,CAAE,qBAAA,GAAwB,EAAA;AAErD,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,MAAA,EAAW;AAC1C,IAAA,OAAO,QAAA,CAAS,CAAA,CAAE,YAAA,EAAc,EAAE,KAAK,YAAA,CAAa,GAAA,EAAK,MAAM,CAAA,EAAG,KAAK,YAAA,CAAa,GAAA,EAAK,MAAM,CAAA,EAAG,QAAQ,CAAA;AAAA,EAC5G;AAEA,EAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,IAAA,OAAO,QAAA,CAAS,CAAA,CAAE,UAAA,EAAY,EAAE,GAAA,EAAK,aAAa,GAAA,EAAK,MAAM,CAAA,EAAG,MAAA,EAAQ,CAAA;AAAA,EAC1E;AAEA,EAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,IAAA,OAAO,QAAA,CAAS,CAAA,CAAE,UAAA,EAAY,EAAE,GAAA,EAAK,aAAa,GAAA,EAAK,MAAM,CAAA,EAAG,MAAA,EAAQ,CAAA;AAAA,EAC1E;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,CAAA,CAAE,cAAA;AAAA,EACX;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAA,CACP,WAAA,EACA,MAAA,EACA,CAAA,EACoB;AACpB,EAAA,IAAI,CAAC,aAAa,OAAO,MAAA;AAEzB,EAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAI,GAAI,WAAA;AAErB,EAAA,IAAI,OAAO,GAAA,EAAK;AACd,IAAA,OAAO,QAAA,CAAS,CAAA,CAAE,UAAA,EAAY,EAAE,KAAK,UAAA,CAAW,GAAA,EAAK,MAAM,CAAA,EAAG,GAAA,EAAK,UAAA,CAAW,GAAA,EAAK,MAAM,GAAG,CAAA;AAAA,EAC9F;AAEA,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,OAAO,QAAA,CAAS,EAAE,UAAA,EAAY,EAAE,KAAK,UAAA,CAAW,GAAA,EAAK,MAAM,CAAA,EAAG,CAAA;AAAA,EAChE;AAEA,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,OAAO,QAAA,CAAS,EAAE,WAAA,EAAa,EAAE,KAAK,UAAA,CAAW,GAAA,EAAK,MAAM,CAAA,EAAG,CAAA;AAAA,EACjE;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,iBAAA,CACP,WAAA,EACA,MAAA,EACA,CAAA,EACoB;AACpB,EAAA,IAAI,CAAC,aAAa,OAAO,MAAA;AAEzB,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,WAAA;AAE/B,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,MAAA,EAAW;AACpD,IAAA,IAAI,aAAa,QAAA,EAAU;AACzB,MAAA,OAAO,QAAA,CAAS,CAAA,CAAE,WAAA,EAAa,EAAE,CAAA,EAAG,QAAA,EAAU,KAAA,EAAO,aAAA,CAAc,QAAA,EAAU,MAAA,EAAQ,YAAY,CAAA,EAAG,CAAA;AAAA,IACtG;AACA,IAAA,OAAO,QAAA,CAAS,EAAE,WAAA,EAAa,EAAE,KAAK,QAAA,EAAU,GAAA,EAAK,UAAU,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,OAAO,QAAA,CAAS,CAAA,CAAE,SAAA,EAAW,EAAE,CAAA,EAAG,QAAA,EAAU,KAAA,EAAO,aAAA,CAAc,QAAA,EAAU,MAAA,EAAQ,YAAY,CAAA,EAAG,CAAA;AAAA,EACpG;AAEA,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,OAAO,QAAA,CAAS,CAAA,CAAE,SAAA,EAAW,EAAE,CAAA,EAAG,QAAA,EAAU,KAAA,EAAO,aAAA,CAAc,QAAA,EAAU,MAAA,EAAQ,YAAY,CAAA,EAAG,CAAA;AAAA,EACpG;AAEA,EAAA,OAAO,MAAA;AACT;;;ACtRO,SAAS,qBAAA,CACd,MACA,KAAA,EAeA;AACA,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA,EAAU,cAAA;AAAA,IACV,YAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,GAAI,oBAAoB,IAAI,CAAA;AAG5B,EAAA,MAAM,OAAO,WAAA,EAAY;AACzB,EAAA,MAAM,UAAU,IAAA,EAAM,OAAA;AAItB,EAAA,MAAM,gBAAgB,iBAAA,CAAkB,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,MAAM,KAAK,CAAA;AAC3E,EAAA,MAAM,sBAAsB,iBAAA,CAAkB,IAAA,EAAM,OAAA,EAAS,aAAA,EAAe,MAAM,WAAW,CAAA;AAC7F,EAAA,MAAM,sBAAsB,iBAAA,CAAkB,IAAA,EAAM,OAAA,EAAS,aAAA,EAAe,MAAM,WAAW,CAAA;AAI7F,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,WAAA,EAAa,IAAA,EAAM,UAAU,IAAI,CAAA;AACzE,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,IAAc,mBAAA,IAAuB,QAAA;AAG9D,EAAA,MAAM,gBAAA,GAAmB,mBAAA,CAAoB,IAAA,EAAM,OAAO,CAAA;AAE1D,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,QAAA;AAAA;AAAA,IAEA,KAAA,EAAO,MAAM,KAAA,IAAS,aAAA;AAAA,IACtB,WAAA,EAAa,MAAM,WAAA,IAAe,mBAAA;AAAA,IAClC,UAAA;AAAA;AAAA,IAEA,OAAA,EAAU,KAAA,CAAM,OAAA,IAAW,IAAA,EAAM,OAAA;AAAA;AAAA,IAEjC,QAAA,EAAU,MAAM,QAAA,IAAY,cAAA;AAAA;AAAA,IAE5B,QAAA,EAAU,MAAM,QAAA,IAAY,YAAA;AAAA,IAC5B,QAAA,EAAU,MAAM,QAAA,IAAY,YAAA;AAAA;AAAA,IAE5B,WAAA;AAAA;AAAA,IAEA,OAAA,EAAS;AAAA,GACX;AACF;ACgEO,SAAS,YACd,OAAA,EAC4B;AAC5B,EAAA,MAAM,EAAE,WAAA,EAAa,MAAA,EAAO,GAAI,OAAA;AAEhC,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,aAAA,KAAkB,OAAO,EAAC,CAAA,CAAA;AAExD,EAAA,SAAS,eAAe,KAAA,EAAwB;AAC9C,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,WAAA,EAAa,UAAA,EAAY,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,OAAA,EAAS,GAAG,cAAA,EAAe,GAAI,KAAA;AAE3G,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,GAAG,YAAA,EAAa,GAAI,sBAAsB,IAAA,EAAM;AAAA,MACtE,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,MAAM,QAAA,GAA+B;AAAA,MACnC,OAAO,YAAA,CAAa,KAAA;AAAA,MACpB,aAAa,YAAA,CAAa,WAAA;AAAA,MAC1B,YAAY,YAAA,CAAa,UAAA;AAAA,MACzB,SAAS,YAAA,CAAa,OAAA;AAAA,MACtB,UAAU,YAAA,CAAa,QAAA;AAAA,MACvB,UAAU,YAAA,CAAa,QAAA;AAAA,MACvB,UAAU,YAAA,CAAa,QAAA;AAAA,MACvB,aAAa,YAAA,CAAa,WAAA;AAAA,MAC1B,SAAS,YAAA,CAAa;AAAA,KACxB;AAIA,IAAA,MAAM,UAAA,GAAa,aAAA,CAAc,cAAA,EAAiD,QAAQ,CAAA;AAE1F,IAAA,uBACEL,GAAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAW,QAAA,EAC7B,QAAA,kBAAAA,GAAAA,CAAC,IAAA,CAAK,KAAA,EAAL,EAAW,IAAA,EAAM,QAAA,EACf,WAAC,KAAA,KAAuB;AACvB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,MAAA;AAChC,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,SAAA;AAEnC,MAAA,MAAM,QAAA,GAAW,SAAA,IAAa,cAAA,CAAe,MAAM,CAAA;AACnD,MAAA,MAAM,YAAA,GAAe,QAAA,GAAW,iBAAA,CAAkB,MAAM,CAAA,GAAI,EAAA;AAE5D,MAAA,OAAO,MAAA,CAAO;AAAA,QACZ,KAAA;AAAA,QACA,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,QACnB,QAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,GACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,cAAA,CAAe,WAAA,GAAc,WAAA;AAC7B,EAAA,OAAO,cAAA;AACT;AAaO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAIwB;AACtB,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,uBAAOA,GAAAA,CAACM,KAAAA,CAAM,SAAA,EAAN,EAAiB,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,EACxC;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBAAON,GAAAA,CAACM,KAAAA,CAAM,UAAA,EAAN,EAAkB,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,IAAA;AACT;AChNO,IAAM,YAAA,GAAe,IAAA,CAAK,SAASC,aAAAA,CAAa;AAAA,EACrD,QAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAoC;AAClC,EAAA,uBACEN,IAAAA;AAAA,IAACK,KAAAA,CAAM,IAAA;AAAA,IAAN;AAAA,MACC,OAAA,EAAS,QAAA;AAAA,MACT,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,UAAU,QAAA,CAAS,QAAA;AAAA,MAEnB,QAAA,EAAA;AAAA,wBAAAN,GAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAO,QAAA,CAAS,KAAA,EAAO,SAAS,QAAA,CAAS,OAAA,EAAS,QAAA,EAAU,QAAA,CAAS,QAAA,EAAU,CAAA;AAAA,QAC1F,QAAA;AAAA,wBACDA,GAAAA,CAAC,UAAA,EAAA,EAAW,UAAoB,YAAA,EAA4B,UAAA,EAAY,SAAS,UAAA,EAAY;AAAA;AAAA;AAAA,GAC/F;AAEJ,CAAC;AClCM,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,OAAA,EAAS,UAAS,EAA2C;AACxG,EAAA,uBACEC,KAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,OAAA,mBACCA,IAAAA,CAACO,MAAAA,EAAA,EAAO,KAAK,CAAA,EACX,QAAA,EAAA;AAAA,sBAAAR,GAAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACbA,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAG,OAAA,EAAS;AAAA,KAAA,EAC7B,CAAA,GAEA,KAAA;AAAA,IAED,QAAA,oBAAYA,GAAAA,CAACM,KAAAA,CAAM,mBAAN,EAAwB;AAAA,GAAA,EACxC,CAAA;AAEJ;AClBO,SAAS,eAAkB,IAAA,EAAwD;AACxF,EAAA,OAAO,OAAO,KAAK,KAAA,KAAU,QAAA,GAAW,KAAK,KAAA,GAAQ,MAAA,CAAO,KAAK,KAAK,CAAA;AACxE;AA6BO,SAAS,kBAA8B,OAAA,EAAwD;AAEpG,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAM;AAC/B,IAAA,MAAM,YAAY,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,IAAI,KAAK,CAAA;AAEjD,IAAA,OAAO,oBAAA,CAAqB;AAAA,MAC1B,KAAA,EAAO,OAAA;AAAA,MACP,YAAA,EAAc,cAAA;AAAA,MACd,WAAA,EAAa,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA;AAAA,MAC5B,cAAA,EAAgB,CAAC,IAAA,KAA6B,IAAA,CAAK,QAAA,IAAY,KAAA;AAAA,MAC/D,GAAI,SAAA,IAAa;AAAA,QACf,OAAA,EAAS,CAAC,IAAA,KAA6B,IAAA,CAAK,KAAA,IAAS;AAAA;AACvD,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAGZ,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAM;AAC3B,IAAA,MAAM,YAAY,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,IAAI,KAAK,CAAA;AACjD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAkC;AACvD,IAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,IAAS,EAAA;AAC3B,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,KAAK,KAAK,EAAC;AACzC,MAAA,QAAA,CAAS,IAAI,KAAA,EAAO,CAAC,GAAG,QAAA,EAAU,GAAG,CAAC,CAAA;AAAA,IACxC;AACA,IAAA,OAAO,QAAA;AAAA,EACT,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,YAAY,MAAA,EAAO;AAC9B","file":"chunk-HWVOFWAT.js","sourcesContent":["'use client'\n\nimport { createContext, useContext, type ReactNode } from 'react'\n\n/**\n * Context value providing form field naming information\n */\nexport interface FormGroupContextValue {\n /** Original name prop passed to this FormGroup */\n originalName: string\n /** Full dotted path including all parent FormGroup names */\n name: string\n}\n\nconst FormGroupContext = createContext<FormGroupContextValue | null>(null)\n\nexport interface FormGroupProps {\n /** Field name for this group. Will be concatenated with parent names using dot notation */\n name: string\n children: ReactNode\n}\n\n/**\n * FormGroup component for building nested form field names\n *\n * @example\n * ```tsx\n * <FormGroup name=\"user\">\n * <FormGroup name=\"address\">\n * <FormGroup name=\"street\">\n * // useFormGroup() returns { originalName: 'street', name: 'user.address.street' }\n * </FormGroup>\n * </FormGroup>\n * </FormGroup>\n * ```\n */\nexport function FormGroup({ name, children }: FormGroupProps) {\n const parentContext = useContext(FormGroupContext)\n\n const contextValue: FormGroupContextValue = {\n originalName: name,\n name: parentContext ? `${parentContext.name}.${name}` : name,\n }\n\n return <FormGroupContext.Provider value={contextValue}>{children}</FormGroupContext.Provider>\n}\n\n/**\n * Hook to access current FormGroup context\n *\n * @returns FormGroup context value with originalName and full dotted path name,\n * or null if not inside a FormGroup\n *\n * @example\n * ```tsx\n * function MyField() {\n * const formGroup = useFormGroup();\n * const fieldName = formGroup?.name || 'defaultName';\n * return <input name={fieldName} />;\n * }\n * ```\n */\nexport function useFormGroup(): FormGroupContextValue | null {\n return useContext(FormGroupContext)\n}\n","'use client'\n\nimport { createContext, useContext } from 'react'\nimport type { DeclarativeFormContextValue } from './types'\n\n/**\n * Context for declarative form API\n * Provides access to form instance and primitive array index\n */\nexport const DeclarativeFormContext = createContext<DeclarativeFormContextValue | null>(null)\n\n/**\n * Hook to access declarative form context\n * @throws Error if used outside of Form component\n */\nexport function useDeclarativeForm(): DeclarativeFormContextValue {\n const context = useContext(DeclarativeFormContext)\n if (!context) {\n throw new Error('useDeclarativeForm must be used inside a Form component')\n }\n return context\n}\n\n/**\n * Hook to access declarative form context (nullable)\n * @returns Context or null if outside Form\n */\nexport function useDeclarativeFormOptional(): DeclarativeFormContextValue | null {\n return useContext(DeclarativeFormContext)\n}\n","'use client'\n\nimport { Box, Tooltip as ChakraTooltip, Circle, Portal, Text, VStack } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport { LuCircleHelp } from 'react-icons/lu'\nimport type { FieldTooltipMeta } from '../../types'\n\nexport type FieldTooltipProps = FieldTooltipMeta\n\n/**\n * Tooltip component for form fields.\n * Shows a \"?\" icon with a popup hint on hover.\n *\n * @example\n * ```tsx\n * <FieldTooltip\n * description=\"Specify the brand of your training car\"\n * example=\"Hyundai, Kia, Volkswagen\"\n * impact=\"Students often search for instructor by car brand\"\n * />\n * ```\n */\nexport function FieldTooltip({ title, description, example, impact }: FieldTooltipProps): ReactElement {\n return (\n <ChakraTooltip.Root openDelay={200} positioning={{ placement: 'top' }}>\n <ChakraTooltip.Trigger asChild>\n <Circle\n size=\"5\"\n cursor=\"help\"\n color=\"fg.muted\"\n _hover={{ color: 'colorPalette.fg' }}\n transition=\"color 0.2s\"\n display=\"inline-flex\"\n >\n <LuCircleHelp size={16} />\n </Circle>\n </ChakraTooltip.Trigger>\n <Portal>\n <ChakraTooltip.Positioner>\n <ChakraTooltip.Content>\n <ChakraTooltip.Arrow>\n <ChakraTooltip.ArrowTip />\n </ChakraTooltip.Arrow>\n <VStack align=\"start\" gap={2} maxW=\"280px\" p={1}>\n {title && (\n <Text fontWeight=\"semibold\" fontSize=\"sm\">\n {title}\n </Text>\n )}\n <Text fontSize=\"sm\">{description}</Text>\n {example && (\n <Box bg=\"bg.emphasized\" px={2} py={1} borderRadius=\"md\" w=\"full\">\n <Text fontSize=\"xs\" color=\"fg.muted\">\n Example:\n </Text>\n <Text fontSize=\"sm\" fontStyle=\"italic\">\n "{example}"\n </Text>\n </Box>\n )}\n {impact && (\n <Text fontSize=\"xs\" color=\"green.fg\">\n {impact}\n </Text>\n )}\n </VStack>\n </ChakraTooltip.Content>\n </ChakraTooltip.Positioner>\n </Portal>\n </ChakraTooltip.Root>\n )\n}\n","'use client'\n\nimport { Field, HStack } from '@chakra-ui/react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { FieldTooltipMeta } from '../../types'\nimport { FieldTooltip } from './field-tooltip'\n\nexport interface FieldLabelProps {\n /** Label text (can be ReactNode for complex labels with links) */\n label?: ReactNode\n /** Tooltip for hint next to label */\n tooltip?: FieldTooltipMeta\n /** Show required field indicator */\n required?: boolean\n}\n\n/**\n * Label component for form fields with tooltip support.\n *\n * If tooltip is provided, renders HStack with label and hint icon.\n * Otherwise renders a simple Field.Label.\n *\n * @example\n * ```tsx\n * // Simple label\n * <FieldLabel label=\"Title\" required />\n *\n * // Label with tooltip\n * <FieldLabel\n * label=\"Car Brand\"\n * tooltip={{ description: 'Specify the brand', example: 'Hyundai' }}\n * required\n * />\n * ```\n */\nexport function FieldLabel({ label, tooltip, required }: FieldLabelProps): ReactElement | null {\n if (!label) {\n return null\n }\n\n return (\n <Field.Label>\n {tooltip ? (\n <HStack gap={1}>\n <span>{label}</span>\n <FieldTooltip {...tooltip} />\n </HStack>\n ) : (\n label\n )}\n {required && <Field.RequiredIndicator />}\n </Field.Label>\n )\n}\n","/**\n * Utilities for working with Zod v4 schemaми\n *\n * Общие features для разворачивания обёрток схемы\n * (optional, nullable, default) и получения базовой схемы.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Result разворачивания схемы с инformцией об обязательности\n */\nexport interface UnwrapResult {\n /** Развёрнутая schema (без optional/nullable/default обёрток) */\n schema: any\n /** Является the field обязательным (false if было optional/nullable) */\n required: boolean\n}\n\n/**\n * Разворачивает обёртки optional/nullable/default и returns базовую схему\n *\n * Supports как Zod v4 (inner), так и возможные различия в API.\n *\n * @example\n * ```ts\n * const innerSchema = unwrapSchema(z.string().optional())\n * // innerSchema will z.string()\n * ```\n */\nexport function unwrapSchema(schema: any): any {\n if (!schema?._zod?.def) {\n return schema\n }\n\n const type = schema._zod.def.type\n\n // Разворачиваем wrapper-typeы\n // Zod v4 uses inner или innerType depending on версии\n if (type === 'optional' || type === 'nullable' || type === 'default') {\n const inner = schema._zod.def.inner ?? schema._zod.def.innerType\n if (inner) {\n return unwrapSchema(inner)\n }\n }\n\n return schema\n}\n\n/**\n * Разворачивает схему и returns инformцию об обязательности поля\n *\n * В отличие от `unwrapSchema`, also отслеживает была ли schema optional/nullable.\n *\n * @example\n * ```ts\n * const { schema, required } = unwrapSchemaWithRequired(z.string().optional())\n * // schema = z.string()\n * // required = false\n * ```\n */\nexport function unwrapSchemaWithRequired(schema: any): UnwrapResult {\n if (!schema?._zod?.def) {\n return { schema, required: true }\n }\n\n const type = schema._zod.def.type\n\n // Разворачиваем обёртки, чтобы получить внутреннюю схему\n if (type === 'optional' || type === 'nullable') {\n const inner = schema._zod.def.inner ?? schema._zod.def.innerType\n if (inner) {\n const result = unwrapSchemaWithRequired(inner)\n return { schema: result.schema, required: false } // optional/nullable = НЕ обязательно\n }\n }\n\n if (type === 'default') {\n // default() делает field необязательным для HTML form — value подставится automatically\n const inner = schema._zod.def.inner ?? schema._zod.def.innerType\n if (inner) {\n const result = unwrapSchemaWithRequired(inner)\n return { schema: result.schema, required: false }\n }\n }\n\n return { schema, required: true }\n}\n\n/**\n * Получает type Zod схемы\n */\nexport function getZodType(schema: any): string | undefined {\n return schema?._zod?.def?.type\n}\n\n/**\n * Checks, is ли schema optional\n */\nexport function isOptionalSchema(schema: any): boolean {\n const type = getZodType(schema)\n return type === 'optional' || type === 'nullable'\n}\n\n/**\n * Checks, имеет ли schema default value\n */\nexport function hasDefaultValue(schema: any): boolean {\n return getZodType(schema) === 'default'\n}\n","'use client'\n\nimport { unwrapSchema } from './zod-utils'\n\n/**\n * Constraint extraction from Zod v4 schemas for automatic form field configuration\n *\n * Supports:\n * - Strings: minLength, maxLength, email, url, regex\n * - Numbers: min, max, step (int, multipleOf), positive/negative\n * - Dates: min, max\n * - Arrays: minItems, maxItems\n *\n * Zod v4 structure:\n * - Checks are stored in `schema._zod.def.checks[]`\n * - Each check has `_zod.def` with type and parameters\n */\n\n// =============================================================================\n// Constraint types\n// =============================================================================\n\n/** Constraints for string fields */\nexport interface ZodStringConstraints {\n minLength?: number\n maxLength?: number\n /** Automatically input type based on Zod checks (email, url) */\n inputType?: 'text' | 'email' | 'url' | 'tel'\n /** HTML5 pattern from regex */\n pattern?: string\n}\n\n/** Constraints for number fields */\nexport interface ZodNumberConstraints {\n min?: number\n max?: number\n step?: number\n isInteger?: boolean\n}\n\n/** Constraints for date fields */\nexport interface ZodDateConstraints {\n /** Minimum date in YYYY-MM-DD format */\n min?: string\n /** Maximum date in YYYY-MM-DD format */\n max?: string\n}\n\n/** Constraints for arrays */\nexport interface ZodArrayConstraints {\n minItems?: number\n maxItems?: number\n}\n\n/** Result of constraint extraction from schema */\nexport interface ZodConstraints {\n string?: ZodStringConstraints\n number?: ZodNumberConstraints\n date?: ZodDateConstraints\n array?: ZodArrayConstraints\n /** Schema type to determine which constraints to apply */\n schemaType?: 'string' | 'number' | 'date' | 'array' | 'boolean' | 'enum' | 'unknown'\n}\n\n// =============================================================================\n// Main function\n// =============================================================================\n\n/**\n * Extracts constraints from Zod schema by field path\n *\n * @example\n * ```tsx\n * const schema = z.object({\n * title: z.string().min(2).max(100),\n * rating: z.number().min(1).max(10),\n * birthday: z.date().min(new Date('1900-01-01')),\n * tags: z.array(z.string()).max(5),\n * })\n *\n * getZodConstraints(schema, 'title')\n * // { schemaType: 'string', string: { minLength: 2, maxLength: 100 } }\n *\n * getZodConstraints(schema, 'rating')\n * // { schemaType: 'number', number: { min: 1, max: 10 } }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getZodConstraints(schema: any, path: string): ZodConstraints {\n if (!schema) {\n return { schemaType: 'unknown' }\n }\n\n const fieldSchema = getSchemaAtPath(schema, path)\n if (!fieldSchema) {\n return { schemaType: 'unknown' }\n }\n\n const def = fieldSchema._zod?.def\n if (!def) {\n return { schemaType: 'unknown' }\n }\n\n const type = def.type\n const checks = def.checks || []\n\n switch (type) {\n case 'string':\n return {\n schemaType: 'string',\n string: extractStringConstraints(checks),\n }\n\n case 'number':\n return {\n schemaType: 'number',\n number: extractNumberConstraints(checks),\n }\n\n case 'date':\n return {\n schemaType: 'date',\n date: extractDateConstraints(checks),\n }\n\n case 'array':\n return {\n schemaType: 'array',\n array: extractArrayConstraints(checks),\n }\n\n case 'boolean':\n return { schemaType: 'boolean' }\n\n case 'enum':\n return { schemaType: 'enum' }\n\n default:\n return { schemaType: 'unknown' }\n }\n}\n\n// =============================================================================\n// Constraint extraction by types (Zod v4 structure)\n// =============================================================================\n\n/**\n * Handler type for a check\n * Receives constraints object and checkDef, modifies constraints\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype CheckHandler<T> = (constraints: T, checkDef: any) => void\n\n/**\n * Generic function to extract constraints from Zod checks\n *\n * The handler pattern avoids duplicating iteration logic.\n * Each type (string, number, date, array) defines its own handlers.\n *\n * @param checks - Array of Zod checks from schema\n * @param handlers - Object with handlers for each check type\n * @returns Constraints object populated by handlers\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractConstraints<T extends object>(checks: any[], handlers: Record<string, CheckHandler<T>>): T {\n const constraints = {} as T\n\n for (const check of checks) {\n const checkDef = check._zod?.def\n if (!checkDef) {\n continue\n }\n\n const handler = handlers[checkDef.check]\n if (handler) {\n handler(constraints, checkDef)\n }\n }\n\n return constraints\n}\n\n// =============================================================================\n// Handlers for string constraints\n// =============================================================================\n\nconst stringConstraintHandlers: Record<string, CheckHandler<ZodStringConstraints>> = {\n min_length: (c, def) => {\n c.minLength = def.minimum\n },\n max_length: (c, def) => {\n c.maxLength = def.maximum\n },\n length_equals: (c, def) => {\n // Exact length = both min and max\n c.minLength = def.length\n c.maxLength = def.length\n },\n string_format: (c, def) => {\n // email(), url() and other formats\n if (def.format === 'email') {\n c.inputType = 'email'\n } else if (def.format === 'url') {\n c.inputType = 'url'\n } else if (def.format === 'regex' && def.pattern?.source) {\n c.pattern = def.pattern.source\n }\n },\n}\n\n/**\n * Extracts constraints from string checks\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractStringConstraints(checks: any[]): ZodStringConstraints {\n return extractConstraints(checks, stringConstraintHandlers)\n}\n\n// =============================================================================\n// Handlers for number constraints\n// =============================================================================\n\nconst numberConstraintHandlers: Record<string, CheckHandler<ZodNumberConstraints>> = {\n greater_than: (c, def) => {\n // min() creates inclusive: true, gt() creates inclusive: false\n c.min = def.value\n },\n less_than: (c, def) => {\n // max() creates inclusive: true, lt() creates inclusive: false\n c.max = def.value\n },\n number_format: (c, def) => {\n // int() creates format: 'safeint'\n if (def.format === 'safeint') {\n c.isInteger = true\n c.step = 1\n }\n },\n multiple_of: (c, def) => {\n c.step = def.value\n },\n}\n\n/**\n * Extracts constraints from number checks\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractNumberConstraints(checks: any[]): ZodNumberConstraints {\n return extractConstraints(checks, numberConstraintHandlers)\n}\n\n// =============================================================================\n// Handlers for date constraints\n// =============================================================================\n\nconst dateConstraintHandlers: Record<string, CheckHandler<ZodDateConstraints>> = {\n greater_than: (c, def) => {\n // min() for dates\n if (def.value) {\n c.min = formatDateToISO(def.value)\n }\n },\n less_than: (c, def) => {\n // max() for dates\n if (def.value) {\n c.max = formatDateToISO(def.value)\n }\n },\n}\n\n/**\n * Extracts constraints from date checks\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractDateConstraints(checks: any[]): ZodDateConstraints {\n return extractConstraints(checks, dateConstraintHandlers)\n}\n\n// =============================================================================\n// Handlers for array constraints\n// =============================================================================\n\nconst arrayConstraintHandlers: Record<string, CheckHandler<ZodArrayConstraints>> = {\n min_length: (c, def) => {\n c.minItems = def.minimum\n },\n max_length: (c, def) => {\n c.maxItems = def.maximum\n },\n length: (c, def) => {\n c.minItems = def.length\n c.maxItems = def.length\n },\n}\n\n/**\n * Extracts constraints from array checks\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractArrayConstraints(checks: any[]): ZodArrayConstraints {\n return extractConstraints(checks, arrayConstraintHandlers)\n}\n\n// =============================================================================\n// Helper functions\n// =============================================================================\n\n/**\n * Navigate to schema by path (reuses logic from schema-meta.ts)\n * Supports nested objects, arrays, optional/nullable\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getSchemaAtPath(schema: any, path: string): any {\n if (!schema || !path) {\n return schema\n }\n\n const parts = path.split('.')\n let current = schema\n\n for (const part of parts) {\n current = unwrapSchema(current)\n\n if (!current) {\n return undefined\n }\n\n // Skip numeric indices (for arrays we use element schema)\n if (/^\\d+$/.test(part)) {\n if (current._zod?.def?.type === 'array') {\n current = current._zod.def.element\n }\n continue\n }\n\n // Navigate into object shape\n if (current._zod?.def?.type === 'object') {\n const shape = current._zod.def.shape\n if (shape && part in shape) {\n current = shape[part]\n } else {\n return undefined\n }\n } else {\n return undefined\n }\n }\n\n return unwrapSchema(current)\n}\n\n/**\n * Formats a date to YYYY-MM-DD string for HTML input[type=\"date\"]\n * Accepts Date, ISO string or timestamp\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction formatDateToISO(value: any): string {\n let date: Date\n\n if (value instanceof Date) {\n date = value\n } else if (typeof value === 'string') {\n date = new Date(value)\n } else if (typeof value === 'number') {\n date = new Date(value)\n } else {\n return ''\n }\n\n if (isNaN(date.getTime())) {\n return ''\n }\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n","'use client'\n\nimport type { FieldUIMeta } from './types'\nimport { unwrapSchemaWithRequired } from './zod-utils'\n\n/**\n * Result анализа схемы поля\n */\nexport interface FieldSchemaInfo {\n /** UI metadata из .meta({ ui: {...} }) */\n ui?: FieldUIMeta\n /** Обязательно the field (не optional/nullable) */\n required: boolean\n}\n\n/**\n * Extracts UI metadata и статус обязательности from Zod schema по пути поля\n *\n * Supports вложенные пути вроде \"info.base.rating\" и пути arrayов вроде \"components.0.title\"\n *\n * @example\n * ```tsx\n * const schema = z.object({\n * title: z.string().meta({ ui: { title: 'Название' } }), // обязательно\n * subtitle: z.string().optional(), // optional\n * })\n *\n * getFieldMeta(schema, 'title') // { ui: { title: 'Название' }, required: true }\n * getFieldMeta(schema, 'subtitle') // { ui: undefined, required: false }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getFieldMeta(schema: any, path: string): FieldSchemaInfo {\n if (!schema) {\n return { required: false }\n }\n\n const result = getSchemaAtPath(schema, path)\n if (!result.schema) {\n return { required: false }\n }\n\n // Zod v4: meta is stored in globalRegistry, accessed via .meta() method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fieldSchema = result.schema as any\n const meta = typeof fieldSchema?.meta === 'function' ? fieldSchema.meta() : undefined\n\n return {\n ui: meta?.ui as FieldUIMeta | undefined,\n required: result.required,\n }\n}\n\ninterface SchemaPathResult {\n /** Схема поля ДО финального unwrap (для извлечения мета) */\n schema: unknown\n /** Обязательность поля after анализа всей цепочки */\n required: boolean\n}\n\n/**\n * Разворачивает wrapper-typeы схемы (effects, pipeline, transform) до базовой схемы\n * Сохраняет optional/nullable обёртки для корректного определения required\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction unwrapToBaseSchema(schema: any): any {\n if (!schema?._zod?.def) {\n return schema\n }\n\n const type = schema._zod.def.type\n\n // Zod v4: effects (от superRefine, refine) имеют inner схему\n if (type === 'effects' || type === 'transform' || type === 'preprocess') {\n const inner = schema._zod.def.inner ?? schema._zod.def.schema\n if (inner) {\n return unwrapToBaseSchema(inner)\n }\n }\n\n // Zod v4: pipeline (от pipe) имеет in и out схемы\n if (type === 'pipeline') {\n const inner = schema._zod.def.in\n if (inner) {\n return unwrapToBaseSchema(inner)\n }\n }\n\n return schema\n}\n\n/**\n * Навигация к схеме по заданному пути\n * Обрабатывает objectы, arrayы и обёртки optional/nullable/effects/pipeline\n * Returns и схему, и статус обязательности\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getSchemaAtPath(schema: any, path: string): SchemaPathResult {\n if (!schema || !path) {\n return { schema, required: true }\n }\n\n const parts = path.split('.')\n let current = schema\n let isRequired = true\n\n for (const part of parts) {\n // Сначала разворачиваем effects/pipeline/transform до базовой схемы\n current = unwrapToBaseSchema(current)\n\n const unwrapped = unwrapSchemaWithRequired(current)\n current = unwrapped.schema\n // Отслеживаем, встретили ли optional/nullable\n if (!unwrapped.required) {\n isRequired = false\n }\n\n if (!current) {\n return { schema: undefined, required: false }\n }\n\n // Снова разворачиваем after unwrap (effects могут быть inside optional)\n current = unwrapToBaseSchema(current)\n\n // Пропускаем numberвые индексы (elementы arrayа используют схему elementа)\n if (/^\\d+$/.test(part)) {\n // For arrays get element schema\n if (current._zod?.def?.type === 'array') {\n current = current._zod.def.element\n }\n continue\n }\n\n // Transitionим в shape objectа\n if (current._zod?.def?.type === 'object') {\n const shape = current._zod.def.shape\n if (shape && part in shape) {\n current = shape[part]\n } else {\n return { schema: undefined, required: false }\n }\n } else {\n return { schema: undefined, required: false }\n }\n }\n\n // Разворачиваем only effects/pipeline, сохраняя default/optional для мета\n current = unwrapToBaseSchema(current)\n\n // Определяем required based on typeа обёртки, но возвращаем схему ДО unwrap\n // чтобы can было получить мета из .meta()\n const finalUnwrap = unwrapSchemaWithRequired(current)\n\n return {\n // Возвращаем схему ДО unwrap — на ней can быть мета (.default().meta())\n schema: current,\n required: isRequired && finalUnwrap.required,\n }\n}\n","'use client'\n\nimport { useFormGroup } from '../../../form-group'\nimport { useDeclarativeForm } from '../../form-context'\nimport { getZodConstraints, type ZodConstraints } from '../../schema-constraints'\nimport { getFieldMeta } from '../../schema-meta'\nimport type { FieldUIMeta } from '../../types'\n\n/**\n * Hook to get full field path, form instance, UI meta, required status, and constraints for declarative fields\n *\n * Handles both regular fields and primitive array fields (without name)\n */\nexport function useDeclarativeField(name?: string): {\n form: ReturnType<typeof useDeclarativeForm>['form']\n fullPath: string\n name: string\n meta: FieldUIMeta | undefined\n /** Whether field is required (from Zod schema - not optional/nullable) */\n required: boolean\n /** Global disabled state from Form */\n formDisabled: boolean\n /** Global readOnly state from Form */\n formReadOnly: boolean\n /** Automatic constraints from Zod schema (min, max, minLength, maxLength etc.) */\n constraints: ZodConstraints\n} {\n const { form, schema, primitiveArrayIndex, disabled, readOnly } = useDeclarativeForm()\n const parentGroup = useFormGroup()\n\n // Build full path\n let fullPath: string\n\n if (name) {\n // Regular field with name\n fullPath = parentGroup ? `${parentGroup.name}.${name}` : name\n } else if (parentGroup) {\n // Primitive array: FormGroup already includes the index in path (e.g., \"tags.0\")\n fullPath = parentGroup.name\n } else {\n throw new Error('Field must have a name prop or be inside Form.Group.List for primitive arrays')\n }\n\n // Extract UI metadata and required status from schema\n const schemaInfo = getFieldMeta(schema, fullPath)\n\n // Extract constraints from schema (min, max, minLength, maxLength, etc.)\n const constraints = getZodConstraints(schema, fullPath)\n\n return {\n form,\n fullPath,\n name: name ?? String(primitiveArrayIndex),\n meta: schemaInfo.ui,\n required: schemaInfo.required,\n formDisabled: disabled ?? false,\n formReadOnly: readOnly ?? false,\n constraints,\n }\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\n\n/**\n * Hook for debouncing a value\n *\n * Delays value update by the specified time.\n * Useful for search fields, autocomplete and other cases\n * when you need to limit request frequency.\n *\n * @param value - Value to debounce\n * @param delay - Delay in milliseconds (default 300)\n * @returns Debounced value\n *\n * @example\n * ```tsx\n * const [inputValue, setInputValue] = useState('')\n * const debouncedValue = useDebounce(inputValue, 300)\n *\n * useEffect(() => {\n * // Executes only when user stops typing\n * searchAPI(debouncedValue)\n * }, [debouncedValue])\n * ```\n */\nexport function useDebounce<T>(value: T, delay = 300): T {\n const [debouncedValue, setDebouncedValue] = useState(value)\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay)\n return () => clearTimeout(timer)\n }, [value, delay])\n\n return debouncedValue\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { useDebounce } from './use-debounce'\n\n/**\n * Async request result (compatible with TanStack Query and ZenStack hooks)\n */\nexport interface AsyncQueryResult<TData = unknown> {\n data?: TData[]\n isLoading?: boolean\n error?: Error | null\n}\n\n/**\n * Async request function for loading options\n * @param search - Search string (empty if request not started)\n */\nexport type AsyncQueryFn<TData = unknown> = (search: string) => AsyncQueryResult<TData>\n\n/**\n * Options for useAsyncSearch\n */\nexport interface UseAsyncSearchOptions<TData = unknown> {\n /**\n * Async request function (returns { data, isLoading, error })\n */\n useQuery?: AsyncQueryFn<TData>\n\n /**\n * Debounce delay in milliseconds\n * @default 300\n */\n debounce?: number\n\n /**\n * Minimum characters to start searching\n * @default 1\n */\n minChars?: number\n\n /**\n * Initial input value\n * @default ''\n */\n initialValue?: string\n}\n\n/**\n * Result useAsyncSearch\n */\nexport interface UseAsyncSearchResult<TData = unknown> {\n /** Current value input */\n inputValue: string\n\n /** Function for changing input value */\n setInputValue: (value: string) => void\n\n /** Debounced value for query */\n debouncedSearch: string\n\n /** Whether the request should be triggered (enough characters) */\n shouldQuery: boolean\n\n /** Whether loading is in progress */\n isLoading: boolean\n\n /** Request result (data array) */\n data: TData[] | undefined\n\n /** Error request */\n error: Error | null | undefined\n}\n\n/**\n * Hook for async search with debounce\n *\n * Combines common input management, debounce and async request logic\n * for Combobox and Autocomplete components.\n *\n * @example Usage with ZenStack hook\n * ```tsx\n * const {\n * inputValue,\n * setInputValue,\n * shouldQuery,\n * isLoading,\n * data,\n * } = useAsyncSearch({\n * useQuery: (search) => useFindManyUser({\n * where: { name: { contains: search, mode: 'insensitive' } },\n * take: 20,\n * }),\n * debounce: 300,\n * minChars: 2,\n * })\n * ```\n *\n * @example Usage for local filtering\n * ```tsx\n * const { inputValue, setInputValue, debouncedSearch } = useAsyncSearch({\n * debounce: 200,\n * minChars: 1,\n * })\n *\n * const filteredOptions = useMemo(() => {\n * return options.filter(opt => opt.label.includes(debouncedSearch))\n * }, [options, debouncedSearch])\n * ```\n */\nexport function useAsyncSearch<TData = unknown>(\n options: UseAsyncSearchOptions<TData> = {}\n): UseAsyncSearchResult<TData> {\n const { useQuery, debounce = 300, minChars = 1, initialValue = '' } = options\n\n // State input\n const [inputValue, setInputValue] = useState(initialValue)\n\n // Debounced value for query\n const debouncedSearch = useDebounce(inputValue, debounce)\n\n // Should the request be triggered?\n const shouldQuery = debouncedSearch.length >= minChars\n\n // Call useQuery (if provided)\n // Pass empty string if we shouldn't query, so the hook is always called\n const queryResult = useQuery?.(shouldQuery ? debouncedSearch : '')\n\n // Extract results\n const { data, isLoading = false, error } = queryResult ?? {}\n\n return {\n inputValue,\n setInputValue,\n debouncedSearch,\n shouldQuery,\n isLoading,\n data,\n error,\n }\n}\n","'use client'\n\nimport { Box, Text } from '@chakra-ui/react'\nimport { Component, type ErrorInfo, type ReactNode } from 'react'\n\ninterface FieldErrorBoundaryProps {\n /** Имя поля для отображения в сообщении об ошибке */\n fieldName: string\n children: ReactNode\n}\n\ninterface FieldErrorBoundaryState {\n hasError: boolean\n error: Error | null\n}\n\n/**\n * ErrorBoundary для field-компонентов.\n *\n * Перехватывает ошибки рендеринга внутри отдельного поля формы,\n * показывает fallback вместо краша всей формы.\n * Особенно полезен для кастомных полей через createForm({ extraFields }).\n */\nexport class FieldErrorBoundary extends Component<FieldErrorBoundaryProps, FieldErrorBoundaryState> {\n constructor(props: FieldErrorBoundaryProps) {\n super(props)\n this.state = { hasError: false, error: null }\n }\n\n static getDerivedStateFromError(error: Error): FieldErrorBoundaryState {\n return { hasError: true, error }\n }\n\n override componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n console.error(`[Form] Ошибка в поле \"${this.props.fieldName}\":`, error, errorInfo)\n }\n\n override render(): ReactNode {\n if (this.state.hasError) {\n return (\n <Box p={3} borderWidth=\"1px\" borderColor=\"red.500\" borderRadius=\"md\" bg=\"red.50\" _dark={{ bg: 'red.950' }}>\n <Text color=\"red.600\" _dark={{ color: 'red.300' }} fontSize=\"sm\">\n Ошибка в поле "{this.props.fieldName}": {this.state.error?.message}\n </Text>\n </Box>\n )\n }\n\n return this.props.children\n }\n}\n","'use client'\n\nimport type { ValidationError } from '@tanstack/react-form'\n\n/**\n * Formats validation errors into a string for display\n *\n * Handles various error formats:\n * - Strings (returned as-is)\n * - Objects with `message` (StandardSchemaV1Issue, ZodIssue)\n * - Objects with `issues` array (ZodError)\n * - Nested error structures\n *\n * @example\n * ```tsx\n * const errors = field.state.meta.errors\n * {hasFieldErrors(errors) && (\n * <Field.ErrorText>{formatFieldErrors(errors)}</Field.ErrorText>\n * )}\n * ```\n */\nexport function formatFieldErrors(errors: ValidationError[]): string {\n return errors\n .map((e) => extractErrorMessage(e))\n .filter(Boolean)\n .join(', ')\n}\n\n/**\n * Extracts error message from various formats\n *\n * @internal\n */\nfunction extractErrorMessage(e: ValidationError): string {\n // String error\n if (typeof e === 'string') {\n return e\n }\n\n // Null/undefined\n if (e === null || e === undefined) {\n return ''\n }\n\n // Object with error\n if (typeof e === 'object') {\n // Array of errors (Zod issues from superRefine, array of strings etc.)\n if (Array.isArray(e)) {\n return e\n .map((item: unknown) => {\n // Element with message (ZodIssue)\n if (typeof item === 'object' && item && 'message' in item) {\n return (item as { message: string }).message\n }\n // String\n if (typeof item === 'string') {\n return item\n }\n return ''\n })\n .filter(Boolean)\n .join(', ')\n }\n\n // Standard format: { message: string }\n if ('message' in e && typeof e.message === 'string') {\n return e.message\n }\n\n // Zod format with issues array: { issues: Array<{ message: string }> }\n if ('issues' in e && Array.isArray(e.issues)) {\n return e.issues\n .map((issue: unknown) => {\n if (typeof issue === 'object' && issue && 'message' in issue) {\n return (issue as { message: string }).message\n }\n return ''\n })\n .filter(Boolean)\n .join(', ')\n }\n\n // Zod flat errors: { fieldErrors: Record<string, string[]> }\n if ('fieldErrors' in e && typeof e.fieldErrors === 'object' && e.fieldErrors) {\n const fieldErrors = e.fieldErrors as Record<string, string[]>\n return Object.values(fieldErrors).flat().filter(Boolean).join(', ')\n }\n\n // Zod format errors: { _errors: string[] }\n if ('_errors' in e && Array.isArray(e._errors)) {\n return (e._errors as string[]).filter(Boolean).join(', ')\n }\n\n // Fallback: try JSON.stringify for debugging\n // This is better than [object Object], can detect unknown formats\n try {\n const json = JSON.stringify(e)\n // If JSON is too long or empty object, don't show\n if (json === '{}' || json.length > 200) {\n return ''\n }\n // Log in dev mode for debugging unknown formats\n if (process.env.NODE_ENV === 'development') {\n console.warn('[form-components] Unknown error format:', e)\n }\n return json\n } catch {\n return ''\n }\n }\n\n // Other types (number, boolean) — unlikely, but handled\n return String(e)\n}\n\n/**\n * Checks for the presence of validation errors\n *\n * @example\n * ```tsx\n * const errors = field.state.meta.errors\n * const hasError = hasFieldErrors(errors)\n * ```\n */\nexport function hasFieldErrors(errors: ValidationError[] | undefined): errors is ValidationError[] {\n return Boolean(errors && errors.length > 0)\n}\n\n/**\n * Interface for useFieldErrors result\n */\nexport interface FieldErrorsResult {\n /** Validation errors */\n errors: ValidationError[]\n /** Whether there are errors */\n hasError: boolean\n /** Formatted error message */\n errorMessage: string\n}\n\n/**\n * Extracts error information from field API\n *\n * Simplifies error retrieval in manual Field components\n * that do not use the createField factory.\n *\n * @example\n * ```tsx\n * <form.Field name={fullPath}>\n * {(field: AnyFieldApi) => {\n * const { hasError, errorMessage } = getFieldErrors(field)\n * return (\n * <Field.Root invalid={hasError}>\n * ...\n * <FieldError hasError={hasError} errorMessage={errorMessage} />\n * </Field.Root>\n * )\n * }}\n * </form.Field>\n * ```\n */\nexport function getFieldErrors(field: { state: { meta: { errors?: ValidationError[] } } }): FieldErrorsResult {\n const errors = field.state.meta.errors ?? []\n const hasError = hasFieldErrors(errors)\n const errorMessage = hasError ? formatFieldErrors(errors) : ''\n return { errors, hasError, errorMessage }\n}\n","'use client'\n\nimport type {\n ZodArrayConstraints,\n ZodConstraints,\n ZodDateConstraints,\n ZodNumberConstraints,\n ZodStringConstraints,\n} from './schema-constraints'\n\n// =============================================================================\n// Translation types\n// =============================================================================\n\n/**\n * String templates for constraint hints.\n * Placeholders: {n}, {min}, {max}, {chars}, {items}, {suffix}\n */\nexport type ConstraintHintTranslations = {\n string_exact: string\n string_range: string\n string_max: string\n string_min: string\n number_range: string\n number_max: string\n number_min: string\n number_integer: string\n number_integer_suffix: string\n date_range: string\n date_after: string\n date_before: string\n array_exact: string\n array_range: string\n array_max: string\n array_min: string\n}\n\n// =============================================================================\n// Built-in translations (en, ru)\n// =============================================================================\n\nconst EN_TRANSLATIONS: ConstraintHintTranslations = {\n string_exact: 'Exactly {n} {chars}',\n string_range: 'From {min} to {max} characters',\n string_max: 'Maximum {n} {chars}',\n string_min: 'Minimum {n} {chars}',\n number_range: 'From {min} to {max}{suffix}',\n number_max: 'Maximum {max}{suffix}',\n number_min: 'Minimum {min}{suffix}',\n number_integer: 'Integer',\n number_integer_suffix: ' (integer)',\n date_range: 'From {min} to {max}',\n date_after: 'Not before {min}',\n date_before: 'Not after {max}',\n array_exact: 'Exactly {n} {items}',\n array_range: 'From {min} to {max} items',\n array_max: 'Maximum {n} {items}',\n array_min: 'Minimum {n} {items}',\n}\n\nconst RU_TRANSLATIONS: ConstraintHintTranslations = {\n string_exact: 'Ровно {n} {chars}',\n string_range: 'От {min} до {max} символов',\n string_max: 'Максимум {n} {chars}',\n string_min: 'Минимум {n} {chars}',\n number_range: 'От {min} до {max}{suffix}',\n number_max: 'Максимум {max}{suffix}',\n number_min: 'Минимум {min}{suffix}',\n number_integer: 'Целое число',\n number_integer_suffix: ' (целое)',\n date_range: 'С {min} по {max}',\n date_after: 'Не ранее {min}',\n date_before: 'Не позднее {max}',\n array_exact: 'Ровно {n} {items}',\n array_range: 'От {min} до {max} элементов',\n array_max: 'Максимум {n} {items}',\n array_min: 'Минимум {n} {items}',\n}\n\nconst BUILTIN_TRANSLATIONS: Record<string, ConstraintHintTranslations> = {\n en: EN_TRANSLATIONS,\n ru: RU_TRANSLATIONS,\n}\n\n// =============================================================================\n// Pluralization via Intl.PluralRules\n// =============================================================================\n\ntype PluralForms = { one: string; few?: string; many?: string; other: string }\n\nconst CHAR_PLURALS: Record<string, PluralForms> = {\n en: { one: 'character', other: 'characters' },\n ru: { one: 'символ', few: 'символа', many: 'символов', other: 'символов' },\n}\n\nconst ITEM_PLURALS: Record<string, PluralForms> = {\n en: { one: 'item', other: 'items' },\n ru: { one: 'элемент', few: 'элемента', many: 'элементов', other: 'элементов' },\n}\n\nfunction pluralizeWord(n: number, locale: string, plurals: Record<string, PluralForms>): string {\n const lang = locale.split('-')[0]!\n const forms = plurals[lang] ?? plurals.en!\n const rule = new Intl.PluralRules(locale).select(n)\n return (forms as Record<string, string>)[rule] ?? forms.other\n}\n\n// =============================================================================\n// Formatting via Intl\n// =============================================================================\n\nfunction formatNumber(n: number, locale: string): string {\n if (Number.isInteger(n)) {\n return new Intl.NumberFormat(locale).format(n)\n }\n return new Intl.NumberFormat(locale, { maximumFractionDigits: 2 }).format(n)\n}\n\nfunction formatDate(dateStr: string, locale: string): string {\n try {\n const date = new Date(dateStr)\n return new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }).format(date)\n } catch {\n return dateStr\n }\n}\n\n// =============================================================================\n// Template engine\n// =============================================================================\n\nfunction template(str: string, vars: Record<string, string | number>): string {\n return str.replace(/\\{(\\w+)\\}/g, (_, key) => String(vars[key] ?? ''))\n}\n\n// =============================================================================\n// Translation resolution\n// =============================================================================\n\nfunction getTranslations(locale: string, custom?: Partial<ConstraintHintTranslations>): ConstraintHintTranslations {\n const lang = locale.split('-')[0]!\n const base = BUILTIN_TRANSLATIONS[lang] ?? BUILTIN_TRANSLATIONS[locale] ?? EN_TRANSLATIONS\n if (custom) {\n return { ...base, ...custom }\n }\n return base\n}\n\n// =============================================================================\n// Main API\n// =============================================================================\n\n/**\n * Generates a human-readable hint from constraints.\n *\n * Supports i18n via locale parameter (en, ru built-in).\n * For other languages, pass customTranslations.\n *\n * @param constraints - constraints from Zod schema\n * @param locale - locale (default 'en')\n * @param customTranslations - custom string templates\n *\n * @example\n * ```tsx\n * generateConstraintHint(constraints) // → \"Minimum 2 characters\"\n * generateConstraintHint(constraints, 'ru') // -> \"Минимум 2 символа\"\n * ```\n */\nexport function generateConstraintHint(\n constraints: ZodConstraints | undefined,\n locale: string = 'en',\n customTranslations?: Partial<ConstraintHintTranslations>\n): string | undefined {\n if (!constraints) {\n return undefined\n }\n\n const t = getTranslations(locale, customTranslations)\n\n switch (constraints.schemaType) {\n case 'string':\n return generateStringHint(constraints.string, locale, t)\n case 'number':\n return generateNumberHint(constraints.number, locale, t)\n case 'date':\n return generateDateHint(constraints.date, locale, t)\n case 'array':\n return generateArrayHint(constraints.array, locale, t)\n default:\n return undefined\n }\n}\n\n// =============================================================================\n// Type-specific generators\n// =============================================================================\n\nfunction generateStringHint(\n constraints: ZodStringConstraints | undefined,\n locale: string,\n t: ConstraintHintTranslations\n): string | undefined {\n if (!constraints) return undefined\n\n const { minLength, maxLength, inputType } = constraints\n\n // Special types - only maxLength\n if (inputType === 'email' || inputType === 'url') {\n if (maxLength) {\n return template(t.string_max, { n: maxLength, chars: pluralizeWord(maxLength, locale, CHAR_PLURALS) })\n }\n return undefined\n }\n\n if (minLength !== undefined && maxLength !== undefined) {\n if (minLength === maxLength) {\n return template(t.string_exact, { n: minLength, chars: pluralizeWord(minLength, locale, CHAR_PLURALS) })\n }\n return template(t.string_range, { min: minLength, max: maxLength })\n }\n\n if (maxLength !== undefined) {\n return template(t.string_max, { n: maxLength, chars: pluralizeWord(maxLength, locale, CHAR_PLURALS) })\n }\n\n if (minLength !== undefined) {\n return template(t.string_min, { n: minLength, chars: pluralizeWord(minLength, locale, CHAR_PLURALS) })\n }\n\n return undefined\n}\n\nfunction generateNumberHint(\n constraints: ZodNumberConstraints | undefined,\n locale: string,\n t: ConstraintHintTranslations\n): string | undefined {\n if (!constraints) return undefined\n\n const { min, max, isInteger } = constraints\n const suffix = isInteger ? t.number_integer_suffix : ''\n\n if (min !== undefined && max !== undefined) {\n return template(t.number_range, { min: formatNumber(min, locale), max: formatNumber(max, locale), suffix })\n }\n\n if (max !== undefined) {\n return template(t.number_max, { max: formatNumber(max, locale), suffix })\n }\n\n if (min !== undefined) {\n return template(t.number_min, { min: formatNumber(min, locale), suffix })\n }\n\n if (isInteger) {\n return t.number_integer\n }\n\n return undefined\n}\n\nfunction generateDateHint(\n constraints: ZodDateConstraints | undefined,\n locale: string,\n t: ConstraintHintTranslations\n): string | undefined {\n if (!constraints) return undefined\n\n const { min, max } = constraints\n\n if (min && max) {\n return template(t.date_range, { min: formatDate(min, locale), max: formatDate(max, locale) })\n }\n\n if (min) {\n return template(t.date_after, { min: formatDate(min, locale) })\n }\n\n if (max) {\n return template(t.date_before, { max: formatDate(max, locale) })\n }\n\n return undefined\n}\n\nfunction generateArrayHint(\n constraints: ZodArrayConstraints | undefined,\n locale: string,\n t: ConstraintHintTranslations\n): string | undefined {\n if (!constraints) return undefined\n\n const { minItems, maxItems } = constraints\n\n if (minItems !== undefined && maxItems !== undefined) {\n if (minItems === maxItems) {\n return template(t.array_exact, { n: minItems, items: pluralizeWord(minItems, locale, ITEM_PLURALS) })\n }\n return template(t.array_range, { min: minItems, max: maxItems })\n }\n\n if (maxItems !== undefined) {\n return template(t.array_max, { n: maxItems, items: pluralizeWord(maxItems, locale, ITEM_PLURALS) })\n }\n\n if (minItems !== undefined) {\n return template(t.array_min, { n: minItems, items: pluralizeWord(minItems, locale, ITEM_PLURALS) })\n }\n\n return undefined\n}\n","'use client'\n\nimport type { ReactNode } from 'react'\nimport { getLocalizedValue, useFormI18n, useLocalizedOptions } from '../../../i18n'\nimport { generateConstraintHint } from '../../constraint-hints'\nimport type { ZodConstraints } from '../../schema-constraints'\nimport type { BaseFieldProps, FieldOptionMeta, FieldTooltipMeta } from '../../types'\nimport { useDeclarativeField } from './base-field'\n\n/**\n * Resolves all field props considering schema and form-level settings\n *\n * Priority:\n * 1. Component props (highest)\n * 2. Zod schema meta (ui: { title, placeholder, description, tooltip })\n * 3. Automatically generated hint from constraints (if helperText not set)\n * 4. Form-level settings (disabled, readOnly)\n *\n * @example\n * ```tsx\n * function FieldString({ name, label, placeholder, helperText, required, disabled, readOnly, tooltip }: StringFieldProps) {\n * const {\n * form, fullPath,\n * label: resolvedLabel,\n * placeholder: resolvedPlaceholder,\n * helperText: resolvedHelperText,\n * required: resolvedRequired,\n * disabled: resolvedDisabled,\n * readOnly: resolvedReadOnly,\n * tooltip: resolvedTooltip,\n * constraints,\n * } = useResolvedFieldProps(name, { label, placeholder, helperText, required, disabled, readOnly, tooltip })\n * // ...\n * }\n * ```\n */\nexport function useResolvedFieldProps(\n name: string | undefined,\n props: BaseFieldProps\n): {\n form: ReturnType<typeof useDeclarativeField>['form']\n fullPath: string\n label: ReactNode\n placeholder: string | undefined\n helperText: ReactNode\n tooltip: FieldTooltipMeta | undefined\n required: boolean | undefined\n disabled: boolean | undefined\n readOnly: boolean | undefined\n /** Automatic constraints from Zod schema (min, max, minLength, maxLength etc.) */\n constraints: ZodConstraints\n /** Options for select fields (from meta.options with i18n translations) */\n options: FieldOptionMeta[] | undefined\n} {\n const {\n form,\n fullPath,\n meta,\n required: schemaRequired,\n formDisabled,\n formReadOnly,\n constraints,\n } = useDeclarativeField(name)\n\n // Get i18n context (can be null)\n const i18n = useFormI18n()\n const i18nKey = meta?.i18nKey\n\n // Resolve translated values\n // Priority: props > i18n translation > meta fallback\n const resolvedTitle = getLocalizedValue(i18n, i18nKey, 'title', meta?.title)\n const resolvedPlaceholder = getLocalizedValue(i18n, i18nKey, 'placeholder', meta?.placeholder)\n const resolvedDescription = getLocalizedValue(i18n, i18nKey, 'description', meta?.description)\n\n // Automatic hint from constraints (if helperText not explicitly set)\n // Priority: props.helperText > i18n description > meta.description > auto-generated hint\n const autoHint = generateConstraintHint(constraints, i18n?.locale ?? 'en')\n const helperText = props.helperText ?? resolvedDescription ?? autoHint\n\n // Localize options from meta (for select/enum fields)\n const localizedOptions = useLocalizedOptions(meta?.options)\n\n return {\n form,\n fullPath,\n // Props override i18n override schema meta\n label: props.label ?? resolvedTitle,\n placeholder: props.placeholder ?? resolvedPlaceholder,\n helperText,\n // Tooltip from props or schema meta\n tooltip: (props.tooltip ?? meta?.tooltip) as FieldTooltipMeta | undefined,\n // Required from schema or prop\n required: props.required ?? schemaRequired,\n // Form-level + local props (local wins)\n disabled: props.disabled ?? formDisabled,\n readOnly: props.readOnly ?? formReadOnly,\n // Constraints for additional component configuration\n constraints,\n // Options with i18n translations\n options: localizedOptions,\n }\n}\n","'use client'\n\nimport { Field } from '@chakra-ui/react'\nimport type { AnyFieldApi } from '@tanstack/react-form'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { ZodConstraints } from '../../schema-constraints'\nimport type { BaseFieldProps, FieldTooltipMeta } from '../../types'\nimport { FieldErrorBoundary } from './field-error-boundary'\nimport { FieldLabel } from './field-label'\nimport { formatFieldErrors, hasFieldErrors } from './field-utils'\nimport { useResolvedFieldProps } from './use-resolved-field-props'\n\n/**\n * Resolved props after applying schema meta and form-level settings\n */\nexport interface ResolvedFieldProps {\n /** Label (from props or schema meta) */\n label: ReactNode\n /** Placeholder */\n placeholder: string | undefined\n /** Helper text below field (can be automatically generated from constraints) */\n helperText: ReactNode\n /** Tooltip with icon */\n tooltip: FieldTooltipMeta | undefined\n /** Required field (from props or schema) */\n required: boolean | undefined\n /** Field disabled (from props or form-level) */\n disabled: boolean | undefined\n /** Read only (from props or form-level) */\n readOnly: boolean | undefined\n /** Automatic constraints from Zod schema (min, max, minLength, maxLength etc.) */\n constraints: ZodConstraints\n /** Options for select fields (from meta.options with i18n translations) */\n options: Array<{ value: string | number; label: string; disabled?: boolean; i18nKey?: string }> | undefined\n}\n\n/**\n * Props passed to the render function\n */\nexport interface FieldRenderProps<TValue = unknown, TState = Record<string, never>> {\n /** TanStack Form field API */\n field: AnyFieldApi\n /** Typed field value */\n value: TValue\n /** Full path to the field (for example, \"user.address.city\") */\n fullPath: string\n /** Resolved props (label, placeholder, etc.) */\n resolved: ResolvedFieldProps\n /** Whether there are validation errors */\n hasError: boolean\n /** Formatted error message */\n errorMessage: string\n /** Local component state (from useFieldState) */\n fieldState: TState\n}\n\n/**\n * Render function for createField\n *\n * Receives field API, resolved props, local state and must return full JSX\n * including Field.Root wrapper and error display.\n */\nexport type FieldRenderFn<P extends BaseFieldProps, TValue = unknown, TState = Record<string, never>> = (\n props: FieldRenderProps<TValue, TState> & { componentProps: Omit<P, keyof BaseFieldProps> }\n) => ReactElement\n\n/**\n * Options for createField\n *\n * @template P - Component props type (extends BaseFieldProps)\n * @template TValue - Field value type\n * @template TState - Local state type (from useFieldState)\n */\nexport interface CreateFieldOptions<P extends BaseFieldProps, TValue = unknown, TState = Record<string, never>> {\n /** Name for React DevTools */\n displayName: string\n\n /**\n * Hook for local component state\n *\n * Called at the top level of the component, BEFORE form.Field.\n * Can use useState, useEffect, useCallback, useMemo and other hooks.\n *\n * @param props - Component props (without BaseFieldProps)\n * @param resolved - Resolved props (label, placeholder, etc.)\n * @returns State object that will be passed to render as fieldState\n *\n * @example\n * ```tsx\n * useFieldState: (props) => {\n * const [visible, setVisible] = useState(props.defaultVisible ?? false)\n * return { visible, toggle: () => setVisible((v) => !v) }\n * }\n * ```\n */\n useFieldState?: (componentProps: Omit<P, keyof BaseFieldProps>, resolved: ResolvedFieldProps) => TState\n\n /** Render function (full control over JSX) */\n render: FieldRenderFn<P, TValue, TState>\n}\n\n/**\n * Factory function for creating Field components with minimal boilerplate\n *\n * Automatically:\n * - Resolves props from schema meta and form-level settings\n * - Creates form.Field wrapper\n * - Computes hasError and errorMessage\n * - Calls useFieldState for local state (if provided)\n *\n * @example Simple field (Input, Textarea)\n * ```tsx\n * export const FieldString = createField<StringFieldProps, string>({\n * displayName: 'FieldString',\n * render: ({ field, resolved, hasError, errorMessage }) => (\n * <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage}>\n * <Input\n * value={field.state.value ?? ''}\n * onChange={(e) => field.handleChange(e.target.value)}\n * onBlur={field.handleBlur}\n * />\n * </FieldWrapper>\n * ),\n * })\n * ```\n *\n * @example Field with local state (Password with toggle)\n * ```tsx\n * export const FieldPassword = createField<PasswordFieldProps, string, { visible: boolean; toggle: () => void }>({\n * displayName: 'FieldPassword',\n * useFieldState: (props) => {\n * const [visible, setVisible] = useState(props.defaultVisible ?? false)\n * return { visible, toggle: () => setVisible((v) => !v) }\n * },\n * render: ({ field, resolved, hasError, errorMessage, fieldState }) => (\n * <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage}>\n * <InputGroup endElement={<IconButton onClick={fieldState.toggle}>...</IconButton>}>\n * <Input type={fieldState.visible ? 'text' : 'password'} ... />\n * </InputGroup>\n * </FieldWrapper>\n * ),\n * })\n * ```\n *\n * @example Checkbox with custom label\n * ```tsx\n * export const FieldCheckbox = createField<CheckboxFieldProps, boolean>({\n * displayName: 'FieldCheckbox',\n * render: ({ field, resolved, hasError, errorMessage, componentProps }) => (\n * <Field.Root invalid={hasError} required={resolved.required} disabled={resolved.disabled}>\n * <Checkbox.Root\n * checked={!!field.state.value}\n * onCheckedChange={(e) => field.handleChange(!!e.checked)}\n * colorPalette={componentProps.colorPalette}\n * >\n * <Checkbox.HiddenInput onBlur={field.handleBlur} />\n * <Checkbox.Control />\n * {resolved.label && <Checkbox.Label>{resolved.label}</Checkbox.Label>}\n * </Checkbox.Root>\n * <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n * </Field.Root>\n * ),\n * })\n * ```\n */\nexport function createField<P extends BaseFieldProps, TValue = unknown, TState = Record<string, never>>(\n options: CreateFieldOptions<P, TValue, TState>\n): (props: P) => ReactElement {\n const { displayName, render } = options\n // Use no-op hook by default so the call is always unconditional\n const useFieldState = options.useFieldState ?? (() => ({}) as TState)\n\n function FieldComponent(props: P): ReactElement {\n const { name, label, placeholder, helperText, required, disabled, readOnly, tooltip, ...componentProps } = props\n\n const { form, fullPath, ...resolvedRest } = useResolvedFieldProps(name, {\n label,\n placeholder,\n helperText,\n required,\n disabled,\n readOnly,\n tooltip,\n })\n\n const resolved: ResolvedFieldProps = {\n label: resolvedRest.label,\n placeholder: resolvedRest.placeholder,\n helperText: resolvedRest.helperText,\n tooltip: resolvedRest.tooltip,\n required: resolvedRest.required,\n disabled: resolvedRest.disabled,\n readOnly: resolvedRest.readOnly,\n constraints: resolvedRest.constraints,\n options: resolvedRest.options,\n }\n\n // Call useFieldState at the top level (before form.Field)\n // This allows using hooks inside useFieldState\n const fieldState = useFieldState(componentProps as Omit<P, keyof BaseFieldProps>, resolved)\n\n return (\n <FieldErrorBoundary fieldName={fullPath}>\n <form.Field name={fullPath}>\n {(field: AnyFieldApi) => {\n const errors = field.state.meta.errors\n const isTouched = field.state.meta.isTouched\n // Show errors only if field was touched (after blur or programmatic validation)\n const hasError = isTouched && hasFieldErrors(errors)\n const errorMessage = hasError ? formatFieldErrors(errors) : ''\n\n return render({\n field,\n value: field.state.value as TValue,\n fullPath,\n resolved,\n hasError,\n errorMessage,\n fieldState,\n componentProps: componentProps as Omit<P, keyof BaseFieldProps>,\n })\n }}\n </form.Field>\n </FieldErrorBoundary>\n )\n }\n\n FieldComponent.displayName = displayName\n return FieldComponent\n}\n\n/**\n * Component for displaying errors or hints\n *\n * Helper component for use inside createField render functions.\n * Shows error if present, otherwise helperText.\n *\n * @example\n * ```tsx\n * <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n * ```\n */\nexport function FieldError({\n hasError,\n errorMessage,\n helperText,\n}: {\n hasError: boolean\n errorMessage: string\n helperText: ReactNode\n}): ReactElement | null {\n if (hasError) {\n return <Field.ErrorText>{errorMessage}</Field.ErrorText>\n }\n if (helperText) {\n return <Field.HelperText>{helperText}</Field.HelperText>\n }\n return null\n}\n\n// Re-export for convenience\nexport { FieldLabel }\n","'use client'\n\nimport { Field } from '@chakra-ui/react'\nimport { memo, type ReactElement, type ReactNode } from 'react'\nimport type { ResolvedFieldProps } from './create-field'\nimport { FieldError } from './create-field'\nimport { FieldLabel } from './field-label'\n\nexport interface FieldWrapperProps {\n /** Resolved props from createField */\n resolved: ResolvedFieldProps\n /** Whether there are validation errors */\n hasError: boolean\n /** Formatted error message */\n errorMessage: string\n /** Full path for data-field-name attribute */\n fullPath: string\n /** Field content (Input, Textarea, etc.) */\n children: ReactNode\n}\n\n/**\n * Standard wrapper for simple fields\n *\n * Provides:\n * - Field.Root with invalid/required/disabled/readOnly props\n * - FieldLabel with support for tooltip\n * - FieldError with fallback to helperText\n *\n * Use inside createField render functions for simple Input-like fields\n * with standard layout: Label → Control → Error/Helper\n *\n * @example\n * ```tsx\n * export const FieldString = createField<StringFieldProps, string>({\n * displayName: 'FieldString',\n * render: ({ field, fullPath, resolved, hasError, errorMessage }) => (\n * <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n * <Input\n * value={field.state.value ?? ''}\n * onChange={(e) => field.handleChange(e.target.value)}\n * onBlur={field.handleBlur}\n * placeholder={resolved.placeholder}\n * data-field-name={fullPath}\n * />\n * </FieldWrapper>\n * ),\n * })\n * ```\n */\nexport const FieldWrapper = memo(function FieldWrapper({\n resolved,\n hasError,\n errorMessage,\n children,\n}: FieldWrapperProps): ReactElement {\n return (\n <Field.Root\n invalid={hasError}\n required={resolved.required}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n >\n <FieldLabel label={resolved.label} tooltip={resolved.tooltip} required={resolved.required} />\n {children}\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n})\n","'use client'\n\nimport { Field, HStack } from '@chakra-ui/react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { FieldTooltipMeta } from '../../types'\nimport { FieldTooltip } from './field-tooltip'\n\n/**\n * Props for SelectionFieldLabel\n */\nexport interface SelectionFieldLabelProps {\n /** Label text */\n label: ReactNode\n /** Data for tooltip hint */\n tooltip?: FieldTooltipMeta\n /** Show required field indicator */\n required?: boolean\n}\n\n/**\n * Unified label for selection fields (Select, Combobox, Listbox, Autocomplete).\n * Avoids duplicating the HStack + FieldTooltip pattern across 12+ files.\n *\n * @example\n * ```tsx\n * <Select.Label>\n * <SelectionFieldLabel\n * label={resolved.label}\n * tooltip={resolved.tooltip}\n * required={resolved.required}\n * />\n * </Select.Label>\n * ```\n */\nexport function SelectionFieldLabel({ label, tooltip, required }: SelectionFieldLabelProps): ReactElement {\n return (\n <>\n {tooltip ? (\n <HStack gap={1}>\n <span>{label}</span>\n <FieldTooltip {...tooltip} />\n </HStack>\n ) : (\n label\n )}\n {required && <Field.RequiredIndicator />}\n </>\n )\n}\n","'use client'\n\nimport { createListCollection } from '@chakra-ui/react'\nimport type { ReactNode } from 'react'\nimport { useMemo } from 'react'\nimport type { GroupableOption } from '../../types'\n\n/**\n * Result of useGroupedOptions hook\n */\nexport interface GroupedOptionsResult<T = string> {\n /** Collection for Chakra components (Select, Combobox, Listbox) */\n collection: ReturnType<typeof createListCollection<GroupableOption<T>>>\n /** Map groups with options (null if no grouping) */\n groups: Map<string, GroupableOption<T>[]> | null\n}\n\n/**\n * Function to get label from an option\n * Used for itemToString in collection and text rendering\n *\n * @example\n * ```tsx\n * // In collection itemToString\n * createListCollection({ items, itemToString: getOptionLabel })\n *\n * // In rendering\n * <Select.ItemText>{getOptionLabel(option)}</Select.ItemText>\n * ```\n */\nexport function getOptionLabel<T>(item: { label?: string | ReactNode; value: T }): string {\n return typeof item.label === 'string' ? item.label : String(item.value)\n}\n\n/**\n * Hook for creating a collection with optional grouping\n *\n * Encapsulates common logic:\n * - Creating Chakra ListCollection from options\n * - Determining group presence\n * - Grouping options into a Map for rendering\n *\n * @example Usage in Listbox\n * ```tsx\n * const { collection, groups } = useGroupedOptions(options)\n *\n * return (\n * <Listbox.Root collection={collection}>\n * {groups\n * ? Array.from(groups.entries()).map(([name, opts]) => (\n * <Listbox.ItemGroup key={name}>\n * <Listbox.ItemGroupLabel>{name}</Listbox.ItemGroupLabel>\n * {opts.map(opt => <Listbox.Item key={opt.value} item={opt} />)}\n * </Listbox.ItemGroup>\n * ))\n * : options.map(opt => <Listbox.Item key={opt.value} item={opt} />)\n * }\n * </Listbox.Root>\n * )\n * ```\n */\nexport function useGroupedOptions<T = string>(options: GroupableOption<T>[]): GroupedOptionsResult<T> {\n // Create collection with optional grouping\n const collection = useMemo(() => {\n const hasGroups = options.some((opt) => opt.group)\n\n return createListCollection({\n items: options,\n itemToString: getOptionLabel,\n itemToValue: (item) => item.value as string,\n isItemDisabled: (item: GroupableOption<T>) => item.disabled ?? false,\n ...(hasGroups && {\n groupBy: (item: GroupableOption<T>) => item.group ?? '',\n }),\n })\n }, [options])\n\n // Check for groups and create Map\n const groups = useMemo(() => {\n const hasGroups = options.some((opt) => opt.group)\n if (!hasGroups) {\n return null\n }\n\n const groupMap = new Map<string, GroupableOption<T>[]>()\n for (const opt of options) {\n const group = opt.group ?? ''\n const existing = groupMap.get(group) ?? []\n groupMap.set(group, [...existing, opt])\n }\n return groupMap\n }, [options])\n\n return { collection, groups }\n}\n"]}
|