Icon Button

Button designed specifically for usage with a single icon.
vue
<script setup lang="ts">
import { Icon } from '@iconify/vue'
import { IconButton } from '@typlog/ui'
</script>

<template>
  <div class="flex items-center gap-2">
    <IconButton>
      <Icon icon="lucide:bookmark" />
    </IconButton>
  </div>
</template>

API Reference

PropDefaultType
as"button"
AsTagComponent

The element or component this component should render as.

asChild
boolean
color

Overrides the accent color inherited from the ThemeProvider.

disabled
boolean

Mark the button as disabled.

highContrast
boolean

Uses a higher contrast color for the component.

radius
"none""small""medium""large""full"

Overrides the radius inherited from the ThemeProvider.

size"2"
"1""2""3""4"

Control the size of the button.

variant"solid"
Enum

The visual variant to apply.

Examples

Size

vue
<script setup lang="ts">
import { Icon } from '@iconify/vue'
import { IconButton } from '@typlog/ui'
</script>

<template>
  <div class="flex items-center gap-2">
    <IconButton size="1" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton size="2" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton size="3" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton size="4" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
  </div>
</template>

Variant

vue
<script setup lang="ts">
import { Icon } from '@iconify/vue'
import { IconButton } from '@typlog/ui'
</script>

<template>
  <div class="flex items-center gap-2">
    <IconButton variant="classic">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton variant="solid">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton variant="surface">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton variant="outline">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton variant="ghost">
      <Icon icon="lucide:bookmark" />
    </IconButton>
  </div>
</template>

Color

vue
<script setup lang="ts">
import { Icon } from '@iconify/vue'
import { IconButton } from '@typlog/ui'
</script>

<template>
  <div class="flex items-center gap-2">
    <IconButton color="indigo" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton color="cyan" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton color="orange" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton color="crimson" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
  </div>
</template>

Radius

vue
<script setup lang="ts">
import { Icon } from '@iconify/vue'
import { IconButton } from '@typlog/ui'
</script>

<template>
  <div class="flex items-center gap-2">
    <IconButton radius="none" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton radius="small" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton radius="medium" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton radius="large" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
    <IconButton radius="full" variant="soft">
      <Icon icon="lucide:bookmark" />
    </IconButton>
  </div>
</template>