#Basic

<Button>Example</Button>

#Handle click

Passing onClick works because of ...rest.
<Button onClick={onClick}>Example</Button>

#Variant

Set variant to either "primary", "secondary", or "tertiary". Defaults to "secondary".
<Flex class="gap-3">
  <Button variant="primary">Primary</Button>
  <Button variant="secondary">Secondary</Button>
  <Button variant="tertiary">Tertiary</Button>
</Flex>

#Danger variants

Set variant to either "danger-primary", "danger-secondary", or "danger-tertiary".

<Flex class="gap-3">
  <Button variant="danger-primary">Primary</Button>
  <Button variant="danger-secondary">Secondary</Button>
  <Button variant="danger-tertiary">Tertiary</Button>
</Flex>

#Size

Set size to either "sm", "md", "lg", or "block". Defaults to "md".

<Stack class="gap-5">
  <Flex class="gap-3">
    <Button variant="primary" size="sm">Primary</Button>
    <Button variant="secondary" size="sm">Secondary</Button>
    <Button variant="tertiary" size="sm">Tertiary</Button>
  </Flex>
  <Flex class="gap-3">
    <Button variant="primary" size="md">Primary</Button>
    <Button variant="secondary" size="md">Secondary</Button>
    <Button variant="tertiary" size="md">Tertiary</Button>
  </Flex>
  <Flex class="gap-3">
    <Button variant="primary" size="lg">Primary</Button>
    <Button variant="secondary" size="lg">Secondary</Button>
    <Button variant="tertiary" size="lg">Tertiary</Button>
  </Flex>
  <Stack class="w-full gap-3">
    <Button variant="primary" size="block">Primary</Button>
    <Button variant="secondary" size="block">Secondary</Button>
  </Stack>
</Stack>

#Rounded

Set rounded to either "square", "sm", "lg", or "full". Defaults to the value of the CSS variable --default-roundedness. See "Default roundedness".
<Stack class="gap-5">
  <Flex class="gap-3">
    <Button variant="primary" rounded="square">Primary</Button>
    <Button variant="secondary" rounded="square">Secondary</Button>
    <Button variant="tertiary" rounded="square">Tertiary</Button>
  </Flex>
  <Flex class="gap-3">
    <Button variant="primary" rounded="sm">Primary</Button>
    <Button variant="secondary" rounded="sm">Secondary</Button>
    <Button variant="tertiary" rounded="sm">Tertiary</Button>
  </Flex>
  <Flex class="gap-3">
    <Button variant="primary" rounded="lg">Primary</Button>
    <Button variant="secondary" rounded="lg">Secondary</Button>
    <Button variant="tertiary" rounded="lg">Tertiary</Button>
  </Flex>
  <Flex class="gap-3">
    <Button variant="primary" rounded="full">Primary</Button>
    <Button variant="secondary" rounded="full">Secondary</Button>
    <Button variant="tertiary" rounded="full">Tertiary</Button>
  </Flex>
</Stack>

#Disabled

Set disabled to either true or false. Defaults to false.
<Flex class="gap-3">
  <Button disabled variant="primary">Primary</Button>
  <Button disabled variant="secondary">Secondary</Button>
  <Button disabled variant="tertiary">Tertiary</Button>
</Flex>

#Loading

Set isLoading to either true or false. Defaults to false.

Set loadingContent to the content you want to display when isLoading is true.

<Flex class="gap-3">
  <Button variant="primary" isLoading loadingContent="Loading...">
    Primary
  </Button>
  <Button variant="secondary" isLoading loadingContent="Loading...">
    Secondary
  </Button>
  <Button variant="tertiary" isLoading loadingContent="Loading...">
    Tertiary
  </Button>
</Flex>

#With icon

Icons should typically appear to the left of the other content in the button.
<Button>
  <span>+</span> Example
</Button>

#Props

variant
Required
false
Type
"primary" | "secondary" | "tertiary" | "danger-primary" | "danger-secondary" | "danger-tertiary"
Default
"secondary"
size
Required
false
Type
"sm" | "md" | "lg" | "block"
Default
"md"
rounded
Required
false
Type
"square" | "sm" | "lg" | "full"
Default
none
Notes
Defaults to the value of the CSS variable --default-roundedness. See "Default roundedness".
isLoading
Required
false
Type
boolean
Default
false
Notes
When true, the button will appear disabled.
loadingContent
Required
false
Type
string
Default
none
Notes
The text to change the button's content to when loading. Ie. when isLoading is true.
children*
Required
true
Type
ComponentChild
Default
none
...rest
Required
false
Type
Omit<ComponentProps<"button">, "icon" | "size">
Default
none
Notes
See the docs for rest parameters. For Button, you could pass anything you normally would pass to <button> because the container looks something like this:
<button class={className} {...restWithoutClass}>
  ...
</button>