G
Tokens
TypographySpacingColorRadiusShadowMotion
Patterns
CardsModals

IconButton

Icon


    <Arrange>
      <IconButton icon={<IconHeart />}/>
      <IconButton icon={<IconPlus />}/>
      <IconButton icon={<IconSwitch />}/>
    </Arrange>
  

Active


    () => {
      const [activeDevice, setActiveDevice] = React.useState('desktop');
      return (
        <Arrange>
          <IconButton
            icon={<IconMonitor />}
            isActive={activeDevice === 'desktop'}
            onClick={() => setActiveDevice('desktop')}
          />
          <IconButton
            icon={<IconPhone />}
            isActive={activeDevice === 'phone'}
            onClick={() => setActiveDevice('phone')}
          />
        </Arrange>
      );
    }
  

Variant


    <Arrange>
      <IconButton variant="neutral" icon={<IconFolder />}/>
      <IconButton variant="danger" icon={<IconTrash />}/>
    </Arrange>
  

Disabled


    <Arrange>
      <IconButton icon={<IconArrowLeft />} isDisabled/>
      <IconButton icon={<IconArrowRight />}/>
    </Arrange>
  

Trim sides

Use the trimSides prop to remove side space, keeping the size snug around the icon.


    <Box className="grn-card-container" maxWidth="34ch">
      <Box
        className="grn-card"
        padding="var(--grn-card-padding)"
        radius="var(--grn-card-radius)"
        shadow="m"
        borderSide="all"
      >
        <Stack
          gap="m"
          borderSide="all"
          borderColor="pink"
          borderWidth="1px"
        >
          <Arrange justifyContent="space-between" alignItems="top">
            <Text size="l" weight="medium" trimTop>{demoText.s}</Text>
            <IconButton trimSides icon={<IconUpload />} />
          </Arrange>
          <Text>{demoText.m}</Text>
          <Arrange justifyContent="space-between">
            <IconButton trimSides icon={<IconArrowLeft />} />
            <IconButton trimSides icon={<IconArrowRight />} />
          </Arrange>
        </Stack>
      </Box>
    </Box>
  

Click


    <IconButton icon={<IconPlus />} onClick={() => alert('Nice')}/>
  

Tag


    <Arrange gap="s">
      <IconButton icon={<IconPlus />} onClick={() => console.log('clicked')}/>
      <IconButton icon={<IconPlus />} tag="a" href="https://flodesk.com" target="_blank"/>
      <IconButton icon={<IconPlus />} tag="span"/>
    </Arrange>
  

Props

Name
Type
Default
variant
oneOf
'neutral' 'danger'
'neutral'
type
oneOf
'button' 'submit' 'reset'
'button'
tag
oneOf
'button' 'a' 'span'
'button'
children
node
icon
node
onClick
func
isDisabled
bool
isActive
bool
trimSides
bool