@letar/forms 1.0.3 → 1.1.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.
@@ -0,0 +1 @@
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"]}