Delete Resource
kumo-svelte
<script lang="ts">
  import { Button } from 'kumo-svelte';
  import { DeleteResource } from '../../../blocks/delete-resource';

  let open = $state(false);
  let isDeleting = $state(false);
  let errorMessage = $state('');

  async function handleDelete() {
    
    isDeleting = true;
    await new Promise((resolve) => setTimeout(resolve, 2000));
    isDeleting = false;
    open = false;
  }
</script>

<Button variant="destructive" onclick={() => (open = true)}>
  Delete Zone
</Button>

<DeleteResource
  bind:open
  onOpenChange={(nextOpen: boolean) => (open = nextOpen)}
  resourceType="Zone"
  resourceName="example.com"
  onDelete={handleDelete}
  isDeleting={isDeleting}
/>

Installation

DeleteResource is a block - a CLI-installed component that you own and can customize. Unlike regular components, blocks are copied into your project so you have full control over the code.

1. Initialize Kumo config (first time only)

npx kumo-svelte init

2. Install the block

npx kumo-svelte add DeleteResource

3. Import from your local path

<script lang="ts">  import { DeleteResource } from './components/kumo/delete-resource/delete-resource';</script>
Why blocks? Blocks give you full ownership of the code, allowing you to customize deletion flows to fit your specific needs. They're ideal for critical actions that often need project-specific modifications.

Usage

<script lang="ts">  import { Button } from 'kumo-svelte';  import { DeleteResource } from './components/kumo/delete-resource/delete-resource';  let open = $state(false);  let isDeleting = $state(false);  async function handleDelete() {    isDeleting = true;    try {      await deleteZone('example.com');      open = false;    } finally {      isDeleting = false;    }  }</script><Button variant="destructive" onclick={() => (open = true)}>  Delete Zone</Button><DeleteResource  bind:open  onOpenChange={(nextOpen) => (open = nextOpen)}  resourceType="Zone"  resourceName="example.com"  onDelete={handleDelete}  isDeleting={isDeleting}/>

Examples

Worker Deletion

Works with any resource type - just change the resourceType and resourceName props.

<script lang="ts">
  import { Button } from 'kumo-svelte';
  import { DeleteResource } from '../../../blocks/delete-resource';

  let open = $state(false);
  let isDeleting = $state(false);
  let errorMessage = $state('');

  async function handleDelete() {
    
    isDeleting = true;
    await new Promise((resolve) => setTimeout(resolve, 2000));
    isDeleting = false;
    open = false;
  }
</script>

<Button variant="destructive" onclick={() => (open = true)}>
  Delete Worker
</Button>

<DeleteResource
  bind:open
  onOpenChange={(nextOpen: boolean) => (open = nextOpen)}
  resourceType="Worker"
  resourceName="api-gateway-worker"
  onDelete={handleDelete}
  isDeleting={isDeleting}
/>

Error State

Use the errorMessage prop to show an error message.

<script lang="ts">
  import { Button } from 'kumo-svelte';
  import { DeleteResource } from '../../../blocks/delete-resource';

  let open = $state(false);
  let isDeleting = $state(false);
  let errorMessage = $state('');

  async function handleDelete() {
    errorMessage = '';
    isDeleting = true;
    await new Promise((resolve) => setTimeout(resolve, 2000));
    isDeleting = false;
    errorMessage = 'Something went wrong';
  }
</script>

<Button variant="destructive" onclick={() => (open = true)}>
  Delete Zone
</Button>

<DeleteResource
  bind:open
  onOpenChange={(nextOpen: boolean) => (open = nextOpen)}
  resourceType="Zone"
  resourceName="example.com"
  onDelete={handleDelete}
  isDeleting={isDeleting}
  errorMessage={errorMessage}
/>

API Reference

PropTypeDefaultDescription
size 'sm' | 'base'"base"Dialog size preset.
open *boolean-Whether the dialog is open.
resourceType *string-Type of resource being deleted, such as Zone, Worker, or KV Namespace.
resourceName *string-Name of the resource users must type to confirm deletion.
isDeleting booleanfalseWhether the delete action is currently in progress.
caseSensitive booleantrueWhether the confirmation input must match the resource name case exactly.
deleteButtonText string-Custom label for the destructive confirmation button.
class string-Additional classes merged onto the dialog content.
errorMessage string-Error message displayed above the confirmation copy.
onOpenChange *(open: boolean) => void-Callback fired when the open state changes.
onDelete *() => void | Promise<void>-Callback fired when the delete action is confirmed.