@zayne-labs/ui-react 0.11.11 → 0.11.12

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 (35) hide show
  1. package/dist/components/cn-jNZfGhrk.js.map +1 -1
  2. package/dist/components/common/await/index.d.ts +4 -6
  3. package/dist/components/common/await/index.js.map +1 -1
  4. package/dist/components/common/client-gate/index.d.ts +1 -3
  5. package/dist/components/common/client-gate/index.js.map +1 -1
  6. package/dist/components/common/error-boundary/index.d.ts +2 -2
  7. package/dist/components/common/for/index.d.ts +2 -4
  8. package/dist/components/common/presence/index.d.ts +1 -2
  9. package/dist/components/common/show/index.d.ts +3 -5
  10. package/dist/components/common/slot/index.d.ts +2 -4
  11. package/dist/components/common/suspense-with-boundary/index.d.ts +1 -1
  12. package/dist/components/common/suspense-with-boundary/index.js.map +1 -1
  13. package/dist/components/common/switch/index.d.ts +3 -5
  14. package/dist/components/common/teleport/index.d.ts +1 -2
  15. package/dist/components/common/teleport/index.js.map +1 -1
  16. package/dist/components/error-boundary-BOZ3EvMt.js.map +1 -1
  17. package/dist/components/for-DGTMIS0w.js.map +1 -1
  18. package/dist/components/{index-BmD5l0L7.d.ts → index-CUmHEGwU.d.ts} +3 -6
  19. package/dist/components/{index-dmMYkH2c.d.ts → index-Dvg4OLWa.d.ts} +3 -4
  20. package/dist/components/presence-DDuEcp1q.js.map +1 -1
  21. package/dist/components/show-CMxdpPiN.js.map +1 -1
  22. package/dist/components/slot-B2aEs2RU.js.map +1 -1
  23. package/dist/components/switch-Dwy5Gzsb.js.map +1 -1
  24. package/dist/components/ui/card/index.d.ts +7 -8
  25. package/dist/components/ui/card/index.js.map +1 -1
  26. package/dist/components/ui/carousel/index.d.ts +9 -10
  27. package/dist/components/ui/carousel/index.js.map +1 -1
  28. package/dist/components/ui/drag-scroll/index.d.ts +9 -79
  29. package/dist/components/ui/drag-scroll/index.js.map +1 -1
  30. package/dist/components/ui/drop-zone/index.d.ts +16 -86
  31. package/dist/components/ui/drop-zone/index.js.map +1 -1
  32. package/dist/components/ui/form/index.d.ts +21 -23
  33. package/dist/components/ui/form/index.js.map +1 -1
  34. package/dist/style.css +1 -4
  35. package/package.json +19 -19
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useHookFormContext","HookFormProvider","ReactFragment","Slot.Root"],"sources":["../../../../src/components/ui/form/icons.tsx","../../../../src/components/ui/form/utils.ts","../../../../src/components/ui/form/form-context.ts","../../../../src/components/ui/form/form.tsx","../../../../src/components/ui/form/form-parts.ts"],"sourcesContent":["export const EyeIconClosed = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M15.175 8.325q.725.725 1.063 1.65t.237 1.9q0 .375-.275.638t-.65.262t-.638-.262t-.262-.638q.125-.65-.075-1.25T13.95 9.6t-1.025-.65t-1.275-.1q-.375 0-.638-.275t-.262-.65t.263-.637t.637-.263q.95-.1 1.875.238t1.65 1.062M12 6q-.475 0-.925.037t-.9.138q-.425.075-.763-.125t-.462-.6t.088-.775t.612-.45q.575-.125 1.163-.175T12 4q3.425 0 6.263 1.8t4.337 4.85q.1.2.15.413t.05.437t-.038.438t-.137.412q-.45 1-1.112 1.875t-1.463 1.6q-.3.275-.7.225t-.65-.4t-.212-.763t.337-.687q.6-.575 1.1-1.25t.875-1.45q-1.25-2.525-3.613-4.012T12 6m0 13q-3.35 0-6.125-1.812T1.5 12.425q-.125-.2-.187-.437T1.25 11.5t.05-.475t.175-.45q.5-1 1.163-1.912T4.15 7L2.075 4.9q-.275-.3-.262-.712T2.1 3.5t.7-.275t.7.275l17 17q.275.275.288.688t-.288.712q-.275.275-.7.275t-.7-.275l-3.5-3.45q-.875.275-1.775.413T12 19M5.55 8.4q-.725.65-1.325 1.425T3.2 11.5q1.25 2.525 3.613 4.013T12 17q.5 0 .975-.062t.975-.138l-.9-.95q-.275.075-.525.113T12 16q-1.875 0-3.188-1.312T7.5 11.5q0-.275.038-.525t.112-.525zm4.2 4.2\"\n\t\t/>\n\t</svg>\n);\n\nexport const EyeIconOpen = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M12 16q1.875 0 3.188-1.312T16.5 11.5t-1.312-3.187T12 7T8.813 8.313T7.5 11.5t1.313 3.188T12 16m0-1.8q-1.125 0-1.912-.788T9.3 11.5t.788-1.912T12 8.8t1.913.788t.787 1.912t-.787 1.913T12 14.2m0 4.8q-3.35 0-6.113-1.8t-4.362-4.75q-.125-.225-.187-.462t-.063-.488t.063-.488t.187-.462q1.6-2.95 4.363-4.75T12 4t6.113 1.8t4.362 4.75q.125.225.188.463t.062.487t-.062.488t-.188.462q-1.6 2.95-4.362 4.75T12 19m0-2q2.825 0 5.188-1.487T20.8 11.5q-1.25-2.525-3.613-4.012T12 6T6.813 7.488T3.2 11.5q1.25 2.525 3.613 4.013T12 17\"\n\t\t/>\n\t</svg>\n);\n","import { isObject } from \"@zayne-labs/toolkit-type-helpers\";\nimport { createElement } from \"react\";\nimport type { FieldErrors, FieldValues } from \"react-hook-form\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport type { FormErrorMessagePrimitiveProps, FormInputProps } from \"./form\";\nimport type { FormRootContextType, RenderIconProps } from \"./form-context\";\nimport { EyeIconClosed, EyeIconOpen } from \"./icons\";\n\nexport const getFieldErrorMessage = (options: {\n\terrors: FieldErrors | undefined;\n\tfieldName: string | undefined;\n\ttype: FormErrorMessagePrimitiveProps<FieldValues>[\"type\"];\n}): string | string[] | null | undefined => {\n\tconst { errors, fieldName, type } = options;\n\n\tif (fieldName === undefined || !errors || Object.keys(errors).length === 0) return;\n\n\tif (type === \"root\") {\n\t\treturn errors.root?.[fieldName]?.message;\n\t}\n\n\t// == Handle nested paths like `notifications.0`\n\tconst pathParts = fieldName.includes(\".\") ? fieldName.split(\".\") : null;\n\n\t// == If there are no path parts, return the error message\n\tif (!pathParts) {\n\t\tconst errorMessage = errors[fieldName]?.message;\n\n\t\treturn errorMessage as string | string[];\n\t}\n\n\tlet extractedError = errors;\n\n\tfor (const part of pathParts) {\n\t\tconst currentError = extractedError[part];\n\n\t\tif (!isObject(currentError)) break;\n\n\t\textractedError = currentError as never;\n\t}\n\n\tconst errorMessage = extractedError.message as unknown as string | string[];\n\n\treturn errorMessage;\n};\n\nexport const getEyeIcon = (options: {\n\tclassNames: FormInputProps[\"classNames\"];\n\ticonType: \"closed\" | \"open\";\n\trenderIconProps: RenderIconProps;\n\twithEyeIcon: FormRootContextType[\"withEyeIcon\"];\n}) => {\n\tconst { classNames, iconType, renderIconProps, withEyeIcon } = options;\n\n\tif (!withEyeIcon) {\n\t\treturn null;\n\t}\n\n\tif (withEyeIcon === true) {\n\t\tconst defaultIconMap = {\n\t\t\tclosed: createElement(EyeIconClosed, {\n\t\t\t\tclassName: cnMerge(\"size-full\", classNames?.eyeIcon),\n\t\t\t}),\n\n\t\t\topen: createElement(EyeIconOpen, {\n\t\t\t\tclassName: cnMerge(\"size-full\", classNames?.eyeIcon),\n\t\t\t}),\n\t\t};\n\n\t\treturn defaultIconMap[iconType];\n\t}\n\n\tif (withEyeIcon.renderIcon) {\n\t\treturn withEyeIcon.renderIcon(renderIconProps);\n\t}\n\n\tif (withEyeIcon[iconType]) {\n\t\treturn withEyeIcon[iconType];\n\t}\n\n\treturn null;\n};\n","import { ContextError, createCustomContext } from \"@zayne-labs/toolkit-react\";\nimport type { UnionDiscriminator } from \"@zayne-labs/toolkit-type-helpers\";\nimport {\n\tuseFormState,\n\tuseFormContext as useHookFormContext,\n\ttype Control,\n\ttype FieldValues,\n\ttype UseFormReturn,\n\ttype UseFormStateReturn,\n} from \"react-hook-form\";\nimport { getFieldErrorMessage } from \"./utils\";\n\nexport type RenderIconProps = {\n\tisPasswordVisible: boolean;\n};\n\ntype EyeIconObject = UnionDiscriminator<\n\t[\n\t\t{ closed: React.ReactNode; open: React.ReactNode },\n\t\t{ renderIcon: (props: RenderIconProps) => React.ReactNode },\n\t]\n>;\n\nexport type FormRootContextType = {\n\twithEyeIcon: boolean | EyeIconObject | undefined;\n};\n\nexport const [LaxFormRootProvider, useLaxFormRootContext] = createCustomContext({\n\tdefaultValue: null as unknown as FormRootContextType,\n\thookName: \"useLaxFormRootContext\",\n\tname: \"LaxFormRootContext\",\n\tproviderName: \"FormRoot\",\n\tstrict: false,\n});\n\nexport type UseFormRootContextResult<TStrict extends boolean = true> =\n\tTStrict extends true ? UseFormReturn : UseFormReturn | null;\n\nexport const useFormMethodsContext = <TStrict extends boolean = true>(\n\toptions: { strict?: TStrict } = {}\n): UseFormRootContextResult<TStrict> => {\n\tconst { strict = true } = options;\n\n\tconst formContext = useHookFormContext();\n\n\t// eslint-disable-next-line ts-eslint/no-unnecessary-condition -- Allow\n\tif (strict && !formContext) {\n\t\tthrow new ContextError(\n\t\t\t`useFormMethodsContext returned \"null\". Did you forget to wrap the necessary components within FormRoot?`\n\t\t);\n\t}\n\n\treturn formContext;\n};\n\nexport type FieldContextType = {\n\tformDescriptionId: `${string}-(${string})-form-item-description`;\n\tformItemId: `${string}-(${string})-form-item`;\n\tformMessageId: `${string}-(${string})-form-item-message`;\n\tname: string;\n};\n\nexport const [StrictFormFieldProvider, useStrictFormFieldContext] = createCustomContext<FieldContextType>({\n\thookName: \"useFormFieldContext\",\n\tname: \"StrictFormFieldContext\",\n\tproviderName: \"FormField\",\n});\n\nexport const [LaxFormFieldProvider, useLaxFormFieldContext] = createCustomContext({\n\tdefaultValue: null as unknown as FieldContextType,\n\thookName: \"useLaxFormFieldContext\",\n\tname: \"LaxFormFieldContext\",\n\tproviderName: \"FormField\",\n\tstrict: false,\n});\n\nexport type FieldState = {\n\terrors?: UseFormStateReturn<FieldValues>[\"errors\"];\n\tisDisabled?: boolean;\n\tisInvalid?: boolean;\n};\n\ntype FieldStateOptions<TFieldValues extends FieldValues, TTransformedValues = TFieldValues> =\n\t| {\n\t\t\tcontrol: Control<TFieldValues, unknown, TTransformedValues> | undefined;\n\t\t\tname?: string;\n\t }\n\t| {\n\t\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>;\n\t\t\tname: string | undefined;\n\t };\n\nexport const useLaxFormFieldState = <TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(\n\toptions?: FieldStateOptions<TFieldValues, TTransformedValues>\n): FieldState => {\n\tconst { control } = useFormMethodsContext({ strict: false }) ?? {};\n\tconst { name } = useLaxFormFieldContext() ?? {};\n\n\tconst resolvedControl = control ?? options?.control;\n\n\tconst getFormState =\n\t\t// eslint-disable-next-line react-hooks/hooks -- Ignore\n\t\tresolvedControl ? useFormState : ((() => ({})) as typeof useFormState);\n\n\t// eslint-disable-next-line react-hooks/hooks -- Ignore\n\tconst { disabled, errors } = getFormState({\n\t\tcontrol: resolvedControl as never,\n\t\tname: name ?? options?.name,\n\t});\n\n\tconst errorMessage = getFieldErrorMessage({ errors, fieldName: name, type: \"regular\" });\n\n\treturn {\n\t\terrors,\n\t\tisDisabled: disabled,\n\t\tisInvalid: Boolean(errorMessage),\n\t};\n};\n","\"use client\";\n\nimport { dataAttr, on, toArray } from \"@zayne-labs/toolkit-core\";\nimport { ContextError, useCallbackRef, useCompareValue, useToggle } from \"@zayne-labs/toolkit-react\";\nimport {\n\tcomposeRefs,\n\tcomposeTwoEventHandlers,\n\tgetMultipleSlots,\n\ttype DiscriminatedRenderItemProps,\n\ttype DiscriminatedRenderProps,\n\ttype InferProps,\n\ttype PolymorphicPropsStrict,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport { defineEnum, isFunction, type AnyString } from \"@zayne-labs/toolkit-type-helpers\";\nimport { Fragment as ReactFragment, useEffect, useId, useMemo, useRef } from \"react\";\nimport {\n\tController,\n\tFormProvider as HookFormProvider,\n\tuseFormState,\n\tuseWatch,\n\ttype Control,\n\ttype ControllerProps,\n\ttype FieldPath,\n\ttype FieldValues,\n\ttype RegisterOptions,\n\ttype FormStateSubscribeProps as StateSubscribeProps,\n\ttype UseFormReturn,\n\ttype WatchProps,\n} from \"react-hook-form\";\nimport { ForWithWrapper } from \"@/components/common/for\";\nimport { Slot } from \"@/components/common/slot\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport {\n\tLaxFormFieldProvider,\n\tLaxFormRootProvider,\n\tStrictFormFieldProvider,\n\tuseFormMethodsContext,\n\tuseLaxFormFieldContext,\n\tuseLaxFormFieldState,\n\tuseLaxFormRootContext,\n\tuseStrictFormFieldContext,\n\ttype FieldContextType,\n\ttype FieldState,\n\ttype FormRootContextType,\n} from \"./form-context\";\nimport { getEyeIcon, getFieldErrorMessage } from \"./utils\";\n\nexport type FormRootProps<TFieldValues extends FieldValues, TTransformedValues> = InferProps<\"form\">\n\t& Partial<FormRootContextType> & {\n\t\tchildren: React.ReactNode;\n\t\tform: UseFormReturn<TFieldValues, unknown, TTransformedValues>;\n\t};\n\nexport function FormRoot<TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(\n\tprops: FormRootProps<TFieldValues, TTransformedValues>\n) {\n\tconst { children, className, form, withEyeIcon, ...restOfProps } = props;\n\n\tconst shallowedComparedWithEyeIcon = useCompareValue(withEyeIcon);\n\n\tconst formContextValue = useMemo(\n\t\t() => ({ withEyeIcon: shallowedComparedWithEyeIcon }),\n\t\t[shallowedComparedWithEyeIcon]\n\t);\n\n\treturn (\n\t\t<HookFormProvider {...form}>\n\t\t\t<LaxFormRootProvider value={formContextValue}>\n\t\t\t\t<form\n\t\t\t\t\tclassName={cnMerge(\"flex flex-col\", className)}\n\t\t\t\t\t{...restOfProps}\n\t\t\t\t\tdata-scope=\"form\"\n\t\t\t\t\tdata-part=\"root\"\n\t\t\t\t\tdata-slot=\"form-root\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</form>\n\t\t\t</LaxFormRootProvider>\n\t\t</HookFormProvider>\n\t);\n}\n\nexport type FormFieldProps<\n\tTControl,\n\tTFieldValues extends FieldValues,\n\tTTransformedValues,\n> = (TControl extends Control<infer TValues> ?\n\t{\n\t\tcontrol?: never;\n\t\tname: FieldPath<TValues>;\n\t}\n:\t{\n\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>;\n\t\tname: FieldPath<TFieldValues>;\n\t})\n\t& (\n\t\t| (InferProps<\"div\"> & { withWrapper?: true })\n\t\t| { children: React.ReactNode; className?: never; withWrapper: false }\n\t);\n\nexport function FormField<\n\tTControl,\n\tTFieldValues extends FieldValues = FieldValues,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldProps<TControl, TFieldValues, TTransformedValues>) {\n\tconst { children, className, control, name, withWrapper = true } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState({ control, name });\n\n\tconst uniqueId = useId();\n\n\tconst fieldContextValue = useMemo(\n\t\t() =>\n\t\t\t({\n\t\t\t\tformDescriptionId: `${name}-(${uniqueId})-form-item-description`,\n\t\t\t\tformItemId: `${name}-(${uniqueId})-form-item`,\n\t\t\t\tformMessageId: `${name}-(${uniqueId})-form-item-message`,\n\t\t\t\tname,\n\t\t\t}) satisfies FieldContextType,\n\t\t[name, uniqueId]\n\t);\n\n\tconst WrapperElement = withWrapper ? \"div\" : ReactFragment;\n\n\tconst wrapperElementProps = withWrapper && {\n\t\tclassName: cnMerge(\"flex flex-col gap-2\", className),\n\t\t\"data-part\": \"field\",\n\t\t\"data-scope\": \"form\",\n\t\t\"data-slot\": \"form-field\",\n\t\t/* eslint-disable perfectionist/sort-objects -- order of attributes does not matter */\n\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\"data-invalid\": dataAttr(isInvalid),\n\t\t/* eslint-enable perfectionist/sort-objects -- order of attributes does not matter */\n\t};\n\treturn (\n\t\t<StrictFormFieldProvider value={fieldContextValue}>\n\t\t\t<LaxFormFieldProvider value={fieldContextValue}>\n\t\t\t\t<WrapperElement {...wrapperElementProps}>{children}</WrapperElement>\n\t\t\t</LaxFormFieldProvider>\n\t\t</StrictFormFieldProvider>\n\t);\n}\n\nexport type FormFieldWithControllerProps<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n\tTTransformedValues = TFieldValues,\n> = ControllerProps<TFieldValues, TName, TTransformedValues>;\n\nexport function FormFieldWithController<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldWithControllerProps<TFieldValues, TName, TTransformedValues>) {\n\tconst methodsContextValue = useFormMethodsContext({ strict: false });\n\n\tconst { control, name, render, ...restOfProps } = props;\n\n\tconst uniqueId = useId();\n\n\tconst fieldContextValue = useMemo(\n\t\t() =>\n\t\t\t({\n\t\t\t\tformDescriptionId: `${name}-(${uniqueId})-form-item-description`,\n\t\t\t\tformItemId: `${name}-(${uniqueId})-form-item`,\n\t\t\t\tformMessageId: `${name}-(${uniqueId})-form-item-message`,\n\t\t\t\tname,\n\t\t\t}) satisfies FieldContextType,\n\t\t[name, uniqueId]\n\t);\n\n\tconst resolvedControl = control ?? methodsContextValue?.control;\n\n\tif (!resolvedControl) {\n\t\tthrow new ContextError(\n\t\t\t\"<Form.FormFieldWithController> must be provided with an explicit 'control' prop or used within <Form.Root>\"\n\t\t);\n\t}\n\n\treturn (\n\t\t<StrictFormFieldProvider value={fieldContextValue}>\n\t\t\t<LaxFormFieldProvider value={fieldContextValue}>\n\t\t\t\t<Controller\n\t\t\t\t\tcontrol={resolvedControl as never}\n\t\t\t\t\tname={name}\n\t\t\t\t\trender={render as never}\n\t\t\t\t\t{...(restOfProps as object)}\n\t\t\t\t/>\n\t\t\t</LaxFormFieldProvider>\n\t\t</StrictFormFieldProvider>\n\t);\n}\n\nexport type FormFieldBoundControllerProps<TFieldValues extends FieldValues, TTransformedValues> = Omit<\n\tControllerProps<TFieldValues, never, TTransformedValues>,\n\t\"control\" | \"name\"\n>;\n\nexport function FormFieldBoundController<\n\tTFieldValues extends FieldValues = Record<string, never>,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldBoundControllerProps<TFieldValues, TTransformedValues>) {\n\tconst { control } = useFormMethodsContext();\n\tconst { name } = useStrictFormFieldContext();\n\tconst { render, ...restOfProps } = props;\n\n\treturn (\n\t\t<Controller name={name} control={control} render={render as never} {...(restOfProps as object)} />\n\t);\n}\n\nexport type FormFieldContextProps = DiscriminatedRenderProps<\n\t(contextValue: FieldContextType) => React.ReactNode\n>;\n\nexport function FormFieldContext(props: FormFieldContextProps) {\n\tconst { children, render } = props;\n\tconst fieldContextValues = useStrictFormFieldContext();\n\n\tif (typeof children === \"function\") {\n\t\treturn children(fieldContextValues);\n\t}\n\n\treturn render(fieldContextValues);\n}\n\nexport type FormLabelProps = InferProps<\"label\">;\n\nexport function FormLabel(props: FormLabelProps) {\n\tconst fieldContextValues = useStrictFormFieldContext();\n\n\tconst { children, htmlFor, ...restOfProps } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState({ name: fieldContextValues.name });\n\n\treturn (\n\t\t<label\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"label\"\n\t\t\tdata-slot=\"form-label\"\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\thtmlFor={Object.hasOwn(props, \"htmlFor\") ? htmlFor : fieldContextValues.formItemId}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</label>\n\t);\n}\n\nexport type FormInputGroupProps = InferProps<\"div\">;\n\nexport function FormInputGroup(props: FormInputGroupProps) {\n\tconst { children, className, ...restOfProps } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState();\n\n\tconst {\n\t\tregularChildren,\n\t\tslots: [leftItemSlot, rightItemSlot],\n\t} = getMultipleSlots(children, [FormInputLeftItem, FormInputRightItem]);\n\n\treturn (\n\t\t<div\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"input-group\"\n\t\t\tdata-slot=\"form-input-group\"\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tclassName={cnMerge(\"flex items-center justify-between gap-2\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{leftItemSlot}\n\t\t\t{regularChildren}\n\t\t\t{rightItemSlot}\n\t\t</div>\n\t);\n}\n\nexport type FormSideItemProps = {\n\tchildren?: React.ReactNode;\n\tclassName?: string;\n};\n\nexport function FormInputLeftItem<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicPropsStrict<TElement, FormSideItemProps>\n) {\n\tconst { as: Element = \"span\", children, className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"left-item\"\n\t\t\tdata-slot=\"form-left-item\"\n\t\t\tclassName={cnMerge(\"inline-flex items-center justify-center\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</Element>\n\t);\n}\nFormInputLeftItem.slotSymbol = Symbol(\"input-left-item\");\n\nexport function FormInputRightItem<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicPropsStrict<TElement, FormSideItemProps>\n) {\n\tconst { as: Element = \"span\", children, className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"right-item\"\n\t\t\tdata-slot=\"form-right-item\"\n\t\t\tclassName={cnMerge(\"inline-flex items-center justify-center\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</Element>\n\t);\n}\nFormInputRightItem.slotSymbol = Symbol(\"input-right-item\");\n\ntype RulesProp = {\n\trules?: RegisterOptions;\n};\n\nexport type FormInputPrimitiveProps<TFieldValues extends FieldValues> = Omit<\n\tInferProps<\"input\">,\n\t\"children\"\n>\n\t& RulesProp & {\n\t\tclassNames?: { error?: string; eyeIcon?: string; input?: string; inputGroup?: string };\n\t\tcontrol?: Control<TFieldValues>;\n\t\tfieldState?: FieldState;\n\t\tname?: FieldPath<TFieldValues>;\n\t\twithEyeIcon?: FormRootContextType[\"withEyeIcon\"];\n\t};\n\nexport type FormTextAreaPrimitiveProps<TFieldValues extends FieldValues> = InferProps<\"textarea\">\n\t& RulesProp & {\n\t\tclassNames?: { base?: string; error?: string };\n\t\tcontrol?: Control<TFieldValues>;\n\t\tfieldState?: FieldState;\n\t\tname?: FieldPath<TFieldValues>;\n\t};\n\nexport type FormSelectPrimitiveProps<TFieldValues extends FieldValues> = InferProps<\"select\">\n\t& RulesProp & {\n\t\tclassNames?: { base?: string; error?: string };\n\t\tcontrol?: Control<TFieldValues>;\n\t\tfieldState?: FieldState;\n\t\tname?: FieldPath<TFieldValues>;\n\t};\n\nconst inputTypesWithoutFullWidth = new Set<React.HTMLInputTypeAttribute>([\"checkbox\", \"radio\"]);\n\nexport function FormInputPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormInputPrimitiveProps<TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst formRootContextValues = useLaxFormRootContext();\n\n\tconst {\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\tfieldState,\n\t\tid,\n\t\tname,\n\t\trules,\n\t\ttype = \"text\",\n\t\twithEyeIcon,\n\t\t...restOfProps\n\t} = props;\n\n\tconst resolvedWithEyeIcon = withEyeIcon ?? formRootContextValues?.withEyeIcon ?? true;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst [isPasswordVisible, toggleIsPasswordVisible] = useToggle(false);\n\n\tconst shouldHaveEyeIcon = Boolean(resolvedWithEyeIcon) && type === \"password\";\n\n\tconst WrapperElement = shouldHaveEyeIcon ? FormInputGroup : ReactFragment;\n\n\tconst wrapperElementProps =\n\t\tshouldHaveEyeIcon\n\t\t&& ({\n\t\t\tclassName: cnMerge(\"w-full\", classNames?.inputGroup, isInvalid && classNames?.error),\n\t\t} satisfies InferProps<typeof FormInputGroup>);\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\tconst eyeIcon = getEyeIcon({\n\t\tclassNames,\n\t\ticonType: isPasswordVisible ? \"closed\" : \"open\",\n\t\trenderIconProps: { isPasswordVisible },\n\t\twithEyeIcon: resolvedWithEyeIcon,\n\t});\n\n\treturn (\n\t\t<WrapperElement {...wrapperElementProps}>\n\t\t\t<input\n\t\t\t\tdata-slot=\"form-input\"\n\t\t\t\tdata-scope=\"form\"\n\t\t\t\tdata-part=\"input\"\n\t\t\t\taria-describedby={\n\t\t\t\t\t!isInvalid ?\n\t\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t\t}\n\t\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\t\tid={Object.hasOwn(props, \"id\") ? id : fieldContextValues?.formItemId}\n\t\t\t\tname={Object.hasOwn(props, \"name\") ? name : fieldContextValues?.name}\n\t\t\t\ttype={type === \"password\" && isPasswordVisible ? \"text\" : type}\n\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t!inputTypesWithoutFullWidth.has(type) && \"w-full min-w-0\",\n\t\t\t\t\t`bg-transparent text-sm outline-hidden transition-[color,box-shadow] selection:bg-zu-primary\n\t\t\t\t\tselection:text-zu-primary-foreground file:inline-flex file:h-7 file:border-0\n\t\t\t\t\tfile:bg-transparent file:font-medium file:text-zu-foreground\n\t\t\t\t\tplaceholder:text-zu-muted-foreground focus-visible:outline-hidden\n\t\t\t\t\tdisabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\t\tclassName,\n\t\t\t\t\tclassNames?.input,\n\t\t\t\t\ttype !== \"password\" && isInvalid && classNames?.error\n\t\t\t\t)}\n\t\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t\t{...restOfProps}\n\t\t\t/>\n\n\t\t\t{shouldHaveEyeIcon && (\n\t\t\t\t<FormInputRightItem\n\t\t\t\t\tas=\"button\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={toggleIsPasswordVisible}\n\t\t\t\t\tclassName=\"size-5 shrink-0 lg:size-6\"\n\t\t\t\t>\n\t\t\t\t\t{eyeIcon}\n\t\t\t\t</FormInputRightItem>\n\t\t\t)}\n\t\t</WrapperElement>\n\t);\n}\n\nexport function FormTextAreaPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormTextAreaPrimitiveProps<TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, classNames, control, fieldState, id, name, rules, ...restOfProps } = props;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\treturn (\n\t\t<textarea\n\t\t\tdata-slot=\"form-textarea\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"textarea\"\n\t\t\taria-describedby={\n\t\t\t\t!isInvalid ?\n\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tid={Object.hasOwn(props, \"id\") ? id : fieldContextValues?.formItemId}\n\t\t\tname={Object.hasOwn(props, \"name\") ? name : fieldContextValues?.name}\n\t\t\tclassName={cnMerge(\n\t\t\t\t`w-full bg-transparent text-sm placeholder:text-zu-muted-foreground\n\t\t\t\tfocus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\tclassName,\n\t\t\t\tclassNames?.base,\n\t\t\t\tisInvalid && classNames?.error\n\t\t\t)}\n\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\nexport function FormSelectPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormSelectPrimitiveProps<TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, classNames, control, fieldState, id, name, rules, ...restOfProps } = props;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\treturn (\n\t\t<select\n\t\t\tdefaultValue=\"\"\n\t\t\tdata-slot=\"form-select\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"select\"\n\t\t\taria-describedby={\n\t\t\t\t!isInvalid ?\n\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tid={id ?? fieldContextValues?.formItemId}\n\t\t\tname={name ?? fieldContextValues?.name}\n\t\t\tclassName={cnMerge(\n\t\t\t\t`w-full bg-transparent text-sm placeholder:text-zu-muted-foreground\n\t\t\t\tfocus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\tclassName,\n\t\t\t\tclassNames?.base,\n\t\t\t\tisInvalid && classNames?.error\n\t\t\t)}\n\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\ntype PrimitivePropsToOmit = \"control\" | \"formState\" | \"name\";\n\nexport type FormInputProps = Omit<FormInputPrimitiveProps<FieldValues>, PrimitivePropsToOmit>;\n\nexport type FormTextAreaProps = Omit<FormTextAreaPrimitiveProps<FieldValues>, PrimitivePropsToOmit>;\n\nexport type FormSelectProps = Omit<FormSelectPrimitiveProps<FieldValues>, PrimitivePropsToOmit>;\n\nexport type FormInputCombinedProps =\n\t| (FormInputProps & { type?: FormInputProps[\"type\"] })\n\t| (FormSelectProps & { type: \"select\" })\n\t| (FormTextAreaProps & { type: \"textarea\" });\n\nconst InputTypeMap = defineEnum({\n\tselect: FormSelectPrimitive,\n\ttextarea: FormTextAreaPrimitive,\n});\n\nexport function FormInput(props: FormInputCombinedProps) {\n\tconst { onBlur, onChange, ref, rules, type, ...restOfProps } = props;\n\n\tconst { name } = useStrictFormFieldContext();\n\tconst { register } = useFormMethodsContext();\n\n\tconst SelectedInput =\n\t\ttype === \"textarea\" || type === \"select\" ?\n\t\t\tInputTypeMap[type as Exclude<typeof type, AnyString>]\n\t\t:\tFormInputPrimitive;\n\n\tconst registerProps = name ? register(name, rules) : null;\n\n\treturn (\n\t\t<SelectedInput\n\t\t\ttype={type}\n\t\t\tname={name}\n\t\t\t{...registerProps}\n\t\t\t{...(restOfProps as NonNullable<unknown>)}\n\t\t\t// eslint-disable-next-line react/refs -- Ignore\n\t\t\tref={composeRefs(registerProps?.ref, ref)}\n\t\t\tonChange={composeTwoEventHandlers(registerProps?.onChange, onChange)}\n\t\t\tonBlur={composeTwoEventHandlers(registerProps?.onBlur, onBlur)}\n\t\t/>\n\t);\n}\n\nexport function FormTextArea(props: FormTextAreaProps) {\n\treturn <FormInput {...props} type=\"textarea\" />;\n}\n\nexport function FormSelect(props: FormSelectProps) {\n\treturn <FormInput {...props} type=\"select\" />;\n}\n\nexport type FormDescriptionProps = InferProps<\"p\">;\n\nexport function FormDescription<TElement extends React.ElementType = \"p\">(\n\tprops: PolymorphicPropsStrict<TElement, FormDescriptionProps>\n) {\n\tconst { as: Element = \"p\", className, ...restOfProps } = props;\n\n\tconst { formDescriptionId } = useLaxFormFieldContext() ?? {};\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"form-description\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"description\"\n\t\t\tid={formDescriptionId}\n\t\t\tclassName={cnMerge(\"text-[12px]\", className)}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\ntype ErrorMessageRenderProps = {\n\tclassName: string;\n\t\"data-index\": number;\n\t\"data-part\": \"error-message\";\n\t\"data-scope\": \"form\";\n\t\"data-slot\": \"form-error-message\";\n\tid: string | undefined;\n};\n\ntype ErrorMessageRenderState = {\n\terrorMessage: string;\n\terrorMessageArray: string[];\n\tindex: number;\n};\n\ntype ErrorMessageRenderFn = (context: {\n\tprops: ErrorMessageRenderProps;\n\tstate: ErrorMessageRenderState;\n}) => React.ReactNode;\n\nexport type FormErrorMessagePrimitiveProps<TFieldValues extends FieldValues> =\n\tDiscriminatedRenderItemProps<ErrorMessageRenderFn> & {\n\t\tclassName?: string;\n\t\tclassNames?: {\n\t\t\tcontainer?: string;\n\t\t\terrorMessage?: string;\n\t\t\terrorMessageAnimation?: string;\n\t\t};\n\t\tcontrol?: Control<TFieldValues>; // == Here for type inference of errorField prop\n\t\tdisableErrorAnimation?: boolean;\n\t\tdisableScrollToErrorField?: boolean;\n\t} & (\n\t\t\t| {\n\t\t\t\t\tfieldName: FieldPath<TFieldValues>;\n\t\t\t\t\ttype?: \"regular\";\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tfieldName: string;\n\t\t\t\t\ttype: \"root\";\n\t\t\t }\n\t\t);\n\ntype FormErrorMessagePrimitiveOverloadType = {\n\t<TFieldValues extends FieldValues>(\n\t\tprops: Extract<FormErrorMessagePrimitiveProps<TFieldValues>, { type?: \"regular\" }>\n\t): React.ReactNode;\n\t<TFieldValues extends FieldValues>(\n\t\t// eslint-disable-next-line ts-eslint/unified-signatures -- Using overloads are better because it gives better error messages\n\t\tprops: Extract<FormErrorMessagePrimitiveProps<TFieldValues>, { type: \"root\" }>\n\t): React.ReactNode;\n};\n\nexport const FormErrorMessagePrimitive: FormErrorMessagePrimitiveOverloadType = (props) => {\n\tconst methodsContextValues = useFormMethodsContext({ strict: false });\n\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\tdisableErrorAnimation = false,\n\t\tdisableScrollToErrorField = false,\n\t\tfieldName,\n\t\trenderItem,\n\t\ttype = \"regular\",\n\t} = props;\n\n\tconst resolvedControl = control ?? methodsContextValues?.control;\n\n\tif (!resolvedControl) {\n\t\tthrow new ContextError(\n\t\t\t\"<Form.ErrorMessagePrimitive> must be provided with an explicit 'control' prop or used within <Form.Root>\"\n\t\t);\n\t}\n\n\tconst { errors } = useLaxFormFieldState({\n\t\tcontrol: resolvedControl as never,\n\t\tname: fieldName,\n\t});\n\n\tconst { formMessageId } = useLaxFormFieldContext() ?? {};\n\n\tconst containerRef = useRef<HTMLUListElement>(null);\n\n\tconst errorAnimationClass = classNames?.errorMessageAnimation ?? \"animate-shake\";\n\n\tconst getErrorElements = useCallbackRef(() => containerRef.current?.children ?? []);\n\n\tuseEffect(() => {\n\t\tif (disableErrorAnimation) return;\n\n\t\tif (!errors || Object.keys(errors).length === 0) return;\n\n\t\tconst errorMessageElements = getErrorElements();\n\n\t\tif (errorMessageElements.length === 0) return;\n\n\t\tconst controller = new AbortController();\n\n\t\tfor (const element of errorMessageElements) {\n\t\t\telement.classList.add(errorAnimationClass);\n\n\t\t\tconst onAnimationEnd = () => element.classList.remove(errorAnimationClass);\n\n\t\t\ton(element, \"animationend\", onAnimationEnd, { once: true, signal: controller.signal });\n\t\t}\n\n\t\treturn () => {\n\t\t\tcontroller.abort();\n\t\t};\n\t}, [disableErrorAnimation, errorAnimationClass, errors, getErrorElements]);\n\n\tuseEffect(() => {\n\t\tif (disableScrollToErrorField) return;\n\n\t\tif (!errors || Object.keys(errors).length === 0) return;\n\n\t\tconst errorMessageElements = getErrorElements();\n\n\t\tif (errorMessageElements.length === 0) return;\n\n\t\tconst firstErrorElement = errorMessageElements[0];\n\n\t\tif (!firstErrorElement) return;\n\n\t\t// == Find the input field associated with this error\n\t\tconst inputField = document.querySelector(`[name='${fieldName}']`);\n\n\t\tconst isFocusableInput = inputField?.matches(\n\t\t\t\":is(input, select, textarea, [contenteditable='true'])\"\n\t\t);\n\n\t\t// == Return early if the input field is focusable (Only scrollIntoView for non-focusable fields)\n\t\tif (isFocusableInput) return;\n\n\t\t// == Get the element's position and scroll in one frame\n\t\tconst frameID = requestAnimationFrame(() => {\n\t\t\tconst elementRect = firstErrorElement.getBoundingClientRect();\n\n\t\t\tif (elementRect.top === 0) return;\n\n\t\t\tconst topWithOffset = elementRect.top - 100;\n\n\t\t\twindow.scrollTo({\n\t\t\t\tbehavior: \"smooth\",\n\t\t\t\ttop: window.scrollY + topWithOffset,\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(frameID);\n\t\t};\n\t}, [disableScrollToErrorField, fieldName, errors, getErrorElements]);\n\n\tconst fieldErrorMessage = getFieldErrorMessage({ errors, fieldName, type });\n\n\tif (!fieldErrorMessage) {\n\t\treturn null;\n\t}\n\n\tconst errorMessageArray = toArray(fieldErrorMessage);\n\n\tif (errorMessageArray.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst getRenderProps = (options: { index: number }): ErrorMessageRenderProps => {\n\t\tconst { index } = options;\n\n\t\treturn {\n\t\t\tclassName: cnMerge(className, classNames?.errorMessage),\n\t\t\t/* eslint-disable perfectionist/sort-objects -- Ignore */\n\t\t\t\"data-slot\": \"form-error-message\",\n\t\t\t\"data-part\": \"error-message\",\n\t\t\t\"data-scope\": \"form\",\n\t\t\t\"data-index\": index,\n\t\t\t/* eslint-enable perfectionist/sort-objects -- Ignore */\n\t\t\tid: formMessageId,\n\t\t};\n\t};\n\n\tconst getRenderState = (options: { errorMessage: string; index: number }): ErrorMessageRenderState => {\n\t\tconst { errorMessage, index } = options;\n\n\t\treturn {\n\t\t\terrorMessage,\n\t\t\terrorMessageArray,\n\t\t\tindex,\n\t\t};\n\t};\n\n\tconst selectedChildren = typeof children === \"function\" ? children : renderItem;\n\n\treturn (\n\t\t<ForWithWrapper\n\t\t\tref={containerRef}\n\t\t\tclassName={cnMerge(\"flex flex-col\", classNames?.container)}\n\t\t\tdata-slot=\"form-error-message-container\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"error-message-container\"\n\t\t\teach={errorMessageArray}\n\t\t\trenderItem={(errorMessage, index) => {\n\t\t\t\treturn selectedChildren({\n\t\t\t\t\tprops: getRenderProps({ index }),\n\t\t\t\t\tstate: getRenderState({ errorMessage, index }),\n\t\t\t\t});\n\t\t\t}}\n\t\t/>\n\t);\n};\n\nexport type FormErrorMessageProps<TControl, TFieldValues extends FieldValues, TTransformedValues> =\n\t| (TControl extends Control<infer TValues> ?\n\t\t\t{\n\t\t\t\tclassName?: string;\n\t\t\t\tcontrol?: never;\n\t\t\t\terrorField?: FieldPath<TValues>;\n\t\t\t\ttype?: \"regular\";\n\t\t\t}\n\t :\t{\n\t\t\t\tclassName?: string;\n\t\t\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>; // == Here for type inference of errorField prop\n\t\t\t\terrorField?: FieldPath<TFieldValues>;\n\t\t\t\ttype?: \"regular\";\n\t\t\t})\n\t| {\n\t\t\tclassName?: string;\n\t\t\terrorField: string;\n\t\t\ttype: \"root\";\n\t };\n\nexport function FormErrorMessage<\n\tTControl,\n\tTFieldValues extends FieldValues = FieldValues,\n\tTTransformedValues = TFieldValues,\n>(props: FormErrorMessageProps<TControl, TFieldValues, TTransformedValues>) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, errorField, type = \"regular\" } = props;\n\n\tconst { control } = useFormMethodsContext();\n\n\treturn (\n\t\t<FormErrorMessagePrimitive\n\t\t\ttype={type as \"root\"}\n\t\t\tcontrol={control}\n\t\t\tfieldName={errorField ?? (fieldContextValues?.name as NonNullable<typeof errorField>)}\n\t\t\trenderItem={({ props: renderProps, state }) => (\n\t\t\t\t<li\n\t\t\t\t\tkey={state.errorMessage}\n\t\t\t\t\t{...renderProps}\n\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\"text-[13px] text-zu-destructive\",\n\t\t\t\t\t\t\"data-[index=0]:mt-1\",\n\t\t\t\t\t\trenderProps.className,\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{state.errorMessage}\n\t\t\t\t</li>\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nexport type FormSubmitProps<TFieldValues extends FieldValues, TTransformedValues> = Omit<\n\tInferProps<\"button\">,\n\t\"children\"\n> & {\n\tasChild?: boolean;\n} & (\n\t\t| {\n\t\t\t\tchildren: React.ReactNode;\n\t\t\t\tcontrol?: never;\n\t\t }\n\t\t| {\n\t\t\t\tchildren: StateSubscribeProps<TFieldValues, TTransformedValues>[\"render\"];\n\t\t\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>;\n\t\t }\n\t);\n\nexport function FormSubmit<\n\tTElement extends React.ElementType = \"button\",\n\tTFieldValues extends FieldValues = Record<string, unknown>,\n\tTTransformedValues = TFieldValues,\n>(props: PolymorphicPropsStrict<TElement, FormSubmitProps<TFieldValues, TTransformedValues>>) {\n\tconst { as: Element = \"button\", asChild, children, control, type = \"submit\", ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\tconst methodsContextValue = useFormMethodsContext({ strict: false });\n\n\tconst resolvedControl = control ?? methodsContextValue?.control;\n\n\tif (isFunction(children) && !resolvedControl) {\n\t\tthrow new ContextError(\n\t\t\t\"<Form.Submit> must be provided with an explicit 'control' prop or used within <Form.Root> if a render prop is passed as children\"\n\t\t);\n\t}\n\n\t// eslint-disable-next-line react-hooks/hooks -- Ignore for now\n\tconst getFormState = isFunction(children) && resolvedControl ? useFormState : () => ({}) as never;\n\n\t// eslint-disable-next-line react-hooks/hooks -- Ignore for now\n\tconst formState = getFormState<TFieldValues>({\n\t\tcontrol: resolvedControl as never,\n\t\tdisabled: restOfProps.disabled,\n\t});\n\n\tconst resolvedChildren = isFunction(children) ? children(formState) : children;\n\n\treturn (\n\t\t<Component data-slot=\"form-submit\" data-part=\"submit\" data-scope=\"form\" type={type} {...restOfProps}>\n\t\t\t{resolvedChildren}\n\t\t</Component>\n\t);\n}\n\nexport type FormWatchProps<\n\tTFieldValues extends FieldValues,\n\tTFieldName extends\n\t\t| Array<FieldPath<TFieldValues>>\n\t\t| FieldPath<TFieldValues>\n\t\t| ReadonlyArray<FieldPath<TFieldValues>>\n\t\t| undefined,\n\tTTransformedValues,\n\tTComputeValue,\n\tTComputedProps extends Omit<\n\t\tWatchProps<TFieldName, TFieldValues, unknown, TTransformedValues, TComputeValue>,\n\t\t\"names\"\n\t> = Omit<WatchProps<TFieldName, TFieldValues, unknown, TTransformedValues, TComputeValue>, \"names\">,\n> = DiscriminatedRenderProps<TComputedProps[\"render\"]> & Omit<TComputedProps, \"render\">;\n\nexport function FormWatch<\n\tTFieldValues extends FieldValues = Record<string, unknown>,\n\tconst TFieldName extends\n\t\t| Array<FieldPath<TFieldValues>>\n\t\t| FieldPath<TFieldValues>\n\t\t| ReadonlyArray<FieldPath<TFieldValues>>\n\t\t| undefined = FieldPath<TFieldValues>,\n\tTTransformedValues = TFieldValues,\n\tTComputeValue = undefined,\n>(props: FormWatchProps<TFieldValues, TFieldName, TTransformedValues, TComputeValue>) {\n\tconst fieldContextValue = useLaxFormFieldContext();\n\n\tconst { children, compute, control, defaultValue, disabled, exact, name, render } = props;\n\n\tconst methodsContextValue = useFormMethodsContext({ strict: false });\n\n\tconst resolvedControl = control ?? methodsContextValue?.control;\n\n\tif (!resolvedControl) {\n\t\tthrow new ContextError(\n\t\t\t\"<Form.Watch> must be provided with an explicit 'control' prop or used within <Form.Root>\"\n\t\t);\n\t}\n\n\tconst formValue = useWatch({\n\t\tcompute: compute as never,\n\t\tcontrol: resolvedControl as never,\n\t\tdefaultValue,\n\t\tdisabled,\n\t\texact,\n\t\tname: (name ?? fieldContextValue?.name) as string,\n\t}) as unknown;\n\n\tconst selectedChildren = typeof children === \"function\" ? children : render;\n\n\tconst resolvedChildren = selectedChildren(formValue as never);\n\n\treturn resolvedChildren;\n}\n\nexport type FormStateSubscribeProps<\n\tTFieldValues extends FieldValues,\n\tTTransformedValues,\n\tTComputedProps extends StateSubscribeProps<TFieldValues, TTransformedValues> = StateSubscribeProps<\n\t\tTFieldValues,\n\t\tTTransformedValues\n\t>,\n> = DiscriminatedRenderProps<TComputedProps[\"render\"]> & Omit<TComputedProps, \"render\">;\n\nexport function FormStateSubscribe<\n\tTFieldValues extends FieldValues = Record<string, unknown>,\n\tTTransformedValues = TFieldValues,\n>(props: FormStateSubscribeProps<TFieldValues, TTransformedValues>) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { children, control, disabled, exact, name, render } = props;\n\n\tconst methodsContextValue = useFormMethodsContext({ strict: false });\n\n\tconst resolvedControl = control ?? methodsContextValue?.control;\n\n\tif (!resolvedControl) {\n\t\tthrow new ContextError(\n\t\t\t\"<Form.StateSubscribe> must be provided with an explicit 'control' prop or used within <Form.Root>\"\n\t\t);\n\t}\n\n\tconst formState = useFormState({\n\t\tcontrol: resolvedControl as never,\n\t\tdisabled,\n\t\texact,\n\t\tname: name ?? (fieldContextValues?.name as never),\n\t});\n\n\tconst selectedChildren = typeof children === \"function\" ? children : render;\n\n\tconst resolvedChildren = selectedChildren(formState);\n\n\treturn resolvedChildren;\n}\n","export {\n\tFormDescription as Description,\n\tFormErrorMessage as ErrorMessage,\n\tFormErrorMessagePrimitive as ErrorMessagePrimitive,\n\tFormField as Field,\n\tFormFieldBoundController as FieldBoundController,\n\tFormFieldContext as FieldContext,\n\tFormFieldWithController as FieldWithController,\n\tFormInput as Input,\n\tFormInputGroup as InputGroup,\n\tFormInputLeftItem as InputLeftItem,\n\tFormInputPrimitive as InputPrimitive,\n\tFormInputRightItem as InputRightItem,\n\tFormLabel as Label,\n\tFormRoot as Root,\n\tFormSelect as Select,\n\tFormStateSubscribe as StateSubscribe,\n\tFormSubmit as Submit,\n\tFormTextArea as TextArea,\n\tFormTextAreaPrimitive as TextAreaPrimitive,\n\tFormWatch as Watch,\n} from \"./form\";\n\nexport type {\n\tFormDescriptionProps,\n\tFormErrorMessagePrimitiveProps,\n\tFormErrorMessageProps,\n\tFormFieldBoundControllerProps,\n\tFormFieldContextProps,\n\tFormFieldProps,\n\tFormFieldWithControllerProps,\n\tFormInputCombinedProps,\n\tFormInputGroupProps,\n\tFormInputPrimitiveProps,\n\tFormInputProps,\n\tFormLabelProps,\n\tFormRootProps,\n\tFormSelectPrimitiveProps,\n\tFormSelectProps,\n\tFormSideItemProps,\n\tFormStateSubscribeProps,\n\tFormSubmitProps,\n\tFormTextAreaPrimitiveProps,\n\tFormTextAreaProps,\n\tFormWatchProps,\n} from \"./form\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["useHookFormContext","HookFormProvider","ReactFragment","Slot.Root"],"sources":["../../../../src/components/ui/form/icons.tsx","../../../../src/components/ui/form/utils.ts","../../../../src/components/ui/form/form-context.ts","../../../../src/components/ui/form/form.tsx","../../../../src/components/ui/form/form-parts.ts"],"sourcesContent":["export const EyeIconClosed = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M15.175 8.325q.725.725 1.063 1.65t.237 1.9q0 .375-.275.638t-.65.262t-.638-.262t-.262-.638q.125-.65-.075-1.25T13.95 9.6t-1.025-.65t-1.275-.1q-.375 0-.638-.275t-.262-.65t.263-.637t.637-.263q.95-.1 1.875.238t1.65 1.062M12 6q-.475 0-.925.037t-.9.138q-.425.075-.763-.125t-.462-.6t.088-.775t.612-.45q.575-.125 1.163-.175T12 4q3.425 0 6.263 1.8t4.337 4.85q.1.2.15.413t.05.437t-.038.438t-.137.412q-.45 1-1.112 1.875t-1.463 1.6q-.3.275-.7.225t-.65-.4t-.212-.763t.337-.687q.6-.575 1.1-1.25t.875-1.45q-1.25-2.525-3.613-4.012T12 6m0 13q-3.35 0-6.125-1.812T1.5 12.425q-.125-.2-.187-.437T1.25 11.5t.05-.475t.175-.45q.5-1 1.163-1.912T4.15 7L2.075 4.9q-.275-.3-.262-.712T2.1 3.5t.7-.275t.7.275l17 17q.275.275.288.688t-.288.712q-.275.275-.7.275t-.7-.275l-3.5-3.45q-.875.275-1.775.413T12 19M5.55 8.4q-.725.65-1.325 1.425T3.2 11.5q1.25 2.525 3.613 4.013T12 17q.5 0 .975-.062t.975-.138l-.9-.95q-.275.075-.525.113T12 16q-1.875 0-3.188-1.312T7.5 11.5q0-.275.038-.525t.112-.525zm4.2 4.2\"\n\t\t/>\n\t</svg>\n);\n\nexport const EyeIconOpen = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M12 16q1.875 0 3.188-1.312T16.5 11.5t-1.312-3.187T12 7T8.813 8.313T7.5 11.5t1.313 3.188T12 16m0-1.8q-1.125 0-1.912-.788T9.3 11.5t.788-1.912T12 8.8t1.913.788t.787 1.912t-.787 1.913T12 14.2m0 4.8q-3.35 0-6.113-1.8t-4.362-4.75q-.125-.225-.187-.462t-.063-.488t.063-.488t.187-.462q1.6-2.95 4.363-4.75T12 4t6.113 1.8t4.362 4.75q.125.225.188.463t.062.487t-.062.488t-.188.462q-1.6 2.95-4.362 4.75T12 19m0-2q2.825 0 5.188-1.487T20.8 11.5q-1.25-2.525-3.613-4.012T12 6T6.813 7.488T3.2 11.5q1.25 2.525 3.613 4.013T12 17\"\n\t\t/>\n\t</svg>\n);\n","import { isObject } from \"@zayne-labs/toolkit-type-helpers\";\nimport { createElement } from \"react\";\nimport type { FieldErrors, FieldValues } from \"react-hook-form\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport type { FormErrorMessagePrimitiveProps, FormInputProps } from \"./form\";\nimport type { FormRootContextType, RenderIconProps } from \"./form-context\";\nimport { EyeIconClosed, EyeIconOpen } from \"./icons\";\n\nexport const getFieldErrorMessage = (options: {\n\terrors: FieldErrors | undefined;\n\tfieldName: string | undefined;\n\ttype: FormErrorMessagePrimitiveProps<FieldValues>[\"type\"];\n}): string | string[] | null | undefined => {\n\tconst { errors, fieldName, type } = options;\n\n\tif (fieldName === undefined || !errors || Object.keys(errors).length === 0) return;\n\n\tif (type === \"root\") {\n\t\treturn errors.root?.[fieldName]?.message;\n\t}\n\n\t// == Handle nested paths like `notifications.0`\n\tconst pathParts = fieldName.includes(\".\") ? fieldName.split(\".\") : null;\n\n\t// == If there are no path parts, return the error message\n\tif (!pathParts) {\n\t\tconst errorMessage = errors[fieldName]?.message;\n\n\t\treturn errorMessage as string | string[];\n\t}\n\n\tlet extractedError = errors;\n\n\tfor (const part of pathParts) {\n\t\tconst currentError = extractedError[part];\n\n\t\tif (!isObject(currentError)) break;\n\n\t\textractedError = currentError as never;\n\t}\n\n\tconst errorMessage = extractedError.message as unknown as string | string[];\n\n\treturn errorMessage;\n};\n\nexport const getEyeIcon = (options: {\n\tclassNames: FormInputProps[\"classNames\"];\n\ticonType: \"closed\" | \"open\";\n\trenderIconProps: RenderIconProps;\n\twithEyeIcon: FormRootContextType[\"withEyeIcon\"];\n}) => {\n\tconst { classNames, iconType, renderIconProps, withEyeIcon } = options;\n\n\tif (!withEyeIcon) {\n\t\treturn null;\n\t}\n\n\tif (withEyeIcon === true) {\n\t\tconst defaultIconMap = {\n\t\t\tclosed: createElement(EyeIconClosed, {\n\t\t\t\tclassName: cnMerge(\"size-full\", classNames?.eyeIcon),\n\t\t\t}),\n\n\t\t\topen: createElement(EyeIconOpen, {\n\t\t\t\tclassName: cnMerge(\"size-full\", classNames?.eyeIcon),\n\t\t\t}),\n\t\t};\n\n\t\treturn defaultIconMap[iconType];\n\t}\n\n\tif (withEyeIcon.renderIcon) {\n\t\treturn withEyeIcon.renderIcon(renderIconProps);\n\t}\n\n\tif (withEyeIcon[iconType]) {\n\t\treturn withEyeIcon[iconType];\n\t}\n\n\treturn null;\n};\n","import { ContextError, createCustomContext } from \"@zayne-labs/toolkit-react\";\nimport type { UnionDiscriminator } from \"@zayne-labs/toolkit-type-helpers\";\nimport {\n\tuseFormState,\n\tuseFormContext as useHookFormContext,\n\ttype Control,\n\ttype FieldValues,\n\ttype UseFormReturn,\n\ttype UseFormStateReturn,\n} from \"react-hook-form\";\nimport { getFieldErrorMessage } from \"./utils\";\n\nexport type RenderIconProps = {\n\tisPasswordVisible: boolean;\n};\n\ntype EyeIconObject = UnionDiscriminator<\n\t[\n\t\t{ closed: React.ReactNode; open: React.ReactNode },\n\t\t{ renderIcon: (props: RenderIconProps) => React.ReactNode },\n\t]\n>;\n\nexport type FormRootContextType = {\n\twithEyeIcon: boolean | EyeIconObject | undefined;\n};\n\nexport const [LaxFormRootProvider, useLaxFormRootContext] = createCustomContext({\n\tdefaultValue: null as unknown as FormRootContextType,\n\thookName: \"useLaxFormRootContext\",\n\tname: \"LaxFormRootContext\",\n\tproviderName: \"FormRoot\",\n\tstrict: false,\n});\n\nexport type UseFormRootContextResult<TStrict extends boolean = true> =\n\tTStrict extends true ? UseFormReturn : UseFormReturn | null;\n\nexport const useFormMethodsContext = <TStrict extends boolean = true>(\n\toptions: { strict?: TStrict } = {}\n): UseFormRootContextResult<TStrict> => {\n\tconst { strict = true } = options;\n\n\tconst formContext = useHookFormContext();\n\n\t// eslint-disable-next-line ts-eslint/no-unnecessary-condition -- Allow\n\tif (strict && !formContext) {\n\t\tthrow new ContextError(\n\t\t\t`useFormMethodsContext returned \"null\". Did you forget to wrap the necessary components within FormRoot?`\n\t\t);\n\t}\n\n\treturn formContext;\n};\n\nexport type FieldContextType = {\n\tformDescriptionId: `${string}-(${string})-form-item-description`;\n\tformItemId: `${string}-(${string})-form-item`;\n\tformMessageId: `${string}-(${string})-form-item-message`;\n\tname: string;\n};\n\nexport const [StrictFormFieldProvider, useStrictFormFieldContext] = createCustomContext<FieldContextType>({\n\thookName: \"useFormFieldContext\",\n\tname: \"StrictFormFieldContext\",\n\tproviderName: \"FormField\",\n});\n\nexport const [LaxFormFieldProvider, useLaxFormFieldContext] = createCustomContext({\n\tdefaultValue: null as unknown as FieldContextType,\n\thookName: \"useLaxFormFieldContext\",\n\tname: \"LaxFormFieldContext\",\n\tproviderName: \"FormField\",\n\tstrict: false,\n});\n\nexport type FieldState = {\n\terrors?: UseFormStateReturn<FieldValues>[\"errors\"];\n\tisDisabled?: boolean;\n\tisInvalid?: boolean;\n};\n\ntype FieldStateOptions<TFieldValues extends FieldValues, TTransformedValues = TFieldValues> =\n\t| {\n\t\t\tcontrol: Control<TFieldValues, unknown, TTransformedValues> | undefined;\n\t\t\tname?: string;\n\t }\n\t| {\n\t\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>;\n\t\t\tname: string | undefined;\n\t };\n\nexport const useLaxFormFieldState = <TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(\n\toptions?: FieldStateOptions<TFieldValues, TTransformedValues>\n): FieldState => {\n\tconst { control } = useFormMethodsContext({ strict: false }) ?? {};\n\tconst { name } = useLaxFormFieldContext() ?? {};\n\n\tconst resolvedControl = control ?? options?.control;\n\n\tconst getFormState =\n\t\t// eslint-disable-next-line react-hooks/hooks -- Ignore\n\t\tresolvedControl ? useFormState : ((() => ({})) as typeof useFormState);\n\n\t// eslint-disable-next-line react-hooks/hooks -- Ignore\n\tconst { disabled, errors } = getFormState({\n\t\tcontrol: resolvedControl as never,\n\t\tname: name ?? options?.name,\n\t});\n\n\tconst errorMessage = getFieldErrorMessage({ errors, fieldName: name, type: \"regular\" });\n\n\treturn {\n\t\terrors,\n\t\tisDisabled: disabled,\n\t\tisInvalid: Boolean(errorMessage),\n\t};\n};\n","\"use client\";\n\nimport { dataAttr, on, toArray } from \"@zayne-labs/toolkit-core\";\nimport { ContextError, useCallbackRef, useCompareValue, useToggle } from \"@zayne-labs/toolkit-react\";\nimport {\n\tcomposeRefs,\n\tcomposeTwoEventHandlers,\n\tgetMultipleSlots,\n\ttype DiscriminatedRenderItemProps,\n\ttype DiscriminatedRenderProps,\n\ttype InferProps,\n\ttype PolymorphicPropsStrict,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport { defineEnum, isFunction, type AnyString } from \"@zayne-labs/toolkit-type-helpers\";\nimport { Fragment as ReactFragment, useEffect, useId, useMemo, useRef } from \"react\";\nimport {\n\tController,\n\tFormProvider as HookFormProvider,\n\tuseFormState,\n\tuseWatch,\n\ttype Control,\n\ttype ControllerProps,\n\ttype FieldPath,\n\ttype FieldValues,\n\ttype RegisterOptions,\n\ttype FormStateSubscribeProps as StateSubscribeProps,\n\ttype UseFormReturn,\n\ttype WatchProps,\n} from \"react-hook-form\";\nimport { ForWithWrapper } from \"@/components/common/for\";\nimport { Slot } from \"@/components/common/slot\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport {\n\tLaxFormFieldProvider,\n\tLaxFormRootProvider,\n\tStrictFormFieldProvider,\n\tuseFormMethodsContext,\n\tuseLaxFormFieldContext,\n\tuseLaxFormFieldState,\n\tuseLaxFormRootContext,\n\tuseStrictFormFieldContext,\n\ttype FieldContextType,\n\ttype FieldState,\n\ttype FormRootContextType,\n} from \"./form-context\";\nimport { getEyeIcon, getFieldErrorMessage } from \"./utils\";\n\nexport type FormRootProps<TFieldValues extends FieldValues, TTransformedValues> = InferProps<\"form\">\n\t& Partial<FormRootContextType> & {\n\t\tchildren: React.ReactNode;\n\t\tform: UseFormReturn<TFieldValues, unknown, TTransformedValues>;\n\t};\n\nexport function FormRoot<TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(\n\tprops: FormRootProps<TFieldValues, TTransformedValues>\n) {\n\tconst { children, className, form, withEyeIcon, ...restOfProps } = props;\n\n\tconst shallowedComparedWithEyeIcon = useCompareValue(withEyeIcon);\n\n\tconst formContextValue = useMemo(\n\t\t() => ({ withEyeIcon: shallowedComparedWithEyeIcon }),\n\t\t[shallowedComparedWithEyeIcon]\n\t);\n\n\treturn (\n\t\t<HookFormProvider {...form}>\n\t\t\t<LaxFormRootProvider value={formContextValue}>\n\t\t\t\t<form\n\t\t\t\t\tclassName={cnMerge(\"flex flex-col\", className)}\n\t\t\t\t\t{...restOfProps}\n\t\t\t\t\tdata-scope=\"form\"\n\t\t\t\t\tdata-part=\"root\"\n\t\t\t\t\tdata-slot=\"form-root\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</form>\n\t\t\t</LaxFormRootProvider>\n\t\t</HookFormProvider>\n\t);\n}\n\nexport type FormFieldProps<\n\tTControl,\n\tTFieldValues extends FieldValues,\n\tTTransformedValues,\n> = (TControl extends Control<infer TValues> ?\n\t{\n\t\tcontrol?: never;\n\t\tname: FieldPath<TValues>;\n\t}\n:\t{\n\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>;\n\t\tname: FieldPath<TFieldValues>;\n\t})\n\t& (\n\t\t| (InferProps<\"div\"> & { withWrapper?: true })\n\t\t| { children: React.ReactNode; className?: never; withWrapper: false }\n\t);\n\nexport function FormField<\n\tTControl,\n\tTFieldValues extends FieldValues = FieldValues,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldProps<TControl, TFieldValues, TTransformedValues>) {\n\tconst { children, className, control, name, withWrapper = true } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState({ control, name });\n\n\tconst uniqueId = useId();\n\n\tconst fieldContextValue = useMemo(\n\t\t() =>\n\t\t\t({\n\t\t\t\tformDescriptionId: `${name}-(${uniqueId})-form-item-description`,\n\t\t\t\tformItemId: `${name}-(${uniqueId})-form-item`,\n\t\t\t\tformMessageId: `${name}-(${uniqueId})-form-item-message`,\n\t\t\t\tname,\n\t\t\t}) satisfies FieldContextType,\n\t\t[name, uniqueId]\n\t);\n\n\tconst WrapperElement = withWrapper ? \"div\" : ReactFragment;\n\n\tconst wrapperElementProps = withWrapper && {\n\t\tclassName: cnMerge(\"flex flex-col gap-2\", className),\n\t\t\"data-part\": \"field\",\n\t\t\"data-scope\": \"form\",\n\t\t\"data-slot\": \"form-field\",\n\t\t/* eslint-disable perfectionist/sort-objects -- order of attributes does not matter */\n\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\"data-invalid\": dataAttr(isInvalid),\n\t\t/* eslint-enable perfectionist/sort-objects -- order of attributes does not matter */\n\t};\n\treturn (\n\t\t<StrictFormFieldProvider value={fieldContextValue}>\n\t\t\t<LaxFormFieldProvider value={fieldContextValue}>\n\t\t\t\t<WrapperElement {...wrapperElementProps}>{children}</WrapperElement>\n\t\t\t</LaxFormFieldProvider>\n\t\t</StrictFormFieldProvider>\n\t);\n}\n\nexport type FormFieldWithControllerProps<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n\tTTransformedValues = TFieldValues,\n> = ControllerProps<TFieldValues, TName, TTransformedValues>;\n\nexport function FormFieldWithController<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldWithControllerProps<TFieldValues, TName, TTransformedValues>) {\n\tconst methodsContextValue = useFormMethodsContext({ strict: false });\n\n\tconst { control, name, render, ...restOfProps } = props;\n\n\tconst uniqueId = useId();\n\n\tconst fieldContextValue = useMemo(\n\t\t() =>\n\t\t\t({\n\t\t\t\tformDescriptionId: `${name}-(${uniqueId})-form-item-description`,\n\t\t\t\tformItemId: `${name}-(${uniqueId})-form-item`,\n\t\t\t\tformMessageId: `${name}-(${uniqueId})-form-item-message`,\n\t\t\t\tname,\n\t\t\t}) satisfies FieldContextType,\n\t\t[name, uniqueId]\n\t);\n\n\tconst resolvedControl = control ?? methodsContextValue?.control;\n\n\tif (!resolvedControl) {\n\t\tthrow new ContextError(\n\t\t\t\"<Form.FormFieldWithController> must be provided with an explicit 'control' prop or used within <Form.Root>\"\n\t\t);\n\t}\n\n\treturn (\n\t\t<StrictFormFieldProvider value={fieldContextValue}>\n\t\t\t<LaxFormFieldProvider value={fieldContextValue}>\n\t\t\t\t<Controller\n\t\t\t\t\tcontrol={resolvedControl as never}\n\t\t\t\t\tname={name}\n\t\t\t\t\trender={render as never}\n\t\t\t\t\t{...(restOfProps as object)}\n\t\t\t\t/>\n\t\t\t</LaxFormFieldProvider>\n\t\t</StrictFormFieldProvider>\n\t);\n}\n\nexport type FormFieldBoundControllerProps<TFieldValues extends FieldValues, TTransformedValues> = Omit<\n\tControllerProps<TFieldValues, never, TTransformedValues>,\n\t\"control\" | \"name\"\n>;\n\nexport function FormFieldBoundController<\n\tTFieldValues extends FieldValues = Record<string, never>,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldBoundControllerProps<TFieldValues, TTransformedValues>) {\n\tconst { control } = useFormMethodsContext();\n\tconst { name } = useStrictFormFieldContext();\n\tconst { render, ...restOfProps } = props;\n\n\treturn (\n\t\t<Controller name={name} control={control} render={render as never} {...(restOfProps as object)} />\n\t);\n}\n\nexport type FormFieldContextProps = DiscriminatedRenderProps<\n\t(contextValue: FieldContextType) => React.ReactNode\n>;\n\nexport function FormFieldContext(props: FormFieldContextProps) {\n\tconst { children, render } = props;\n\tconst fieldContextValues = useStrictFormFieldContext();\n\n\tif (typeof children === \"function\") {\n\t\treturn children(fieldContextValues);\n\t}\n\n\treturn render(fieldContextValues);\n}\n\nexport type FormLabelProps = InferProps<\"label\">;\n\nexport function FormLabel(props: FormLabelProps) {\n\tconst fieldContextValues = useStrictFormFieldContext();\n\n\tconst { children, htmlFor, ...restOfProps } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState({ name: fieldContextValues.name });\n\n\treturn (\n\t\t<label\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"label\"\n\t\t\tdata-slot=\"form-label\"\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\thtmlFor={Object.hasOwn(props, \"htmlFor\") ? htmlFor : fieldContextValues.formItemId}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</label>\n\t);\n}\n\nexport type FormInputGroupProps = InferProps<\"div\">;\n\nexport function FormInputGroup(props: FormInputGroupProps) {\n\tconst { children, className, ...restOfProps } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState();\n\n\tconst {\n\t\tregularChildren,\n\t\tslots: [leftItemSlot, rightItemSlot],\n\t} = getMultipleSlots(children, [FormInputLeftItem, FormInputRightItem]);\n\n\treturn (\n\t\t<div\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"input-group\"\n\t\t\tdata-slot=\"form-input-group\"\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tclassName={cnMerge(\"flex items-center justify-between gap-2\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{leftItemSlot}\n\t\t\t{regularChildren}\n\t\t\t{rightItemSlot}\n\t\t</div>\n\t);\n}\n\nexport type FormSideItemProps = {\n\tchildren?: React.ReactNode;\n\tclassName?: string;\n};\n\nexport function FormInputLeftItem<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicPropsStrict<TElement, FormSideItemProps>\n) {\n\tconst { as: Element = \"span\", children, className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"left-item\"\n\t\t\tdata-slot=\"form-left-item\"\n\t\t\tclassName={cnMerge(\"inline-flex items-center justify-center\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</Element>\n\t);\n}\nFormInputLeftItem.slotSymbol = Symbol(\"input-left-item\");\n\nexport function FormInputRightItem<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicPropsStrict<TElement, FormSideItemProps>\n) {\n\tconst { as: Element = \"span\", children, className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"right-item\"\n\t\t\tdata-slot=\"form-right-item\"\n\t\t\tclassName={cnMerge(\"inline-flex items-center justify-center\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</Element>\n\t);\n}\nFormInputRightItem.slotSymbol = Symbol(\"input-right-item\");\n\ntype RulesProp = {\n\trules?: RegisterOptions;\n};\n\nexport type FormInputPrimitiveProps<TFieldValues extends FieldValues> = Omit<\n\tInferProps<\"input\">,\n\t\"children\"\n>\n\t& RulesProp & {\n\t\tclassNames?: { error?: string; eyeIcon?: string; input?: string; inputGroup?: string };\n\t\tcontrol?: Control<TFieldValues>;\n\t\tfieldState?: FieldState;\n\t\tname?: FieldPath<TFieldValues>;\n\t\twithEyeIcon?: FormRootContextType[\"withEyeIcon\"];\n\t};\n\nexport type FormTextAreaPrimitiveProps<TFieldValues extends FieldValues> = InferProps<\"textarea\">\n\t& RulesProp & {\n\t\tclassNames?: { base?: string; error?: string };\n\t\tcontrol?: Control<TFieldValues>;\n\t\tfieldState?: FieldState;\n\t\tname?: FieldPath<TFieldValues>;\n\t};\n\nexport type FormSelectPrimitiveProps<TFieldValues extends FieldValues> = InferProps<\"select\">\n\t& RulesProp & {\n\t\tclassNames?: { base?: string; error?: string };\n\t\tcontrol?: Control<TFieldValues>;\n\t\tfieldState?: FieldState;\n\t\tname?: FieldPath<TFieldValues>;\n\t};\n\nconst inputTypesWithoutFullWidth = new Set<React.HTMLInputTypeAttribute>([\"checkbox\", \"radio\"]);\n\nexport function FormInputPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormInputPrimitiveProps<TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst formRootContextValues = useLaxFormRootContext();\n\n\tconst {\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\tfieldState,\n\t\tid,\n\t\tname,\n\t\trules,\n\t\ttype = \"text\",\n\t\twithEyeIcon,\n\t\t...restOfProps\n\t} = props;\n\n\tconst resolvedWithEyeIcon = withEyeIcon ?? formRootContextValues?.withEyeIcon ?? true;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst [isPasswordVisible, toggleIsPasswordVisible] = useToggle(false);\n\n\tconst shouldHaveEyeIcon = Boolean(resolvedWithEyeIcon) && type === \"password\";\n\n\tconst WrapperElement = shouldHaveEyeIcon ? FormInputGroup : ReactFragment;\n\n\tconst wrapperElementProps =\n\t\tshouldHaveEyeIcon\n\t\t&& ({\n\t\t\tclassName: cnMerge(\"w-full\", classNames?.inputGroup, isInvalid && classNames?.error),\n\t\t} satisfies InferProps<typeof FormInputGroup>);\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\tconst eyeIcon = getEyeIcon({\n\t\tclassNames,\n\t\ticonType: isPasswordVisible ? \"closed\" : \"open\",\n\t\trenderIconProps: { isPasswordVisible },\n\t\twithEyeIcon: resolvedWithEyeIcon,\n\t});\n\n\treturn (\n\t\t<WrapperElement {...wrapperElementProps}>\n\t\t\t<input\n\t\t\t\tdata-slot=\"form-input\"\n\t\t\t\tdata-scope=\"form\"\n\t\t\t\tdata-part=\"input\"\n\t\t\t\taria-describedby={\n\t\t\t\t\t!isInvalid ?\n\t\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t\t}\n\t\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\t\tid={Object.hasOwn(props, \"id\") ? id : fieldContextValues?.formItemId}\n\t\t\t\tname={Object.hasOwn(props, \"name\") ? name : fieldContextValues?.name}\n\t\t\t\ttype={type === \"password\" && isPasswordVisible ? \"text\" : type}\n\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t!inputTypesWithoutFullWidth.has(type) && \"w-full min-w-0\",\n\t\t\t\t\t`bg-transparent text-sm outline-hidden transition-[color,box-shadow] selection:bg-zu-primary\n\t\t\t\t\tselection:text-zu-primary-foreground file:inline-flex file:h-7 file:border-0\n\t\t\t\t\tfile:bg-transparent file:font-medium file:text-zu-foreground\n\t\t\t\t\tplaceholder:text-zu-muted-foreground focus-visible:outline-hidden\n\t\t\t\t\tdisabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\t\tclassName,\n\t\t\t\t\tclassNames?.input,\n\t\t\t\t\ttype !== \"password\" && isInvalid && classNames?.error\n\t\t\t\t)}\n\t\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t\t{...restOfProps}\n\t\t\t/>\n\n\t\t\t{shouldHaveEyeIcon && (\n\t\t\t\t<FormInputRightItem\n\t\t\t\t\tas=\"button\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={toggleIsPasswordVisible}\n\t\t\t\t\tclassName=\"size-5 shrink-0 lg:size-6\"\n\t\t\t\t>\n\t\t\t\t\t{eyeIcon}\n\t\t\t\t</FormInputRightItem>\n\t\t\t)}\n\t\t</WrapperElement>\n\t);\n}\n\nexport function FormTextAreaPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormTextAreaPrimitiveProps<TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, classNames, control, fieldState, id, name, rules, ...restOfProps } = props;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\treturn (\n\t\t<textarea\n\t\t\tdata-slot=\"form-textarea\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"textarea\"\n\t\t\taria-describedby={\n\t\t\t\t!isInvalid ?\n\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tid={Object.hasOwn(props, \"id\") ? id : fieldContextValues?.formItemId}\n\t\t\tname={Object.hasOwn(props, \"name\") ? name : fieldContextValues?.name}\n\t\t\tclassName={cnMerge(\n\t\t\t\t`w-full bg-transparent text-sm placeholder:text-zu-muted-foreground\n\t\t\t\tfocus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\tclassName,\n\t\t\t\tclassNames?.base,\n\t\t\t\tisInvalid && classNames?.error\n\t\t\t)}\n\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\nexport function FormSelectPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormSelectPrimitiveProps<TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, classNames, control, fieldState, id, name, rules, ...restOfProps } = props;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\treturn (\n\t\t<select\n\t\t\tdefaultValue=\"\"\n\t\t\tdata-slot=\"form-select\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"select\"\n\t\t\taria-describedby={\n\t\t\t\t!isInvalid ?\n\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tid={id ?? fieldContextValues?.formItemId}\n\t\t\tname={name ?? fieldContextValues?.name}\n\t\t\tclassName={cnMerge(\n\t\t\t\t`w-full bg-transparent text-sm placeholder:text-zu-muted-foreground\n\t\t\t\tfocus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\tclassName,\n\t\t\t\tclassNames?.base,\n\t\t\t\tisInvalid && classNames?.error\n\t\t\t)}\n\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\ntype PrimitivePropsToOmit = \"control\" | \"formState\" | \"name\";\n\nexport type FormInputProps = Omit<FormInputPrimitiveProps<FieldValues>, PrimitivePropsToOmit>;\n\nexport type FormTextAreaProps = Omit<FormTextAreaPrimitiveProps<FieldValues>, PrimitivePropsToOmit>;\n\nexport type FormSelectProps = Omit<FormSelectPrimitiveProps<FieldValues>, PrimitivePropsToOmit>;\n\nexport type FormInputCombinedProps =\n\t| (FormInputProps & { type?: FormInputProps[\"type\"] })\n\t| (FormSelectProps & { type: \"select\" })\n\t| (FormTextAreaProps & { type: \"textarea\" });\n\nconst InputTypeMap = defineEnum({\n\tselect: FormSelectPrimitive,\n\ttextarea: FormTextAreaPrimitive,\n});\n\nexport function FormInput(props: FormInputCombinedProps) {\n\tconst { onBlur, onChange, ref, rules, type, ...restOfProps } = props;\n\n\tconst { name } = useStrictFormFieldContext();\n\tconst { register } = useFormMethodsContext();\n\n\tconst SelectedInput =\n\t\ttype === \"textarea\" || type === \"select\" ?\n\t\t\tInputTypeMap[type as Exclude<typeof type, AnyString>]\n\t\t:\tFormInputPrimitive;\n\n\tconst registerProps = name ? register(name, rules) : null;\n\n\treturn (\n\t\t<SelectedInput\n\t\t\ttype={type}\n\t\t\tname={name}\n\t\t\t{...registerProps}\n\t\t\t{...(restOfProps as NonNullable<unknown>)}\n\t\t\t// eslint-disable-next-line react/refs -- Ignore\n\t\t\tref={composeRefs(registerProps?.ref, ref)}\n\t\t\tonChange={composeTwoEventHandlers(registerProps?.onChange, onChange)}\n\t\t\tonBlur={composeTwoEventHandlers(registerProps?.onBlur, onBlur)}\n\t\t/>\n\t);\n}\n\nexport function FormTextArea(props: FormTextAreaProps) {\n\treturn <FormInput {...props} type=\"textarea\" />;\n}\n\nexport function FormSelect(props: FormSelectProps) {\n\treturn <FormInput {...props} type=\"select\" />;\n}\n\nexport type FormDescriptionProps = InferProps<\"p\">;\n\nexport function FormDescription<TElement extends React.ElementType = \"p\">(\n\tprops: PolymorphicPropsStrict<TElement, FormDescriptionProps>\n) {\n\tconst { as: Element = \"p\", className, ...restOfProps } = props;\n\n\tconst { formDescriptionId } = useLaxFormFieldContext() ?? {};\n\n\treturn (\n\t\t<Element\n\t\t\tdata-slot=\"form-description\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"description\"\n\t\t\tid={formDescriptionId}\n\t\t\tclassName={cnMerge(\"text-[12px]\", className)}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\ntype ErrorMessageRenderProps = {\n\tclassName: string;\n\t\"data-index\": number;\n\t\"data-part\": \"error-message\";\n\t\"data-scope\": \"form\";\n\t\"data-slot\": \"form-error-message\";\n\tid: string | undefined;\n};\n\ntype ErrorMessageRenderState = {\n\terrorMessage: string;\n\terrorMessageArray: string[];\n\tindex: number;\n};\n\ntype ErrorMessageRenderFn = (context: {\n\tprops: ErrorMessageRenderProps;\n\tstate: ErrorMessageRenderState;\n}) => React.ReactNode;\n\nexport type FormErrorMessagePrimitiveProps<TFieldValues extends FieldValues> =\n\tDiscriminatedRenderItemProps<ErrorMessageRenderFn> & {\n\t\tclassName?: string;\n\t\tclassNames?: {\n\t\t\tcontainer?: string;\n\t\t\terrorMessage?: string;\n\t\t\terrorMessageAnimation?: string;\n\t\t};\n\t\tcontrol?: Control<TFieldValues>; // == Here for type inference of errorField prop\n\t\tdisableErrorAnimation?: boolean;\n\t\tdisableScrollToErrorField?: boolean;\n\t} & (\n\t\t\t| {\n\t\t\t\t\tfieldName: FieldPath<TFieldValues>;\n\t\t\t\t\ttype?: \"regular\";\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tfieldName: string;\n\t\t\t\t\ttype: \"root\";\n\t\t\t }\n\t\t);\n\ntype FormErrorMessagePrimitiveOverloadType = {\n\t<TFieldValues extends FieldValues>(\n\t\tprops: Extract<FormErrorMessagePrimitiveProps<TFieldValues>, { type?: \"regular\" }>\n\t): React.ReactNode;\n\t<TFieldValues extends FieldValues>(\n\t\t// eslint-disable-next-line ts-eslint/unified-signatures -- Using overloads are better because it gives better error messages\n\t\tprops: Extract<FormErrorMessagePrimitiveProps<TFieldValues>, { type: \"root\" }>\n\t): React.ReactNode;\n};\n\nexport const FormErrorMessagePrimitive: FormErrorMessagePrimitiveOverloadType = (props) => {\n\tconst methodsContextValues = useFormMethodsContext({ strict: false });\n\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\tdisableErrorAnimation = false,\n\t\tdisableScrollToErrorField = false,\n\t\tfieldName,\n\t\trenderItem,\n\t\ttype = \"regular\",\n\t} = props;\n\n\tconst resolvedControl = control ?? methodsContextValues?.control;\n\n\tif (!resolvedControl) {\n\t\tthrow new ContextError(\n\t\t\t\"<Form.ErrorMessagePrimitive> must be provided with an explicit 'control' prop or used within <Form.Root>\"\n\t\t);\n\t}\n\n\tconst { errors } = useLaxFormFieldState({\n\t\tcontrol: resolvedControl as never,\n\t\tname: fieldName,\n\t});\n\n\tconst { formMessageId } = useLaxFormFieldContext() ?? {};\n\n\tconst containerRef = useRef<HTMLUListElement>(null);\n\n\tconst errorAnimationClass = classNames?.errorMessageAnimation ?? \"animate-shake\";\n\n\tconst getErrorElements = useCallbackRef(() => containerRef.current?.children ?? []);\n\n\tuseEffect(() => {\n\t\tif (disableErrorAnimation) return;\n\n\t\tif (!errors || Object.keys(errors).length === 0) return;\n\n\t\tconst errorMessageElements = getErrorElements();\n\n\t\tif (errorMessageElements.length === 0) return;\n\n\t\tconst controller = new AbortController();\n\n\t\tfor (const element of errorMessageElements) {\n\t\t\telement.classList.add(errorAnimationClass);\n\n\t\t\tconst onAnimationEnd = () => element.classList.remove(errorAnimationClass);\n\n\t\t\ton(element, \"animationend\", onAnimationEnd, { once: true, signal: controller.signal });\n\t\t}\n\n\t\treturn () => {\n\t\t\tcontroller.abort();\n\t\t};\n\t}, [disableErrorAnimation, errorAnimationClass, errors, getErrorElements]);\n\n\tuseEffect(() => {\n\t\tif (disableScrollToErrorField) return;\n\n\t\tif (!errors || Object.keys(errors).length === 0) return;\n\n\t\tconst errorMessageElements = getErrorElements();\n\n\t\tif (errorMessageElements.length === 0) return;\n\n\t\tconst firstErrorElement = errorMessageElements[0];\n\n\t\tif (!firstErrorElement) return;\n\n\t\t// == Find the input field associated with this error\n\t\tconst inputField = document.querySelector(`[name='${fieldName}']`);\n\n\t\tconst isFocusableInput = inputField?.matches(\n\t\t\t\":is(input, select, textarea, [contenteditable='true'])\"\n\t\t);\n\n\t\t// == Return early if the input field is focusable (Only scrollIntoView for non-focusable fields)\n\t\tif (isFocusableInput) return;\n\n\t\t// == Get the element's position and scroll in one frame\n\t\tconst frameID = requestAnimationFrame(() => {\n\t\t\tconst elementRect = firstErrorElement.getBoundingClientRect();\n\n\t\t\tif (elementRect.top === 0) return;\n\n\t\t\tconst topWithOffset = elementRect.top - 100;\n\n\t\t\twindow.scrollTo({\n\t\t\t\tbehavior: \"smooth\",\n\t\t\t\ttop: window.scrollY + topWithOffset,\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(frameID);\n\t\t};\n\t}, [disableScrollToErrorField, fieldName, errors, getErrorElements]);\n\n\tconst fieldErrorMessage = getFieldErrorMessage({ errors, fieldName, type });\n\n\tif (!fieldErrorMessage) {\n\t\treturn null;\n\t}\n\n\tconst errorMessageArray = toArray(fieldErrorMessage);\n\n\tif (errorMessageArray.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst getRenderProps = (options: { index: number }): ErrorMessageRenderProps => {\n\t\tconst { index } = options;\n\n\t\treturn {\n\t\t\tclassName: cnMerge(className, classNames?.errorMessage),\n\t\t\t/* eslint-disable perfectionist/sort-objects -- Ignore */\n\t\t\t\"data-slot\": \"form-error-message\",\n\t\t\t\"data-part\": \"error-message\",\n\t\t\t\"data-scope\": \"form\",\n\t\t\t\"data-index\": index,\n\t\t\t/* eslint-enable perfectionist/sort-objects -- Ignore */\n\t\t\tid: formMessageId,\n\t\t};\n\t};\n\n\tconst getRenderState = (options: { errorMessage: string; index: number }): ErrorMessageRenderState => {\n\t\tconst { errorMessage, index } = options;\n\n\t\treturn {\n\t\t\terrorMessage,\n\t\t\terrorMessageArray,\n\t\t\tindex,\n\t\t};\n\t};\n\n\tconst selectedChildren = typeof children === \"function\" ? children : renderItem;\n\n\treturn (\n\t\t<ForWithWrapper\n\t\t\tref={containerRef}\n\t\t\tclassName={cnMerge(\"flex flex-col\", classNames?.container)}\n\t\t\tdata-slot=\"form-error-message-container\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"error-message-container\"\n\t\t\teach={errorMessageArray}\n\t\t\trenderItem={(errorMessage, index) => {\n\t\t\t\treturn selectedChildren({\n\t\t\t\t\tprops: getRenderProps({ index }),\n\t\t\t\t\tstate: getRenderState({ errorMessage, index }),\n\t\t\t\t});\n\t\t\t}}\n\t\t/>\n\t);\n};\n\nexport type FormErrorMessageProps<TControl, TFieldValues extends FieldValues, TTransformedValues> =\n\t| (TControl extends Control<infer TValues> ?\n\t\t\t{\n\t\t\t\tclassName?: string;\n\t\t\t\tcontrol?: never;\n\t\t\t\terrorField?: FieldPath<TValues>;\n\t\t\t\ttype?: \"regular\";\n\t\t\t}\n\t :\t{\n\t\t\t\tclassName?: string;\n\t\t\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>; // == Here for type inference of errorField prop\n\t\t\t\terrorField?: FieldPath<TFieldValues>;\n\t\t\t\ttype?: \"regular\";\n\t\t\t})\n\t| {\n\t\t\tclassName?: string;\n\t\t\terrorField: string;\n\t\t\ttype: \"root\";\n\t };\n\nexport function FormErrorMessage<\n\tTControl,\n\tTFieldValues extends FieldValues = FieldValues,\n\tTTransformedValues = TFieldValues,\n>(props: FormErrorMessageProps<TControl, TFieldValues, TTransformedValues>) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, errorField, type = \"regular\" } = props;\n\n\tconst { control } = useFormMethodsContext();\n\n\treturn (\n\t\t<FormErrorMessagePrimitive\n\t\t\ttype={type as \"root\"}\n\t\t\tcontrol={control}\n\t\t\tfieldName={errorField ?? (fieldContextValues?.name as NonNullable<typeof errorField>)}\n\t\t\trenderItem={({ props: renderProps, state }) => (\n\t\t\t\t<li\n\t\t\t\t\tkey={state.errorMessage}\n\t\t\t\t\t{...renderProps}\n\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\"text-[13px] text-zu-destructive\",\n\t\t\t\t\t\t\"data-[index=0]:mt-1\",\n\t\t\t\t\t\trenderProps.className,\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{state.errorMessage}\n\t\t\t\t</li>\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nexport type FormSubmitProps<TFieldValues extends FieldValues, TTransformedValues> = Omit<\n\tInferProps<\"button\">,\n\t\"children\"\n> & {\n\tasChild?: boolean;\n} & (\n\t\t| {\n\t\t\t\tchildren: React.ReactNode;\n\t\t\t\tcontrol?: never;\n\t\t }\n\t\t| {\n\t\t\t\tchildren: StateSubscribeProps<TFieldValues, TTransformedValues>[\"render\"];\n\t\t\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>;\n\t\t }\n\t);\n\nexport function FormSubmit<\n\tTElement extends React.ElementType = \"button\",\n\tTFieldValues extends FieldValues = Record<string, unknown>,\n\tTTransformedValues = TFieldValues,\n>(props: PolymorphicPropsStrict<TElement, FormSubmitProps<TFieldValues, TTransformedValues>>) {\n\tconst { as: Element = \"button\", asChild, children, control, type = \"submit\", ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\tconst methodsContextValue = useFormMethodsContext({ strict: false });\n\n\tconst resolvedControl = control ?? methodsContextValue?.control;\n\n\tif (isFunction(children) && !resolvedControl) {\n\t\tthrow new ContextError(\n\t\t\t\"<Form.Submit> must be provided with an explicit 'control' prop or used within <Form.Root> if a render prop is passed as children\"\n\t\t);\n\t}\n\n\t// eslint-disable-next-line react-hooks/hooks -- Ignore for now\n\tconst getFormState = isFunction(children) && resolvedControl ? useFormState : () => ({}) as never;\n\n\t// eslint-disable-next-line react-hooks/hooks -- Ignore for now\n\tconst formState = getFormState<TFieldValues>({\n\t\tcontrol: resolvedControl as never,\n\t\tdisabled: restOfProps.disabled,\n\t});\n\n\tconst resolvedChildren = isFunction(children) ? children(formState) : children;\n\n\treturn (\n\t\t<Component data-slot=\"form-submit\" data-part=\"submit\" data-scope=\"form\" type={type} {...restOfProps}>\n\t\t\t{resolvedChildren}\n\t\t</Component>\n\t);\n}\n\nexport type FormWatchProps<\n\tTFieldValues extends FieldValues,\n\tTFieldName extends\n\t\t| Array<FieldPath<TFieldValues>>\n\t\t| FieldPath<TFieldValues>\n\t\t| ReadonlyArray<FieldPath<TFieldValues>>\n\t\t| undefined,\n\tTTransformedValues,\n\tTComputeValue,\n\tTComputedProps extends Omit<\n\t\tWatchProps<TFieldName, TFieldValues, unknown, TTransformedValues, TComputeValue>,\n\t\t\"names\"\n\t> = Omit<WatchProps<TFieldName, TFieldValues, unknown, TTransformedValues, TComputeValue>, \"names\">,\n> = DiscriminatedRenderProps<TComputedProps[\"render\"]> & Omit<TComputedProps, \"render\">;\n\nexport function FormWatch<\n\tTFieldValues extends FieldValues = Record<string, unknown>,\n\tconst TFieldName extends\n\t\t| Array<FieldPath<TFieldValues>>\n\t\t| FieldPath<TFieldValues>\n\t\t| ReadonlyArray<FieldPath<TFieldValues>>\n\t\t| undefined = FieldPath<TFieldValues>,\n\tTTransformedValues = TFieldValues,\n\tTComputeValue = undefined,\n>(props: FormWatchProps<TFieldValues, TFieldName, TTransformedValues, TComputeValue>) {\n\tconst fieldContextValue = useLaxFormFieldContext();\n\n\tconst { children, compute, control, defaultValue, disabled, exact, name, render } = props;\n\n\tconst methodsContextValue = useFormMethodsContext({ strict: false });\n\n\tconst resolvedControl = control ?? methodsContextValue?.control;\n\n\tif (!resolvedControl) {\n\t\tthrow new ContextError(\n\t\t\t\"<Form.Watch> must be provided with an explicit 'control' prop or used within <Form.Root>\"\n\t\t);\n\t}\n\n\tconst formValue = useWatch({\n\t\tcompute: compute as never,\n\t\tcontrol: resolvedControl as never,\n\t\tdefaultValue,\n\t\tdisabled,\n\t\texact,\n\t\tname: (name ?? fieldContextValue?.name) as string,\n\t}) as unknown;\n\n\tconst selectedChildren = typeof children === \"function\" ? children : render;\n\n\tconst resolvedChildren = selectedChildren(formValue as never);\n\n\treturn resolvedChildren;\n}\n\nexport type FormStateSubscribeProps<\n\tTFieldValues extends FieldValues,\n\tTTransformedValues,\n\tTComputedProps extends StateSubscribeProps<TFieldValues, TTransformedValues> = StateSubscribeProps<\n\t\tTFieldValues,\n\t\tTTransformedValues\n\t>,\n> = DiscriminatedRenderProps<TComputedProps[\"render\"]> & Omit<TComputedProps, \"render\">;\n\nexport function FormStateSubscribe<\n\tTFieldValues extends FieldValues = Record<string, unknown>,\n\tTTransformedValues = TFieldValues,\n>(props: FormStateSubscribeProps<TFieldValues, TTransformedValues>) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { children, control, disabled, exact, name, render } = props;\n\n\tconst methodsContextValue = useFormMethodsContext({ strict: false });\n\n\tconst resolvedControl = control ?? methodsContextValue?.control;\n\n\tif (!resolvedControl) {\n\t\tthrow new ContextError(\n\t\t\t\"<Form.StateSubscribe> must be provided with an explicit 'control' prop or used within <Form.Root>\"\n\t\t);\n\t}\n\n\tconst formState = useFormState({\n\t\tcontrol: resolvedControl as never,\n\t\tdisabled,\n\t\texact,\n\t\tname: name ?? (fieldContextValues?.name as never),\n\t});\n\n\tconst selectedChildren = typeof children === \"function\" ? children : render;\n\n\tconst resolvedChildren = selectedChildren(formState);\n\n\treturn resolvedChildren;\n}\n","export {\n\tFormDescription as Description,\n\tFormErrorMessage as ErrorMessage,\n\tFormErrorMessagePrimitive as ErrorMessagePrimitive,\n\tFormField as Field,\n\tFormFieldBoundController as FieldBoundController,\n\tFormFieldContext as FieldContext,\n\tFormFieldWithController as FieldWithController,\n\tFormInput as Input,\n\tFormInputGroup as InputGroup,\n\tFormInputLeftItem as InputLeftItem,\n\tFormInputPrimitive as InputPrimitive,\n\tFormInputRightItem as InputRightItem,\n\tFormLabel as Label,\n\tFormRoot as Root,\n\tFormSelect as Select,\n\tFormStateSubscribe as StateSubscribe,\n\tFormSubmit as Submit,\n\tFormTextArea as TextArea,\n\tFormTextAreaPrimitive as TextAreaPrimitive,\n\tFormWatch as Watch,\n} from \"./form\";\n\nexport type {\n\tFormDescriptionProps,\n\tFormErrorMessagePrimitiveProps,\n\tFormErrorMessageProps,\n\tFormFieldBoundControllerProps,\n\tFormFieldContextProps,\n\tFormFieldProps,\n\tFormFieldWithControllerProps,\n\tFormInputCombinedProps,\n\tFormInputGroupProps,\n\tFormInputPrimitiveProps,\n\tFormInputProps,\n\tFormLabelProps,\n\tFormRootProps,\n\tFormSelectPrimitiveProps,\n\tFormSelectProps,\n\tFormSideItemProps,\n\tFormStateSubscribeProps,\n\tFormSubmitProps,\n\tFormTextAreaPrimitiveProps,\n\tFormTextAreaProps,\n\tFormWatchProps,\n} from \"./form\";\n"],"mappings":"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"}
package/dist/style.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
2
  @layer properties;
