Kumo Svelte
  • Home
  • Installation
  • Colors
  • Accessibility
  • Changelog
  • Autocomplete
  • Badge
  • Banner
  • Breadcrumbs
  • Button
  • Checkbox
  • Clipboard Text
  • Cloudflare Logo
  • CodeHighlighted
  • Collapsible
  • Combobox
  • Command Palette
  • Date Picker
  • Dialog
  • Dropdown
  • Empty
  • Flow
  • Grid
  • Input
  • InputArea
  • InputGroup
  • Label
  • Layer Card
  • Link
  • Loader
  • MenuBar
  • Meter
  • Pagination
  • Popover
  • Radio
  • Select
  • Sensitive Input
  • Sidebar
  • Skeleton Line
  • Switch
  • Table
  • Table of Contents
  • Tabs
  • Text
  • Toast
  • Toolbar
  • Tooltip
  • Charts
  • Colors
  • Timeseries
  • Maps
  • Sankey
  • Custom Chart
  • Page Header
  • Resource List
  • Delete Resource
Button
kumo-svelte

Button

Displays a button or a component that looks like a button.

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
  import PlusIcon from "phosphor-svelte/lib/PlusIcon";
</script>

<div class="flex flex-wrap items-center gap-2">
  <Button variant="secondary">Button</Button>
  <Button variant="secondary" shape="square" icon={PlusIcon} aria-label="Add" />
</div>

Import

import { Button, LinkButton } from "kumo-svelte/components/button";

Usage

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
</script>

<Button variant="secondary">Click me</Button>

Examples

Variants

Primary

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
</script>

<Button variant="primary">Primary</Button>

Secondary

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
</script>

<Button variant="secondary">Secondary</Button>

Ghost

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
</script>

<Button variant="ghost">Ghost</Button>

Destructive

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
</script>

<Button variant="destructive">Destructive</Button>

Outline

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
</script>

<Button variant="outline">Outline</Button>

Secondary Destructive

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
</script>

<Button variant="secondary-destructive">Secondary Destructive</Button>

Sizes

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
</script>

<div class="flex flex-wrap items-center gap-3">
  <Button size="xs" variant="secondary">Extra Small</Button>
  <Button size="sm" variant="secondary">Small</Button>
  <Button size="base" variant="secondary">Base</Button>
  <Button size="lg" variant="secondary">Large</Button>
</div>

With Icon

Use the icon prop for the common leading-icon case, or render the icon as a child when you need custom icon markup.

As prop

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
  import PlusIcon from "phosphor-svelte/lib/PlusIcon";
</script>

<Button variant="secondary" icon={PlusIcon}>
  Create Worker
</Button>

As child

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
  import PlusIcon from "phosphor-svelte/lib/PlusIcon";
</script>

<Button variant="secondary">
  <PlusIcon />
  Create Worker
</Button>

Icon Only

For icon-only buttons, use shape="square" or shape="circle" with either the icon prop or an icon child. Always include aria-label for accessibility — without visible text, screen readers need the label to convey the button’s purpose.

As prop

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
  import PlusIcon from "phosphor-svelte/lib/PlusIcon";
</script>

<div class="flex flex-wrap items-center gap-3">
  <Button
    variant="secondary"
    shape="square"
    icon={PlusIcon}
    aria-label="Add item"
  />
  <Button
    variant="secondary"
    shape="circle"
    icon={PlusIcon}
    aria-label="Add item"
  />
</div>

As child

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
  import PlusIcon from "phosphor-svelte/lib/PlusIcon";
</script>

<div class="flex flex-wrap items-center gap-3">
  <Button variant="secondary" shape="square" aria-label="Add item">
    <PlusIcon />
  </Button>
  <Button variant="secondary" shape="circle" aria-label="Add item">
    <PlusIcon />
  </Button>
</div>

Loading State

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
</script>

<Button variant="primary" loading>
  Loading...
</Button>

Disabled State

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
</script>

<Button variant="secondary" disabled>
  Disabled
</Button>

Tooltip

Use the title prop to wrap the button in a tooltip. This is useful for icon-only buttons or whenever additional context helps the user understand the action.

<script lang="ts">
  import { Button } from "kumo-svelte/components/button";
  import PlusIcon from "phosphor-svelte/lib/PlusIcon";
</script>

<div class="flex flex-wrap items-center gap-2">
  <Button variant="secondary" title="Create a new Worker">
    Create Worker
  </Button>
  <Button
    variant="secondary"
    shape="square"
    icon={PlusIcon}
    aria-label="Add item"
    title="Add item"
  />
</div>

Link as Button

Use LinkButton when the interaction should navigate somewhere but still look like a button. Use Button for in-place actions like submitting, opening, or toggling UI.

Read Link docs Cloudflare docs
<script lang="ts">
  import { LinkButton } from "kumo-svelte/components/button";
  import ArrowSquareOutIcon from "phosphor-svelte/lib/ArrowSquareOutIcon";
</script>

<div class="flex flex-wrap items-center gap-2">
  <LinkButton href="/components/link" variant="secondary">
    Read Link docs
  </LinkButton>
  <LinkButton href="https://developers.cloudflare.com"
    variant="ghost"
    icon={ArrowSquareOutIcon}
    external
  >
    Cloudflare docs
  </LinkButton>
</div>

API Reference

Button

PropTypeDefault
shapeKumoButtonShapeKUMO_BUTTON_DEFAULT_VARIANTS.shape
sizeKumoButtonSizeKUMO_BUTTON_DEFAULT_VARIANTS.size
variantKumoButtonVariantKUMO_BUTTON_DEFAULT_VARIANTS.variant
classstring—
childrenSnippet—
iconComponent—
loadingbooleanfalse
titleSnippet | string | null—

LinkButton

PropTypeDefault
shapeKumoButtonShapeKUMO_BUTTON_DEFAULT_VARIANTS.shape
sizeKumoButtonSizeKUMO_BUTTON_DEFAULT_VARIANTS.size
variantKumoButtonVariant"ghost"
classstring—
childrenSnippet—
iconComponent—
externalbooleanfalse

On this page

  • Import
  • Usage
  • Examples
    • Variants
    • Sizes
    • With Icon
    • Icon Only
    • Loading State
    • Disabled State
    • Tooltip
    • Link as Button
  • API Reference
    • Button
    • LinkButton