Radish alpha
r
rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5
Radicle web interface
Radicle
Git
radicle-explorer src components IconButton.svelte
<script lang="ts">
  import { createEventDispatcher } from "svelte";

  import Loading from "./Loading.svelte";

  export let ariaLabel: string | undefined = undefined;
  export let inline: boolean = false;
  export let loading: boolean = false;
  export let title: string | undefined = undefined;
  export let stylePadding: string | undefined = undefined;
  export let disabled: boolean = false;
  export let stopPropagation: boolean = false;

  const dispatch = createEventDispatcher<{ click: MouseEvent }>();
</script>

<style>
  .button {
    user-select: none;
    background-color: transparent;
    border-radius: var(--border-radius-sm);
    color: var(--color-text-tertiary);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 8px 6px;
    gap: 0.25rem;
    font: var(--txt-body-m-regular);
  }
  .inline {
    display: inline-flex;
  }
  .button:hover {
    color: var(--color-text-primary);
    background-color: var(--color-surface-strong);
  }
  .disabled,
  .disabled:hover {
    color: var(--color-surface-alpha-subtle);
    background-color: unset;
  }
</style>

{#if loading}
  <Loading small noDelay />
{:else}
  <!-- svelte-ignore a11y-click-events-have-key-events -->
  <div
    class:disabled
    aria-label={ariaLabel}
    class:inline
    class="button"
    on:click={ev => {
      if (stopPropagation) {
        ev.stopPropagation();
      }
      if (disabled) {
        return;
      }
      dispatch("click", ev);
    }}
    role="button"
    style:padding={stylePadding}
    tabindex="0"
    {title}>
    <slot />
  </div>
{/if}