import type { JSX, ValidComponent } from "@solidjs/web"; import { dynamic } from "@solidjs/web"; import { omit, onCleanup, untrack } from "solid-js"; import { useBaseUiId } from "../../internals/base-ui-id"; import { type FieldRootState, useFieldRootContext, } from "../../internals/field-context.ts"; import { fieldStateAttrs } from "../../internals/field-state-attrs.ts"; import { mergeRootProps } from "../../internals/merge-root-props"; import { resolveClassStyle } from "../../internals/resolve-class-style"; import type { BaseUIComponentProps } from "../../internals/types"; import { useFieldMessagesContext } from "../field-messages-context.ts"; export interface FieldDescriptionState extends FieldRootState {} export interface FieldDescriptionProps extends BaseUIComponentProps<"p", FieldDescriptionState> { /** Tag/component to render. Defaults to `"p"`. */ as?: ValidComponent; } /** * A paragraph with additional information about the field. Renders a `
`
* element (or `as` override).
*/
export function FieldDescription(props: FieldDescriptionProps): JSX.Element {
const field = useFieldRootContext();
const messages = useFieldMessagesContext();
const id = useBaseUiId(
untrack(() => (typeof props.id === "string" ? props.id : undefined)),
);
const source = Symbol("field-description");
messages.registerMessageId(source, id);
onCleanup(() => {
messages.registerMessageId(source, undefined);
});
const userStyling = resolveClassStyle(props, () => field.state());
const userHtmlProps = omit(
props,
"class",
"style",
"attrs",
"as",
"id",
) as Record