Spinner
Spinnerは、アニメーションを使用して、処理中であることを視覚的に示します。
<script lang="ts">
import Spinner from '$lib/components/ui/atoms/Spinner.svelte';
</script>
<Spinner />
プロパティ
Spinnerは、以下のプロパティをサポートしています。
| 名前 | 型 | デフォルト値 | 説明 |
|---|---|---|---|
size |
string |
3rem |
サイズを指定します。 |
color |
string |
color-primary |
カラーを指定します。カラーコードに対応します。 |
インストールの手順
以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。
パスは実際のプロジェクトの構成にあわせて更新します。
atoms/Spinner.svelte
<!--
@component
## 概要
- Spinnerは、処理が進行中であることを示すコンポーネントです
## 機能
- アニメーションを使用して、処理中であることを視覚的に示します
## Props
- size: スピナーのサイズを指定します
- color: スピナーの色を指定します
## Usage
```svelte
<Spinner {size} {color}/>
```
-->
<script module lang="ts">
import type { ClassValue } from 'svelte/elements';
import { cva, type VariantProps } from 'class-variance-authority';
export const spinnerVariants = cva('animate-spin [animation-duration:1.2s] [animation-timing-function:ease-in-out]');
export type SpinnerProps = VariantProps<typeof spinnerVariants>;
export interface SpinnerComponentProps extends SpinnerProps {
/** スピナーのサイズ */
size?: string;
/** スピナーの色 */
color?: string;
/** クラス */
class?: ClassValue;
}
</script>
<script lang="ts">
import { LoaderCircle } from '@lucide/svelte';
let { size = '3rem', color = 'var(--color-primary)', class: className }: SpinnerComponentProps = $props();
let spinnerVariantClass = $derived(spinnerVariants({ class: className }));
</script>
<LoaderCircle {size} {color} class={spinnerVariantClass} />
使い方
<script lang="ts">
import Spinner from '$lib/components/ui/atoms/Spinner.svelte';
</script>
<Spinner />
サンプル
Default
主にタスクが終了するまでの時間が不明な場合に使用されます。
<script lang="ts">
import Spinner from '$lib/components/ui/atoms/Spinner.svelte';
</script>
<Spinner />
Color
colorの指定で色が変えられます。
<script lang="ts">
import Spinner from '$lib/components/ui/atoms/Spinner.svelte';
</script>
<div class="flex flex-wrap gap-4">
<Spinner color="#d1d5db" />
<Spinner color="#2563EB" />
<Spinner color="#8b5cf6" />
<Spinner color="#10b981" />
<Spinner color="#facc15" />
<Spinner color="#f43f5e" />
</div>
Sizes
sizeの指定で大きさが変えられます。
<script lang="ts">
import Spinner from '$lib/components/ui/atoms/Spinner.svelte';
</script>
<div class="flex gap-4 items-center max-sm:flex-col">
<Spinner size="2rem" />
<Spinner size="3rem" />
<Spinner size="4rem" />
</div>