@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.
Files changed (56) hide show
  1. package/CHANGELOG.md +308 -0
  2. package/README.md +9 -9
  3. package/README.ru.md +115 -30
  4. package/analytics.js +3 -0
  5. package/analytics.js.map +1 -0
  6. package/chunk-2PSXYC3I.js +1782 -0
  7. package/chunk-2PSXYC3I.js.map +1 -0
  8. package/chunk-5D6S6EGF.js +206 -0
  9. package/chunk-5D6S6EGF.js.map +1 -0
  10. package/{chunk-6QOPSQ3Z.js → chunk-6E7VJAJT.js} +3 -3
  11. package/{chunk-6QOPSQ3Z.js.map → chunk-6E7VJAJT.js.map} +1 -1
  12. package/chunk-CGXKRCSM.js +117 -0
  13. package/chunk-CGXKRCSM.js.map +1 -0
  14. package/{chunk-M2PNAAIR.js → chunk-DQUVUMCX.js} +30 -19
  15. package/chunk-DQUVUMCX.js.map +1 -0
  16. package/chunk-K3J4L26K.js +345 -0
  17. package/chunk-K3J4L26K.js.map +1 -0
  18. package/{chunk-PJETA6YN.js → chunk-MAYUFA5K.js} +5 -4
  19. package/chunk-MAYUFA5K.js.map +1 -0
  20. package/{chunk-4V6WBJ76.js → chunk-MVGXZNHP.js} +2 -2
  21. package/{chunk-4V6WBJ76.js.map → chunk-MVGXZNHP.js.map} +1 -1
  22. package/{chunk-XKKJKYWZ.js → chunk-MZDTJSF7.js} +3 -3
  23. package/{chunk-XKKJKYWZ.js.map → chunk-MZDTJSF7.js.map} +1 -1
  24. package/{chunk-KUNT5MSU.js → chunk-Q5EOF36Y.js} +3 -3
  25. package/chunk-Q5EOF36Y.js.map +1 -0
  26. package/{chunk-7FEQFDJ7.js → chunk-R2RTCKXY.js} +2 -2
  27. package/{chunk-7FEQFDJ7.js.map → chunk-R2RTCKXY.js.map} +1 -1
  28. package/{chunk-HWVOFWAT.js → chunk-XFWLD5EO.js} +225 -26
  29. package/chunk-XFWLD5EO.js.map +1 -0
  30. package/fields/boolean.js +3 -3
  31. package/fields/datetime.js +3 -3
  32. package/fields/number.js +3 -3
  33. package/fields/selection.js +3 -3
  34. package/fields/specialized.js +3 -3
  35. package/fields/text.js +3 -3
  36. package/hcaptcha-U4XIT3HS.js +64 -0
  37. package/hcaptcha-U4XIT3HS.js.map +1 -0
  38. package/i18n.js +1 -1
  39. package/index.js +3268 -51
  40. package/index.js.map +1 -1
  41. package/offline.js +1 -1
  42. package/package.json +33 -4
  43. package/recaptcha-PKAUAY2S.js +56 -0
  44. package/recaptcha-PKAUAY2S.js.map +1 -0
  45. package/server-errors.js +3 -0
  46. package/server-errors.js.map +1 -0
  47. package/turnstile-7FXTBSLW.js +36 -0
  48. package/turnstile-7FXTBSLW.js.map +1 -0
  49. package/validators/ru.js +73 -0
  50. package/validators/ru.js.map +1 -0
  51. package/chunk-GOELIS6T.js +0 -849
  52. package/chunk-GOELIS6T.js.map +0 -1
  53. package/chunk-HWVOFWAT.js.map +0 -1
  54. package/chunk-KUNT5MSU.js.map +0 -1
  55. package/chunk-M2PNAAIR.js.map +0 -1
  56. package/chunk-PJETA6YN.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/declarative/form-fields/number/field-currency.tsx","../src/lib/declarative/form-fields/number/field-number.tsx","../src/lib/declarative/form-fields/number/field-number-input.tsx","../src/lib/declarative/form-fields/number/field-percentage.tsx","../src/lib/declarative/form-fields/number/field-rating.tsx","../src/lib/declarative/form-fields/number/field-slider.tsx"],"names":["jsx","jsxs","NumberInput","useMemo","Field","HStack"],"mappings":"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","file":"chunk-XKKJKYWZ.js","sourcesContent":["'use client'\n\nimport { NumberInput } from '@chakra-ui/react'\nimport { type ReactElement, useMemo } from 'react'\nimport type { CurrencyFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.Currency - Currency input field\n *\n * Renders NumberInput with currency formatting (symbol and decimal part).\n *\n * @example Russian rubles (by default)\n * ```tsx\n * <Form.Field.Currency name=\"price\" label=\"Price\" />\n * ```\n *\n * @example US Dollars\n * ```tsx\n * <Form.Field.Currency name=\"amount\" label=\"Amount\" currency=\"USD\" />\n * ```\n *\n * @example Euro with currency code\n * ```tsx\n * <Form.Field.Currency\n * name=\"total\"\n * label=\"Total\"\n * currency=\"EUR\"\n * currencyDisplay=\"code\"\n * />\n * ```\n */\n/** Currency field state */\ninterface CurrencyFieldState {\n /** Memoized format options */\n formatOptions: Intl.NumberFormatOptions\n}\n\nexport const FieldCurrency = createField<CurrencyFieldProps, number | undefined, CurrencyFieldState>({\n displayName: 'FieldCurrency',\n\n useFieldState: (props) => {\n const { currency = 'RUB', currencyDisplay = 'symbol', decimalScale = 2 } = props\n\n // Memoize formatOptions at component top level\n const formatOptions = useMemo(\n () => ({\n style: 'currency' as const,\n currency,\n currencyDisplay,\n minimumFractionDigits: decimalScale,\n maximumFractionDigits: decimalScale,\n }),\n [currency, currencyDisplay, decimalScale]\n )\n\n return { formatOptions }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps, fieldState }): ReactElement => {\n const value = field.state.value as number | undefined\n\n const { min, max, step = 0.01, size } = componentProps\n\n const { formatOptions } = fieldState\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <NumberInput.Root\n value={value?.toString() ?? ''}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n field.handleChange(Number.isNaN(num) ? undefined : num)\n }}\n onBlur={field.handleBlur}\n min={min}\n max={max}\n step={step}\n formatOptions={formatOptions}\n clampValueOnBlur\n size={size}\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input placeholder={resolved.placeholder} data-field-name={fullPath} />\n </NumberInput.Root>\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { NumberInput } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { NumberFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.Number - Number input field\n *\n * Renders a Chakra NumberInput with automatic form integration and error display.\n *\n * Automatically extracts from Zod schema:\n * - `min` from `z.number().min(1)` → min={1}\n * - `max` from `z.number().max(100)` → max={100}\n * - `step` from `z.number().int()` → step={1}, or `z.number().multipleOf(0.5)` → step={0.5}\n * - `helperText` automatically generated from constraints (\"From 1 to 100\")\n *\n * Props always take priority over automatic values from schema.\n *\n * @example\n * ```tsx\n * <Form.Field.Number name=\"portions\" label=\"Portions\" />\n * // With z.number().min(1).max(100) automatically: min={1} max={100} helperText=\"From 1 to 100\"\n * ```\n */\nexport const FieldNumber = createField<NumberFieldProps, number | undefined>({\n displayName: 'FieldNumber',\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const value = field.state.value as number | undefined\n const { constraints } = resolved\n\n // Props take priority over constraints\n const min = componentProps.min ?? constraints.number?.min\n const max = componentProps.max ?? constraints.number?.max\n const step = componentProps.step ?? constraints.number?.step\n\n // For optional fields do not pass min/max to NumberInput when value is empty,\n // otherwise Chakra will show invalid state for empty value\n const isOptional = resolved.required === false\n const isEmpty = value === undefined || value === null\n const shouldApplyMinMax = !isOptional || !isEmpty\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <NumberInput.Root\n value={value?.toString() ?? ''}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n field.handleChange(Number.isNaN(num) ? undefined : num)\n }}\n onBlur={field.handleBlur}\n min={shouldApplyMinMax ? min : undefined}\n max={shouldApplyMinMax ? max : undefined}\n step={step}\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input placeholder={resolved.placeholder} data-field-name={fullPath} inputMode=\"decimal\" />\n </NumberInput.Root>\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { NumberInput } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { NumberInputFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.NumberInput - Number field with extended options\n *\n * Extends base Number field with formatting, mouse wheel support, etc.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.NumberInput name=\"quantity\" label=\"Quantity\" min={1} max={100} />\n * ```\n *\n * @example With currency formatting\n * ```tsx\n * <Form.Field.NumberInput\n * name=\"price\"\n * label=\"Price\"\n * formatOptions={{ style: 'currency', currency: 'RUB' }}\n * />\n * ```\n *\n * @example With mouse wheel\n * ```tsx\n * <Form.Field.NumberInput name=\"count\" allowMouseWheel />\n * ```\n */\nexport const FieldNumberInput = createField<NumberInputFieldProps, number | undefined>({\n displayName: 'FieldNumberInput',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const value = field.state.value as number | undefined\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <NumberInput.Root\n value={value?.toString() ?? ''}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n field.handleChange(Number.isNaN(num) ? undefined : num)\n }}\n onBlur={field.handleBlur}\n min={componentProps.min}\n max={componentProps.max}\n step={componentProps.step}\n formatOptions={componentProps.formatOptions}\n allowMouseWheel={componentProps.allowMouseWheel}\n clampValueOnBlur={componentProps.clampValueOnBlur ?? true}\n spinOnPress={componentProps.spinOnPress ?? true}\n size={componentProps.size}\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input placeholder={resolved.placeholder} data-field-name={fullPath} inputMode=\"decimal\" />\n </NumberInput.Root>\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { NumberInput } from '@chakra-ui/react'\nimport { type ReactElement, useMemo } from 'react'\nimport type { PercentageFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.Percentage - Percentage input field\n *\n * Renders NumberInput with percentage formatting and % symbol.\n * Value is stored as-is (50 = 50%), not as decimal fraction (0.5).\n *\n * @example Basic usage (0-100%)\n * ```tsx\n * <Form.Field.Percentage name=\"discount\" label=\"Discount\" />\n * ```\n *\n * @example With custom range\n * ```tsx\n * <Form.Field.Percentage name=\"margin\" label=\"Margin\" min={0} max={50} />\n * ```\n *\n * @example With decimals\n * ```tsx\n * <Form.Field.Percentage name=\"rate\" label=\"Rate\" decimalScale={2} step={0.1} />\n * ```\n */\n/** Percentage field state */\ninterface PercentageFieldState {\n /** Memoized format options */\n formatOptions: Intl.NumberFormatOptions\n}\n\nexport const FieldPercentage = createField<PercentageFieldProps, number | undefined, PercentageFieldState>({\n displayName: 'FieldPercentage',\n\n useFieldState: (props) => {\n const { decimalScale = 0 } = props\n\n // Use 'unit' style with percent to store whole numbers (50 = 50%)\n // Chakra's 'percent' style expects decimals (0.5 = 50%)\n const formatOptions = useMemo(\n () => ({\n style: 'unit' as const,\n unit: 'percent',\n unitDisplay: 'short' as const,\n minimumFractionDigits: decimalScale,\n maximumFractionDigits: decimalScale,\n }),\n [decimalScale]\n )\n\n return { formatOptions }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps, fieldState }): ReactElement => {\n const value = field.state.value as number | undefined\n\n const { min = 0, max = 100, step = 1, size } = componentProps\n\n const { formatOptions } = fieldState\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <NumberInput.Root\n value={value?.toString() ?? ''}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n field.handleChange(Number.isNaN(num) ? undefined : num)\n }}\n onBlur={field.handleBlur}\n min={min}\n max={max}\n step={step}\n formatOptions={formatOptions}\n clampValueOnBlur\n size={size}\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input placeholder={resolved.placeholder} data-field-name={fullPath} />\n </NumberInput.Root>\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { Field, HStack, RatingGroup } from '@chakra-ui/react'\nimport type React from 'react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { BaseFieldProps } from '../../types'\nimport { createField, FieldError } from '../base'\nimport { FieldTooltip } from '../base/field-tooltip'\n\n/**\n * Props for Rating field\n */\nexport interface RatingFieldProps extends Omit<BaseFieldProps, 'placeholder'> {\n /** Number of rating elements (by default: 5) */\n count?: number\n /** Allow half values (by default: false) */\n allowHalf?: boolean\n /** Size: xs, sm, md, lg (by default: md) */\n size?: 'xs' | 'sm' | 'md' | 'lg'\n /** Color palette (by default: gray) */\n colorPalette?: 'gray' | 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue' | 'cyan' | 'purple' | 'pink'\n /** Custom icon (by default: star) */\n icon?: ReactNode\n /** Callback on value change */\n onValueChange?: (value: number) => void\n}\n\n/**\n * Form.Field.Rating - Star rating input field\n *\n * Renders Chakra RatingGroup with automatic form integration.\n * Form value is stored as number.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.Rating name=\"rating\" label=\"Rating\" />\n * ```\n *\n * @example With custom count and color\n * ```tsx\n * <Form.Field.Rating\n * name=\"quality\"\n * label=\"Quality\"\n * count={10}\n * colorPalette=\"orange\"\n * />\n * ```\n *\n * @example With half values\n * ```tsx\n * <Form.Field.Rating\n * name=\"score\"\n * label=\"Score\"\n * allowHalf\n * size=\"lg\"\n * />\n * ```\n */\nexport const FieldRating = createField<RatingFieldProps, number>({\n displayName: 'FieldRating',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const { count = 5, allowHalf = false, size = 'md', colorPalette, icon, onValueChange } = componentProps\n\n const value = (field.state.value as number) ?? 0\n\n const handleValueChange = (details: { value: number }) => {\n field.handleChange(details.value)\n onValueChange?.(details.value)\n }\n\n return (\n <Field.Root\n invalid={hasError}\n required={resolved.required}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n >\n <RatingGroup.Root\n value={value}\n onValueChange={handleValueChange}\n count={count}\n allowHalf={allowHalf}\n size={size}\n colorPalette={colorPalette}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n data-field-name={fullPath}\n >\n {resolved.label && (\n <RatingGroup.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 </RatingGroup.Label>\n )}\n <RatingGroup.HiddenInput onBlur={field.handleBlur} />\n <RatingGroup.Control>\n {Array.from({ length: count }).map((_, index) => (\n <RatingGroup.Item key={index} index={index + 1}>\n <RatingGroup.ItemIndicator icon={icon as React.ReactElement | undefined} />\n </RatingGroup.Item>\n ))}\n </RatingGroup.Control>\n </RatingGroup.Root>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport { Field, For, HStack, Slider } from '@chakra-ui/react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { BaseFieldProps, FieldTooltipMeta } from '../../types'\nimport { createField, FieldError } from '../base'\nimport { FieldTooltip } from '../base/field-tooltip'\n\n/**\n * Slider mark definition\n */\nexport interface SliderMark {\n /** Value on the scale */\n value: number\n /** Mark text */\n label?: ReactNode\n}\n\n/**\n * Props for Slider field\n */\nexport interface SliderFieldProps extends Omit<BaseFieldProps, 'placeholder'> {\n /** Tooltip for field label */\n tooltip?: FieldTooltipMeta\n /** Minimum value (by default: 0) */\n min?: number\n /** Maximum value (by default: 100) */\n max?: number\n /** Step (by default: 1) */\n step?: number\n /** Show current value next to label */\n showValue?: boolean\n /** Orientation (by default: horizontal) */\n orientation?: 'horizontal' | 'vertical'\n /** Size (by default: md) */\n size?: 'sm' | 'md' | 'lg'\n /** Variant (by default: outline) */\n variant?: 'outline' | 'solid'\n /** Color palette */\n colorPalette?: 'gray' | 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue' | 'cyan' | 'purple' | 'pink'\n /** Marks on slider track */\n marks?: (number | SliderMark)[]\n /** Fill origin point (by default: start) */\n origin?: 'start' | 'center' | 'end'\n /** Callback on value change */\n onValueChange?: (value: number) => void\n /** Callback when drag ends */\n onValueChangeEnd?: (value: number) => void\n}\n\n/**\n * Form.Field.Slider - Slider field\n *\n * Renders Chakra Slider with automatic form integration.\n * Form value is stored as number.\n *\n * Automatically extracts from Zod schema:\n * - `min` from `z.number().min(1)` → min={1}\n * - `max` from `z.number().max(100)` → max={100}\n * - `step` from `z.number().int()` → step={1}, or `z.number().multipleOf(0.5)` → step={0.5}\n * - `helperText` automatically is generated from constraints (\"From 1 to 100\")\n *\n * Props always take priority over automatic values from schema.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.Slider name=\"volume\" label=\"Volume\" />\n * ```\n *\n * @example With automatic constraints from Zod\n * ```tsx\n * // In schema: z.object({ rating: z.number().min(1).max(10) })\n * <Form.Field.Slider name=\"rating\" label=\"Rating\" showValue />\n * // Automatically: min={1} max={10} helperText=\"From 1 to 10\"\n * ```\n *\n * @example With marks\n * ```tsx\n * <Form.Field.Slider\n * name=\"rating\"\n * label=\"Rating\"\n * min={0}\n * max={100}\n * marks={[0, 25, 50, 75, 100]}\n * />\n * ```\n */\nexport const FieldSlider = createField<SliderFieldProps, number>({\n displayName: 'FieldSlider',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const { constraints } = resolved\n\n // Props take priority over constraints, then defaults\n const min = componentProps.min ?? constraints.number?.min ?? 0\n const max = componentProps.max ?? constraints.number?.max ?? 100\n const step = componentProps.step ?? constraints.number?.step ?? 1\n\n const {\n showValue,\n orientation = 'horizontal',\n size = 'md',\n variant = 'outline',\n colorPalette,\n marks,\n origin,\n onValueChange,\n onValueChangeEnd,\n } = componentProps\n\n // Normalize marks to array of objects\n const normalizedMarks = marks?.map((mark) => (typeof mark === 'number' ? { value: mark, label: undefined } : mark))\n\n // Convert number to array for Slider\n const numValue = (field.state.value as number) ?? min\n const arrayValue = [numValue]\n\n const handleValueChange = (details: { value: number[] }) => {\n const newValue = details.value[0] ?? min\n field.handleChange(newValue)\n onValueChange?.(newValue)\n }\n\n const handleValueChangeEnd = (details: { value: number[] }) => {\n const newValue = details.value[0] ?? min\n onValueChangeEnd?.(newValue)\n }\n\n return (\n <Field.Root\n invalid={hasError}\n required={resolved.required}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n >\n <Slider.Root\n value={arrayValue}\n onValueChange={handleValueChange}\n onValueChangeEnd={handleValueChangeEnd}\n min={min}\n max={max}\n step={step}\n orientation={orientation}\n size={size}\n variant={variant}\n colorPalette={colorPalette}\n origin={origin}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n invalid={hasError}\n thumbAlignment=\"center\"\n onBlur={field.handleBlur}\n data-field-name={fullPath}\n >\n {resolved.label && !showValue && (\n <Slider.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 </Slider.Label>\n )}\n {resolved.label && showValue && (\n <HStack justify=\"space-between\">\n <Slider.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 </Slider.Label>\n <Slider.ValueText />\n </HStack>\n )}\n <Slider.Control>\n <Slider.Track>\n <Slider.Range />\n </Slider.Track>\n <For each={arrayValue}>\n {(_, index) => (\n <Slider.Thumb key={index} index={index}>\n <Slider.HiddenInput />\n </Slider.Thumb>\n )}\n </For>\n {normalizedMarks && normalizedMarks.length > 0 && (\n <Slider.MarkerGroup>\n {normalizedMarks.map((mark, index) => (\n <Slider.Marker key={index} value={mark.value}>\n <Slider.MarkerIndicator />\n {mark.label}\n </Slider.Marker>\n ))}\n </Slider.MarkerGroup>\n )}\n </Slider.Control>\n </Slider.Root>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n"]}
1
+ {"version":3,"sources":["../src/lib/declarative/form-fields/number/field-currency.tsx","../src/lib/declarative/form-fields/number/field-number.tsx","../src/lib/declarative/form-fields/number/field-number-input.tsx","../src/lib/declarative/form-fields/number/field-percentage.tsx","../src/lib/declarative/form-fields/number/field-rating.tsx","../src/lib/declarative/form-fields/number/field-slider.tsx"],"names":["jsx","jsxs","NumberInput","useMemo","Field","HStack"],"mappings":"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","file":"chunk-MZDTJSF7.js","sourcesContent":["'use client'\n\nimport { NumberInput } from '@chakra-ui/react'\nimport { type ReactElement, useMemo } from 'react'\nimport type { CurrencyFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.Currency - Currency input field\n *\n * Renders NumberInput with currency formatting (symbol and decimal part).\n *\n * @example Russian rubles (by default)\n * ```tsx\n * <Form.Field.Currency name=\"price\" label=\"Price\" />\n * ```\n *\n * @example US Dollars\n * ```tsx\n * <Form.Field.Currency name=\"amount\" label=\"Amount\" currency=\"USD\" />\n * ```\n *\n * @example Euro with currency code\n * ```tsx\n * <Form.Field.Currency\n * name=\"total\"\n * label=\"Total\"\n * currency=\"EUR\"\n * currencyDisplay=\"code\"\n * />\n * ```\n */\n/** Currency field state */\ninterface CurrencyFieldState {\n /** Memoized format options */\n formatOptions: Intl.NumberFormatOptions\n}\n\nexport const FieldCurrency = createField<CurrencyFieldProps, number | undefined, CurrencyFieldState>({\n displayName: 'FieldCurrency',\n\n useFieldState: (props) => {\n const { currency = 'RUB', currencyDisplay = 'symbol', decimalScale = 2 } = props\n\n // Memoize formatOptions at component top level\n const formatOptions = useMemo(\n () => ({\n style: 'currency' as const,\n currency,\n currencyDisplay,\n minimumFractionDigits: decimalScale,\n maximumFractionDigits: decimalScale,\n }),\n [currency, currencyDisplay, decimalScale]\n )\n\n return { formatOptions }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps, fieldState }): ReactElement => {\n const value = field.state.value as number | undefined\n\n const { min, max, step = 0.01, size } = componentProps\n\n const { formatOptions } = fieldState\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <NumberInput.Root\n value={value?.toString() ?? ''}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n field.handleChange(Number.isNaN(num) ? undefined : num)\n }}\n onBlur={field.handleBlur}\n min={min}\n max={max}\n step={step}\n formatOptions={formatOptions}\n clampValueOnBlur\n size={size}\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input placeholder={resolved.placeholder} data-field-name={fullPath} />\n </NumberInput.Root>\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { NumberInput } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { NumberFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.Number - Number input field\n *\n * Renders a Chakra NumberInput with automatic form integration and error display.\n *\n * Automatically extracts from Zod schema:\n * - `min` from `z.number().min(1)` → min={1}\n * - `max` from `z.number().max(100)` → max={100}\n * - `step` from `z.number().int()` → step={1}, or `z.number().multipleOf(0.5)` → step={0.5}\n * - `helperText` automatically generated from constraints (\"From 1 to 100\")\n *\n * Props always take priority over automatic values from schema.\n *\n * @example\n * ```tsx\n * <Form.Field.Number name=\"portions\" label=\"Portions\" />\n * // With z.number().min(1).max(100) automatically: min={1} max={100} helperText=\"From 1 to 100\"\n * ```\n */\nexport const FieldNumber = createField<NumberFieldProps, number | undefined>({\n displayName: 'FieldNumber',\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const value = field.state.value as number | undefined\n const { constraints } = resolved\n\n // Props take priority over constraints\n const min = componentProps.min ?? constraints.number?.min\n const max = componentProps.max ?? constraints.number?.max\n const step = componentProps.step ?? constraints.number?.step\n\n // For optional fields do not pass min/max to NumberInput when value is empty,\n // otherwise Chakra will show invalid state for empty value\n const isOptional = resolved.required === false\n const isEmpty = value === undefined || value === null\n const shouldApplyMinMax = !isOptional || !isEmpty\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <NumberInput.Root\n value={value?.toString() ?? ''}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n field.handleChange(Number.isNaN(num) ? undefined : num)\n }}\n onBlur={field.handleBlur}\n min={shouldApplyMinMax ? min : undefined}\n max={shouldApplyMinMax ? max : undefined}\n step={step}\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input placeholder={resolved.placeholder} data-field-name={fullPath} inputMode=\"decimal\" />\n </NumberInput.Root>\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { NumberInput } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { NumberInputFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.NumberInput - Number field with extended options\n *\n * Extends base Number field with formatting, mouse wheel support, etc.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.NumberInput name=\"quantity\" label=\"Quantity\" min={1} max={100} />\n * ```\n *\n * @example With currency formatting\n * ```tsx\n * <Form.Field.NumberInput\n * name=\"price\"\n * label=\"Price\"\n * formatOptions={{ style: 'currency', currency: 'RUB' }}\n * />\n * ```\n *\n * @example With mouse wheel\n * ```tsx\n * <Form.Field.NumberInput name=\"count\" allowMouseWheel />\n * ```\n */\nexport const FieldNumberInput = createField<NumberInputFieldProps, number | undefined>({\n displayName: 'FieldNumberInput',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const value = field.state.value as number | undefined\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <NumberInput.Root\n value={value?.toString() ?? ''}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n field.handleChange(Number.isNaN(num) ? undefined : num)\n }}\n onBlur={field.handleBlur}\n min={componentProps.min}\n max={componentProps.max}\n step={componentProps.step}\n formatOptions={componentProps.formatOptions}\n allowMouseWheel={componentProps.allowMouseWheel}\n clampValueOnBlur={componentProps.clampValueOnBlur ?? true}\n spinOnPress={componentProps.spinOnPress ?? true}\n size={componentProps.size}\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input placeholder={resolved.placeholder} data-field-name={fullPath} inputMode=\"decimal\" />\n </NumberInput.Root>\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { NumberInput } from '@chakra-ui/react'\nimport { type ReactElement, useMemo } from 'react'\nimport type { PercentageFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.Percentage - Percentage input field\n *\n * Renders NumberInput with percentage formatting and % symbol.\n * Value is stored as-is (50 = 50%), not as decimal fraction (0.5).\n *\n * @example Basic usage (0-100%)\n * ```tsx\n * <Form.Field.Percentage name=\"discount\" label=\"Discount\" />\n * ```\n *\n * @example With custom range\n * ```tsx\n * <Form.Field.Percentage name=\"margin\" label=\"Margin\" min={0} max={50} />\n * ```\n *\n * @example With decimals\n * ```tsx\n * <Form.Field.Percentage name=\"rate\" label=\"Rate\" decimalScale={2} step={0.1} />\n * ```\n */\n/** Percentage field state */\ninterface PercentageFieldState {\n /** Memoized format options */\n formatOptions: Intl.NumberFormatOptions\n}\n\nexport const FieldPercentage = createField<PercentageFieldProps, number | undefined, PercentageFieldState>({\n displayName: 'FieldPercentage',\n\n useFieldState: (props) => {\n const { decimalScale = 0 } = props\n\n // Use 'unit' style with percent to store whole numbers (50 = 50%)\n // Chakra's 'percent' style expects decimals (0.5 = 50%)\n const formatOptions = useMemo(\n () => ({\n style: 'unit' as const,\n unit: 'percent',\n unitDisplay: 'short' as const,\n minimumFractionDigits: decimalScale,\n maximumFractionDigits: decimalScale,\n }),\n [decimalScale]\n )\n\n return { formatOptions }\n },\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps, fieldState }): ReactElement => {\n const value = field.state.value as number | undefined\n\n const { min = 0, max = 100, step = 1, size } = componentProps\n\n const { formatOptions } = fieldState\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <NumberInput.Root\n value={value?.toString() ?? ''}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n field.handleChange(Number.isNaN(num) ? undefined : num)\n }}\n onBlur={field.handleBlur}\n min={min}\n max={max}\n step={step}\n formatOptions={formatOptions}\n clampValueOnBlur\n size={size}\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input placeholder={resolved.placeholder} data-field-name={fullPath} />\n </NumberInput.Root>\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { Field, HStack, RatingGroup } from '@chakra-ui/react'\nimport type React from 'react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { BaseFieldProps } from '../../types'\nimport { createField, FieldError } from '../base'\nimport { FieldTooltip } from '../base/field-tooltip'\n\n/**\n * Props for Rating field\n */\nexport interface RatingFieldProps extends Omit<BaseFieldProps, 'placeholder'> {\n /** Number of rating elements (by default: 5) */\n count?: number\n /** Allow half values (by default: false) */\n allowHalf?: boolean\n /** Size: xs, sm, md, lg (by default: md) */\n size?: 'xs' | 'sm' | 'md' | 'lg'\n /** Color palette (by default: gray) */\n colorPalette?: 'gray' | 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue' | 'cyan' | 'purple' | 'pink'\n /** Custom icon (by default: star) */\n icon?: ReactNode\n /** Callback on value change */\n onValueChange?: (value: number) => void\n}\n\n/**\n * Form.Field.Rating - Star rating input field\n *\n * Renders Chakra RatingGroup with automatic form integration.\n * Form value is stored as number.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.Rating name=\"rating\" label=\"Rating\" />\n * ```\n *\n * @example With custom count and color\n * ```tsx\n * <Form.Field.Rating\n * name=\"quality\"\n * label=\"Quality\"\n * count={10}\n * colorPalette=\"orange\"\n * />\n * ```\n *\n * @example With half values\n * ```tsx\n * <Form.Field.Rating\n * name=\"score\"\n * label=\"Score\"\n * allowHalf\n * size=\"lg\"\n * />\n * ```\n */\nexport const FieldRating = createField<RatingFieldProps, number>({\n displayName: 'FieldRating',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const { count = 5, allowHalf = false, size = 'md', colorPalette, icon, onValueChange } = componentProps\n\n const value = (field.state.value as number) ?? 0\n\n const handleValueChange = (details: { value: number }) => {\n field.handleChange(details.value)\n onValueChange?.(details.value)\n }\n\n return (\n <Field.Root\n invalid={hasError}\n required={resolved.required}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n >\n <RatingGroup.Root\n value={value}\n onValueChange={handleValueChange}\n count={count}\n allowHalf={allowHalf}\n size={size}\n colorPalette={colorPalette}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n data-field-name={fullPath}\n >\n {resolved.label && (\n <RatingGroup.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 </RatingGroup.Label>\n )}\n <RatingGroup.HiddenInput onBlur={field.handleBlur} />\n <RatingGroup.Control>\n {Array.from({ length: count }).map((_, index) => (\n <RatingGroup.Item key={index} index={index + 1}>\n <RatingGroup.ItemIndicator icon={icon as React.ReactElement | undefined} />\n </RatingGroup.Item>\n ))}\n </RatingGroup.Control>\n </RatingGroup.Root>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport { Field, For, HStack, Slider } from '@chakra-ui/react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { BaseFieldProps, FieldTooltipMeta } from '../../types'\nimport { createField, FieldError } from '../base'\nimport { FieldTooltip } from '../base/field-tooltip'\n\n/**\n * Slider mark definition\n */\nexport interface SliderMark {\n /** Value on the scale */\n value: number\n /** Mark text */\n label?: ReactNode\n}\n\n/**\n * Props for Slider field\n */\nexport interface SliderFieldProps extends Omit<BaseFieldProps, 'placeholder'> {\n /** Tooltip for field label */\n tooltip?: FieldTooltipMeta\n /** Minimum value (by default: 0) */\n min?: number\n /** Maximum value (by default: 100) */\n max?: number\n /** Step (by default: 1) */\n step?: number\n /** Show current value next to label */\n showValue?: boolean\n /** Orientation (by default: horizontal) */\n orientation?: 'horizontal' | 'vertical'\n /** Size (by default: md) */\n size?: 'sm' | 'md' | 'lg'\n /** Variant (by default: outline) */\n variant?: 'outline' | 'solid'\n /** Color palette */\n colorPalette?: 'gray' | 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue' | 'cyan' | 'purple' | 'pink'\n /** Marks on slider track */\n marks?: (number | SliderMark)[]\n /** Fill origin point (by default: start) */\n origin?: 'start' | 'center' | 'end'\n /** Callback on value change */\n onValueChange?: (value: number) => void\n /** Callback when drag ends */\n onValueChangeEnd?: (value: number) => void\n}\n\n/**\n * Form.Field.Slider - Slider field\n *\n * Renders Chakra Slider with automatic form integration.\n * Form value is stored as number.\n *\n * Automatically extracts from Zod schema:\n * - `min` from `z.number().min(1)` → min={1}\n * - `max` from `z.number().max(100)` → max={100}\n * - `step` from `z.number().int()` → step={1}, or `z.number().multipleOf(0.5)` → step={0.5}\n * - `helperText` automatically is generated from constraints (\"From 1 to 100\")\n *\n * Props always take priority over automatic values from schema.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.Slider name=\"volume\" label=\"Volume\" />\n * ```\n *\n * @example With automatic constraints from Zod\n * ```tsx\n * // In schema: z.object({ rating: z.number().min(1).max(10) })\n * <Form.Field.Slider name=\"rating\" label=\"Rating\" showValue />\n * // Automatically: min={1} max={10} helperText=\"From 1 to 10\"\n * ```\n *\n * @example With marks\n * ```tsx\n * <Form.Field.Slider\n * name=\"rating\"\n * label=\"Rating\"\n * min={0}\n * max={100}\n * marks={[0, 25, 50, 75, 100]}\n * />\n * ```\n */\nexport const FieldSlider = createField<SliderFieldProps, number>({\n displayName: 'FieldSlider',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const { constraints } = resolved\n\n // Props take priority over constraints, then defaults\n const min = componentProps.min ?? constraints.number?.min ?? 0\n const max = componentProps.max ?? constraints.number?.max ?? 100\n const step = componentProps.step ?? constraints.number?.step ?? 1\n\n const {\n showValue,\n orientation = 'horizontal',\n size = 'md',\n variant = 'outline',\n colorPalette,\n marks,\n origin,\n onValueChange,\n onValueChangeEnd,\n } = componentProps\n\n // Normalize marks to array of objects\n const normalizedMarks = marks?.map((mark) => (typeof mark === 'number' ? { value: mark, label: undefined } : mark))\n\n // Convert number to array for Slider\n const numValue = (field.state.value as number) ?? min\n const arrayValue = [numValue]\n\n const handleValueChange = (details: { value: number[] }) => {\n const newValue = details.value[0] ?? min\n field.handleChange(newValue)\n onValueChange?.(newValue)\n }\n\n const handleValueChangeEnd = (details: { value: number[] }) => {\n const newValue = details.value[0] ?? min\n onValueChangeEnd?.(newValue)\n }\n\n return (\n <Field.Root\n invalid={hasError}\n required={resolved.required}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n >\n <Slider.Root\n value={arrayValue}\n onValueChange={handleValueChange}\n onValueChangeEnd={handleValueChangeEnd}\n min={min}\n max={max}\n step={step}\n orientation={orientation}\n size={size}\n variant={variant}\n colorPalette={colorPalette}\n origin={origin}\n disabled={resolved.disabled}\n readOnly={resolved.readOnly}\n invalid={hasError}\n thumbAlignment=\"center\"\n onBlur={field.handleBlur}\n data-field-name={fullPath}\n >\n {resolved.label && !showValue && (\n <Slider.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 </Slider.Label>\n )}\n {resolved.label && showValue && (\n <HStack justify=\"space-between\">\n <Slider.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 </Slider.Label>\n <Slider.ValueText />\n </HStack>\n )}\n <Slider.Control>\n <Slider.Track>\n <Slider.Range />\n </Slider.Track>\n <For each={arrayValue}>\n {(_, index) => (\n <Slider.Thumb key={index} index={index}>\n <Slider.HiddenInput />\n </Slider.Thumb>\n )}\n </For>\n {normalizedMarks && normalizedMarks.length > 0 && (\n <Slider.MarkerGroup>\n {normalizedMarks.map((mark, index) => (\n <Slider.Marker key={index} value={mark.value}>\n <Slider.MarkerIndicator />\n {mark.label}\n </Slider.Marker>\n ))}\n </Slider.MarkerGroup>\n )}\n </Slider.Control>\n </Slider.Root>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n"]}
@@ -1,4 +1,4 @@
1
- import { createField, FieldWrapper, FieldLabel, FieldError, getFieldErrors, useResolvedFieldProps } from './chunk-HWVOFWAT.js';
1
+ import { createField, FieldWrapper, FieldLabel, FieldError, getFieldErrors, useResolvedFieldProps } from './chunk-XFWLD5EO.js';
2
2
  import { Input, Field, Flex, HStack, Box, Menu, Button, Portal, NumberInput, Text, Stack } from '@chakra-ui/react';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
  import { LuCalendar, LuChevronDown } from 'react-icons/lu';
@@ -705,5 +705,5 @@ var FieldTime = createField({
705
705
  });
706
706
 
707
707
  export { FieldDate, FieldDateRange, FieldDateTimePicker, FieldDuration, FieldSchedule, FieldTime };
708
- //# sourceMappingURL=chunk-KUNT5MSU.js.map
709
- //# sourceMappingURL=chunk-KUNT5MSU.js.map
708
+ //# sourceMappingURL=chunk-Q5EOF36Y.js.map
709
+ //# sourceMappingURL=chunk-Q5EOF36Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/declarative/form-fields/datetime/field-date.tsx","../src/lib/declarative/form-fields/datetime/field-date-range.tsx","../src/lib/declarative/form-fields/datetime/field-datetime-picker.tsx","../src/lib/declarative/form-fields/datetime/field-duration.tsx","../src/lib/declarative/form-fields/datetime/field-schedule.tsx","../src/lib/declarative/form-fields/datetime/field-time.tsx"],"names":["jsx","Input","jsxs","Field","HStack","ScheduleContent","Box","Text","Button"],"mappings":"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","file":"chunk-Q5EOF36Y.js","sourcesContent":["'use client'\n\nimport { Input } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { DateFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.Date - Date input field\n *\n * Renders a native date input with automatic form integration and error display.\n *\n * Automatically extracts from Zod schema:\n * - `min` from `z.date().min(new Date('2024-01-01'))` → min=\"2024-01-01\"\n * - `max` from `z.date().max(new Date('2024-12-31'))` → max=\"2024-12-31\"\n * - `helperText` automatically is generated from constraints (\"From Jan 1, 2024 to Dec 31, 2024\")\n *\n * Props always take priority over automatic values from schema.\n *\n * @example\n * ```tsx\n * <Form.Field.Date name=\"birthDate\" label=\"Date of Birth\" />\n * ```\n *\n * @example With automatic constraints from Zod\n * ```tsx\n * // In schema: z.object({ eventDate: z.date().min(new Date('2024-01-01')).max(new Date('2024-12-31')) })\n * <Form.Field.Date name=\"eventDate\" label=\"Event Date\" />\n * // Automatically: min=\"2024-01-01\", max=\"2024-12-31\"\n * ```\n */\nexport const FieldDate = createField<DateFieldProps, string | Date>({\n displayName: 'FieldDate',\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const { constraints } = resolved\n\n // Handle Date objects by converting to YYYY-MM-DD string\n const rawValue = field.state.value\n let stringValue = ''\n if (rawValue instanceof Date) {\n stringValue = rawValue.toISOString().split('T')[0]\n } else if (typeof rawValue === 'string') {\n stringValue = rawValue\n }\n\n // Props take priority over constraints\n const min = componentProps.min ?? constraints.date?.min\n const max = componentProps.max ?? constraints.date?.max\n\n return (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <Input\n type=\"date\"\n value={stringValue}\n onChange={(e) => field.handleChange((e.target as HTMLInputElement).value)}\n onBlur={field.handleBlur}\n placeholder={resolved.placeholder}\n min={min}\n max={max}\n data-field-name={fullPath}\n />\n </FieldWrapper>\n )\n },\n})\n","'use client'\n\nimport { Box, Button, Field, Flex, HStack, Input, Menu, Portal } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport { LuCalendar, LuChevronDown } from 'react-icons/lu'\nimport type { BaseFieldProps } from '../../types'\nimport { createField, FieldError, FieldLabel } from '../base'\n\n/**\n * Date range value type\n */\nexport interface DateRangeValue {\n start: string\n end: string\n}\n\n/**\n * Preset types for quick date range selection\n */\nexport type DateRangePreset = 'today' | 'yesterday' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'thisYear'\n\n/**\n * Props for Form.Field.DateRange\n */\nexport interface DateRangeFieldProps extends BaseFieldProps {\n /** Label for start date */\n startLabel?: string\n /** Label for end date */\n endLabel?: string\n /** Placeholder for start date */\n startPlaceholder?: string\n /** Placeholder for end date */\n endPlaceholder?: string\n /** Minimum date (format YYYY-MM-DD) */\n min?: string\n /** Maximum date (format YYYY-MM-DD) */\n max?: string\n /** Enable preset buttons */\n presets?: DateRangePreset[]\n /** Date fields orientation */\n orientation?: 'horizontal' | 'vertical'\n /** Size */\n size?: 'xs' | 'sm' | 'md' | 'lg'\n}\n\n/**\n * Get date range for preset\n */\nfunction getPresetRange(preset: DateRangePreset): DateRangeValue {\n const today = new Date()\n const formatDate = (d: Date) => d.toISOString().split('T')[0]\n\n switch (preset) {\n case 'today':\n return { start: formatDate(today), end: formatDate(today) }\n case 'yesterday': {\n const yesterday = new Date(today)\n yesterday.setDate(today.getDate() - 1)\n return { start: formatDate(yesterday), end: formatDate(yesterday) }\n }\n case 'thisWeek': {\n const startOfWeek = new Date(today)\n startOfWeek.setDate(today.getDate() - today.getDay() + 1) // Monday\n const endOfWeek = new Date(startOfWeek)\n endOfWeek.setDate(startOfWeek.getDate() + 6) // Sunday\n return { start: formatDate(startOfWeek), end: formatDate(endOfWeek) }\n }\n case 'lastWeek': {\n const startOfLastWeek = new Date(today)\n startOfLastWeek.setDate(today.getDate() - today.getDay() - 6) // Last Monday\n const endOfLastWeek = new Date(startOfLastWeek)\n endOfLastWeek.setDate(startOfLastWeek.getDate() + 6) // Last Sunday\n return { start: formatDate(startOfLastWeek), end: formatDate(endOfLastWeek) }\n }\n case 'thisMonth': {\n const startOfMonth = new Date(today.getFullYear(), today.getMonth(), 1)\n const endOfMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0)\n return { start: formatDate(startOfMonth), end: formatDate(endOfMonth) }\n }\n case 'lastMonth': {\n const startOfLastMonth = new Date(today.getFullYear(), today.getMonth() - 1, 1)\n const endOfLastMonth = new Date(today.getFullYear(), today.getMonth(), 0)\n return { start: formatDate(startOfLastMonth), end: formatDate(endOfLastMonth) }\n }\n case 'thisYear': {\n const startOfYear = new Date(today.getFullYear(), 0, 1)\n const endOfYear = new Date(today.getFullYear(), 11, 31)\n return { start: formatDate(startOfYear), end: formatDate(endOfYear) }\n }\n }\n}\n\n/**\n * Get label for preset\n */\nfunction getPresetLabel(preset: DateRangePreset): string {\n switch (preset) {\n case 'today':\n return 'Today'\n case 'yesterday':\n return 'Yesterday'\n case 'thisWeek':\n return 'This week'\n case 'lastWeek':\n return 'Last week'\n case 'thisMonth':\n return 'This month'\n case 'lastMonth':\n return 'Last month'\n case 'thisYear':\n return 'This year'\n }\n}\n\n/**\n * Form.Field.DateRange - Date range selection with two fields\n *\n * Renders two date fields for range selection with optional presets.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.DateRange name=\"period\" label=\"Period\" />\n * ```\n *\n * @example With presets\n * ```tsx\n * <Form.Field.DateRange\n * name=\"period\"\n * label=\"Period\"\n * startLabel=\"From\"\n * endLabel=\"To\"\n * presets={['today', 'thisWeek', 'thisMonth']}\n * />\n * ```\n *\n * @example Vertical orientation\n * ```tsx\n * <Form.Field.DateRange\n * name=\"period\"\n * orientation=\"vertical\"\n * />\n * ```\n */\nexport const FieldDateRange = createField<DateRangeFieldProps, DateRangeValue>({\n displayName: 'FieldDateRange',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const {\n startLabel = 'Start',\n endLabel = 'End',\n startPlaceholder,\n endPlaceholder,\n min,\n max,\n presets,\n orientation = 'horizontal',\n size = 'md',\n } = componentProps\n\n const value = (field.state.value as DateRangeValue) ?? { start: '', end: '' }\n\n const handleStartChange = (newStart: string) => {\n field.handleChange({ ...value, start: newStart })\n }\n\n const handleEndChange = (newEnd: string) => {\n field.handleChange({ ...value, end: newEnd })\n }\n\n const handlePreset = (preset: DateRangePreset) => {\n field.handleChange(getPresetRange(preset))\n }\n\n const Container = orientation === 'horizontal' ? HStack : Box\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 <Flex gap={2} direction={orientation === 'horizontal' ? 'row' : 'column'} align=\"stretch\" width=\"full\">\n <Container gap={2} flex={1} alignItems=\"flex-end\">\n {/* Start date */}\n <Box flex={1}>\n <Field.Root disabled={resolved.disabled} readOnly={resolved.readOnly}>\n <Field.Label fontSize=\"sm\" color=\"fg.muted\">\n {startLabel}\n </Field.Label>\n <Input\n type=\"date\"\n value={value.start}\n onChange={(e) => handleStartChange((e.target as HTMLInputElement).value)}\n onBlur={field.handleBlur}\n placeholder={startPlaceholder}\n min={min}\n max={value.end || max}\n size={size}\n data-field-name={`${fullPath}.start`}\n />\n </Field.Root>\n </Box>\n\n {/* End date */}\n <Box flex={1}>\n <Field.Root disabled={resolved.disabled} readOnly={resolved.readOnly}>\n <Field.Label fontSize=\"sm\" color=\"fg.muted\">\n {endLabel}\n </Field.Label>\n <Input\n type=\"date\"\n value={value.end}\n onChange={(e) => handleEndChange((e.target as HTMLInputElement).value)}\n onBlur={field.handleBlur}\n placeholder={endPlaceholder}\n min={value.start || min}\n max={max}\n size={size}\n data-field-name={`${fullPath}.end`}\n />\n </Field.Root>\n </Box>\n </Container>\n\n {/* Presets menu */}\n {presets && presets.length > 0 && !resolved.readOnly && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button variant=\"outline\" size={size} disabled={resolved.disabled}>\n <LuCalendar />\n Presets\n <LuChevronDown />\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content>\n {presets.map((preset) => (\n <Menu.Item key={preset} value={preset} onClick={() => handlePreset(preset)}>\n {getPresetLabel(preset)}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n )}\n </Flex>\n\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport { Field, HStack, Input } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { DateTimePickerFieldProps } from '../../types'\nimport { createField, FieldError, FieldLabel } from '../base'\n\n/**\n * Parses a datetime string into separate date and time parts\n */\nfunction parseDateTime(value: string | undefined): { date: string; time: string } {\n if (!value) {\n return { date: '', time: '' }\n }\n\n // Handle ISO format: 2024-01-15T14:30:00\n const match = value.match(/^(\\d{4}-\\d{2}-\\d{2})(?:T(\\d{2}:\\d{2}))?/)\n if (match) {\n return { date: match[1], time: match[2] || '' }\n }\n\n return { date: '', time: '' }\n}\n\n/**\n * Combines date and time into an ISO datetime string\n */\nfunction combineDateTime(date: string, time: string): string {\n if (!date) {\n return ''\n }\n if (!time) {\n return date\n }\n return `${date}T${time}:00`\n}\n\n/**\n * Form.Field.DateTimePicker - Combined date and time picker\n *\n * Renders date and time fields that produce an ISO datetime string.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.DateTimePicker name=\"appointmentAt\" label=\"Appointment\" />\n * ```\n *\n * @example With min/max constraints\n * ```tsx\n * <Form.Field.DateTimePicker\n * name=\"eventAt\"\n * minDateTime={new Date()}\n * maxDateTime=\"2025-12-31T23:59\"\n * />\n * ```\n */\nexport const FieldDateTimePicker = createField<DateTimePickerFieldProps, string>({\n displayName: 'FieldDateTimePicker',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const { minDateTime, maxDateTime, timeStep = 15 } = componentProps\n\n // Convert Date to string if needed\n const minDateTimeStr =\n minDateTime instanceof Date ? minDateTime.toISOString().slice(0, 16) : minDateTime?.slice(0, 16)\n const maxDateTimeStr =\n maxDateTime instanceof Date ? maxDateTime.toISOString().slice(0, 16) : maxDateTime?.slice(0, 16)\n\n const minDate = minDateTimeStr?.slice(0, 10)\n const maxDate = maxDateTimeStr?.slice(0, 10)\n\n const value = field.state.value as string | undefined\n const { date, time } = parseDateTime(value)\n\n const handleDateChange = (newDate: string) => {\n const combined = combineDateTime(newDate, time)\n field.handleChange(combined || undefined)\n }\n\n const handleTimeChange = (newTime: string) => {\n const combined = combineDateTime(date, newTime)\n field.handleChange(combined || undefined)\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 <HStack gap={2}>\n <Input\n type=\"date\"\n value={date}\n onChange={(e) => handleDateChange(e.target.value)}\n onBlur={field.handleBlur}\n min={minDate}\n max={maxDate}\n data-field-name={`${fullPath}-date`}\n flex={1}\n />\n <Input\n type=\"time\"\n value={time}\n onChange={(e) => handleTimeChange(e.target.value)}\n onBlur={field.handleBlur}\n step={timeStep * 60}\n data-field-name={`${fullPath}-time`}\n width=\"150px\"\n />\n </HStack>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport { Field, HStack, NumberInput, Text } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { DurationFieldProps } from '../../types'\nimport { createField, FieldError, FieldLabel } from '../base'\n\n/**\n * Converts minutes to HH:MM format\n */\nfunction minutesToHHMM(minutes: number): { hours: number; mins: number } {\n return {\n hours: Math.floor(minutes / 60),\n mins: minutes % 60,\n }\n}\n\n/**\n * Converts HH:MM to minutes\n */\nfunction hhmmToMinutes(hours: number, mins: number): number {\n return hours * 60 + mins\n}\n\n/**\n * Form.Field.Duration - Duration input field\n *\n * Renders duration field with hours and minutes or minutes only.\n * Value is stored as total number of minutes.\n *\n * @example HH:MM format (by default)\n * ```tsx\n * <Form.Field.Duration name=\"duration\" label=\"Duration\" />\n * ```\n *\n * @example Minutes only\n * ```tsx\n * <Form.Field.Duration name=\"duration\" format=\"minutes\" />\n * ```\n *\n * @example With min/max constraints\n * ```tsx\n * <Form.Field.Duration name=\"duration\" min={30} max={240} step={15} />\n * ```\n */\nexport const FieldDuration = createField<DurationFieldProps, number>({\n displayName: 'FieldDuration',\n\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => {\n const { format = 'HH:MM', min = 0, max = 1440, step = 15 } = componentProps\n\n const value = (field.state.value as number) ?? 0\n const { hours, mins } = minutesToHHMM(value)\n\n const handleHoursChange = (newHours: number) => {\n const newValue = hhmmToMinutes(newHours, mins)\n const clampedValue = Math.max(min, Math.min(max, newValue))\n field.handleChange(clampedValue)\n }\n\n const handleMinsChange = (newMins: number) => {\n const newValue = hhmmToMinutes(hours, newMins)\n const clampedValue = Math.max(min, Math.min(max, newValue))\n field.handleChange(clampedValue)\n }\n\n const handleMinutesChange = (newValue: number) => {\n const clampedValue = Math.max(min, Math.min(max, newValue))\n field.handleChange(clampedValue)\n }\n\n // Minutes only format\n if (format === 'minutes') {\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 <NumberInput.Root\n value={value.toString()}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n if (!Number.isNaN(num)) {\n handleMinutesChange(num)\n }\n }}\n onBlur={field.handleBlur}\n min={min}\n max={max}\n step={step}\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input placeholder={resolved.placeholder ?? 'min'} data-field-name={fullPath} />\n </NumberInput.Root>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n }\n\n // HH:MM format\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 <HStack gap={2}>\n <NumberInput.Root\n value={hours.toString()}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n if (!Number.isNaN(num)) {\n handleHoursChange(num)\n }\n }}\n onBlur={field.handleBlur}\n min={0}\n max={Math.floor(max / 60)}\n width=\"80px\"\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input data-field-name={`${fullPath}-hours`} />\n </NumberInput.Root>\n <Text fontWeight=\"bold\">:</Text>\n <NumberInput.Root\n value={mins.toString().padStart(2, '0')}\n onValueChange={(details: { valueAsNumber: number }) => {\n const num = details.valueAsNumber\n if (!Number.isNaN(num)) {\n handleMinsChange(num)\n }\n }}\n onBlur={field.handleBlur}\n min={0}\n max={59}\n step={step}\n width=\"80px\"\n >\n <NumberInput.Control>\n <NumberInput.IncrementTrigger />\n <NumberInput.DecrementTrigger />\n </NumberInput.Control>\n <NumberInput.Input data-field-name={`${fullPath}-mins`} />\n </NumberInput.Root>\n </HStack>\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolved.helperText} />\n </Field.Root>\n )\n },\n})\n","'use client'\n\nimport { Box, Button, Field, HStack, Input, Stack, Text } from '@chakra-ui/react'\nimport type { AnyFieldApi } from '@tanstack/react-form'\nimport { memo, type ReactElement, type ReactNode, useCallback, useMemo } from 'react'\nimport type { BaseFieldProps, FieldTooltipMeta } from '../../types'\nimport { FieldError, FieldLabel, getFieldErrors, useResolvedFieldProps } from '../base'\n\n/**\n * Time slot\n */\nexport interface TimeSlot {\n open: string\n close: string\n}\n\n/**\n * Day schedule (null = day off)\n */\nexport type DaySchedule = TimeSlot | null\n\n/**\n * Weekly schedule\n */\nexport interface WeeklySchedule {\n monday: DaySchedule\n tuesday: DaySchedule\n wednesday: DaySchedule\n thursday: DaySchedule\n friday: DaySchedule\n saturday: DaySchedule\n sunday: DaySchedule\n}\n\n/**\n * Day of week\n */\nexport type DayOfWeek = keyof WeeklySchedule\n\n/**\n * Days configuration\n */\nconst DAYS_OF_WEEK: DayOfWeek[] = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']\n\nconst DEFAULT_DAY_NAMES: Record<DayOfWeek, string> = {\n monday: 'Monday',\n tuesday: 'Tuesday',\n wednesday: 'Wednesday',\n thursday: 'Thursday',\n friday: 'Friday',\n saturday: 'Saturday',\n sunday: 'Sunday',\n}\n\nconst DEFAULT_WORKING_HOURS: WeeklySchedule = {\n monday: { open: '09:00', close: '18:00' },\n tuesday: { open: '09:00', close: '18:00' },\n wednesday: { open: '09:00', close: '18:00' },\n thursday: { open: '09:00', close: '18:00' },\n friday: { open: '09:00', close: '18:00' },\n saturday: null,\n sunday: null,\n}\n\n/**\n * Constants for custom switch styling\n * Native checkbox used instead of Chakra Switch for RHF compatibility\n */\nconst SWITCH_STYLES = {\n /** Switch track width */\n trackWidth: '36px',\n /** Switch track height */\n trackHeight: '20px',\n /** Round indicator (thumb) size */\n thumbSize: '16px',\n /** Thumb offset from edge (2px each side for centering in 20px track) */\n thumbOffset: '2px',\n /** Thumb position in enabled state (trackWidth - thumbSize - thumbOffset = 36 - 16 - 2 = 18) */\n thumbEnabledLeft: '18px',\n} as const\n\n/**\n * Checks that end time is after start time\n */\nfunction isValidTimeRange(open: string, close: string): boolean {\n const [openH, openM] = open.split(':').map(Number)\n const [closeH, closeM] = close.split(':').map(Number)\n const openMinutes = openH * 60 + openM\n const closeMinutes = closeH * 60 + closeM\n return closeMinutes > openMinutes\n}\n\n/**\n * Internal component for rendering the schedule.\n * Extracted separately to comply with React hooks rules.\n */\ninterface ScheduleContentProps {\n field: AnyFieldApi\n schedule: WeeklySchedule\n defaultSchedule: WeeklySchedule\n days: DayOfWeek[]\n mergedDayNames: Record<DayOfWeek, string>\n showCopyToWeekdays: boolean\n offLabel: string\n copyToWeekdaysLabel: string\n defaultOpenTime: string\n defaultCloseTime: string\n disabled?: boolean\n readOnly?: boolean\n resolvedLabel?: ReactNode\n resolvedHelperText?: ReactNode\n resolvedRequired?: boolean\n resolvedTooltip?: FieldTooltipMeta\n fullPath: string\n}\n\nconst ScheduleContent = memo(function ScheduleContent({\n field,\n schedule,\n days,\n mergedDayNames,\n showCopyToWeekdays,\n offLabel,\n copyToWeekdaysLabel,\n defaultOpenTime,\n defaultCloseTime,\n disabled,\n readOnly,\n resolvedLabel,\n resolvedHelperText,\n resolvedRequired,\n resolvedTooltip,\n fullPath,\n}: ScheduleContentProps) {\n const { hasError, errorMessage } = getFieldErrors(field)\n\n // Check for invalid time ranges\n const invalidDays = useMemo(() => {\n const invalid: DayOfWeek[] = []\n for (const day of days) {\n const daySchedule = schedule[day]\n if (daySchedule && !isValidTimeRange(daySchedule.open, daySchedule.close)) {\n invalid.push(day)\n }\n }\n return invalid\n }, [schedule, days])\n\n const handleDayToggle = useCallback(\n (day: DayOfWeek, enabled: boolean) => {\n const newSchedule = {\n ...schedule,\n [day]: enabled ? { open: defaultOpenTime, close: defaultCloseTime } : null,\n }\n field.handleChange(newSchedule)\n },\n [schedule, field, defaultOpenTime, defaultCloseTime]\n )\n\n const handleTimeChange = useCallback(\n (day: DayOfWeek, timeField: 'open' | 'close', value: string) => {\n const current = schedule[day]\n if (!current) {\n return\n }\n const newSchedule = {\n ...schedule,\n [day]: { ...current, [timeField]: value },\n }\n field.handleChange(newSchedule)\n },\n [schedule, field]\n )\n\n const handleCopyToWeekdays = useCallback(() => {\n const mondaySchedule = schedule.monday\n if (!mondaySchedule) {\n return\n }\n const newSchedule = {\n ...schedule,\n monday: mondaySchedule,\n tuesday: mondaySchedule,\n wednesday: mondaySchedule,\n thursday: mondaySchedule,\n friday: mondaySchedule,\n }\n field.handleChange(newSchedule)\n }, [schedule, field])\n\n return (\n <Field.Root\n invalid={hasError}\n required={resolvedRequired}\n disabled={disabled}\n readOnly={readOnly}\n data-field-name={fullPath}\n >\n <FieldLabel label={resolvedLabel} tooltip={resolvedTooltip} required={resolvedRequired} />\n\n <Stack gap={3}>\n {/* Warning about invalid ranges */}\n {invalidDays.length > 0 && (\n <Box p={3} bg=\"red.50\" borderWidth=\"1px\" borderColor=\"red.200\" borderRadius=\"md\">\n <Text color=\"red.600\" fontSize=\"sm\" fontWeight=\"medium\">\n End time must be after start time: {invalidDays.map((d) => mergedDayNames[d]).join(', ')}\n </Text>\n </Box>\n )}\n\n {/* Quick actions */}\n {showCopyToWeekdays && days.includes('monday') && (\n <HStack gap={2} flexWrap=\"wrap\">\n <Text fontSize=\"sm\" color=\"fg.muted\">\n Quick actions:\n </Text>\n <Button\n type=\"button\"\n size=\"xs\"\n variant=\"ghost\"\n colorPalette=\"blue\"\n onClick={handleCopyToWeekdays}\n disabled={disabled || readOnly || !schedule.monday}\n >\n {copyToWeekdaysLabel}\n </Button>\n </HStack>\n )}\n\n {/* Day list */}\n {days.map((day) => {\n const daySchedule = schedule[day]\n const isEnabled = daySchedule !== null && daySchedule !== undefined\n const dayHasError = invalidDays.includes(day)\n\n return (\n <Box\n key={day}\n data-day={day}\n p={3}\n bg={dayHasError ? 'red.50' : isEnabled ? 'bg.panel' : 'bg.muted'}\n borderRadius=\"md\"\n borderWidth={dayHasError ? '2px' : '1px'}\n borderColor={dayHasError ? 'red.300' : 'border.muted'}\n >\n <HStack justify=\"space-between\" flexWrap=\"wrap\" gap={3}>\n {/* Day and toggle */}\n <HStack gap={3} minW=\"140px\">\n {/* Native checkbox styled as switch */}\n <Box\n as=\"label\"\n display=\"inline-flex\"\n alignItems=\"center\"\n cursor={disabled || readOnly ? 'not-allowed' : 'pointer'}\n position=\"relative\"\n opacity={disabled || readOnly ? 0.4 : 1}\n >\n <input\n type=\"checkbox\"\n checked={isEnabled}\n onChange={(e) => handleDayToggle(day, e.target.checked)}\n disabled={disabled || readOnly}\n data-switch={day}\n style={{\n position: 'absolute',\n opacity: 0,\n width: 0,\n height: 0,\n }}\n />\n <Box\n w={SWITCH_STYLES.trackWidth}\n h={SWITCH_STYLES.trackHeight}\n bg={isEnabled ? 'green.500' : 'gray.300'}\n borderRadius=\"full\"\n position=\"relative\"\n transition=\"background 0.2s\"\n >\n <Box\n position=\"absolute\"\n top={SWITCH_STYLES.thumbOffset}\n left={isEnabled ? SWITCH_STYLES.thumbEnabledLeft : SWITCH_STYLES.thumbOffset}\n w={SWITCH_STYLES.thumbSize}\n h={SWITCH_STYLES.thumbSize}\n bg=\"white\"\n borderRadius=\"full\"\n transition=\"left 0.2s\"\n boxShadow=\"sm\"\n />\n </Box>\n </Box>\n <Text fontWeight=\"medium\" color={isEnabled ? 'fg' : 'fg.muted'}>\n {mergedDayNames[day]}\n </Text>\n </HStack>\n\n {/* Time fields */}\n {isEnabled ? (\n <HStack gap={2}>\n <Input\n type=\"time\"\n size=\"sm\"\n width=\"120px\"\n value={daySchedule?.open || defaultOpenTime}\n onChange={(e) => handleTimeChange(day, 'open', e.target.value)}\n disabled={disabled || readOnly}\n />\n <Text color=\"fg.muted\">—</Text>\n <Input\n type=\"time\"\n size=\"sm\"\n width=\"120px\"\n value={daySchedule?.close || defaultCloseTime}\n onChange={(e) => handleTimeChange(day, 'close', e.target.value)}\n disabled={disabled || readOnly}\n />\n </HStack>\n ) : (\n <Text fontSize=\"sm\" color=\"fg.muted\">\n {offLabel}\n </Text>\n )}\n </HStack>\n </Box>\n )\n })}\n </Stack>\n\n <FieldError hasError={hasError} errorMessage={errorMessage} helperText={resolvedHelperText} />\n </Field.Root>\n )\n})\n\n/**\n * Props for Schedule field\n */\nexport interface ScheduleFieldProps extends Omit<BaseFieldProps, 'placeholder'> {\n /** Tooltip for field label */\n tooltip?: FieldTooltipMeta\n\n /**\n * Custom day names (for localization)\n */\n dayNames?: Partial<Record<DayOfWeek, string>>\n\n /**\n * Default schedule when empty\n */\n defaultSchedule?: WeeklySchedule\n\n /**\n * Days to display (subset of all days)\n * @default all days\n */\n days?: DayOfWeek[]\n\n /**\n * Show \"copy to weekdays\" button\n * @default true\n */\n showCopyToWeekdays?: boolean\n\n /**\n * Text for \"day off\" state\n * @default 'Day off'\n */\n offLabel?: string\n\n /**\n * Copy to weekdays button text\n * @default 'Copy Mon to weekdays'\n */\n copyToWeekdaysLabel?: string\n\n /**\n * Default opening time when enabling a day\n */\n defaultOpenTime?: string\n\n /**\n * Default closing time when enabling a day\n */\n defaultCloseTime?: string\n}\n\n/**\n * Form.Field.Schedule - Weekly schedule editor\n *\n * Renders working hours schedule editor with toggles\n * and time fields for each day of the week.\n *\n * @example Basic usage\n * ```tsx\n * <Form.Field.Schedule\n * name=\"workingHours\"\n * label=\"Working hours\"\n * />\n * ```\n *\n * @example With custom day names\n * ```tsx\n * <Form.Field.Schedule\n * name=\"schedule\"\n * dayNames={{\n * monday: 'Mon',\n * tuesday: 'Tue',\n * // ...\n * }}\n * offLabel=\"Day off\"\n * copyToWeekdaysLabel=\"Copy Mon to weekdays\"\n * />\n * ```\n *\n * @example Weekdays only\n * ```tsx\n * <Form.Field.Schedule\n * name=\"hours\"\n * days={['monday', 'tuesday', 'wednesday', 'thursday', 'friday']}\n * />\n * ```\n */\nexport function FieldSchedule({\n name,\n label,\n helperText,\n required,\n disabled,\n readOnly,\n tooltip,\n dayNames = {},\n defaultSchedule = DEFAULT_WORKING_HOURS,\n days = DAYS_OF_WEEK,\n showCopyToWeekdays = true,\n offLabel = 'Day off',\n copyToWeekdaysLabel = 'Copy Mon to weekdays',\n defaultOpenTime = '09:00',\n defaultCloseTime = '18:00',\n}: ScheduleFieldProps): ReactElement {\n const {\n form,\n fullPath,\n label: resolvedLabel,\n helperText: resolvedHelperText,\n tooltip: resolvedTooltip,\n required: resolvedRequired,\n disabled: resolvedDisabled,\n readOnly: resolvedReadOnly,\n } = useResolvedFieldProps(name, { label, helperText, required, disabled, readOnly, tooltip })\n\n // Merge day names\n const mergedDayNames = { ...DEFAULT_DAY_NAMES, ...dayNames }\n\n return (\n <form.Field name={fullPath}>\n {(field: AnyFieldApi) => {\n const schedule: WeeklySchedule = (field.state.value as WeeklySchedule) || defaultSchedule\n\n return (\n <ScheduleContent\n field={field}\n schedule={schedule}\n defaultSchedule={defaultSchedule}\n days={days}\n mergedDayNames={mergedDayNames}\n showCopyToWeekdays={showCopyToWeekdays}\n offLabel={offLabel}\n copyToWeekdaysLabel={copyToWeekdaysLabel}\n defaultOpenTime={defaultOpenTime}\n defaultCloseTime={defaultCloseTime}\n disabled={resolvedDisabled}\n readOnly={resolvedReadOnly}\n resolvedLabel={resolvedLabel}\n resolvedHelperText={resolvedHelperText}\n resolvedRequired={resolvedRequired}\n resolvedTooltip={resolvedTooltip}\n fullPath={fullPath}\n />\n )\n }}\n </form.Field>\n )\n}\n","'use client'\n\nimport { Input } from '@chakra-ui/react'\nimport type { ReactElement } from 'react'\nimport type { TimeFieldProps } from '../../types'\nimport { createField, FieldWrapper } from '../base'\n\n/**\n * Form.Field.Time - Time input field\n *\n * Renders a native time input with automatic form integration and error display.\n *\n * @example\n * ```tsx\n * <Form.Field.Time name=\"startTime\" label=\"Start Time\" />\n * ```\n *\n * @example With step (seconds)\n * ```tsx\n * <Form.Field.Time name=\"duration\" label=\"Duration\" step={60} />\n * ```\n */\nexport const FieldTime = createField<TimeFieldProps, string>({\n displayName: 'FieldTime',\n render: ({ field, fullPath, resolved, hasError, errorMessage, componentProps }): ReactElement => (\n <FieldWrapper resolved={resolved} hasError={hasError} errorMessage={errorMessage} fullPath={fullPath}>\n <Input\n type=\"time\"\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 min={componentProps.min}\n max={componentProps.max}\n step={componentProps.step}\n data-field-name={fullPath}\n />\n </FieldWrapper>\n ),\n})\n"]}
@@ -188,5 +188,5 @@ function useLocalizedOptions(options) {
188
188
  }
189
189
 
190
190
  export { FormI18nProvider, SIZE_ORIGINS, STRING_FORMATS, ZOD_ERROR_CODES, createFormErrorMap, getLocalizedValue, useFormI18n, useLocalizedOptions };
191
- //# sourceMappingURL=chunk-7FEQFDJ7.js.map
192
- //# sourceMappingURL=chunk-7FEQFDJ7.js.map
191
+ //# sourceMappingURL=chunk-R2RTCKXY.js.map
192
+ //# sourceMappingURL=chunk-R2RTCKXY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/i18n/create-form-error-map.ts","../src/lib/i18n/form-i18n-provider.tsx","../src/lib/i18n/use-localized-options.ts"],"names":[],"mappings":";;;;;;;AAmCA,SAAS,cAAc,KAAA,EAAkC;AACvD,EAAA,MAAM,SAA0B,EAAC;AAGjC,EAAA,IAAI,KAAA,CAAM,UAAU,MAAA,EAAW;AAC7B,IAAA,MAAA,CAAO,QAAA,GAAW,OAAO,KAAA,CAAM,KAAA,KAAU,WAAW,QAAA,GAAW,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,EACnF;AAGA,EAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAC/B,IAAA,MAAA,CAAO,UAAU,KAAA,CAAM,OAAA;AAAA,EACzB;AACA,EAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAC/B,IAAA,MAAA,CAAO,UAAU,KAAA,CAAM,OAAA;AAAA,EACzB;AACA,EAAA,IAAI,KAAA,CAAM,cAAc,MAAA,EAAW;AACjC,IAAA,MAAA,CAAO,YAAY,KAAA,CAAM,SAAA;AAAA,EAC3B;AAGA,EAAA,IAAI,KAAA,CAAM,aAAa,MAAA,EAAW;AAChC,IAAA,MAAA,CAAO,WAAW,KAAA,CAAM,QAAA;AAAA,EAC1B;AAGA,EAAA,IAAI,MAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,EAAG;AACjD,IAAA,MAAA,CAAO,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,EAC1C;AAGA,EAAA,IAAI,MAAM,IAAA,IAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,EAAG;AAC3C,IAAA,MAAA,CAAO,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAAA,EACpC;AAGA,EAAA,IAAI,KAAA,CAAM,eAAe,MAAA,EAAW;AAClC,IAAA,MAAA,CAAO,aAAa,KAAA,CAAM,UAAA;AAAA,EAC5B;AAGA,EAAA,IAAI,MAAM,OAAA,EAAS;AACjB,IAAA,MAAA,CAAO,UAAU,KAAA,CAAM,OAAA;AAAA,EACzB;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,eAAe,KAAA,EAAqC;AAE3D,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,WAAA,IAAe,KAAA,CAAM,SAAS,SAAA,EAAW;AAC1D,IAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,MAAA,OAAO,KAAA,CAAM,MAAA;AAAA,IACf;AAEA,IAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,QAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,QAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,OAAO,OAAA;AAAA,IACT;AACA,IAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,SAAS,gBAAA,EAAkB;AACnC,IAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,MAAA,OAAO,KAAA,CAAM,MAAA;AAAA,IACf;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,YAAA,CAAa,CAAA,EAAsB,GAAA,EAAa,MAAA,EAA6C;AACpG,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,GAAA,EAAK,MAAM,CAAA;AAE5B,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,KAAW,OAAO,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA,EAAG;AACvD,MAAA,OAAO,KAAA,CAAA;AAAA,IACT;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAwCO,SAAS,mBAAmB,MAAA,EAA4B;AAC7D,EAAA,MAAM,EAAE,CAAA,EAAG,MAAA,GAAS,YAAA,EAAa,GAAI,MAAA;AAErC,EAAA,OAAO,CAAC,KAAA,KAAwC;AAC9C,IAAA,MAAM,MAAA,GAAS,cAAc,KAAK,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,eAAe,KAAK,CAAA;AAGnC,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA,CAAA;AACvC,IAAA,MAAM,YAAY,MAAA,GAAS,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,GAAK,IAAA;AAGpD,IAAA,IAAI,UAAA;AAEJ,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,UAAA,GAAa,YAAA,CAAa,CAAA,EAAG,SAAA,EAAW,MAAM,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,UAAA,GAAa,YAAA,CAAa,CAAA,EAAG,OAAA,EAAS,MAAM,CAAA;AAAA,IAC9C;AAGA,IAAA,OAAO,UAAA;AAAA,EACT,CAAA;AACF;AAKO,IAAM,eAAA,GAAkB;AAAA,EAC7B,cAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,eAAA;AAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF;AAOO,IAAM,eAAe,CAAC,QAAA,EAAU,UAAU,OAAA,EAAS,MAAA,EAAQ,OAAO,MAAM;AAKxE,IAAM,cAAA,GAAiB;AAAA,EAC5B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF;AC3NA,IAAM,eAAA,GAAkB,cAA2C,IAAI,CAAA;AAoEhE,SAAS,iBAAiB,EAAE,CAAA,EAAG,QAAQ,QAAA,EAAU,gBAAA,GAAmB,OAAM,EAA0B;AAEzG,EAAA,MAAM,SAAA,GAA+B,CAAA,KAAM,CAAC,GAAA,KAAgB,GAAA,CAAA;AAG5D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,oBAAoB,CAAA,EAAG;AACzB,MAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,EAAE,CAAA,EAAG,CAAA;AAGzC,MAAA,CAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAa,QAAA,EAAmD,CAAA;AAAA,IAC7E;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,CAAC,CAAC,CAAA;AAExB,EAAA,uBAAO,GAAA,CAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,OAAO,EAAE,CAAA,EAAG,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,CAAC,CAAC,CAAA,IAAM,QAAA,EAAS,CAAA;AAC5F;AAmBO,SAAS,WAAA,GAA2C;AACzD,EAAA,OAAO,WAAW,eAAe,CAAA;AACnC;AAcO,SAAS,iBAAA,CACd,IAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,EACoB;AACpB,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS;AACrB,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AACtC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,CAAA,CAAE,OAAO,CAAA;AAGjC,IAAA,IAAI,CAAC,UAAA,IAAc,UAAA,KAAe,OAAA,EAAS;AACzC,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,OAAO,UAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,QAAA;AAAA,EACT;AACF;ACtIO,SAAS,oBACd,OAAA,EACiE;AACjE,EAAA,MAAM,OAAO,WAAA,EAAY;AAEzB,EAAA,OAAO,QAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,IAAI,CAAC,IAAA,EAAM;AAET,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAS,MAAO,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAS,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,OAAO,OAAA,CAAQ,IAAI,CAAC,EAAE,OAAO,KAAA,EAAO,QAAA,EAAU,SAAQ,KAAM;AAC1D,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAS;AAAA,MAClC;AAEA,MAAA,IAAI;AAEF,QAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,MAAA,CAAA;AAC1B,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,CAAA,CAAE,OAAO,CAAA;AAGjC,QAAA,IAAI,CAAC,UAAA,IAAc,UAAA,KAAe,OAAA,EAAS;AACzC,UAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAS;AAAA,QAClC;AAEA,QAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,QAAA,EAAS;AAAA,MAC9C,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAS;AAAA,MAClC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AACpB","file":"chunk-7FEQFDJ7.js","sourcesContent":["import type { TranslateFunction, TranslateParams } from './form-i18n-provider'\n\n/**\n * Zod v4 issue type (упрощённый тип для работы с error map)\n * Полный тип: z.core.$ZodIssue (discriminated union)\n */\ninterface ZodIssue {\n readonly code: string\n readonly path: PropertyKey[]\n readonly message: string\n readonly input?: unknown\n readonly expected?: string\n readonly minimum?: number\n readonly maximum?: number\n readonly inclusive?: boolean\n readonly origin?: string\n readonly format?: string\n readonly options?: unknown[]\n readonly keys?: string[]\n readonly multipleOf?: number\n}\n\n/**\n * Конфигурация для создания error map\n */\nexport interface FormErrorMapConfig {\n /** Функция перевода (совместима с next-intl) */\n t: TranslateFunction\n /** Префикс для ключей валидации (по умолчанию 'validation') */\n prefix?: string\n}\n\n/**\n * Извлекает параметры из Zod issue для интерполяции в сообщение\n */\nfunction extractParams(issue: ZodIssue): TranslateParams {\n const params: TranslateParams = {}\n\n // Общие параметры\n if (issue.input !== undefined) {\n params.received = typeof issue.input === 'object' ? 'object' : String(issue.input)\n }\n\n // too_small / too_big\n if (issue.minimum !== undefined) {\n params.minimum = issue.minimum\n }\n if (issue.maximum !== undefined) {\n params.maximum = issue.maximum\n }\n if (issue.inclusive !== undefined) {\n params.inclusive = issue.inclusive\n }\n\n // invalid_type\n if (issue.expected !== undefined) {\n params.expected = issue.expected\n }\n\n // invalid_value (объединяет invalid_enum_value + invalid_literal в Zod v4)\n if (issue.options && Array.isArray(issue.options)) {\n params.options = issue.options.join(', ')\n }\n\n // unrecognized_keys\n if (issue.keys && Array.isArray(issue.keys)) {\n params.keys = issue.keys.join(', ')\n }\n\n // not_multiple_of\n if (issue.multipleOf !== undefined) {\n params.multipleOf = issue.multipleOf\n }\n\n // custom — сообщение из .refine()\n if (issue.message) {\n params.message = issue.message\n }\n\n return params\n}\n\n/**\n * Определяет origin (тип данных) для issue\n * Используется для построения ключа: validation.too_small.string\n */\nfunction getIssueOrigin(issue: ZodIssue): string | undefined {\n // Для too_small / too_big определяем origin по типу input или expected\n if (issue.code === 'too_small' || issue.code === 'too_big') {\n if (issue.origin) {\n return issue.origin\n }\n // Fallback по типу input\n const input = issue.input\n if (typeof input === 'string') {\n return 'string'\n }\n if (typeof input === 'number') {\n return 'number'\n }\n if (Array.isArray(input)) {\n return 'array'\n }\n if (input instanceof Date) {\n return 'date'\n }\n }\n\n // Для invalid_format (Zod v4, ранее invalid_string) определяем format\n if (issue.code === 'invalid_format') {\n if (issue.format) {\n return issue.format\n }\n }\n\n return undefined\n}\n\n/**\n * Пытается получить перевод по ключу\n * @returns переведённая строка или undefined если перевод не найден\n */\nfunction tryTranslate(t: TranslateFunction, key: string, params: TranslateParams): string | undefined {\n try {\n const result = t(key, params)\n // next-intl возвращает ключ при отсутствии перевода\n if (!result || result === key || result.startsWith(key)) {\n return undefined\n }\n return result\n } catch {\n return undefined\n }\n}\n\n/**\n * Создаёт Zod error map с поддержкой i18n\n *\n * Error map преобразует Zod ошибки в переведённые сообщения.\n * Ключи строятся по формату: `{prefix}.{code}.{origin?}`\n *\n * @example\n * ```tsx\n * import { createFormErrorMap } from '@lena/form-components'\n * import { z } from 'zod/v4'\n * import { useTranslations } from 'next-intl'\n *\n * // В провайдере приложения\n * const t = useTranslations('formSchemas')\n * z.config({ customError: createFormErrorMap({ t }) })\n *\n * // Или через FormI18nProvider\n * <FormI18nProvider t={t} locale={locale} setupZodErrorMap>\n * {children}\n * </FormI18nProvider>\n * ```\n *\n * @example Структура ключей в JSON\n * ```json\n * {\n * \"validation\": {\n * \"required\": \"Обязательное поле\",\n * \"too_small\": {\n * \"string\": \"Минимум {minimum} символов\",\n * \"number\": \"Минимум {minimum}\"\n * },\n * \"invalid_format\": {\n * \"email\": \"Некорректный email\"\n * }\n * }\n * }\n * ```\n */\nexport function createFormErrorMap(config: FormErrorMapConfig) {\n const { t, prefix = 'validation' } = config\n\n return (issue: ZodIssue): string | undefined => {\n const params = extractParams(issue)\n const origin = getIssueOrigin(issue)\n\n // Строим ключи для поиска перевода\n const baseKey = `${prefix}.${issue.code}`\n const originKey = origin ? `${baseKey}.${origin}` : null\n\n // Пробуем с origin, затем без\n let translated: string | undefined\n\n if (originKey) {\n translated = tryTranslate(t, originKey, params)\n }\n\n if (!translated) {\n translated = tryTranslate(t, baseKey, params)\n }\n\n // Возвращаем undefined чтобы Zod использовал дефолтное сообщение\n return translated\n }\n}\n\n/**\n * Список всех кодов ошибок Zod v4 для генерации ключей\n */\nexport const ZOD_ERROR_CODES = [\n 'invalid_type',\n 'too_small',\n 'too_big',\n 'invalid_format', // Zod v4: ранее invalid_string\n 'not_multiple_of',\n 'unrecognized_keys',\n 'invalid_value', // Zod v4: объединяет invalid_enum_value + invalid_literal\n 'invalid_union',\n 'invalid_key',\n 'invalid_element',\n 'custom',\n] as const\n\nexport type ZodErrorCode = (typeof ZOD_ERROR_CODES)[number]\n\n/**\n * Origins для ошибок too_small / too_big\n */\nexport const SIZE_ORIGINS = ['string', 'number', 'array', 'date', 'set', 'file'] as const\n\n/**\n * Formats для ошибок invalid_format (Zod v4, ранее invalid_string)\n */\nexport const STRING_FORMATS = [\n 'email',\n 'url',\n 'uuid',\n 'cuid',\n 'cuid2',\n 'ulid',\n 'regex',\n 'datetime',\n 'date',\n 'time',\n 'duration',\n 'ip',\n 'cidr',\n 'base64',\n 'base64url',\n 'json_string',\n 'e164',\n 'jwt',\n 'emoji',\n 'nanoid',\n 'guid',\n 'lowercase',\n 'uppercase',\n] as const\n","'use client'\n\nimport { createContext, type ReactNode, useContext, useEffect } from 'react'\nimport { z } from 'zod/v4'\nimport { createFormErrorMap } from './create-form-error-map'\n\n/**\n * Параметры для интерполяции в сообщениях об ошибках\n * @example { minimum: 5, maximum: 100 }\n */\nexport type TranslateParams = Record<string, string | number | boolean | undefined>\n\n/**\n * Функция перевода (совместима с next-intl useTranslations)\n * @param key - Ключ перевода в формате \"ModelName.fieldName.property\"\n * @param params - Опциональные параметры для интерполяции\n * @returns Переведённая строка или fallback\n */\nexport type TranslateFunction = (key: string, params?: TranslateParams) => string\n\n/**\n * Контекст для i18n в формах\n */\ninterface FormI18nContextValue {\n /** Функция перевода */\n t: TranslateFunction\n /** Текущая локаль */\n locale: string\n /** Включен ли i18n */\n enabled: boolean\n}\n\nconst FormI18nContext = createContext<FormI18nContextValue | null>(null)\n\n/**\n * Props для FormI18nProvider\n */\ninterface FormI18nProviderProps {\n /**\n * Функция перевода из next-intl или другой i18n библиотеки.\n * Если не задана, переводы полей (title, placeholder) не применяются,\n * но locale используется для constraint hints.\n * @example useTranslations('formSchemas')\n */\n t?: TranslateFunction\n /** Текущая локаль (default: 'en') */\n locale: string\n children: ReactNode\n /**\n * Автоматически настроить глобальный Zod error map для i18n\n *\n * При включении, Zod ошибки будут переводиться через функцию t()\n * с ключами вида `validation.{code}.{origin?}`\n *\n * @example\n * ```json\n * {\n * \"validation\": {\n * \"too_small\": { \"string\": \"Минимум {minimum} символов\" },\n * \"invalid_string\": { \"email\": \"Некорректный email\" }\n * }\n * }\n * ```\n *\n * @default false\n */\n setupZodErrorMap?: boolean\n}\n\n/**\n * Провайдер i18n для форм\n *\n * Оборачивает формы и предоставляет доступ к переводам через useFormI18n.\n * При наличии провайдера, компоненты форм будут использовать переводы\n * по ключам из i18nKey в схемах.\n *\n * @example Базовое использование\n * ```tsx\n * import { FormI18nProvider } from '@lena/form-components'\n * import { useTranslations, useLocale } from 'next-intl'\n *\n * function App({ children }) {\n * const t = useTranslations('formSchemas')\n * const locale = useLocale()\n *\n * return (\n * <FormI18nProvider t={t} locale={locale}>\n * {children}\n * </FormI18nProvider>\n * )\n * }\n * ```\n *\n * @example С автоматической настройкой Zod error map\n * ```tsx\n * <FormI18nProvider t={t} locale={locale} setupZodErrorMap>\n * {children}\n * </FormI18nProvider>\n * ```\n */\nexport function FormI18nProvider({ t, locale, children, setupZodErrorMap = false }: FormI18nProviderProps) {\n // Fallback t-функция: возвращает ключ как есть (без перевода)\n const resolvedT: TranslateFunction = t ?? ((key: string) => key)\n\n // Настраиваем глобальный Zod error map при включённом флаге\n useEffect(() => {\n if (setupZodErrorMap && t) {\n const errorMap = createFormErrorMap({ t })\n // Type assertion: наш error map совместим с Zod v4 API,\n // но TypeScript не может вывести это автоматически\n z.config({ customError: errorMap as z.core.$ZodErrorMap<z.core.$ZodIssue> })\n }\n }, [setupZodErrorMap, t])\n\n return <FormI18nContext.Provider value={{ t: resolvedT, locale, enabled: !!t }}>{children}</FormI18nContext.Provider>\n}\n\n/**\n * Хук для доступа к i18n в формах\n *\n * Возвращает функцию перевода и информацию о локали.\n * Если FormI18nProvider не найден, возвращает null.\n *\n * @example\n * ```tsx\n * function MyField() {\n * const i18n = useFormI18n()\n *\n * if (i18n) {\n * const label = i18n.t('Product.name.title')\n * }\n * }\n * ```\n */\nexport function useFormI18n(): FormI18nContextValue | null {\n return useContext(FormI18nContext)\n}\n\n/**\n * Получить переведённое значение с fallback\n *\n * Пытается получить перевод по ключу. Если перевод пустой или\n * i18n не настроен, возвращает fallback значение.\n *\n * @param i18n - Контекст i18n (может быть null)\n * @param i18nKey - Базовый ключ (например, \"Product.name\")\n * @param property - Свойство (например, \"title\", \"placeholder\")\n * @param fallback - Значение по умолчанию\n * @returns Переведённая строка или fallback\n */\nexport function getLocalizedValue(\n i18n: FormI18nContextValue | null,\n i18nKey: string | undefined,\n property: 'title' | 'placeholder' | 'description' | 'label',\n fallback: string | undefined,\n): string | undefined {\n if (!i18n || !i18nKey) {\n return fallback\n }\n\n try {\n const fullKey = `${i18nKey}.${property}`\n const translated = i18n.t(fullKey)\n\n // Если перевод пустой или равен ключу (next-intl возвращает ключ при отсутствии перевода)\n if (!translated || translated === fullKey) {\n return fallback\n }\n\n return translated\n } catch {\n // При ошибке возвращаем fallback\n return fallback\n }\n}\n","'use client'\n\nimport { useMemo } from 'react'\nimport { useFormI18n } from './form-i18n-provider'\n\n/**\n * Опция для select/radio/checkbox с поддержкой i18n\n */\nexport interface LocalizableOption {\n value: string | number\n label: string\n /** Опция отключена */\n disabled?: boolean\n /** Ключ i18n для перевода label (например, \"RecipeType.SWEET\") */\n i18nKey?: string\n}\n\n/**\n * Хук для локализации опций select/radio/checkbox\n *\n * Принимает массив опций с i18nKey и возвращает массив с переведёнными label.\n * Если i18n не настроен или перевод отсутствует, используется оригинальный label.\n *\n * @param options - Массив опций с возможными i18nKey\n * @returns Массив опций с переведёнными label\n *\n * @example\n * ```tsx\n * // Опции из Zod схемы\n * const rawOptions = [\n * { value: 'SWEET', label: 'Сладкое', i18nKey: 'RecipeType.SWEET' },\n * { value: 'SALTY', label: 'Солёное', i18nKey: 'RecipeType.SALTY' },\n * ]\n *\n * function MySelect() {\n * const options = useLocalizedOptions(rawOptions)\n * // options[0].label будет переведён если есть FormI18nProvider\n * }\n * ```\n */\nexport function useLocalizedOptions(\n options: LocalizableOption[] | undefined\n): { value: string | number; label: string; disabled?: boolean }[] {\n const i18n = useFormI18n()\n\n return useMemo(() => {\n if (!options) {\n return []\n }\n\n if (!i18n) {\n // i18n не настроен — возвращаем оригинальные label\n return options.map(({ value, label, disabled }) => ({ value, label, disabled }))\n }\n\n return options.map(({ value, label, disabled, i18nKey }) => {\n if (!i18nKey) {\n return { value, label, disabled }\n }\n\n try {\n // Ключ для enum option: \"EnumName.VALUE.label\"\n const fullKey = `${i18nKey}.label`\n const translated = i18n.t(fullKey)\n\n // Если перевод пустой или равен ключу — используем fallback\n if (!translated || translated === fullKey) {\n return { value, label, disabled }\n }\n\n return { value, label: translated, disabled }\n } catch {\n return { value, label, disabled }\n }\n })\n }, [options, i18n])\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/i18n/create-form-error-map.ts","../src/lib/i18n/form-i18n-provider.tsx","../src/lib/i18n/use-localized-options.ts"],"names":[],"mappings":"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","file":"chunk-R2RTCKXY.js","sourcesContent":["import type { TranslateFunction, TranslateParams } from './form-i18n-provider'\n\n/**\n * Zod v4 issue type (упрощённый тип для работы с error map)\n * Полный тип: z.core.$ZodIssue (discriminated union)\n */\ninterface ZodIssue {\n readonly code: string\n readonly path: PropertyKey[]\n readonly message: string\n readonly input?: unknown\n readonly expected?: string\n readonly minimum?: number\n readonly maximum?: number\n readonly inclusive?: boolean\n readonly origin?: string\n readonly format?: string\n readonly options?: unknown[]\n readonly keys?: string[]\n readonly multipleOf?: number\n}\n\n/**\n * Конфигурация для создания error map\n */\nexport interface FormErrorMapConfig {\n /** Функция перевода (совместима с next-intl) */\n t: TranslateFunction\n /** Префикс для ключей валидации (по умолчанию 'validation') */\n prefix?: string\n}\n\n/**\n * Извлекает параметры из Zod issue для интерполяции в сообщение\n */\nfunction extractParams(issue: ZodIssue): TranslateParams {\n const params: TranslateParams = {}\n\n // Общие параметры\n if (issue.input !== undefined) {\n params.received = typeof issue.input === 'object' ? 'object' : String(issue.input)\n }\n\n // too_small / too_big\n if (issue.minimum !== undefined) {\n params.minimum = issue.minimum\n }\n if (issue.maximum !== undefined) {\n params.maximum = issue.maximum\n }\n if (issue.inclusive !== undefined) {\n params.inclusive = issue.inclusive\n }\n\n // invalid_type\n if (issue.expected !== undefined) {\n params.expected = issue.expected\n }\n\n // invalid_value (объединяет invalid_enum_value + invalid_literal в Zod v4)\n if (issue.options && Array.isArray(issue.options)) {\n params.options = issue.options.join(', ')\n }\n\n // unrecognized_keys\n if (issue.keys && Array.isArray(issue.keys)) {\n params.keys = issue.keys.join(', ')\n }\n\n // not_multiple_of\n if (issue.multipleOf !== undefined) {\n params.multipleOf = issue.multipleOf\n }\n\n // custom — сообщение из .refine()\n if (issue.message) {\n params.message = issue.message\n }\n\n return params\n}\n\n/**\n * Определяет origin (тип данных) для issue\n * Используется для построения ключа: validation.too_small.string\n */\nfunction getIssueOrigin(issue: ZodIssue): string | undefined {\n // Для too_small / too_big определяем origin по типу input или expected\n if (issue.code === 'too_small' || issue.code === 'too_big') {\n if (issue.origin) {\n return issue.origin\n }\n // Fallback по типу input\n const input = issue.input\n if (typeof input === 'string') {\n return 'string'\n }\n if (typeof input === 'number') {\n return 'number'\n }\n if (Array.isArray(input)) {\n return 'array'\n }\n if (input instanceof Date) {\n return 'date'\n }\n }\n\n // Для invalid_format (Zod v4, ранее invalid_string) определяем format\n if (issue.code === 'invalid_format') {\n if (issue.format) {\n return issue.format\n }\n }\n\n return undefined\n}\n\n/**\n * Пытается получить перевод по ключу\n * @returns переведённая строка или undefined если перевод не найден\n */\nfunction tryTranslate(t: TranslateFunction, key: string, params: TranslateParams): string | undefined {\n try {\n const result = t(key, params)\n // next-intl возвращает ключ при отсутствии перевода\n if (!result || result === key || result.startsWith(key)) {\n return undefined\n }\n return result\n } catch {\n return undefined\n }\n}\n\n/**\n * Создаёт Zod error map с поддержкой i18n\n *\n * Error map преобразует Zod ошибки в переведённые сообщения.\n * Ключи строятся по формату: `{prefix}.{code}.{origin?}`\n *\n * @example\n * ```tsx\n * import { createFormErrorMap } from '@lena/form-components'\n * import { z } from 'zod/v4'\n * import { useTranslations } from 'next-intl'\n *\n * // В провайдере приложения\n * const t = useTranslations('formSchemas')\n * z.config({ customError: createFormErrorMap({ t }) })\n *\n * // Или через FormI18nProvider\n * <FormI18nProvider t={t} locale={locale} setupZodErrorMap>\n * {children}\n * </FormI18nProvider>\n * ```\n *\n * @example Структура ключей в JSON\n * ```json\n * {\n * \"validation\": {\n * \"required\": \"Обязательное поле\",\n * \"too_small\": {\n * \"string\": \"Минимум {minimum} символов\",\n * \"number\": \"Минимум {minimum}\"\n * },\n * \"invalid_format\": {\n * \"email\": \"Некорректный email\"\n * }\n * }\n * }\n * ```\n */\nexport function createFormErrorMap(config: FormErrorMapConfig) {\n const { t, prefix = 'validation' } = config\n\n return (issue: ZodIssue): string | undefined => {\n const params = extractParams(issue)\n const origin = getIssueOrigin(issue)\n\n // Строим ключи для поиска перевода\n const baseKey = `${prefix}.${issue.code}`\n const originKey = origin ? `${baseKey}.${origin}` : null\n\n // Пробуем с origin, затем без\n let translated: string | undefined\n\n if (originKey) {\n translated = tryTranslate(t, originKey, params)\n }\n\n if (!translated) {\n translated = tryTranslate(t, baseKey, params)\n }\n\n // Возвращаем undefined чтобы Zod использовал дефолтное сообщение\n return translated\n }\n}\n\n/**\n * Список всех кодов ошибок Zod v4 для генерации ключей\n */\nexport const ZOD_ERROR_CODES = [\n 'invalid_type',\n 'too_small',\n 'too_big',\n 'invalid_format', // Zod v4: ранее invalid_string\n 'not_multiple_of',\n 'unrecognized_keys',\n 'invalid_value', // Zod v4: объединяет invalid_enum_value + invalid_literal\n 'invalid_union',\n 'invalid_key',\n 'invalid_element',\n 'custom',\n] as const\n\nexport type ZodErrorCode = (typeof ZOD_ERROR_CODES)[number]\n\n/**\n * Origins для ошибок too_small / too_big\n */\nexport const SIZE_ORIGINS = ['string', 'number', 'array', 'date', 'set', 'file'] as const\n\n/**\n * Formats для ошибок invalid_format (Zod v4, ранее invalid_string)\n */\nexport const STRING_FORMATS = [\n 'email',\n 'url',\n 'uuid',\n 'cuid',\n 'cuid2',\n 'ulid',\n 'regex',\n 'datetime',\n 'date',\n 'time',\n 'duration',\n 'ip',\n 'cidr',\n 'base64',\n 'base64url',\n 'json_string',\n 'e164',\n 'jwt',\n 'emoji',\n 'nanoid',\n 'guid',\n 'lowercase',\n 'uppercase',\n] as const\n","'use client'\n\nimport { createContext, type ReactNode, useContext, useEffect } from 'react'\nimport { z } from 'zod/v4'\nimport { createFormErrorMap } from './create-form-error-map'\n\n/**\n * Параметры для интерполяции в сообщениях об ошибках\n * @example { minimum: 5, maximum: 100 }\n */\nexport type TranslateParams = Record<string, string | number | boolean | undefined>\n\n/**\n * Функция перевода (совместима с next-intl useTranslations)\n * @param key - Ключ перевода в формате \"ModelName.fieldName.property\"\n * @param params - Опциональные параметры для интерполяции\n * @returns Переведённая строка или fallback\n */\nexport type TranslateFunction = (key: string, params?: TranslateParams) => string\n\n/**\n * Контекст для i18n в формах\n */\ninterface FormI18nContextValue {\n /** Функция перевода */\n t: TranslateFunction\n /** Текущая локаль */\n locale: string\n /** Включен ли i18n */\n enabled: boolean\n}\n\nconst FormI18nContext = createContext<FormI18nContextValue | null>(null)\n\n/**\n * Props для FormI18nProvider\n */\ninterface FormI18nProviderProps {\n /**\n * Функция перевода из next-intl или другой i18n библиотеки.\n * Если не задана, переводы полей (title, placeholder) не применяются,\n * но locale используется для constraint hints.\n * @example useTranslations('formSchemas')\n */\n t?: TranslateFunction\n /** Текущая локаль (default: 'en') */\n locale: string\n children: ReactNode\n /**\n * Автоматически настроить глобальный Zod error map для i18n\n *\n * При включении, Zod ошибки будут переводиться через функцию t()\n * с ключами вида `validation.{code}.{origin?}`\n *\n * @example\n * ```json\n * {\n * \"validation\": {\n * \"too_small\": { \"string\": \"Минимум {minimum} символов\" },\n * \"invalid_string\": { \"email\": \"Некорректный email\" }\n * }\n * }\n * ```\n *\n * @default false\n */\n setupZodErrorMap?: boolean\n}\n\n/**\n * Провайдер i18n для форм\n *\n * Оборачивает формы и предоставляет доступ к переводам через useFormI18n.\n * При наличии провайдера, компоненты форм будут использовать переводы\n * по ключам из i18nKey в схемах.\n *\n * @example Базовое использование\n * ```tsx\n * import { FormI18nProvider } from '@lena/form-components'\n * import { useTranslations, useLocale } from 'next-intl'\n *\n * function App({ children }) {\n * const t = useTranslations('formSchemas')\n * const locale = useLocale()\n *\n * return (\n * <FormI18nProvider t={t} locale={locale}>\n * {children}\n * </FormI18nProvider>\n * )\n * }\n * ```\n *\n * @example С автоматической настройкой Zod error map\n * ```tsx\n * <FormI18nProvider t={t} locale={locale} setupZodErrorMap>\n * {children}\n * </FormI18nProvider>\n * ```\n */\nexport function FormI18nProvider({ t, locale, children, setupZodErrorMap = false }: FormI18nProviderProps) {\n // Fallback t-функция: возвращает ключ как есть (без перевода)\n const resolvedT: TranslateFunction = t ?? ((key: string) => key)\n\n // Настраиваем глобальный Zod error map при включённом флаге\n useEffect(() => {\n if (setupZodErrorMap && t) {\n const errorMap = createFormErrorMap({ t })\n // Type assertion: наш error map совместим с Zod v4 API,\n // но TypeScript не может вывести это автоматически\n z.config({ customError: errorMap as z.core.$ZodErrorMap<z.core.$ZodIssue> })\n }\n }, [setupZodErrorMap, t])\n\n return <FormI18nContext.Provider value={{ t: resolvedT, locale, enabled: !!t }}>{children}</FormI18nContext.Provider>\n}\n\n/**\n * Хук для доступа к i18n в формах\n *\n * Возвращает функцию перевода и информацию о локали.\n * Если FormI18nProvider не найден, возвращает null.\n *\n * @example\n * ```tsx\n * function MyField() {\n * const i18n = useFormI18n()\n *\n * if (i18n) {\n * const label = i18n.t('Product.name.title')\n * }\n * }\n * ```\n */\nexport function useFormI18n(): FormI18nContextValue | null {\n return useContext(FormI18nContext)\n}\n\n/**\n * Получить переведённое значение с fallback\n *\n * Пытается получить перевод по ключу. Если перевод пустой или\n * i18n не настроен, возвращает fallback значение.\n *\n * @param i18n - Контекст i18n (может быть null)\n * @param i18nKey - Базовый ключ (например, \"Product.name\")\n * @param property - Свойство (например, \"title\", \"placeholder\")\n * @param fallback - Значение по умолчанию\n * @returns Переведённая строка или fallback\n */\nexport function getLocalizedValue(\n i18n: FormI18nContextValue | null,\n i18nKey: string | undefined,\n property: 'title' | 'placeholder' | 'description' | 'label',\n fallback: string | undefined\n): string | undefined {\n if (!i18n || !i18nKey) {\n return fallback\n }\n\n try {\n const fullKey = `${i18nKey}.${property}`\n const translated = i18n.t(fullKey)\n\n // Если перевод пустой или равен ключу (next-intl возвращает ключ при отсутствии перевода)\n if (!translated || translated === fullKey) {\n return fallback\n }\n\n return translated\n } catch {\n // При ошибке возвращаем fallback\n return fallback\n }\n}\n","'use client'\n\nimport { useMemo } from 'react'\nimport { useFormI18n } from './form-i18n-provider'\n\n/**\n * Опция для select/radio/checkbox с поддержкой i18n\n */\nexport interface LocalizableOption {\n value: string | number\n label: string\n /** Опция отключена */\n disabled?: boolean\n /** Ключ i18n для перевода label (например, \"RecipeType.SWEET\") */\n i18nKey?: string\n}\n\n/**\n * Хук для локализации опций select/radio/checkbox\n *\n * Принимает массив опций с i18nKey и возвращает массив с переведёнными label.\n * Если i18n не настроен или перевод отсутствует, используется оригинальный label.\n *\n * @param options - Массив опций с возможными i18nKey\n * @returns Массив опций с переведёнными label\n *\n * @example\n * ```tsx\n * // Опции из Zod схемы\n * const rawOptions = [\n * { value: 'SWEET', label: 'Сладкое', i18nKey: 'RecipeType.SWEET' },\n * { value: 'SALTY', label: 'Солёное', i18nKey: 'RecipeType.SALTY' },\n * ]\n *\n * function MySelect() {\n * const options = useLocalizedOptions(rawOptions)\n * // options[0].label будет переведён если есть FormI18nProvider\n * }\n * ```\n */\nexport function useLocalizedOptions(\n options: LocalizableOption[] | undefined\n): { value: string | number; label: string; disabled?: boolean }[] {\n const i18n = useFormI18n()\n\n return useMemo(() => {\n if (!options) {\n return []\n }\n\n if (!i18n) {\n // i18n не настроен — возвращаем оригинальные label\n return options.map(({ value, label, disabled }) => ({ value, label, disabled }))\n }\n\n return options.map(({ value, label, disabled, i18nKey }) => {\n if (!i18nKey) {\n return { value, label, disabled }\n }\n\n try {\n // Ключ для enum option: \"EnumName.VALUE.label\"\n const fullKey = `${i18nKey}.label`\n const translated = i18n.t(fullKey)\n\n // Если перевод пустой или равен ключу — используем fallback\n if (!translated || translated === fullKey) {\n return { value, label, disabled }\n }\n\n return { value, label: translated, disabled }\n } catch {\n return { value, label, disabled }\n }\n })\n }, [options, i18n])\n}\n"]}