import type { JSX, ValidComponent } from "@solidjs/web"; import { dynamic } from "@solidjs/web"; import { createMemo, omit, untrack } from "solid-js"; import { useBaseUiId } from "../../internals/base-ui-id"; import { type BaseUIChangeEventDetails, createChangeEventDetails, REASONS, } from "../../internals/change-event-details"; import { composeRefs, userRef } from "../../internals/compose-refs"; import { ACTIVE_COMPOSITE_ITEM } from "../../internals/composite/composite-constants.ts"; import { useCompositeListItem } from "../../internals/composite/composite-list.tsx"; import { type FieldRootState, useFieldRootContext, } from "../../internals/field-context.ts"; import { fieldStateAttrs } from "../../internals/field-state-attrs"; import { HiddenInput } from "../../internals/hidden-input/hidden-input.tsx"; import { useAriaLabelledBy } from "../../internals/labelable-provider/use-aria-labelled-by.ts"; import { type MaybeAccessor, readOption } from "../../internals/maybe-accessor"; import { mergeRootProps } from "../../internals/merge-root-props"; import { resolveClassStyle } from "../../internals/resolve-class-style"; import { ariaLabelledBy as seedAriaLabelledBy } from "../../internals/seed-aria-attr"; import { serializeValue } from "../../internals/serialize-value.ts"; import type { BaseUIComponentProps, NativeButtonProps, } from "../../internals/types"; import { useButton } from "../../internals/use-button/use-button"; import { useFieldControlValidation } from "../../internals/use-field-control-validation/use-field-control-validation.ts"; import { useValueChanged } from "../../internals/use-value-changed.ts"; import { useRadioGroupContext } from "../../radio-group/radio-group-context.ts"; import { createRadio } from "../create-radio.tsx"; import { RadioRootContext, type RadioRootContextValue, type RadioRootState, } from "../radio-root-context.ts"; export type RadioChangeEventReason = typeof REASONS.none; export type RadioChangeEventDetails = BaseUIChangeEventDetails; export type { RadioRootState }; export interface RadioRootProps extends NativeButtonProps, Omit, "value"> { /** * Tag/component to render. Defaults to `"button"`. Replaces the * pre-spike `render` prop (axis G). */ as?: ValidComponent; value: Value; checked?: MaybeAccessor; disabled?: boolean | undefined; readOnly?: MaybeAccessor; required?: MaybeAccessor; onCheckedChange?: | ((checked: boolean, eventDetails: RadioChangeEventDetails) => void) | undefined; inputRef?: ((element: HTMLInputElement | null) => void) | undefined; name?: string | undefined; } /** * A selectable input in a group of options. Renders a non-native * `