+
+
+
+
+
+
+
+ {children && {children}}
+ {description && (
+ {description}
+ )}
+
+
+ );
+});
+
+Radio.displayName = "Banyu.Radio";
+
+export default Radio;
diff --git a/packages/components/radio/src/use-radio-group.ts b/packages/components/radio/src/use-radio-group.ts
new file mode 100644
index 00000000..8f4266cc
--- /dev/null
+++ b/packages/components/radio/src/use-radio-group.ts
@@ -0,0 +1,222 @@
+import type {AriaRadioGroupProps} from "@react-types/radio";
+import type {Orientation} from "@react-types/shared";
+import type {ReactRef} from "@jala-banyu/react-utils";
+import type {RadioGroupSlots, SlotsToClasses} from "@jala-banyu/theme";
+
+import {radioGroup} from "@jala-banyu/theme";
+import {useCallback, useMemo} from "react";
+import {RadioGroupState, useRadioGroupState} from "@react-stately/radio";
+import {useRadioGroup as useReactAriaRadioGroup} from "@react-aria/radio";
+import {HTMLBanyuProps, PropGetter} from "@jala-banyu/system";
+import {useDOMRef} from "@jala-banyu/react-utils";
+import {clsx, safeAriaLabel} from "@jala-banyu/shared-utils";
+import {mergeProps} from "@react-aria/utils";
+
+import {RadioProps} from "./index";
+
+interface Props extends Omit