@letar/forms 1.0.0 → 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.
- package/CHANGELOG.md +57 -0
- package/README.md +79 -4
- package/README.ru.md +304 -0
- package/{chunk-G3HYXHCZ.js → chunk-4V6WBJ76.js} +14 -14
- package/chunk-4V6WBJ76.js.map +1 -0
- package/chunk-6QOPSQ3Z.js +78 -0
- package/chunk-6QOPSQ3Z.js.map +1 -0
- package/{chunk-GIBNEYK3.js → chunk-7FEQFDJ7.js} +5 -4
- package/chunk-7FEQFDJ7.js.map +1 -0
- package/chunk-GOELIS6T.js +849 -0
- package/chunk-GOELIS6T.js.map +1 -0
- package/chunk-HWVOFWAT.js +846 -0
- package/chunk-HWVOFWAT.js.map +1 -0
- package/chunk-KUNT5MSU.js +709 -0
- package/chunk-KUNT5MSU.js.map +1 -0
- package/chunk-M2PNAAIR.js +971 -0
- package/chunk-M2PNAAIR.js.map +1 -0
- package/chunk-PJETA6YN.js +821 -0
- package/chunk-PJETA6YN.js.map +1 -0
- package/chunk-XKKJKYWZ.js +299 -0
- package/chunk-XKKJKYWZ.js.map +1 -0
- package/fields/boolean.js +5 -0
- package/fields/boolean.js.map +1 -0
- package/fields/datetime.js +5 -0
- package/fields/datetime.js.map +1 -0
- package/fields/number.js +5 -0
- package/fields/number.js.map +1 -0
- package/fields/selection.js +5 -0
- package/fields/selection.js.map +1 -0
- package/fields/specialized.js +5 -0
- package/fields/specialized.js.map +1 -0
- package/fields/text.js +5 -0
- package/fields/text.js.map +1 -0
- package/i18n.js +1 -1
- package/index.js +261 -4540
- package/index.js.map +1 -1
- package/offline.js +1 -1
- package/package.json +33 -2
- package/chunk-G3HYXHCZ.js.map +0 -1
- package/chunk-GIBNEYK3.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/declarative/form-fields/text/field-editable.tsx","../src/lib/declarative/form-fields/text/field-password.tsx","../src/lib/declarative/form-fields/text/field-password-strength.tsx","../src/lib/declarative/form-fields/text/toolbar-config.tsx","../src/lib/declarative/form-fields/text/image-popover.tsx","../src/lib/declarative/form-fields/text/link-popover.tsx","../src/lib/declarative/form-fields/text/field-rich-text.tsx","../src/lib/declarative/form-fields/text/field-string.tsx","../src/lib/declarative/form-fields/text/field-textarea.tsx","../src/lib/declarative/form-fields/text/field-masked-input.tsx"],"names":["jsx","IconButton","useState","jsxs","Field","Input","LuEyeOff","LuEye","LuImage","VStack","Box","Text","HStack","LuX","useCallback","Popover","LuLink","Portal","Button","editor"],"mappings":"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","file":"chunk-M2PNAAIR.js","sourcesContent":["'use client'\n\nimport { Editable, Field, IconButton } from '@chakra-ui/react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { BaseFieldProps } from '../../types'\nimport { createField, FieldError, FieldLabel } from '../base'\n\n/**\n * Props for Editable field\n */\nexport interface EditableFieldProps extends Omit<BaseFieldProps, 'placeholder'> {\n /** Placeholder when empty */\n placeholder?: string\n /** Use textarea for multiline editing (by default: false) */\n multiline?: boolean\n /** Activation mode (by default: click) */\n activationMode?: 'click' | 'dblclick' | 'focus' | 'none'\n /** Show control buttons (edit, cancel, save) (by default: false) */\n showControls?: boolean\n /** Automatically resize textarea (only for multiline=true) (by default: true) */\n autoResize?: boolean\n /** Custom edit icon */\n editIcon?: ReactNode\n /** Custom cancel icon */\n cancelIcon?: ReactNode\n /** Custom submit icon */\n submitIcon?: ReactNode\n /** Save on blur (by default: true) */\n submitOnBlur?: boolean\n}\n\n/**\n * Form.Field.Editable - Inline editable text\n *\n * Renders text that can be clicked for inline editing.\n * Supports single-line input and multiline textarea.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.Editable\n * name=\"title\"\n * label=\"Title\"\n * placeholder=\"Click to add title\"\n * />\n * ```\n *\n * @example Multiline\n * ```tsx\n * <Form.Field.Editable\n * name=\"description\"\n * multiline\n * placeholder=\"Click to add description...\"\n * />\n * ```\n *\n * @example With control buttons\n * ```tsx\n * <Form.Field.Editable\n * name=\"name\"\n * showControls\n * activationMode=\"dblclick\"\n * />\n * ```\n */\nexport const FieldEditable = createField<EditableFieldProps, string>({\n displayName: 'FieldEditable',\n\n render: ({ field, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const {\n multiline = false,\n activationMode = 'click',\n showControls = false,\n editIcon,\n cancelIcon,\n submitIcon,\n submitOnBlur = true,\n } = componentProps\n\n const currentValue = (field.state.value as string) || ''\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\n <Editable.Root\n value={currentValue}\n onValueChange={(details) => field.handleChange(details.value)}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n placeholder={resolved.placeholder ?? 'Click to edit'}\n activationMode={activationMode}\n submitMode={submitOnBlur ? 'blur' : 'enter'}\n >\n <Editable.Preview\n minH={multiline ? '48px' : undefined}\n alignItems={multiline ? 'flex-start' : undefined}\n width=\"full\"\n />\n\n {multiline ? <Editable.Textarea /> : <Editable.Input />}\n\n {showControls && (\n <Editable.Control>\n <Editable.EditTrigger asChild>\n <IconButton variant=\"ghost\" size=\"xs\">\n {editIcon ?? '✏️'}\n </IconButton>\n </Editable.EditTrigger>\n <Editable.CancelTrigger asChild>\n <IconButton variant=\"outline\" size=\"xs\">\n {cancelIcon ?? '✕'}\n </IconButton>\n </Editable.CancelTrigger>\n <Editable.SubmitTrigger asChild>\n <IconButton variant=\"outline\" size=\"xs\">\n {submitIcon ?? '✓'}\n </IconButton>\n </Editable.SubmitTrigger>\n </Editable.Control>\n )}\n </Editable.Root>\n\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport { IconButton, Input, InputGroup } from '@chakra-ui/react'\nimport { type ReactElement, useState } from 'react'\nimport { LuEye, LuEyeOff } from 'react-icons/lu'\nimport type { PasswordFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * State for toggling password visibility\n */\ninterface PasswordFieldState {\n /** Whether password is visible */\n visible: boolean\n /** Toggle visibility */\n toggle: () => void\n}\n\n/**\n * Form.Field.Password - Password input field with visibility toggle\n *\n * Renders a password input field with a show/hide button.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.Password name=\"password\" label=\"Password\" />\n * ```\n *\n * @example With visible password by default\n * ```tsx\n * <Form.Field.Password name=\"password\" label=\"Password\" defaultVisible />\n * ```\n */\nexport const FieldPassword = createField<PasswordFieldProps, string, PasswordFieldState>({\n displayName: 'FieldPassword',\n\n useFieldState: (props) => {\n const [visible, setVisible] = useState(props.defaultVisible ?? false)\n return {\n visible,\n toggle: () => setVisible((v) => !v),\n }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps, fieldState }): ReactElement => (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <InputGroup\n endElement={\n <IconButton\n tabIndex={-1}\n me=\"-2\"\n aspectRatio=\"square\"\n size=\"sm\"\n variant=\"ghost\"\n height=\"calc(100% - {spacing.2})\"\n aria-label=\"Toggle password visibility\"\n disabled={resolved.disabled}\n onPointerDown={(e) => {\n if (resolved.disabled) {\n return\n }\n if (e.button !== 0) {\n return\n }\n e.preventDefault()\n fieldState.toggle()\n }}\n >\n {fieldState.visible ? <LuEyeOff /> : <LuEye />}\n </IconButton>\n }\n >\n <Input\n type={fieldState.visible ? 'text' : 'password'}\n value={(field.state.value as string) ?? ''}\n onChange={(e) => field.handleChange((e.target as HTMLInputElement).value)}\n onBlur={field.handleBlur}\n placeholder={resolved.placeholder}\n maxLength={componentProps.maxLength}\n autoComplete={componentProps.autoComplete}\n data-field-name={fullPath}\n />\n </InputGroup>\n </FieldWrapper>\n ),\n})\n","'use client'\n\nimport { Box, Field, HStack, IconButton, Input, List, Progress, Text, VStack } from '@chakra-ui/react'\nimport { type ReactElement, useState } from 'react'\nimport { LuCheck, LuEye, LuEyeOff, LuX } from 'react-icons/lu'\nimport type { PasswordRequirement, PasswordStrengthFieldProps } from '../../types'\nimport { createField, FieldError, FieldLabel } from '../base'\n\n/**\n * Default password requirements\n */\nconst DEFAULT_REQUIREMENTS: PasswordRequirement[] = ['minLength:8', 'uppercase', 'lowercase', 'number', 'special']\n\n/**\n * Requirement descriptions\n */\nconst REQUIREMENT_LABELS: Record<PasswordRequirement, string> = {\n 'minLength:8': 'Minimum 8 characters',\n uppercase: 'At least one uppercase letter',\n lowercase: 'At least one lowercase letter',\n number: 'At least one digit',\n special: 'At least one special character (!@#$%^&*)',\n}\n\n/**\n * Checks if password meets a requirement\n */\nfunction checkRequirement(password: string, requirement: PasswordRequirement): boolean {\n switch (requirement) {\n case 'minLength:8':\n return password.length >= 8\n case 'uppercase':\n return /[A-Z]/.test(password)\n case 'lowercase':\n return /[a-z]/.test(password)\n case 'number':\n return /[0-9]/.test(password)\n case 'special':\n return /[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/.test(password)\n default:\n return false\n }\n}\n\n/**\n * Computes password strength (0-100)\n */\nfunction calculateStrength(password: string, requirements: PasswordRequirement[]): number {\n if (!password) {\n return 0\n }\n\n const metCount = requirements.filter((req) => checkRequirement(password, req)).length\n return Math.round((metCount / requirements.length) * 100)\n}\n\n/**\n * Gets description and color for password strength\n */\nfunction getStrengthInfo(strength: number): { label: string; colorPalette: string } {\n if (strength < 25) {\n return { label: 'Weak', colorPalette: 'red' }\n }\n if (strength < 50) {\n return { label: 'Medium', colorPalette: 'orange' }\n }\n if (strength < 75) {\n return { label: 'Good', colorPalette: 'yellow' }\n }\n return { label: 'Strong', colorPalette: 'green' }\n}\n\n/**\n * State for password field with strength indicator\n */\ninterface PasswordStrengthFieldState {\n /** Password visibility */\n visible: boolean\n /** Toggle visibility */\n toggle: () => void\n}\n\n/**\n * Form.Field.PasswordStrength - Password with strength indicator\n *\n * Renders a password field with a visual strength indicator and requirements checklist.\n *\n * @example With default requirements\n * ```tsx\n * <Form.Field.PasswordStrength name=\"password\" label=\"Password\" showRequirements />\n * ```\n *\n * @example With custom requirements\n * ```tsx\n * <Form.Field.PasswordStrength\n * name=\"password\"\n * requirements={['minLength:8', 'uppercase', 'number']}\n * showRequirements\n * />\n * ```\n */\nexport const FieldPasswordStrength = createField<PasswordStrengthFieldProps, string, PasswordStrengthFieldState>({\n displayName: 'FieldPasswordStrength',\n\n useFieldState: (props) => {\n const [visible, setVisible] = useState(props.defaultVisible ?? false)\n return { visible, toggle: () => setVisible((v) => !v) }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps, fieldState }): ReactElement => {\n const { requirements = DEFAULT_REQUIREMENTS, showRequirements = true } = componentProps\n const { visible, toggle } = fieldState\n\n const value = (field.state.value as string) ?? ''\n const strength = calculateStrength(value, requirements)\n const { label: strengthLabel, colorPalette } = getStrengthInfo(strength)\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 <VStack gap={2} align=\"stretch\" width=\"100%\">\n <HStack>\n <Input\n type={visible ? 'text' : 'password'}\n value={value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n placeholder={resolved.placeholder ?? 'Enter password'}\n data-field-name={fullPath}\n flex={1}\n />\n <IconButton\n aria-label={visible ? 'Hide password' : 'Show password'}\n onClick={toggle}\n variant=\"ghost\"\n size=\"sm\"\n >\n {visible ? <LuEyeOff /> : <LuEye />}\n </IconButton>\n </HStack>\n\n {value && (\n <Box>\n <HStack justify=\"space-between\" mb={1}>\n <Text fontSize=\"xs\" color=\"fg.muted\">\n Strength\n </Text>\n <Text fontSize=\"xs\" fontWeight=\"medium\" color={`${colorPalette}.600`}>\n {strengthLabel}\n </Text>\n </HStack>\n <Progress.Root value={strength} colorPalette={colorPalette} size=\"xs\">\n <Progress.Track>\n <Progress.Range />\n </Progress.Track>\n </Progress.Root>\n </Box>\n )}\n\n {showRequirements && value && (\n <List.Root fontSize=\"sm\" gap={1}>\n {requirements.map((req) => {\n const met = checkRequirement(value, req)\n return (\n <List.Item key={req} display=\"flex\" alignItems=\"center\" gap={2}>\n <Box color={met ? 'green.500' : 'gray.400'}>{met ? <LuCheck size={14} /> : <LuX size={14} />}</Box>\n <Text color={met ? 'fg.default' : 'fg.muted'}>{REQUIREMENT_LABELS[req]}</Text>\n </List.Item>\n )\n })}\n </List.Root>\n )}\n </VStack>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport type { useEditor } from '@tiptap/react'\nimport type { ReactNode } from 'react'\nimport {\n LuBold,\n LuCode,\n LuHeading1,\n LuHeading2,\n LuHeading3,\n LuImage,\n LuItalic,\n LuLink,\n LuList,\n LuListOrdered,\n LuQuote,\n LuRedo,\n LuStrikethrough,\n LuUnderline,\n LuUndo,\n} from 'react-icons/lu'\n\n/**\n * Доступные кнопки toolbar\n */\nexport type ToolbarButton =\n | 'bold'\n | 'italic'\n | 'underline'\n | 'strike'\n | 'code'\n | 'heading1'\n | 'heading2'\n | 'heading3'\n | 'bulletList'\n | 'orderedList'\n | 'blockquote'\n | 'link'\n | 'image'\n | 'undo'\n | 'redo'\n\n/**\n * Buttons тулбара by default\n */\nexport const DEFAULT_TOOLBAR_BUTTONS: ToolbarButton[] = [\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'code',\n 'heading1',\n 'heading2',\n 'heading3',\n 'bulletList',\n 'orderedList',\n 'blockquote',\n 'link',\n 'undo',\n 'redo',\n]\n\n/**\n * Конфигурация кнопки toolbar\n */\nexport interface ToolbarButtonConfig {\n icon: ReactNode\n label: string\n action: (editor: ReturnType<typeof useEditor>) => void\n isActive?: (editor: ReturnType<typeof useEditor>) => boolean\n}\n\n/**\n * Конфигурация всех кнопок тулбара\n */\nexport const TOOLBAR_CONFIG: Record<ToolbarButton, ToolbarButtonConfig> = {\n bold: {\n icon: <LuBold />,\n label: 'Bold',\n action: (editor) => editor?.chain().focus().toggleBold().run(),\n isActive: (editor) => editor?.isActive('bold') ?? false,\n },\n italic: {\n icon: <LuItalic />,\n label: 'Italic',\n action: (editor) => editor?.chain().focus().toggleItalic().run(),\n isActive: (editor) => editor?.isActive('italic') ?? false,\n },\n underline: {\n icon: <LuUnderline />,\n label: 'Подчёркнутый',\n action: (editor) => editor?.chain().focus().toggleUnderline().run(),\n isActive: (editor) => editor?.isActive('underline') ?? false,\n },\n strike: {\n icon: <LuStrikethrough />,\n label: 'Strikethrough',\n action: (editor) => editor?.chain().focus().toggleStrike().run(),\n isActive: (editor) => editor?.isActive('strike') ?? false,\n },\n code: {\n icon: <LuCode />,\n label: 'Код',\n action: (editor) => editor?.chain().focus().toggleCode().run(),\n isActive: (editor) => editor?.isActive('code') ?? false,\n },\n heading1: {\n icon: <LuHeading1 />,\n label: 'Заголовок 1',\n action: (editor) => editor?.chain().focus().toggleHeading({ level: 1 }).run(),\n isActive: (editor) => editor?.isActive('heading', { level: 1 }) ?? false,\n },\n heading2: {\n icon: <LuHeading2 />,\n label: 'Заголовок 2',\n action: (editor) => editor?.chain().focus().toggleHeading({ level: 2 }).run(),\n isActive: (editor) => editor?.isActive('heading', { level: 2 }) ?? false,\n },\n heading3: {\n icon: <LuHeading3 />,\n label: 'Заголовок 3',\n action: (editor) => editor?.chain().focus().toggleHeading({ level: 3 }).run(),\n isActive: (editor) => editor?.isActive('heading', { level: 3 }) ?? false,\n },\n bulletList: {\n icon: <LuList />,\n label: 'Bullet list',\n action: (editor) => editor?.chain().focus().toggleBulletList().run(),\n isActive: (editor) => editor?.isActive('bulletList') ?? false,\n },\n orderedList: {\n icon: <LuListOrdered />,\n label: 'Ordered list',\n action: (editor) => editor?.chain().focus().toggleOrderedList().run(),\n isActive: (editor) => editor?.isActive('orderedList') ?? false,\n },\n blockquote: {\n icon: <LuQuote />,\n label: 'Quote',\n action: (editor) => editor?.chain().focus().toggleBlockquote().run(),\n isActive: (editor) => editor?.isActive('blockquote') ?? false,\n },\n link: {\n icon: <LuLink />,\n label: 'Ссылка',\n action: (editor) => {\n if (editor?.isActive('link')) {\n editor.chain().focus().unsetLink().run()\n } else {\n const url = window.prompt('URL')\n if (url) {\n editor?.chain().focus().extendMarkRange('link').setLink({ href: url }).run()\n }\n }\n },\n isActive: (editor) => editor?.isActive('link') ?? false,\n },\n undo: {\n icon: <LuUndo />,\n label: 'Undo',\n action: (editor) => editor?.chain().focus().undo().run(),\n },\n redo: {\n icon: <LuRedo />,\n label: 'Redo',\n action: (editor) => editor?.chain().focus().redo().run(),\n },\n // Кнопка image processesся отдельно через ImagePopover (аналогично link)\n image: {\n icon: <LuImage />,\n label: 'Insert image',\n action: () => {\n // Action handled via ImagePopover\n },\n },\n}\n","'use client'\n\nimport {\n Box,\n Button,\n Center,\n HStack,\n Icon,\n IconButton,\n Image,\n Popover,\n Portal,\n Spinner,\n Text,\n VStack,\n} from '@chakra-ui/react'\nimport type { Editor } from '@tiptap/react'\nimport { type ReactElement, useCallback, useRef, useState } from 'react'\nimport { LuImage, LuUpload, LuX } from 'react-icons/lu'\n\n/**\n * Image upload configuration\n */\nexport interface ImageUploadConfig {\n /** URL endpoint for upload */\n endpoint: string\n /** Категория изображения (для upload API) */\n category?: string\n /** Maximum file size in bytes (by default: 10MB) */\n maxSize?: number\n /** Разрешённые MIME typeы (by default: ['image/*']) */\n acceptTypes?: string[]\n}\n\n/**\n * Props для ImagePopover\n */\ninterface ImagePopoverProps {\n editor: Editor\n config: ImageUploadConfig\n disabled?: boolean\n}\n\n/** Loading states */\ntype UploadState = 'idle' | 'uploading' | 'error'\n\n/**\n * Component для loading и вставки изображений в RichText редактор\n *\n * Использует Popover с drag-n-drop зоной и кнопкой выбора fileа.\n * После успешной loading вставляет изображение в редактор.\n */\nexport function ImagePopover({ editor, config, disabled }: ImagePopoverProps): ReactElement {\n const [isOpen, setIsOpen] = useState(false)\n const [uploadState, setUploadState] = useState<UploadState>('idle')\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n const [previewUrl, setPreviewUrl] = useState<string | null>(null)\n const [isDragging, setIsDragging] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const maxSize = config.maxSize ?? 10 * 1024 * 1024 // 10MB by default\n const acceptTypes = config.acceptTypes ?? ['image/*']\n\n /**\n * File upload на сервер\n */\n const handleUpload = useCallback(\n async (file: File) => {\n // Проверка typeа fileа\n if (!file.type.startsWith('image/')) {\n setErrorMessage('File must be an image')\n setUploadState('error')\n return\n }\n\n // Проверка sizeа\n if (file.size > maxSize) {\n const maxSizeMB = (maxSize / 1024 / 1024).toFixed(0)\n setErrorMessage(`Size fileа не must превышать ${maxSizeMB}MB`)\n setUploadState('error')\n return\n }\n\n // Создаём preview\n const preview = URL.createObjectURL(file)\n setPreviewUrl(preview)\n setUploadState('uploading')\n setErrorMessage(null)\n\n try {\n const formData = new FormData()\n formData.append('file', file)\n if (config.category) {\n formData.append('category', config.category)\n }\n\n const response = await fetch(config.endpoint, {\n method: 'POST',\n body: formData,\n })\n\n const result = await response.json()\n\n if (!response.ok) {\n throw new Error(result.error || 'Upload error')\n }\n\n if (result.url) {\n // Insert image into editor\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(editor.chain().focus() as any).setImage({ src: result.url }).run()\n handleClose()\n } else {\n throw new Error('Image URL not received')\n }\n } catch (err) {\n setErrorMessage(err instanceof Error ? err.message : 'Upload error')\n setUploadState('error')\n } finally {\n // Clean up preview URL\n if (preview) {\n URL.revokeObjectURL(preview)\n }\n }\n },\n [editor, config, maxSize]\n )\n\n /**\n * Handle file selection via input\n */\n const handleFileSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (file) {\n handleUpload(file)\n }\n // Reset input for re-selecting the same file\n e.target.value = ''\n },\n [handleUpload]\n )\n\n /**\n * Handle drop event\n */\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n setIsDragging(false)\n\n const file = e.dataTransfer.files[0]\n if (file) {\n handleUpload(file)\n }\n },\n [handleUpload]\n )\n\n /**\n * Close popover and reset state\n */\n const handleClose = useCallback(() => {\n setIsOpen(false)\n setUploadState('idle')\n setErrorMessage(null)\n setPreviewUrl(null)\n setIsDragging(false)\n }, [])\n\n /**\n * Повторная попытка after ошибки\n */\n const handleRetry = useCallback(() => {\n setUploadState('idle')\n setErrorMessage(null)\n setPreviewUrl(null)\n }, [])\n\n return (\n <Popover.Root open={isOpen} onOpenChange={(details) => setIsOpen(details.open)}>\n <Popover.Trigger asChild>\n <IconButton\n aria-label=\"Insert image\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setIsOpen(true)}\n disabled={disabled}\n >\n <LuImage />\n </IconButton>\n </Popover.Trigger>\n\n <Portal>\n <Popover.Positioner>\n <Popover.Content width=\"320px\">\n <Popover.Arrow>\n <Popover.ArrowTip />\n </Popover.Arrow>\n <Popover.Body p={3}>\n {/* State: idle - зона loading */}\n {uploadState === 'idle' && (\n <VStack gap={3} align=\"stretch\">\n <Box\n p={6}\n borderWidth=\"2px\"\n borderStyle=\"dashed\"\n borderColor={isDragging ? 'colorPalette.500' : 'border'}\n borderRadius=\"md\"\n bg={isDragging ? 'colorPalette.50' : 'bg.subtle'}\n transition=\"all 0.2s\"\n cursor=\"pointer\"\n _hover={{ borderColor: 'colorPalette.400' }}\n onDragOver={(e) => {\n e.preventDefault()\n setIsDragging(true)\n }}\n onDragLeave={(e) => {\n e.preventDefault()\n setIsDragging(false)\n }}\n onDrop={handleDrop}\n onClick={() => fileInputRef.current?.click()}\n >\n <Center>\n <VStack gap={2}>\n <Icon fontSize=\"2xl\" color=\"fg.muted\">\n <LuUpload />\n </Icon>\n <Text fontSize=\"sm\" fontWeight=\"medium\" textAlign=\"center\">\n Drag image here\n </Text>\n <Text fontSize=\"xs\" color=\"fg.muted\">\n or click to select\n </Text>\n </VStack>\n </Center>\n </Box>\n\n <Text fontSize=\"xs\" color=\"fg.muted\" textAlign=\"center\">\n PNG, JPG, WEBP up to {(maxSize / 1024 / 1024).toFixed(0)}MB\n </Text>\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={acceptTypes.join(',')}\n onChange={handleFileSelect}\n style={{ display: 'none' }}\n />\n\n <HStack justify=\"flex-end\">\n <Button size=\"sm\" variant=\"ghost\" onClick={handleClose}>\n Cancel\n </Button>\n </HStack>\n </VStack>\n )}\n\n {/* State: uploading - uploading */}\n {uploadState === 'uploading' && (\n <VStack gap={3} align=\"stretch\">\n {previewUrl && (\n <Box borderRadius=\"md\" overflow=\"hidden\" bg=\"bg.subtle\">\n <Image src={previewUrl} alt=\"Preview\" maxH=\"150px\" w=\"100%\" objectFit=\"contain\" />\n </Box>\n )}\n <Center py={2}>\n <HStack gap={2}>\n <Spinner size=\"sm\" color=\"colorPalette.500\" />\n <Text fontSize=\"sm\" color=\"fg.muted\">\n Loading...\n </Text>\n </HStack>\n </Center>\n </VStack>\n )}\n\n {/* State: error - error */}\n {uploadState === 'error' && (\n <VStack gap={3} align=\"stretch\">\n {previewUrl && (\n <Box borderRadius=\"md\" overflow=\"hidden\" bg=\"bg.subtle\" position=\"relative\">\n <Image src={previewUrl} alt=\"Preview\" maxH=\"150px\" w=\"100%\" objectFit=\"contain\" opacity={0.5} />\n <Center position=\"absolute\" inset={0} bg=\"blackAlpha.500\" borderRadius=\"md\">\n <Icon color=\"red.400\" fontSize=\"2xl\">\n <LuX />\n </Icon>\n </Center>\n </Box>\n )}\n <Text fontSize=\"sm\" color=\"red.400\" textAlign=\"center\">\n {errorMessage}\n </Text>\n <HStack justify=\"center\" gap={2}>\n <Button size=\"sm\" variant=\"ghost\" onClick={handleClose}>\n Cancel\n </Button>\n <Button size=\"sm\" colorPalette=\"brand\" onClick={handleRetry}>\n Try again\n </Button>\n </HStack>\n </VStack>\n )}\n </Popover.Body>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n )\n}\n","'use client'\n\nimport { Box, Button, HStack, IconButton, Input, Popover, Portal, VStack } from '@chakra-ui/react'\nimport type { Editor } from '@tiptap/react'\nimport { useCallback, useState, type ReactElement } from 'react'\nimport { LuLink, LuUnlink } from 'react-icons/lu'\n\n/**\n * Props для LinkPopover\n */\ninterface LinkPopoverProps {\n editor: Editor\n disabled?: boolean\n}\n\n/**\n * Component для добавления/удаления ссылок в RichText редакторе\n *\n * Использует Popover instead of window.prompt для лучшего UX и тестируемости.\n */\nexport function LinkPopover({ editor, disabled }: LinkPopoverProps): ReactElement {\n const [url, setUrl] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n\n const isActive = editor.isActive('link')\n\n const handleOpen = useCallback(() => {\n if (isActive) {\n // Если link активна — удаляем её\n editor.chain().focus().unsetLink().run()\n } else {\n // Получаем текущий URL if present\n const currentUrl = editor.getAttributes('link').href ?? ''\n setUrl(currentUrl)\n setIsOpen(true)\n }\n }, [editor, isActive])\n\n const handleClose = useCallback(() => {\n setIsOpen(false)\n setUrl('')\n }, [])\n\n const handleSubmit = useCallback(() => {\n if (url) {\n editor.chain().focus().extendMarkRange('link').setLink({ href: url }).run()\n }\n handleClose()\n }, [editor, url, handleClose])\n\n const handleRemove = useCallback(() => {\n editor.chain().focus().unsetLink().run()\n handleClose()\n }, [editor, handleClose])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleSubmit()\n } else if (e.key === 'Escape') {\n handleClose()\n }\n },\n [handleSubmit, handleClose]\n )\n\n return (\n <Popover.Root open={isOpen} onOpenChange={(details) => setIsOpen(details.open)}>\n <Popover.Trigger asChild>\n <IconButton\n aria-label={isActive ? 'Remove ссылку' : 'Add ссылку'}\n size=\"sm\"\n variant={isActive ? 'solid' : 'ghost'}\n colorPalette={isActive ? 'brand' : undefined}\n onClick={handleOpen}\n disabled={disabled}\n >\n {isActive ? <LuUnlink /> : <LuLink />}\n </IconButton>\n </Popover.Trigger>\n\n <Portal>\n <Popover.Positioner>\n <Popover.Content width=\"300px\">\n <Popover.Arrow>\n <Popover.ArrowTip />\n </Popover.Arrow>\n <Popover.Body p={3}>\n <VStack gap={3} align=\"stretch\">\n <Box>\n <Input\n placeholder=\"https://example.com\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={handleKeyDown}\n size=\"sm\"\n autoFocus\n />\n </Box>\n <HStack gap={2} justify=\"flex-end\">\n {editor.isActive('link') && (\n <Button size=\"sm\" variant=\"ghost\" colorPalette=\"red\" onClick={handleRemove}>\n Remove\n </Button>\n )}\n <Button size=\"sm\" variant=\"ghost\" onClick={handleClose}>\n Cancel\n </Button>\n <Button size=\"sm\" colorPalette=\"brand\" onClick={handleSubmit} disabled={!url.trim()}>\n Apply\n </Button>\n </HStack>\n </VStack>\n </Popover.Body>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n )\n}\n","'use client'\n\nimport { Box, Field, HStack, IconButton } from '@chakra-ui/react'\nimport type { AnyFieldApi } from '@tanstack/react-form'\nimport TiptapImage from '@tiptap/extension-image'\nimport { Link } from '@tiptap/extension-link'\nimport Placeholder from '@tiptap/extension-placeholder'\nimport Underline from '@tiptap/extension-underline'\nimport { type Content, EditorContent, useEditor } from '@tiptap/react'\nimport StarterKit from '@tiptap/starter-kit'\nimport { type ReactElement, useEffect, useMemo } from 'react'\nimport type { BaseFieldProps, FieldTooltipMeta } from '../../types'\nimport { FieldError, FieldLabel, getFieldErrors, useResolvedFieldProps } from '../base'\nimport { ImagePopover, type ImageUploadConfig } from './image-popover'\nimport { LinkPopover } from './link-popover'\nimport { DEFAULT_TOOLBAR_BUTTONS, TOOLBAR_CONFIG, type ToolbarButton } from './toolbar-config'\n\n/**\n * Safe JSON parsing with fallback to empty document\n * Prevents crash on invalid JSON\n */\nfunction safeParseJSON(value: string): Content {\n try {\n return JSON.parse(value) as Content\n } catch {\n console.warn('RichText: Invalid JSON content, using empty document')\n return ''\n }\n}\n\n/**\n * Props for RichText field\n */\nexport interface RichTextFieldProps extends BaseFieldProps {\n /** Tooltip for field label */\n tooltip?: FieldTooltipMeta\n /** Minimum editor height (by default: 150px) */\n minHeight?: string | number\n /** Maximum editor height (includes scroll) */\n maxHeight?: string | number\n /** Show toolbar (by default: true) */\n showToolbar?: boolean\n /** Toolbar buttons (by default: all) */\n toolbarButtons?: ToolbarButton[]\n /** Output format: 'html' or 'json' (by default: 'html') */\n outputFormat?: 'html' | 'json'\n /** Image upload configuration (optional) */\n imageUpload?: ImageUploadConfig\n}\n\n// Re-export type for convenience\nexport type { ImageUploadConfig }\n\n/**\n * Form.Field.RichText - WYSIWYG rich text editor\n *\n * Renders Tiptap-based editor with toolbar\n * and automatic form integration.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.RichText name=\"content\" label=\"Content\" />\n * ```\n *\n * @example With custom height\n * ```tsx\n * <Form.Field.RichText\n * name=\"description\"\n * label=\"Description\"\n * minHeight=\"200px\"\n * maxHeight=\"400px\"\n * />\n * ```\n *\n * @example With limited toolbar\n * ```tsx\n * <Form.Field.RichText\n * name=\"comment\"\n * label=\"Comment\"\n * toolbarButtons={['bold', 'italic', 'link']}\n * />\n * ```\n *\n * @example JSON output (for database storage)\n * ```tsx\n * <Form.Field.RichText\n * name=\"article\"\n * label=\"Article\"\n * outputFormat=\"json\"\n * />\n * ```\n */\nexport function FieldRichText({\n name,\n label,\n placeholder,\n helperText,\n required,\n disabled,\n readOnly,\n tooltip,\n minHeight = '150px',\n maxHeight,\n showToolbar = true,\n toolbarButtons = DEFAULT_TOOLBAR_BUTTONS,\n outputFormat = 'html',\n imageUpload,\n}: RichTextFieldProps): ReactElement {\n const {\n form,\n fullPath,\n label: resolvedLabel,\n placeholder: resolvedPlaceholder,\n helperText: resolvedHelperText,\n tooltip: resolvedTooltip,\n required: resolvedRequired,\n disabled: resolvedDisabled,\n readOnly: resolvedReadOnly,\n } = useResolvedFieldProps(name, { label, placeholder, helperText, required, disabled, readOnly, tooltip })\n\n return (\n <form.Field name={fullPath}>\n {(field: AnyFieldApi) => {\n const { hasError, errorMessage } = getFieldErrors(field)\n\n return (\n <Field.Root\n invalid={hasError}\n required={resolvedRequired}\n disabled={resolvedDisabled}\n readOnly={resolvedReadOnly}\n >\n <FieldLabel label={resolvedLabel} tooltip={resolvedTooltip} required={resolvedRequired} />\n <RichTextEditor\n value={field.state.value as string}\n onChange={(value) => field.handleChange(value)}\n onBlur={field.handleBlur}\n placeholder={resolvedPlaceholder}\n minHeight={minHeight}\n maxHeight={maxHeight}\n showToolbar={showToolbar}\n toolbarButtons={toolbarButtons}\n outputFormat={outputFormat}\n disabled={disabled}\n readOnly={readOnly}\n hasError={hasError}\n fieldName={fullPath}\n imageUpload={imageUpload}\n />\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolvedHelperText} />\n </Field.Root>\n )\n }}\n </form.Field>\n )\n}\n\n/**\n * Props for internal editor component\n */\ninterface RichTextEditorProps {\n value: string\n onChange: (value: string) => void\n onBlur: () => void\n placeholder?: string\n minHeight: string | number\n maxHeight?: string | number\n showToolbar: boolean\n toolbarButtons: ToolbarButton[]\n outputFormat: 'html' | 'json'\n disabled?: boolean\n readOnly?: boolean\n hasError?: boolean\n fieldName: string\n imageUpload?: ImageUploadConfig\n}\n\n/**\n * Internal Tiptap editor component\n */\nfunction RichTextEditor({\n value,\n onChange,\n onBlur,\n placeholder,\n minHeight,\n maxHeight,\n showToolbar,\n toolbarButtons,\n outputFormat,\n disabled,\n readOnly,\n hasError,\n fieldName,\n imageUpload,\n}: RichTextEditorProps) {\n // Build extensions dynamically\n const extensions = useMemo(() => {\n // Base extensions\n const baseExtensions = [\n StarterKit,\n Underline,\n Link.configure({\n openOnClick: false,\n HTMLAttributes: {\n rel: 'noopener noreferrer',\n target: '_blank',\n },\n }),\n Placeholder.configure({\n placeholder: placeholder ?? 'Start typing...',\n }),\n // Add Image extension only if imageUpload is configured\n ...(imageUpload\n ? [\n TiptapImage.configure({\n inline: false,\n allowBase64: false,\n HTMLAttributes: {\n class: 'richtext-image',\n },\n }),\n ]\n : []),\n ]\n\n return baseExtensions\n }, [placeholder, imageUpload])\n\n const editor = useEditor({\n // Cast needed: minor @tiptap/core version drift (e.g. 3.20.0 vs 3.20.1) causes nominal type mismatch\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- @tiptap/core version incompatibility\n extensions: extensions as any[],\n content: outputFormat === 'json' && value ? safeParseJSON(value) : value || '',\n editable: !disabled && !readOnly,\n onUpdate: ({ editor }) => {\n if (outputFormat === 'json') {\n onChange(JSON.stringify(editor.getJSON()))\n } else {\n onChange(editor.getHTML())\n }\n },\n onBlur: () => {\n onBlur()\n },\n immediatelyRender: false,\n })\n\n // Synchronize external value changes\n useEffect(() => {\n if (!editor) {\n return\n }\n\n const currentContent = outputFormat === 'json' ? JSON.stringify(editor.getJSON()) : editor.getHTML()\n\n // Update only if content changed (avoid cursor jump)\n if (value !== currentContent) {\n const content = outputFormat === 'json' && value ? safeParseJSON(value) : value || ''\n editor.commands.setContent(content, { emitUpdate: false })\n }\n }, [editor, value, outputFormat])\n\n // Update editable state\n useEffect(() => {\n if (editor) {\n editor.setEditable(!disabled && !readOnly)\n }\n }, [editor, disabled, readOnly])\n\n if (!editor) {\n return null\n }\n\n return (\n <Box\n borderWidth=\"1px\"\n borderRadius=\"md\"\n borderColor={hasError ? 'border.error' : 'border'}\n overflow=\"hidden\"\n data-field-name={fieldName}\n _focusWithin={{\n borderColor: hasError ? 'border.error' : 'colorPalette.500',\n boxShadow: hasError\n ? '0 0 0 1px var(--chakra-colors-border-error)'\n : '0 0 0 1px var(--chakra-colors-colorPalette-500)',\n }}\n >\n {showToolbar && !readOnly && (\n <HStack p={1} gap={0.5} borderBottomWidth=\"1px\" borderColor=\"border\" bg=\"bg.subtle\" flexWrap=\"wrap\">\n {toolbarButtons.map((button) => {\n // Special handling for link — use Popover instead of window.prompt\n if (button === 'link') {\n return <LinkPopover key={button} editor={editor} disabled={disabled} />\n }\n\n // Special handling for image — use ImagePopover with upload\n if (button === 'image') {\n // Show button only if imageUpload is configured\n if (!imageUpload) {\n return null\n }\n return <ImagePopover key={button} editor={editor} config={imageUpload} disabled={disabled} />\n }\n\n const config = TOOLBAR_CONFIG[button]\n const isActive = config.isActive?.(editor) ?? false\n\n return (\n <IconButton\n key={button}\n aria-label={config.label}\n size=\"sm\"\n variant={isActive ? 'solid' : 'ghost'}\n colorPalette={isActive ? 'brand' : undefined}\n onClick={() => config.action(editor)}\n disabled={disabled}\n >\n {config.icon}\n </IconButton>\n )\n })}\n </HStack>\n )}\n <Box\n minHeight={minHeight}\n maxHeight={maxHeight}\n overflowY={maxHeight ? 'auto' : undefined}\n p={3}\n css={{\n '& .tiptap': {\n outline: 'none',\n minHeight: typeof minHeight === 'number' ? `${minHeight}px` : minHeight,\n },\n '& .tiptap p.is-editor-empty:first-child::before': {\n color: 'var(--chakra-colors-fg-muted)',\n content: 'attr(data-placeholder)',\n float: 'left',\n height: 0,\n pointerEvents: 'none',\n },\n '& .tiptap h1': {\n fontSize: '2xl',\n fontWeight: 'bold',\n marginTop: '1em',\n marginBottom: '0.5em',\n },\n '& .tiptap h2': {\n fontSize: 'xl',\n fontWeight: 'bold',\n marginTop: '1em',\n marginBottom: '0.5em',\n },\n '& .tiptap h3': {\n fontSize: 'lg',\n fontWeight: 'semibold',\n marginTop: '1em',\n marginBottom: '0.5em',\n },\n '& .tiptap ul, & .tiptap ol': {\n paddingLeft: '1.5em',\n marginTop: '0.5em',\n marginBottom: '0.5em',\n },\n '& .tiptap blockquote': {\n borderLeft: '3px solid var(--chakra-colors-border)',\n paddingLeft: '1em',\n marginLeft: 0,\n marginTop: '0.5em',\n marginBottom: '0.5em',\n fontStyle: 'italic',\n color: 'var(--chakra-colors-fg-muted)',\n },\n '& .tiptap code': {\n backgroundColor: 'var(--chakra-colors-bg-subtle)',\n borderRadius: '3px',\n padding: '0.2em 0.4em',\n fontFamily: 'mono',\n fontSize: '0.9em',\n },\n '& .tiptap a': {\n color: 'var(--chakra-colors-colorPalette-500)',\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n '& .tiptap p': {\n marginTop: '0.25em',\n marginBottom: '0.25em',\n },\n '& .tiptap img, & .tiptap .richtext-image': {\n maxWidth: '100%',\n height: 'auto',\n borderRadius: '4px',\n marginTop: '0.5em',\n marginBottom: '0.5em',\n },\n }}\n >\n <EditorContent editor={editor} />\n </Box>\n </Box>\n )\n}\n","'use client'\n\nimport { Input } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { StringFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.String - String input field\n *\n * Renders a Chakra Input with automatic form integration and error display.\n *\n * Automatically extracts from Zod schema:\n * - `type` from `z.string().email()` → type=\"email\", `z.string().url()` → type=\"url\"\n * - `maxLength` from `z.string().max(100)` → maxLength={100}\n * - `minLength` from `z.string().min(2)` → minLength={2}\n * - `pattern` from `z.string().regex(/.../)` → pattern=\"...\"\n * - `helperText` automatically generated from constraints (\"Maximum 100 characters\")\n *\n * Props always take priority over automatic values from schema.\n *\n * @example\n * ```tsx\n * <Form.Field.String name=\"title\" label=\"Title\" required />\n * ```\n *\n * @example With automatic constraints from Zod\n * ```tsx\n * // In schema: z.object({ email: z.string().email().max(255) })\n * <Form.Field.String name=\"email\" />\n * // Automatically: type=\"email\", maxLength={255}\n * ```\n *\n * @example In primitive array (no name)\n * ```tsx\n * <Form.Group.List name=\"tags\">\n * <Form.Field.String placeholder=\"Tag\" />\n * </Form.Group.List>\n * ```\n */\n/**\n * Automatic inputMode based on field type for mobile keyboards\n */\nfunction getInputModeFromType(type: string): StringFieldProps['inputMode'] {\n switch (type) {\n case 'email':\n return 'email'\n case 'tel':\n return 'tel'\n case 'url':\n return 'url'\n default:\n return 'text'\n }\n}\n\nexport const FieldString = createField<StringFieldProps, string>({\n displayName: 'FieldString',\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const { constraints } = resolved\n\n // Props take priority over constraints\n const type = componentProps.type ?? constraints.string?.inputType ?? 'text'\n const maxLength = componentProps.maxLength ?? constraints.string?.maxLength\n const minLength = componentProps.minLength ?? constraints.string?.minLength\n const pattern = componentProps.pattern ?? constraints.string?.pattern\n // inputMode: explicit prop > auto from type\n const inputMode = componentProps.inputMode ?? getInputModeFromType(type)\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <Input\n type={type}\n inputMode={inputMode}\n value={(field.state.value as string) ?? ''}\n onChange={(e) => field.handleChange((e.target as HTMLInputElement).value)}\n onBlur={field.handleBlur}\n placeholder={resolved.placeholder}\n maxLength={maxLength}\n minLength={minLength}\n pattern={pattern}\n autoComplete={componentProps.autoComplete}\n data-field-name={fullPath}\n />\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { Textarea } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { TextareaFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.Textarea - Multiline text input field\n *\n * Renders a Chakra Textarea with automatic form integration and error display.\n *\n * Automatically extracts from Zod schema:\n * - `maxLength` from `z.string().max(500)` → maxLength={500}\n * - `helperText` automatically is generated from constraints (\"Maximum 500 characters\")\n *\n * Props always take priority over automatic values from schema.\n *\n * @example\n * ```tsx\n * <Form.Field.Textarea name=\"description\" label=\"Description\" rows={4} />\n * ```\n *\n * @example With automatic constraints from Zod\n * ```tsx\n * // In schema: z.object({ bio: z.string().max(500) })\n * <Form.Field.Textarea name=\"bio\" label=\"Bio\" autoresize />\n * // Automatically: maxLength={500} helperText=\"Maximum 500 characters\"\n * ```\n */\nexport const FieldTextarea = createField<TextareaFieldProps, string>({\n displayName: 'FieldTextarea',\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const { constraints } = resolved\n\n // Props take priority over constraints\n const maxLength = componentProps.maxLength ?? constraints.string?.maxLength\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <Textarea\n value={(field.state.value as string) ?? ''}\n onChange={(e) => field.handleChange((e.target as HTMLTextAreaElement).value)}\n onBlur={field.handleBlur}\n placeholder={resolved.placeholder}\n rows={componentProps.rows}\n autoresize={componentProps.autoresize}\n resize={componentProps.resize ?? 'vertical'}\n maxLength={maxLength}\n data-field-name={fullPath}\n />\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { Input } from '@chakra-ui/react'\nimport { useCallback, type ReactElement } from 'react'\nimport { withMask } from 'use-mask-input'\nimport type { MaskedInputFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * State for masked field\n */\ninterface MaskedInputFieldState {\n /** Ref callback for applying mask */\n maskRef: (element: HTMLInputElement | null) => void\n}\n\n/**\n * Form.Field.MaskedInput - Masked input field\n *\n * Renders masked input using the use-mask-input library.\n *\n * Mask characters:\n * - 9: digit\n * - a: letter\n * - *: letter or digit\n *\n * @example Passport mask\n * ```tsx\n * <Form.Field.MaskedInput name=\"passport\" label=\"Passport\" mask=\"99 99 999999\" />\n * ```\n *\n * @example Multiple masks (adapts to input)\n * ```tsx\n * <Form.Field.MaskedInput name=\"phone\" mask={['9999-9999', '99999-9999']} />\n * ```\n *\n * @example With custom placeholder character\n * ```tsx\n * <Form.Field.MaskedInput name=\"date\" mask=\"99/99/9999\" placeholderChar=\"#\" />\n * ```\n */\nexport const FieldMaskedInput = createField<MaskedInputFieldProps, string, MaskedInputFieldState>({\n displayName: 'FieldMaskedInput',\n\n useFieldState: (props) => {\n const {\n mask,\n placeholderChar = '_',\n showMaskOnFocus = true,\n showMaskOnHover = false,\n clearIncomplete = false,\n autoUnmask = false,\n } = props\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 placeholder: placeholderChar,\n showMaskOnFocus,\n showMaskOnHover,\n clearIncomplete,\n autoUnmask,\n })\n maskCallback(element)\n }\n },\n [mask, placeholderChar, showMaskOnFocus, showMaskOnHover, clearIncomplete, autoUnmask]\n )\n\n return { maskRef }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, fieldState }): ReactElement => (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <Input\n ref={fieldState.maskRef}\n value={(field.state.value as string) ?? ''}\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"]}
|