mirror of
https://github.com/nextui-org/nextui.git
synced 2025-12-08 19:26:11 +00:00
133 lines
3.3 KiB
TypeScript
133 lines
3.3 KiB
TypeScript
const App = `import {RadioGroup, Radio, useRadio, VisuallyHidden, cn} from "@nextui-org/react";
|
|
|
|
export const CustomRadio = (props) => {
|
|
const {
|
|
Component,
|
|
children,
|
|
isSelected,
|
|
description,
|
|
getBaseProps,
|
|
getWrapperProps,
|
|
getInputProps,
|
|
getLabelProps,
|
|
getLabelWrapperProps,
|
|
getControlProps,
|
|
} = useRadio(props);
|
|
|
|
return (
|
|
<Component
|
|
{...getBaseProps()}
|
|
className={cn(
|
|
"group inline-flex items-center hover:opacity-70 active:opacity-50 justify-between flex-row-reverse tap-highlight-transparent",
|
|
"max-w-[300px] cursor-pointer border-2 border-default rounded-lg gap-4 p-4",
|
|
"data-[selected=true]:border-primary",
|
|
)}
|
|
>
|
|
<VisuallyHidden>
|
|
<input {...getInputProps()} />
|
|
</VisuallyHidden>
|
|
<span {...getWrapperProps()}>
|
|
<span {...getControlProps()} />
|
|
</span>
|
|
<div {...getLabelWrapperProps()}>
|
|
{children && <span {...getLabelProps()}>{children}</span>}
|
|
{description && (
|
|
<span className="text-small text-foreground opacity-70">{description}</span>
|
|
)}
|
|
</div>
|
|
</Component>
|
|
);
|
|
};
|
|
|
|
export default function App() {
|
|
return (
|
|
<RadioGroup label="Plans">
|
|
<CustomRadio description="Up to 20 items" value="free">
|
|
Free
|
|
</CustomRadio>
|
|
<CustomRadio description="Unlimited items. $10 per month." value="pro">
|
|
Pro
|
|
</CustomRadio>
|
|
<CustomRadio
|
|
description="24/7 support. Contact us for pricing."
|
|
value="enterprise"
|
|
>
|
|
Enterprise
|
|
</CustomRadio>
|
|
</RadioGroup>
|
|
);
|
|
}`;
|
|
|
|
const AppTs = `import {RadioGroup, Radio, useRadio, VisuallyHidden, RadioProps, cn} from "@nextui-org/react";
|
|
|
|
export const CustomRadio = (props: RadioProps) => {
|
|
const {
|
|
Component,
|
|
children,
|
|
isSelected,
|
|
description,
|
|
getBaseProps,
|
|
getWrapperProps,
|
|
getInputProps,
|
|
getLabelProps,
|
|
getLabelWrapperProps,
|
|
getControlProps,
|
|
} = useRadio(props);
|
|
|
|
return (
|
|
<Component
|
|
{...getBaseProps()}
|
|
className={cn(
|
|
"group inline-flex items-center justify-between hover:bg-content2 flex-row-reverse",
|
|
"max-w-[300px] cursor-pointer border-2 border-default rounded-lg gap-4 p-4",
|
|
"data-[selected=true]:border-primary",
|
|
)}
|
|
>
|
|
<VisuallyHidden>
|
|
<input {...getInputProps()} />
|
|
</VisuallyHidden>
|
|
<span {...getWrapperProps()}>
|
|
<span {...getControlProps()} />
|
|
</span>
|
|
<div {...getLabelWrapperProps()}>
|
|
{children && <span {...getLabelProps()}>{children}</span>}
|
|
{description && (
|
|
<span className="text-small text-foreground opacity-70">{description}</span>
|
|
)}
|
|
</div>
|
|
</Component>
|
|
);
|
|
};
|
|
|
|
export default function App() {
|
|
return (
|
|
<RadioGroup label="Plans">
|
|
<CustomRadio description="Up to 20 items" value="free">
|
|
Free
|
|
</CustomRadio>
|
|
<CustomRadio description="Unlimited items. $10 per month." value="pro">
|
|
Pro
|
|
</CustomRadio>
|
|
<CustomRadio
|
|
description="24/7 support. Contact us for pricing."
|
|
value="enterprise"
|
|
>
|
|
Enterprise
|
|
</CustomRadio>
|
|
</RadioGroup>
|
|
);
|
|
}`;
|
|
|
|
const react = {
|
|
"/App.jsx": App,
|
|
};
|
|
|
|
const reactTs = {
|
|
"/App.tsx": AppTs,
|
|
};
|
|
|
|
export default {
|
|
...react,
|
|
...reactTs,
|
|
};
|