3
3
  @layer theme, base, components, utilities;
4
4
  @layer theme {
@@ -202,9 +202,6 @@
202
202
  .inset-y-0 {
203
203
  inset-block: calc(var(--spacing) * 0);
204
204
  }
205
- .end {
206
- inset-inline-end: var(--spacing);
207
- }
208
205
  .top-0 {
209
206
  top: calc(var(--spacing) * 0);
210
207
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zayne-labs/ui-react",
3
3
  "type": "module",
4
- "version": "0.11.11",
4
+ "version": "0.11.12",
5
5
  "description": "A composable UI/UI-utilities components library. ",
6
6
  "author": "Ryan Zayne",
7
7
  "license": "MIT",
@@ -30,11 +30,11 @@
30
30
  "node": ">=18.x"
31
31
  },
32
32
  "peerDependencies": {
33
- "react": "^19.2.5",
34
- "react-dom": "^19.2.5",
35
- "react-hook-form": "^7.75.0",
36
- "tailwind-merge": "^3.5.0",
37
- "tailwindcss": "^4.2.4"
33
+ "react": "^19.2.6",
34
+ "react-dom": "^19.2.6",
35
+ "react-hook-form": "^7.76.0",
36
+ "tailwind-merge": "^3.6.0",
37
+ "tailwindcss": "^4.3.0"
38
38
  },
39
39
  "peerDependenciesMeta": {
40
40
  "react-hook-form": {
@@ -45,34 +45,34 @@
45
45
  }
46
46
  },
47
47
  "dependencies": {
48
- "@zayne-labs/toolkit-core": "0.12.50",
49
- "@zayne-labs/toolkit-react": "0.12.50",
50
- "@zayne-labs/toolkit-type-helpers": "0.12.50"
48
+ "@zayne-labs/toolkit-core": "0.12.54",
49
+ "@zayne-labs/toolkit-react": "0.12.54",
50
+ "@zayne-labs/toolkit-type-helpers": "0.12.54"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@arethetypeswrong/cli": "0.18.2",
54
54
  "@size-limit/esbuild-why": "12.1.0",
55
55
  "@size-limit/preset-small-lib": "12.1.0",
56
- "@tailwindcss/cli": "4.2.4",
56
+ "@tailwindcss/cli": "4.3.0",
57
57
  "@total-typescript/ts-reset": "0.6.1",
58
58
  "@types/react": "19.2.14",
59
59
  "@types/react-dom": "19.2.3",
60
- "@zayne-labs/prettier-config": "0.13.11",
61
- "@zayne-labs/tsconfig": "0.13.11",
60
+ "@zayne-labs/prettier-config": "0.13.12",
61
+ "@zayne-labs/tsconfig": "0.13.12",
62
62
  "concurrently": "9.2.1",
63
63
  "cross-env": "10.1.0",
64
64
  "prettier": "3.8.3",
65
65
  "prettier-plugin-classnames": "0.10.1",
66
66
  "prettier-plugin-merge": "0.10.1",
67
67
  "prettier-plugin-tailwindcss": "0.8.0",
68
- "publint": "0.3.18",
69
- "react": "^19.2.5",
70
- "react-dom": "^19.2.5",
71
- "react-hook-form": "^7.75.0",
68
+ "publint": "0.3.21",
69
+ "react": "^19.2.6",
70
+ "react-dom": "^19.2.6",
71
+ "react-hook-form": "^7.76.0",
72
72
  "size-limit": "12.1.0",
73
- "tailwind-merge": "^3.5.0",
74
- "tailwindcss": "^4.2.4",
75
- "tsdown": "0.21.10",
73
+ "tailwind-merge": "^3.6.0",
74
+ "tailwindcss": "^4.3.0",
75
+ "tsdown": "0.22.0",
76
76
  "typescript": "6.0.3"
77
77
  },
78
78
  "publishConfig": {