Svelte Component Templates

Build reactive OASIS components with Svelte's elegant syntax.

Base Svelte Component Template

<script lang="ts">
  import { onMount } from 'svelte';
  import { writable } from 'svelte/store';
  import { OASISClient } from '@oasis/api-client';

  // Props
  export let avatarId: string;
  export let theme: 'light' | 'dark' = 'dark';
  
  // State
  let data = writable<any>(null);
  let loading = writable<boolean>(false);
  let error = writable<string | null>(null);
  
  const client = new OASISClient();

  // Lifecycle
  onMount(async () => {
    await loadData();
  });

  // Methods
  async function loadData() {
    loading.set(true);
    try {
      const result = await client.someMethod(avatarId);
      data.set(result);
    } catch (err) {
      error.set(err.message);
    } finally {
      loading.set(false);
    }
  }

  function handleAction() {
    // Your logic
  }
</script>

<div class="oasis-component" class:dark={theme === 'dark'}>
  {#if $loading}
    <div class="loading">Loading...</div>
  {:else if $error}
    <div class="error">{$error}</div>
  {:else if $data}
    <div class="content">
      <!-- Your content here -->
    </div>
  {/if}
</div>

<style>
  .oasis-component {
    padding: 1.5rem;
    border-radius: 8px;
  }
  
  .oasis-component.dark {
    background: #1a1a1a;
    color: white;
  }
  
  .loading {
    text-align: center;
    padding: 2rem;
  }
</style>

Using Svelte Stores

Priority Components Templates

1. AvatarSSO.svelte

2. KarmaDisplay.svelte

3. NFTCard.svelte

Reactive Patterns

Event Handling

Remaining Components

  • AvatarDetail.svelte

  • NFTGallery.svelte

  • Messaging.svelte

  • DataManager.svelte

  • ProviderSelector.svelte

  • SettingsPanel.svelte

  • NotificationToast.svelte

  • SocialFeed.svelte

  • FriendsList.svelte

  • GroupManager.svelte

  • Leaderboard.svelte

  • Achievements.svelte

  • GeoNFTMap.svelte

  • ChatWidget.svelte

Last updated