UNPKG

@llamaindex/ui

Version:

A comprehensive UI component library built with React, TypeScript, and Tailwind CSS for LlamaIndex applications

112 lines (109 loc) 3.6 kB
import { Label } from './chunk-GJTDG4HZ.mjs'; import { cn } from './chunk-MG2ARK3A.mjs'; import { __objRest, __spreadValues, __spreadProps } from './chunk-JD6AELXS.mjs'; import * as React from 'react'; import { Slot } from '@radix-ui/react-slot'; import { FormProvider, Controller, useFormContext, useFormState } from 'react-hook-form'; import { jsx } from 'react/jsx-runtime'; var Form = FormProvider; var FormFieldContext = React.createContext( {} ); var FormField = (_a) => { var props = __objRest(_a, []); return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, __spreadValues({}, props)) }); }; var useFormField = () => { const fieldContext = React.useContext(FormFieldContext); const itemContext = React.useContext(FormItemContext); const { getFieldState } = useFormContext(); const formState = useFormState({ name: fieldContext.name }); const fieldState = getFieldState(fieldContext.name, formState); if (!fieldContext) { throw new Error("useFormField should be used within <FormField>"); } const { id } = itemContext; return __spreadValues({ id, name: fieldContext.name, formItemId: `${id}-form-item`, formDescriptionId: `${id}-form-item-description`, formMessageId: `${id}-form-item-message` }, fieldState); }; var FormItemContext = React.createContext( {} ); function FormItem(_a) { var _b = _a, { className } = _b, props = __objRest(_b, ["className"]); const id = React.useId(); return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx( "div", __spreadValues({ "data-slot": "form-item", className: cn("grid gap-2", className) }, props) ) }); } function FormLabel(_a) { var _b = _a, { className } = _b, props = __objRest(_b, [ "className" ]); const { error, formItemId } = useFormField(); return /* @__PURE__ */ jsx( Label, __spreadValues({ "data-slot": "form-label", "data-error": !!error, className: cn("data-[error=true]:text-destructive", className), htmlFor: formItemId }, props) ); } function FormControl(_a) { var props = __objRest(_a, []); const { error, formItemId, formDescriptionId, formMessageId } = useFormField(); return /* @__PURE__ */ jsx( Slot, __spreadValues({ "data-slot": "form-control", id: formItemId, "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`, "aria-invalid": !!error }, props) ); } function FormDescription(_a) { var _b = _a, { className } = _b, props = __objRest(_b, ["className"]); const { formDescriptionId } = useFormField(); return /* @__PURE__ */ jsx( "p", __spreadValues({ "data-slot": "form-description", id: formDescriptionId, className: cn("text-muted-foreground text-sm", className) }, props) ); } function FormMessage(_a) { var _b = _a, { className } = _b, props = __objRest(_b, ["className"]); var _a2; const { error, formMessageId } = useFormField(); const body = error ? String((_a2 = error == null ? void 0 : error.message) != null ? _a2 : "") : props.children; if (!body) { return null; } return /* @__PURE__ */ jsx( "p", __spreadProps(__spreadValues({ "data-slot": "form-message", id: formMessageId, className: cn("text-destructive text-sm", className) }, props), { children: body }) ); } export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField };