Radio Card - React
import { RadioCard } from '@sky-uk/ui-core';
For fully composed form element examples and usage description see Control Field.
RadioCard is an alternative presention of a radio input that needs to stand out.
<RadioCard onClick={() => {}}>Pay monthly by direct debit</RadioCard>
Props
checked
boolean
disabled
boolean
readOnly
boolean
state
error
<Flex $flexDirection="column" $gap={4} > <RadioCard onClick={() => {}}>Card text</RadioCard> <RadioCard checked onClick={() => {}}>Card text</RadioCard> <RadioCard disabled>Card text</RadioCard> <RadioCard readOnly>Card text</RadioCard> <RadioCard state="error" onClick={() => {}}>Card text</RadioCard> </Flex>
disabled and readOnly
<Flex $gap={6} $flexWrap="wrap"> <RadioCard $padding={4} disabled $maxWidth="300px"> <Flex $flexDirection="column" $gap={4}> <Tag label="Out of stock" $variant="negative" /> <Image src="https://placehold.co/80x80" alt="Placeholder" $width="80px" $height="80px" $objectFit="contain" /> <Text $fontSize="display-6" $fontWeight="bold"> Custom content </Text> <Text>This is an example for a custom-made component</Text> <IconList> <IconList.Item> <Text>Icon list item</Text> </IconList.Item> <IconList.Item> <Text>Icon list item</Text> </IconList.Item> </IconList> </Flex> </RadioCard> <RadioCard $padding={4} readOnly $maxWidth="300px"> <Flex $flexDirection="column" $gap={4}> <Tag label="Out of stock" $variant="negative" /> <Image src="https://placehold.co/80x80" alt="Placeholder" $width="80px" $height="80px" $objectFit="contain" /> <Text $fontSize="display-6" $fontWeight="bold"> Custom content </Text> <Text>This is an example for a custom-made component</Text> <IconList> <IconList.Item> <Text>Icon list item</Text> </IconList.Item> <IconList.Item> <Text>Icon list item</Text> </IconList.Item> </IconList> </Flex> </RadioCard> </Flex>
$hideIndicator
The Radio indicator is an optional element that can be turned off. However, it's best practice to include the indicator in most cases.
<RadioCard onClick={() => {}} $hideIndicator>RadioCard without a Radio indicator</RadioCard>
System Modifiers
The RadioCard component also accepts props applied using the following system modifiers:
ControlField
RadioCard with Control Field creates a semantic grouping of Radio inputs and adds information like labels and validation messages.
<ControlField> <ControlField.Legend>Choose your preferred payment option</ControlField.Legend> <ControlField.Option checked as={RadioCard} name="payment" id="direct-debit" aria-describedby="message" onClick={() => {}} > <Text as="p" $marginBottom={2}> Pay monthly by direct debit </Text> <Text as="small" $fontSize="legal" $marginBottom={2}> Terms and conditions apply </Text> </ControlField.Option> <ControlField.Option as={RadioCard} name="payment" id="card" aria-describedby="message" onClick={() => {}} > Use same card as upfront payment </ControlField.Option> <ControlField.Message id="message">Payments are non-refundable</ControlField.Message> </ControlField>
Layout of RadioCards could be changed using ControlField.Layout sub-component as Flex or Grid.
<ControlField> <ControlField.Legend>Choose your preferred payment option</ControlField.Legend> <ControlField.Layout $gap={4}> <ControlField.Option as={RadioCard} name="payment" checked id="first-option" aria-describedby="message" onClick={() => {}} $maxWidth="320px" > <Highlight>Featured</Highlight> <Flex $flexDirection="column" $height="100%" $justifyContent="space-between"> <Box> <Image src="https://placehold.co/600x600.png/cccccc/4a4a4a?text=Product+Image" role="presentation" $objectFit="cover" /> <Text as="h3" $fontSize="display-6" $fontWeight="bold" $marginTop={4} $marginBottom={2}> Card title </Text> <Text as="p" $fontSize="body-sm" $marginBottom={4}> Terms and conditions apply </Text> </Box> <Price price="£XX" $size="small" suffix="a month" $marginTop={4} /> </Flex> </ControlField.Option> <ControlField.Option as={RadioCard} name="payment" id="second-option" aria-describedby="message" onClick={() => {}} $maxWidth="320px" > <Flex $flexDirection="column" $height="100%" $justifyContent="space-between"> <Box> <Image src="https://placehold.co/600x600.png/cccccc/4a4a4a?text=Product+Image" role="presentation" $objectFit="cover" /> <Text as="h3" $fontSize="body-lg" $fontWeight="bold" $marginTop={4} $marginBottom={2}> Card title </Text> <Text as="p" $fontSize="body-sm" $marginBottom={4}> Terms and conditions apply </Text> </Box> <Price price="£XX" $size="small" suffix="a month" $marginTop={4} /> </Flex> </ControlField.Option> </ControlField.Layout> <ControlField.Message id="message">Payments are non-refundable.</ControlField.Message> </ControlField>