Breadcrumb
Breadcrumbは、ユーザーが現在の位置を把握しやすくするための階層型ナビゲーションコンポーネントです。
<script lang="ts">
import Breadcrumb from '$lib/components/ui/modules/Breadcrumb.svelte';
let items = [
{ label: 'トップ', link: '#' },
{ label: 'すべてのコンポーネント', link: '#' },
{ label: 'Breadcrumb', link: '#' },
];
</script>
<Breadcrumb {items} />
プロパティ
Breadcrumbは、以下のプロパティをサポートしています。
| 名前 | 型 | デフォルト値 | 説明 |
|---|---|---|---|
items |
BreadcrumbItem[] |
階層の配列を渡します。 |
BreadcrumbItem
BreadcrumbItemは、各階層の情報を表すオブジェクトです。
| 名前 | 型 | デフォルト値 | 説明 |
|---|---|---|---|
label |
string |
階層のラベルです。 | |
link |
string |
階層のリンク先です。 |
インストールの手順
以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。
パスは実際のプロジェクトの構成にあわせて更新します。
modules/Breadcrumb.svelte
<!--
@component
## 概要
- ユーザーが現在の位置を把握しやすくするための階層型ナビゲーションコンポーネントです
## 機能
- aタグと同様に、クリックやフォーカスなどのインタラクションに対応します
## Usage
```svelte
<Breadcrumb {items} />
```
-->
<script module lang="ts">
import type { ClassValue } from 'svelte/elements';
import { cva, type VariantProps } from 'class-variance-authority';
export const breadcrumbVariants = cva('flex items-center w-full gap-2 p-1 leading-normal text-base-foreground-muted text-sm whitespace-nowrap overflow-y-scroll hidden-scrollbar');
export const breadcrumbListVariants = cva('block outline-primary transition-colors text-sm focus-visible:rounded-xs hover:text-base-foreground-accent focus-visible:outline-[0.125rem] focus-visible:outline-offset-[0.125rem] focus-visible:outline-primary', {
variants: {
/** 現在の階層かどうか */
current: {
true: ['text-base-foreground-default'],
false: [],
},
},
});
export type BreadcrumbVariants = VariantProps<typeof breadcrumbVariants>;
export interface BreadcrumbItem {
/** 階層のラベル */
label: string;
/** 階層のリンク */
link: string;
}
export interface BreadcrumbProps extends BreadcrumbVariants {
/** ページのリスト */
items: BreadcrumbItem[];
/** クラス */
class?: ClassValue;
}
</script>
<script lang="ts">
import { Slash } from '@lucide/svelte';
let { items, class: className }: BreadcrumbProps = $props();
let breadcrumbVariantClass = $derived(breadcrumbVariants({ class: className }));
</script>
<nav>
<ol class={breadcrumbVariantClass}>
{#each items as item, i}
<li>
<a class={breadcrumbListVariants({ current: i === items.length - 1 })} href={item.link}>{item.label}</a>
</li>
{#if i < items.length - 1}
<li>
<Slash size="1rem" />
</li>
{/if}
{/each}
</ol>
</nav>
<style>
.hidden-scrollbar {
/* IE, Edge 対応 */
-ms-overflow-style: none;
/* Firefox 対応 */
scrollbar-width: none;
}
.hidden-scrollbar::-webkit-scrollbar {
/* Chrome, Safari 対応 */
display: none;
}
</style>
使い方
<script lang="ts">
import Breadcrumb from '$lib/components/ui/modules/Breadcrumb.svelte';
let items = [
{ label: 'トップ', link: '#' },
{ label: 'すべてのコンポーネント', link: '#' },
{ label: 'Breadcrumb', link: '#' },
];
</script>
<Breadcrumb {items} />
サンプル
Default
特に操作が行われていない、デフォルトの状態です。
<script lang="ts">
import Breadcrumb from '$lib/components/ui/modules/Breadcrumb.svelte';
let items = [
{ label: 'トップ', link: '#' },
{ label: 'すべてのコンポーネント', link: '#' },
{ label: 'Breadcrumb', link: '#' },
];
</script>
<Breadcrumb {items} />