# Rabee UI ドキュメント全文 > このファイルは、AIツールがRabee UIライブラリの全ドキュメントを一度に取得するためのものです。 > 各コンポーネントのプロパティ、使い方、コード例が含まれています。 > サイト: https://rabeeui.com --- # Rabee UI とは Rabee UIは、Svelte × Tailwind CSSで構築された、カスタマイズを前提としたUIコンポーネント集です。必要なUIコンポーネントのコードを自分のプロジェクトにコピーするだけで、素早く、簡単にUIを構築できます。  ---- ## Svelte × Tailwind CSSでカスタマイズ Rabee UIは、カスタマイズして使用することを前提とした「UIコンポーネントの種」です。デザインを変更したいときは、Tailwind CSSのクラスを組み合わせるだけで柔軟に調整できます。また、Tailwind CSSの設定ファイルを上書きすることで、プロジェクト全体のデザイントークンを一括で変更することもできます。 ## コンポーネント単位で使える Rabee UIはUIライブラリではなく、コードをコンポーネント単位でコピー&ペーストして使える「UIコンポーネント集」です。プロジェクトごとに、必要なUIコンポーネントのみを選んで使うことができます。 ## ダークモード・ライトモードに対応 すべてのコンポーネントがダークモード・ライトモードの切り替えに対応しています。プロダクト立ち上げの段階から、コストをかけずにダークモードを提供することができます。 ## 日本語利用のためのデザイン UIコンポーネントのサイズや余白は、日本語で使ったときに美しく見えるよう調整されています。他言語をベースとしたコンポーネントと比較して、導入や細かなカスタマイズをスムーズに進められます。 ## コードと一致したFigmaファイル 実際のコードと同じ仕様を再現できるFigmaファイルを公開しています。FigmaのVariables機能を活用しており、デザイナーとエンジニアが同じデザインシステムを共有することで、デザインから実装までがシームレスにつながります。 Figmaデータは[Figma Community](https://www.figma.com/community/file/1479376628733075423/rabee-ui)で確認できます。 ---- ## 最新情報はこちら 最新情報は以下のLP、Discordで公開中です。 - [LP](https://rabeeui.com/) - [Discord](https://discord.gg/VjtgZ4dkQa) --- # セットアップの手順 Rabee UIの利用にあたって、Lucide Icons、Class Variance Authority、Tailwind CSSのインストールを行います。セットアップは以下の手順で進めることができます。 ## 1. Lucide Svelteのセットアップ Rabee UIで使用する[Lucide Icons](https://lucide.dev/guide/packages/lucide-svelte)のセットアップを行います。 ``` yarn add @lucide/svelte ``` ## 2. Class Variance Authorityのセットアップ Rabee UIで使用する[CVA](https://cva.style/docs/getting-started/installation)のセットアップを行います。 ``` yarn add class-variance-authority ``` ## 3. Tailwind CSSのセットアップ Rabee UIはTailwind CSS を基盤として構築されているため、Tailwind CSSのインストールが必要です。 インストール方法は[Tailwind CSSの公式ガイド](https://tailwindcss.com/docs/installation/framework-guides/sveltekit)を参照してください。 ## 4. CSSファイルのセットアップ Rabee UIでは、以下のCSSを利用しています。 以下のコードをCSSファイルに記述してください。 ```less:app.css body { -webkit-font-smoothing: antialiased; } @theme { /* container */ --color-base-container-default: #FFF; --color-base-container-primary: #18181B; --color-base-container-muted: #E4E4E7; --color-base-container-accent: #F4F4F5; --color-base-container-subarea-accent: #F4F4F5; /* foreground */ --color-base-foreground-default: #18181B; --color-base-foreground-accent: #18181B; --color-base-foreground-muted: #71717A; --color-base-foreground-subtle: #A1A1AA; --color-base-foreground-on-fill-inverse: #FAFAFA; --color-base-foreground-on-fill-bright: #FAFAFA; --color-base-foreground-subarea-default: #3F3F46; --color-base-foreground-subarea-accent: #18181B; --color-base-foreground-link: #2563EB; /* stroke */ --color-base-stroke-default: #E4E4E7; /* surface */ --color-base-surface-default: #FFF; --color-base-surface-subarea-default: #FAFAFA; --color-base-surface-muted: #FAFAFA; /* function */ --color-destructive: #DC2626; --color-destructive-on-fill: #FEF2F2; --color-warning: #FBBF24; --color-warning-on-fill: #18181B; --color-success: #16A34A; --color-success-on-fill: #F0FDF4; --color-primary: #2563EB; --color-primary-on-fill: #EFF6FF; /* alpha */ --color-alpha-bright: #FFFFFF; --color-alpha-gloom: #09090B; /* line-height */ --text-xs--line-height: 1.5; --text-sm--line-height: 1.5; --text-base--line-height: 1.5; --text-lg--line-height: 1.5; --text-xl--line-height: 1.5; --text-2xl--line-height: 1.5; --text-3xl--line-height: 1.5; --text-4xl--line-height: 1.5; --text-5xl--line-height: 1.5; --text-6xl--line-height: 1.5; --text-7xl--line-height: 1.5; --text-8xl--line-height: 1.5; --text-9xl--line-height: 1.5; } @layer theme { .dark { /* container */ --color-base-container-default: #09090B; --color-base-container-primary: #FAFAFA; --color-base-container-muted: #27272A; --color-base-container-accent: #27272A; --color-base-container-subarea-accent: #27272A; /* foreground */ --color-base-foreground-default: #FAFAFA; --color-base-foreground-accent: #FAFAFA; --color-base-foreground-muted: #A1A1AA; --color-base-foreground-subtle: #71717A; --color-base-foreground-on-fill-inverse: #18181B; --color-base-foreground-on-fill-bright: #FAFAFA; --color-base-foreground-subarea-default: #F4F4F5; --color-base-foreground-subarea-accent: #FAFAFA; --color-base-foreground-link: #60A5FA; /* stroke */ --color-base-stroke-default: #3F3F46; /* surface */ --color-base-surface-default: #09090B; --color-base-surface-subarea-default: #18181B; --color-base-surface-muted: #18181B; /* function */ --color-destructive: #B91C1C; --color-destructive-on-fill: #FEF2F2; --color-warning: #F59E0B; --color-warning-on-fill: #18181B; --color-success: #15803D; --color-success-on-fill: #F0FDF4; --color-primary: #1D4ED8; --color-primary-on-fill: #EFF6FF; /* alpha */ --color-alpha-bright: #FFFFFF; --color-alpha-gloom: #09090B; } } ``` ## 5. さっそく使ってみましょう 気になるコンポーネントを探して、さっそく使いはじめられます。 Button Input Switch --- # Figma Rabee UIは、Figma Communityでデザインデータを公開しています。デザイナーとエンジニアが同じデザインシステムを共有することで、デザインから実装までがシームレスにつながります。  ---- ## 実装と一致したUIコンポーネントを用意 見た目と機能がコードとほとんど一致したデザインをFigmaデータとして提供しています。たとえば、デザインにボタンコンポーネントを使った場合は、実装者に「Rabee UIのボタンを使っています」と伝えるだけでコミュニケーションが完了します。 ## スタイルはVariables機能で管理 カラー、サイズ、テキストなどのスタイル設定は、FigmaのVariables機能を活用して実際のコードに近い仕様を再現しています。スタイルを変更したいときも、Variablesの編集によってスピーディーに対応できます。 ## エラー、ホバー等のステータスも網羅 それぞれのコンポーネントに対して、HoveredやDisabledなどの必要な状態を完備。デザイン段階でのステータス考慮漏れも削減することができます。 ---- ## Figmaデータのダウンロードはこちら デザインデータは無料で公開中です。現在開発中のコンポーネントのデザインも先行公開しています。 [Figma Community](https://www.figma.com/community/file/1479376628733075423/rabee-ui) --- # Accordion Accordionは、クリックするとコンテンツが展開・折りたためる見出しのリストです。 必要な情報をコンパクトに整理し、ユーザーが見たい内容だけを表示できます。 ```svelte ここにコンテンツ内容が入ります ここにコンテンツ内容が入ります ここにコンテンツ内容が入ります ``` ## プロパティ Accordionは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`title`** | `string` || 見出しの文言を設定できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Accordion.svelte {title} {@render children()} ``` ## 使い方 ```svelte ここにコンテンツ内容が入ります ここにコンテンツ内容が入ります ここにコンテンツ内容が入ります ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ここにコンテンツ内容が入ります ここにコンテンツ内容が入ります ここにコンテンツ内容が入ります ``` --- # Badge Badgeは、主に情報を表示するためのコンポーネントです。 必要に応じて、リンクやボタンとして遷移可能なパーツとしても活用できます。 ```svelte バッジ ``` ## プロパティ Badgeは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`tone`** | `string` | `filled` | バッジのトーンを指定します。`filled`, `outlined` のいずれかを選択できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Badge.svelte {@render children?.()} ``` ## 使い方 ```svelte バッジ ``` --- ## サンプル ### Default 強調したい情報や目立たせたい要素に使用します。 ```svelte バッジ ``` ### Outlined 情報を控えめに表示したい場合に使用します。 ```svelte バッジ ``` ### Link リンクとして Badge を利用したい場合は、`` タグ等にBadgeのクラスやスタイルを適用することで、同じ見た目を再現できます。 ```svelte バッジ ``` --- # Breadcrumb Breadcrumbは、ユーザーが現在の位置を把握しやすくするための階層型ナビゲーションコンポーネントです。 ```svelte ``` ## プロパティ Breadcrumbは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`items`** | `BreadcrumbItem[]` || 階層の配列を渡します。 | ### BreadcrumbItem BreadcrumbItemは、各階層の情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`label`** | `string` || 階層のラベルです。| | **`link`** | `string` || 階層のリンク先です。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/Breadcrumb.svelte {#each items as item, i} {item.label} {#if i < items.length - 1} {/if} {/each} ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` --- # Button Buttonは、押下することで特定の操作を実行するコンポーネントです。 ボタン内部の構造はテキストやアイコン等に柔軟に変更できます。 ```svelte ボタン ``` ## プロパティ Buttonは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`variant`** | `string` | `primary` | ボタンのスタイルを指定します。`primary`, `secondary`, `success`, `danger` のいずれかを選択できます。 | | **`size`** | `string` | `medium` | ボタンのサイズを指定します。`small`, `medium`, `large` のいずれかを選択できます。 | | **`tone`** | `string` | `solid` | ボタンのトーンを指定します。`solid`, `ghost` のいずれかを選択できます。 | | **`isSquare`** | `boolean` | `false` | ボタンを正方形にします。 | | **`disabled`** | `boolean` | `false` | ボタンを無効化します。無効化されたボタンはクリックできません。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Button.svelte {@render children?.()} ``` ## 使い方 ```svelte ボタン ``` --- ## サンプル ### Default 最も優先度の高いアクションに使うコンポーネントです。 基本的には1画面に1つのみ使用します。 ```svelte ボタン ``` ### Disabled 利用不可の状態です。 ```svelte ボタン ``` ### Variants ボタンのタイプを変更することもできます。 ```svelte primary secondary success danger ``` ### Sizes ボタンのサイズを変更することもできます。 ```svelte small medium large ``` ### Tones ボタンのトーンを変更することもできます。 ```svelte solid ghost ``` ### Square ボタンを正方形にすることもできます。 ```svelte ``` ### Click 一般的な``と同様に、クリック時のイベントを登録できます。 ```svelte ボタン ``` ### With Icon アイコンを追加することもできます。 ```svelte ダウンロード 検索する 削除する ``` ### Loading ローディング状態です。 ```svelte ボタン ボタン ``` ### Only Style `` タグ等に Buttonのクラスやスタイルのみを適用することで、同じ見た目を再現できます。 ```svelte a タグ ``` ### Toggle Button フラグで variant 属性や中身のコンテンツを切り替えることで Toggle Button を実現することができます。 ```svelte (isFollowed = !isFollowed)}> {#if isFollowed} フォロー {:else} フォロー中 {/if} (mode = mode === 'light' ? 'dark' : 'light')}> {#if mode === 'light'} {:else} {/if} ``` --- # Calendar Calendarは、日付の表示や選択ができるコンポーネントです。 ```svelte ``` ## プロパティ Calendarは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`value`** | `string` | `''` | 日付(YYYY-MM-DD)を渡すことができます。 | | **`min`** | `string` | `0001-01-01` | 選択できる最小値を設定できます。 | | **`max`** | `string` | `9999-12-31` | 選択できる最大値を設定できます。 | | **`start`** | `string` | `''` | 範囲選択の開始日を指定できます。 | | **`end`** | `string` | `''` | 範囲選択の終了日を指定できます。 | | **`months`** | `number` | `1` | 表示する月数を指定できます。 | | **`enableRange`** | `boolean` | `false` | 範囲選択が可能になります。 | | **`onChange`** | `(value: string) => void` || 日付が選択されたときのコールバック関数です。 | | **`onRangeChange`** | `(value: CalendarRange) => void` || 日付が範囲選択されたときのコールバック関数です。 | **`autoFocusDate`** | `boolean` | `false` | 日付に自動でフォーカスします。 ### CalendarDate CalendarDateは、1日分の情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`value`** | `number` || 日付(数値)です。| | **`outOfMonth`** | `boolean` || 表示範囲外の月かどうか。 | | **`disabled`** | `boolean` || 選択できるかどうか。 | | **`formatDate`** | `string` || フォーマット済みの日付文字列です。 | ### CalendarRange CalendarRangeは、範囲選択された日付の情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`start`** | `string` | `''` | 開始日です。| | **`end`** | `string` | `''` | 終了日です。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/Calendar.svelte {#if type === 'date'} {#each calendars as calendar} {@const year = calendar.year} {@const month = calendar.month} {@const year_disabled = yearDisabled(year)} {@const month_disabled = monthDisabled(month)} updateDisplay('year', new Date(year, month, 1))} disabled={year_disabled}> {year}年 updateDisplay('month', new Date(year, month, 1))} disabled={month_disabled}> {month + 1}月 {/each} {:else if type === 'month'} {@const year = displayDate.getFullYear()} {@const disabled = yearDisabled(year)} { type = 'year'; }} {disabled}> {year}年 {:else} {yearLabel} {/if} {#each Array(months) as _} {#each WEEK_DAYS as week} {week} {/each} {/each} {#if type === 'date'} {#each calendars as calendar} {#each calendar.weeks as week} {#each week as day} selectDate(day)} onkeydown={(e) => onKeyDownDay(e, day)} onfocus={() => { beforeSelectDate = new Date(day.date); }} onblur={() => { beforeSelectDate = null; }} onmouseenter={() => { beforeSelectDate = new Date(day.date); }} onmouseleave={() => { beforeSelectDate = null; }} > {day.value} {/each} {/each} {/each} {:else} {#if type === 'month'} {#each Array(DISPLAY_MONTH_NUM) as _, m} {@const isDisabled = monthDisabled(m)} changeDisplayMonth(m)} onkeydown={(e) => onKeyDownMonth(e, m)}> {m + 1}月 {/each} {:else if type === 'year'} {#each yearRange as y} {@const year_disabled = yearDisabled(y)} changeDisplayYear(y)} onkeydown={(e) => { onKeyDownYear(e, y); }}> {y} {/each} {/if} {/if} ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 日付を表示・選択できます。 ```svelte ``` ### Min・Max 選択可能な範囲を指定できます。 ```svelte ``` ### Date 指定の日付を渡すことができます。 ```svelte ``` ### Range 日付を範囲選択することができます。 ```svelte ``` ### Month 表示する月数を指定することができます。 ```svelte ``` ### OnChange コールバック関数で値を受け取ることができます。 ```svelte ``` ### With Input InputDateとも組み合わせることができます。 ```svelte {#snippet endContent()} {/snippet} {#if isCalendarOpen} {/if} ``` --- # Card Cardは、コンテンツを整理し、視覚的にグループ化するためのコンポーネントです。 ```svelte ここに要素が入ります。 ``` ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Card.svelte {@render children?.()} ``` ## 使い方 ```svelte タイトル ここに補足文が入ります。 ``` --- ## サンプル ### Image 画像を使ったサンプルです。 ```svelte タイトル ここに補足文が入ります。 ``` ### Form 入力要素を使ったサンプルです。 ```svelte e.preventDefault()}> タイトル ラベル ここに補足文が入ります。 ラベル ラベル ここに補足文が入ります。 選択肢1 選択肢2 選択肢3 ボタン ボタン ``` ### List リストを使ったサンプルです。 ```svelte e.preventDefault()}> タイトル ここに補足文が入ります。 {#each infoCards as infoCard} {infoCard.label} {infoCard.description} {/each} ボタン ボタン ``` --- # Checkbox Checkboxは、ユーザーが複数の選択肢から1つ以上を選択できるコンポーネントです。 ```svelte 選択肢 ``` ## プロパティ Checkboxは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`checked`** | `boolean` || チェック状態を制御します。 | | **`indeterminate`** | `boolean` | `false` | 一部のみ選択された状態や、不確定な状態を表します。 | | **`isError`** | `boolean` | `false` | エラーのスタイルを適用します。 | | **`disabled`** | `boolean` | `false` | チェックボックスを無効化します。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Checkbox.svelte {#if indeterminate} {:else} {/if} ``` ## 使い方 ```svelte 選択肢 ``` ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte 選択肢 ``` ### Error 入力内容に問題があり、エラーが表示されている状態です。 ```svelte 選択肢 ``` ### Disabled 利用不可の状態です。 ```svelte 選択肢 ``` ### Indeterminate 一部のみ選択された状態や、不確定な状態を示します。 ツリービューで親が一部の子だけ選ばれている場合などに使用されます。 ```svelte 選択肢 ``` ### Group `bind:group`を使うことで、複数のチェックボックスをグループ化し、同じ値を共有できます。 これにより、複数のチェックボックスの状態を一括で管理できます。 ```svelte 選択肢1 選択肢2 選択肢3 ``` --- # Combobox Comboboxは、入力フィールドと候補リストを組み合わせて、ユーザーがテキスト入力または候補の選択によって値を指定できるコンポーネントです。 検索やフィルタリングによって、効率的に目的の項目を探すことができます。 ```svelte ``` ## プロパティ | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`options`** | `ComboboxOption[]` | | 選択肢の配列です。 | | **`placeholder`** | `string` | `プレースホルダー` | 入力欄のプレースホルダーです。 | | **`disabled`** | `boolean` | `false` | コンボボックスを無効化します。無効化されたコンボボックスは選択できません。 | | **`isError`** | `boolean` | `false` | エラー状態を視覚的に示します。バリデーション用など。 | | **`multi`** | `boolean` | `false` | `true` にすると複数選択が可能になります。 | | **`open`** | `boolean` | `false` | コンボボックスの候補リストの開閉状態を制御します。 | | **`showSelect`** | `boolean` | `false` | 選択した値を表示します。(multiと併用で複数選択表示可能) | ### ComboboxOptionItem | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`label`** | `string` | | 選択肢のラベルです。 | | **`value`** | `string \| number` | | 選択肢の値です。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Combobox.svelte { if (!open) openListbox(); }} onfocus={async () => { if (!open) await openListbox(); }} > {#if multi && showSelect && selectedOptions.length} {#each selectedOptions as selected} {selected.label} onToggle(selected.value)} aria-label="選択をクリア"> {/each} {/if} 0 ? selectedLabel : query} oninput={(e) => { query = (e.target as HTMLInputElement).value; }} onfocus={async () => { if (!open) await openListbox(); }} {placeholder} {disabled} /> {#if !multi && showSelect && value.length > 0} {:else} {/if} {#if open} {#if showScrollButtons} {#if !isScrolledToTop} startScroll('up')} onmouseleave={stopScroll}> {/if} {#if !isScrolledToBottom} startScroll('down')} onmouseleave={stopScroll}> {/if} {/if} (isKeyboardNavigating = false)} onmouseleave={() => { activeIndex = -1; isKeyboardNavigating = false; }} > {#each filtered as option, i} onClickOption(e, option.value, i)} onkeydown={(e) => onItemKeydown(e, option.value)} onmouseenter={() => { if (!isKeyboardNavigating) activeIndex = i; }} onfocus={() => (activeIndex = i)}> {#if selectedSet.has(option.value)} {/if} {option.label} {:else} {#if emptyView} {@render emptyView()} {:else} 候補が見つかりませんでした {/if} {/each} {/if} ``` ## 依存コンポーネント Comboboxを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Input](https://rabeeui.com/docs/components/input) ## 使い方 ```js import Combobox from "@/components/atoms/Combobox.svelte"; ``` ```html ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` ### Error 選択内容に問題があり、エラーが表示されている状態です。 ```svelte {#if isError} ここにエラーメッセージが入ります。 {/if} ``` ### Disabled 利用不可の状態です。 ```svelte ``` ### Multi 複数選択できます。 ```svelte ``` ### Empty 入力内容に該当する項目が存在しない場合、表示されます。 ```svelte {#snippet emptyView()} 候補が見つかりませんでした {/snippet} ``` ### SingleSelect 選択した値を表示させます。 ```svelte ``` ### MultiSelect 複数選択した値を表示させます。 ```svelte ``` --- # Command Commandは、任意項目を一覧表示し、選択かつ処理実行できるコンポーネントです。 ```svelte {#snippet startContent(item: CommandMenu)} {@const Icon = item.id && iconMap[item.id]} {#if Icon} {/if} {/snippet} ``` ## プロパティ Commandは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`class`** | `string` || 追加したいカスタムクラスを渡します。 | | **`sections`** | `CommandSection[]` || 階層の配列を渡します。| | **`emptyView`** | `Snippet<[]>` || 表示するメニューが空の場合に表示するレイアウトを渡します。 | | **`onClick`** | `(item: CommandMenu, section: CommandSection) => void` || メニューが選択されたときのコールバック関数を渡します。 | | **`startContent`** | `Snippet<[CommandMenu, CommandSection]>` || 各メニューの左側に配置するコンテンツを渡します。 | | **`autofocus`** | `boolean` | `false` | Inputをオートフォーカスするかどうか。 | ### CommandSection CommandSectionは、各階層の情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`label`** | `string` || セクションごとのラベルです。| | **`menus`** | `CommandMenu[]` || セクションごとの選択肢です。 | ### CommandMenu CommandMenuは、メニューの情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`id`** | `any` || メニューの一意な識別子です。 | | **`label`** | `string` || メニューのラベルです。| | **`disabled`** | `boolean` | false | 操作できるかどうか。 | | **`shortcutText`** | `string` || メニュー右側に表示するテキスト。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/Command.svelte {#snippet startContent()} {/snippet} {#each sections as section, index} {#if index !== 0} {/if} {#if section.menus} {#if section.label} {section.label} {/if} {#each section.menus as menu} onClick?.(menu, section)} onkeydown={(event) => onKeyDownMenu(event, menu, section)} disabled={menu.disabled}> {#if startContent} {@render startContent(menu, section)} {/if} {menu.label} {#if menu.shortcutText} {menu.shortcutText} {/if} {/each} {/if} {:else} {#if emptyView} {@render emptyView()} {:else} 候補が見つかりませんでした {/if} {/each} ``` ## 依存コンポーネント Commandを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Input](https://rabeeui.com/docs/components/input) - [Separator](https://rabeeui.com/docs/components/separator) ## 使い方 ```svelte {#snippet startContent(item: CommandMenu)} {@const Icon = item.id && iconMap[item.id]} {#if Icon} {/if} {/snippet} ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte {#snippet startContent(item: CommandMenu)} {@const Icon = item.id && iconMap[item.id]} {#if Icon} {/if} {/snippet} ``` ### Disabled 選択不可の選択肢が含まれている状態です。 ```svelte ``` ### Empty メニューが空の状態です。 ```svelte {#snippet emptyView()} 候補が見つかりませんでした {/snippet} ``` ### onClick コールバック関数で値を受け取ることができます。 ```svelte {#snippet startContent(item: CommandMenu)} {@const Icon = item.id && iconMap[item.id]} {#if Icon} {/if} {/snippet} ``` --- # Dialog Dialogは、ユーザーに対して明示的な情報を提示したり、オプションを選択させるためのコンポーネントです。 ```svelte Open Dialog onClick(result)}> ラベル ここに補足文が入ります。 ``` ## プロパティ Dialogは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`open`** | `boolean` | `false` | Dialog を表示するかどうか。 | | **`dismissible`** | `boolean` | `false` | Dialog 以外を押しても閉じるかどうか。 | | **`positiveText`** | `string` | `決定` | primaryボタンの文言を渡します。 | | **`negativeText`** | `string` | `キャンセル` | secondaryボタンの文言を渡します。 | | **`enableClose`** | `boolean` | `false` | 閉じるボタンを表示できます。 | | **`onClick`** | `(result: boolean) => void` || ボタンをクリックされた際に呼び出される関数です。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modals/Dialog.svelte {#if open} {@render children()} onClick(false)}>{negativeText} onClick(true)}>{positiveText} {#if enableClose} onClick(false)}> {/if} {/if} ``` ## 依存コンポーネント Dialogを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](https://rabeeui.com/docs/components/button) ## 使い方 ```svelte Open Dialog onClick(result)}> ラベル ここに補足文が入ります。 ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte Open Dialog onClick(result)}> ラベル ここに補足文が入ります。 ``` ### EnableClose 閉じるボタンを表示することができます。 ```svelte Open Dialog onClick(result)}> ラベル ここに補足文が入ります。 ``` ### With Input,Select `Input`や`Select`などの要素と組み合わせることもできます。 ```svelte Open Dialog onClick(result)}> ラベル ここに補足文が入ります。 ラベル ラベル ``` --- # Drawer Drawerは、任意のコンテンツを受け取り、画面の上下左右いずれかの端からスライドインで表示できるコンポーネントです。 ```svelte Open Drawer {#snippet children()} (isOpen = false)}> タイトル ここに補足文が入ります。 {/snippet} ``` ## プロパティ drawerは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | |------|-----|-------------|------| | **`direction`** | `string` | `"left"` | Drawer の表示方向 | | **`open`** | `boolean` | `false` | Drawer を表示するかどうか | | **`dismissible`** | `boolean` | `true` | Drawer 外をクリックすると閉じるかどうか | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/Drawer.svelte {#if open} {@render children()} {/if} ``` ## 使い方 ```svelte Open Drawer {#snippet children()} (isOpen = false)}> タイトル ここに補足文が入ります。 {/snippet} ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte Open Drawer {#snippet children()} (isOpen = false)}> タイトル ここに補足文が入ります。 {/snippet} ``` ### Direction スライドインする方向を選択できます。 ```svelte {#each directions as dir} openDrawer(e, dir.direction)}> {dir.label} {/each} {#snippet children()} (isOpen = false)}> タイトル ここに補足文が入ります。 {/snippet} ``` ### With Input,Select `Input`や`Select`などの要素と組み合わせることもできます。 ```svelte Open Drawer (isOpen = false)}> タイトル ここに補足文が入ります。 ラベル ラベル (isOpen = false)}>キャンセル (isOpen = false)}>続ける ``` --- # Dropdown Menu DropdownMenuは、クリックやホバーによって表示される選択肢の一覧から、ユーザーが操作を選べるコンポーネントです。 ```svelte ``` ## プロパティ DropdownMenuは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`menus`** | `MenuProps[]` || 階層の配列を渡します。| ### MenuProps MenuPropsは、各階層の情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`label`** | `string` || 階層のラベルです。| | **`items`** | `MenuItemProps[]` || 階層のメニュー。 | ### MenuItemProps MenuItemPropsは、メニューの情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`label`** | `string` || メニューのラベルです。| | **`disabled`** | `boolean` | false | 操作できるかどうか。 | | **`shortCutText`** | `string` || メニュー右側に表示するテキスト。 | | **`startContent`** | `Snippet<[]>` || 左側に表示する要素。 | | **`subMenus`** | `MenusProps[]` || ネストしたメニューの情報。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/DropdownMenu.svelte {#each menus as menu, index} {#if index !== 0} {/if} {#if menu.label} {menu.label} {/if} {#each menu.items as item, i} onKeyDown(e, item.onClick)} onmouseenter={() => calcShowPosition(i)}> {#if item.startContent} {@render item.startContent()} {/if} {item.label} {#if item.subMenus} {/if} {#if item.shortCutText && !item.subMenus} {item.shortCutText} {/if} {#if item.subMenus} {/if} {/each} {/each} ``` ## 依存コンポーネント DropdownMenuを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Separator](https://rabeeui.com/docs/components/separator) ## 使い方 ```svelte ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` ### Disabled 選択不可の状態です。 ```svelte ``` --- # Global Navigation GlobalNavigationは、Webサイトやアプリケーション全体を通じて常に表示される主要なナビゲーションメニューです。 ```svelte {#snippet children(item)} {#if item.id === 'menu1'} ここにメニュー1の要素が入ります。 {/if} {#if item.id === 'menu3'} ここにメニュー3の要素が入ります。 {/if} {/snippet} ``` ## プロパティ GlobalNavigationは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`menus`** | `GlobalNavigationItem[]` || メニューとして表示する値の配列 | | **`direction`** | `string` |`left`| メニューとして表示する値の配列です。`left`, `right` のいずれかを選択できます。 | | **`currentIndex`** | `number` || 現在の階層を指定するnumberです。 | | **`children`** | `Snippet<[GlobalNavigationItem, number]>` || サブメニューの内容を表示するスニペットです。 | | **`startContent`** | `Snippet<[GlobalNavigationItem, number]>` || 各メニューの左側に置けるコンテンツです。 | ### GlobalNavigationItem GlobalNavigationItemは、各メニュー項目を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`id`** | `any` || メニューのidです。| | **`label`** | `string` || メニューのラベルです。| | **`link`** | `GlobalNavigationLink` || メニューのリンク先です。 | | **`disabled`** | `boolean` || 操作できるかどうか。 | | **`hasSubMenu`** | `boolean` || 表示するコンテンツがあるかどうか。 | ### GlobalNavigationLink GlobalNavigationLinkは、リンク情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`href`** | `string` || 遷移するリンク先です。| | **`blank`** | `boolean` || 別タブで開くかどうか。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/GlobalNavigation.svelte {#each menus as item, index} {#if item.hasSubMenu} onClickMenu(item, e)} disabled={item.disabled}> {@render menuContent()} {:else} {@render menuContent()} {/if} {#snippet menuContent()} {#if startContent} {@render startContent(item, index)} {/if} {item.label} {#if item.hasSubMenu} {:else if item.link?.blank} {/if} {/snippet} {#if openMenuItem === item && item.hasSubMenu} {@render children?.(item, index)} {/if} {/each} ``` ## 使い方 ```svelte {#snippet children(item)} {#if item.id === 'menu1'} ここにメニュー1の要素が入ります。 {/if} {#if item.id === 'menu3'} ここにメニュー3の要素が入ります。 {/if} {/snippet} ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte {#snippet children(item)} {#if item.id === 'menu1'} ここにメニュー1の要素が入ります。 {/if} {#if item.id === 'menu3'} ここにメニュー3の要素が入ります。 {/if} {/snippet} ``` ### Direction メニューを寄せる方向を指定できます。 ```svelte {#snippet children(item)} {#if item.id === 'menu1'} ここにメニュー1の要素が入ります。 {/if} {#if item.id === 'menu3'} ここにメニュー3の要素が入ります。 {/if} {/snippet} ``` ### Current 現在表示中のページやコンテンツの位置を示します。 ```svelte {#snippet children(item)} {#if item.id === 'menu1'} ここにメニュー1の要素が入ります。 {/if} {#if item.id === 'menu3'} ここにメニュー3の要素が入ります。 {/if} {/snippet} ``` ### Disabled 操作できない状態です。 ```svelte {#snippet children(item)} {#if item.id === 'menu1'} ここにメニュー1の要素が入ります。 {/if} {#if item.id === 'menu3'} ここにメニュー3の要素が入ります。 {/if} {/snippet} ``` ### List リストを表示させることもできます。 ```svelte {#snippet children(_, index)} {@const list = menuMap[index]} {#each list as column} {#each column.items as item} {item.label} {#if item.description} {item.description} {/if} {/each} {/each} {/snippet} ``` ### With Icon メニューとアイコンを組み合わせた例です。 ```svelte {#snippet startContent(item)} {#if item.id === 'menu1' || item.id === 'menu2' || item.id === 'menu4'} {/if} {/snippet} {#snippet children(item)} {#if item.id === 'menu1'} ここにメニュー1の要素が入ります。 {/if} {#if item.id === 'menu4'} ここにメニュー4の要素が入ります。 {/if} {/snippet} ``` --- # Image Uploader ImageUploaderは、画像ファイルをアップロードする際に使用されるコンポーネントです。 選択済みの画像プレビューを表示し、スロットで未選択時と選択後のUIを切り替えられます。 ```svelte ``` ## プロパティ ImageUploaderは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`disabled`** | `boolean` | `false` | 入力を無効化します。操作できません。 | | **`isError`** | `boolean` | `false` | エラー状態を視覚的に示します。バリデーション用など。 | | **`src`** | `string \| null` | `null` | 選択された画像のURLをバインドします。 | | **`readonly`** | `boolean` | `false` | 表示専用の状態にします。操作できません。 | | **`clearable`** | `boolean` | `false` | 選択された画像をクリアできるかどうかを指定します。`true` に設定すると、選択された画像をクリアできるようになります。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新してください。 ```svelte:atoms/ImageUploader.svelte fileInput?.click()} ondrop={onDrop} ondragover={onDragOver} ondragleave={onDragLeave} disabled={inputAttributes.disabled}> {#if isEditable} {/if} {#if children} {@render children?.()} {:else if src} {:else} {/if} {#if src && clearable && !readonly && !inputAttributes.disabled} {/if} ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` ### Filled 画像が選択され、プレビューが表示されている状態です。 ```svelte ``` ### Error 入力内容に問題があり、エラーが表示されている状態です。 ```svelte {#if isError} ここにエラーメッセージが入ります。 {/if} ``` ### Disabled 操作不可の状態です。 ```svelte ``` ### Readonly 写真の選択ができない、表示のみの状態です。 ```svelte {#each images as src} {#if !src} {:else} {/if} {/each} ``` ### Clearable clearableプロパティをtrueに設定すると、選択済み画像をクリアするボタンが表示されます。 ```svelte ``` ### Slot 任意の見た目やレイアウトをスロットで上書きできます。 ```svelte {#if src} {:else} {/if} ``` --- # Input Inputは、1行のテキストやファイルなどを入力するためのコンポーネントです。 プレースホルダーやラベル、ボタンとの組み合わせなど、さまざまなユースケースに対応しています。 ```svelte ``` ## プロパティ Inputは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`type`** | `string` | `text` | 入力の種類を指定します。 | | **`placeholder`** | `string` || 入力欄に表示されるヒントテキストです。 | | **`readonly`** | `boolean` | `false` | 読み取り専用の状態にします。編集はできません。 | | **`disabled`** | `boolean` | `false` | 入力を無効化します。操作できません。 | | **`isError`** | `boolean` | `false` | エラー状態を視覚的に示します。バリデーション用など。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新してください。 ```svelte:atoms/Input.svelte {#if startContent} {@render startContent()} {/if} {#if endContent} {@render endContent()} {/if} ``` ## 使い方 ```svelte ``` --- ## サンプル ### Text 基本的なテキスト入力の状態です。 ```svelte ``` ### Readonly 内容を編集できない、読み取り専用の状態です。 ```svelte ``` ### Error 入力内容に問題があり、エラーが表示されている状態です。 ```svelte {#if isError} ここにエラーメッセージが入ります。 {/if} ``` ### Disabled 利用不可の状態です。 ```svelte ``` ### With Label 入力フィールドとラベルを組み合わせた例です。 ```svelte ラベル ここに補足文が入ります。 ``` ### With Button 入力フィールドとボタンを組み合わせた例です。 ```svelte ボタン ``` ### With Icon 入力フィールドとアイコンを組み合わせた例です。 ```svelte {#snippet startContent()} {/snippet} {#snippet endContent()} {/snippet} ``` ### Input Password 入力フィールドをパスワード入力欄として利用した例です。 ```svelte {#snippet endContent()} {#if type === 'text'} {:else} {/if} {/snippet} ``` ### Max Length 入力可能な最大文字数を設定し、超えるとエラーが表示されます。 ```svelte {#snippet startContent()} {/snippet} {#if isError} ここにエラーメッセージが入ります。 {/if} {value.length}/{maxlength} {#snippet endContent()} {/snippet} {#if isError} ここにエラーメッセージが入ります。 {/if} {#if isError} {overTexts} {:else} {value.length}/{maxlength} {/if} ``` --- # Input File InputFileは、ファイルをアップロードする際に使用されるコンポーネントです。 ```svelte ``` ## プロパティ InputFileは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`multiple`** | `boolean` | `false` | ファイルを複数選択できます。 | | **`disabled`** | `boolean` | `false` | 入力を無効化します。操作できません。 | | **`isError`** | `boolean` | `false` | エラー状態を視覚的に示します。バリデーション用など。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新してください。 ```svelte:atoms/InputFile.svelte ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` ### Error 入力内容に問題があり、エラーが表示されている状態です。 ```svelte {#if isError} ここにエラーメッセージが入ります。 {/if} ``` ### Disabled 利用不可の状態です。 ```svelte ``` ### Multiple 複数のファイルを選択できる状態です。 ```svelte ``` --- # Input Pin InputPinは、認証コードなど複数桁の数字を入力するためのコンポーネントです。 ```svelte ``` ## 機能 - 任意の桁数に対応しています - 入力すると自動で次の欄にフォーカスが移動します - バックスペースで前の欄に戻ります - 文字を貼り付けた場合は自動で分割して入力します - `autocomplete="one-time-code"` によりSMS認証コード等の自動入力も一部ブラウザでサポートされています ## プロパティ InputPinは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | ---------------- | ---------------------------------------------- | ------- | ---------------------------------------------------------------- | | **`digits`** | `number` | `6` | 入力する桁数を指定します。 | | **`value`** | `string` | `''` | 入力値。`bind:value` で取得できます。 | | **`isError`** | `boolean` | `false` | エラー状態を視覚的に示します。 | | **`autofocus`** | `boolean` | `true` | 最初のinput要素に自動でフォーカスします。 | | **`inputMode`** | `"text"` \| `"numeric"` | `"numeric"` | モバイルキーボードの種別を指定できます。 | | **`onInput`** | `(value: string, isComplete: boolean) => void` | | 入力時に呼ばれるコールバックです。 | | **`onComplete`** | `(value: string) => void` | | すべての桁が入力されたときに呼ばれるコールバックです。 | ## 補足 ドキュメント内のサンプルでは、複数のInputPINが並ぶため`autofocus={false}`を指定し、ページを開いたときに下部まで自動でスクロールされる現象を防いでいます。 実際の利用時にはデフォルトの`autofocus={true}`が推奨されます。 ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新してください。 ```svelte:atoms/InputPin.svelte {#each Array(digits) as _, index} onInputEvent(e, index)} onfocus={() => onFocus(index)} onkeydown={(e) => onKeydown(e, index)} onpaste={onPaste} oncompositionstart={() => (isComposing = true)} oncompositionend={() => onCompositionEnd(index)} /> {/each} ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` ### Error 入力内容に問題があり、エラーが表示されている状態です。 ```svelte {#if isError} ここにエラーメッセージが入ります。 {/if} ``` ### With Label `Label`コンポーネントと組み合わせて、 InputPinをフォーム内でラベル付き・補足文付きで使う例です。 ```svelte 認証コード SMSで送信された認証コードを入力してください。 ``` ### Digits `digits` プロパティを使うことで、 桁数を用途や要件に合わせて自由に変更できます。 ```svelte ``` ### Events イベントハンドラーの登録例です。 `onInput`・`onComplete`イベントの内容をリアルタイムに確認できます。 ```svelte 「{EXPECTED_VALUE}」と入力してください {#if isError} コードが一致しません。 {:else if code === EXPECTED_VALUE} コードが一致しました。 {/if} ``` --- # Label Labelは、主にフォームの入力項目にラベルを表示するためのコンポーネントです。 ```svelte ラベル ``` ## プロパティ Labelは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`disabled`** | `boolean` | `false` | 入力を無効化します。操作できません。 | | **`required`** | `boolean` | `false` | 必須の状態を表すことができます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Label.svelte {@render children?.()}{#if required}必須{/if} ``` ## 使い方 ```svelte ラベル ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ラベル ``` ### Disabled 利用不可の状態です。 ```svelte ラベル ``` ### Description 補足文と組み合わせることもできます。 ```svelte ラベル ここに補足文が入ります。 ``` ### With Input インプットと組み合わせることもできます。 ```svelte ラベル ここに補足文が入ります。 ``` ### Required 必須の状態を表すことができます。 ```svelte ラベル ``` --- # Menu Menuは、複数の選択肢や操作を一覧で表示し、ユーザーが項目を選択できるコンポーネントです。 主にアプリケーションのナビゲーションや、操作メニューとして利用されます。 項目数や押下時の処理を柔軟に設定できます。 ```svelte {#each menus as menu} {/each} ``` ## プロパティ Menuは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`item`** | `MenuItem` | | メニューの設定(項目やラベルなど)を渡します。 | | **`current`** | `string` | | 現在選択されているメニューの値を指定します。 | ### MenuItem | プロパティ名 | 型 | 説明 | | --- | --- | --- | | `id` | `string` | メニュー項目の一意なID | | `label` | `string` | メニューのラベル | | `options` | `MenuOptionProps[]` | サブメニューの設定(項目やラベルなど)を渡します | | `disabled` | `boolean` | 押下できるかどうか | | `onClick` | `(item: MenuItem) => void` | 押下時に発火するコールバック関数 | ### MenuOptionProps | プロパティ名 | 型 | 説明 | | --- | --- | --- | | `id` | `string` | メニュー項目の一意なID | | `label` | `string` | メニューのラベル | | `disabled` | `boolean` | 押下できるかどうか | | `onClick` | `(item: MenuOptionProps) => void` | 押下時に発火するコールバック関数 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Menu.svelte {#if current === item.id} {/if} {item.label} {#if item.options} {/if} {#if item.options && isOpen} {#each item.options || [] as option} onClickOption(option.onClick, option)} disabled={option.disabled}> {option.label} {/each} {/if} ``` ## 使い方 ```svelte {#each menus as menu} {/each} ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte {#each menus as menu} {/each} ``` ### Disabled メニュー項目が無効化されている状態です。 ```svelte {#each menus as menu} {/each} ``` ### onClick メニュー項目がクリックされたときに、コールバック関数で値を受け取ることができます。 ```svelte {#each menus as menu} {/each} ``` --- # Message Messageは、ユーザーに重要な情報や通知を伝えるためのコンポーネントです。 ```svelte ラベル ここに補足文が入ります。 ``` ## プロパティ Messageは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`variant`** | `string` | `default` | メッセージのスタイルを指定します。`default`, `error`, `warning`, `success` のいずれかを選択できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:items/Message.svelte {#if variant === 'error'} {:else if variant === 'warning'} {:else if variant === 'success'} {:else} {/if} {@render children?.()} ``` ## 使い方 ```svelte ラベル ここに補足文が入ります。 ``` --- ## サンプル ### Default 緊急性や重要度の高くない、一般的な情報を表示します。 ```svelte ラベル ここに補足文が入ります。 ``` ### Variants メッセージのタイプを変更することもできます。 ```svelte ラベル ここに補足文が入ります。 ラベル ここに補足文が入ります。 ラベル ここに補足文が入ります。 ラベル ここに補足文が入ります。 ``` --- # Pagination Paginationは、コンテンツを複数のページに分割し、ユーザーが異なるページへ移動できるようにするコンポーネントです。 ```svelte ``` ## プロパティ Paginationは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`maxPage`** | `number` | `0` | 最大ページ数を指定します。 | | **`maxVisible`** | `number` | `7` | 表示する最大ページ項目数(省略記号含む)。3以下のときは省略記号なしで表示されます。 | | **`currentPage`** | `number` || 現在のページ番号です。 | | **`prevLabel`** | `string` | `前へ` | 「前へ」ボタンの表示ラベルです。 | | **`nextLabel`** | `string` | `次へ` | 「次へ」ボタンの表示ラベルです。 | | **`showEllipsis`** | `boolean` | `true` | 省略記号を表示するかどうかを制御します。 | | **`disabled`** | `boolean` | `false` | 指定された場合は選択不可になります。 | | **`onChangePage`** | `(page: number) => void` || ページ番号がクリックされた際に呼び出される関数です。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Pagination.svelte { const prev = findPrevEnabledPage(currentPage, disabled); if (prev) onChangePage?.(prev); }} disabled={!findPrevEnabledPage(currentPage, disabled)} > {prevLabel} {#each pages as page} {#if page === 'ellipsis'} {:else} {#key page} { if (!disabled) onChangePage?.(page); }} {disabled} aria-current={page === currentPage && !disabled ? 'page' : undefined} > {page} {/key} {/if} {/each} { const next = findNextEnabledPage(currentPage, maxPage, disabled); if (next) onChangePage?.(next); }} disabled={!findNextEnabledPage(currentPage, maxPage, disabled)} > {nextLabel} ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 基本的なページネーションのスタイルです。前後ボタンとページ番号を表示します。 ```svelte ``` ### Disabled 選択不可の状態です。 ```svelte ``` ### OnChangePage ページ番号をクリックすると `onChangePage` が発火し、選択されたページ番号を親コンポーネントに通知します。 これにより、外部でページ状態を管理できます。 ```svelte ``` --- # Popover Popoverは、ユーザーのアクションに応じて一時的にコンテンツを表示するコンポーネントです。 アイコンやボタンなどの要素をトリガーとして使用し、追加情報や操作オプションを提供します。 ```svelte ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} Popover を開く {/snippet} ``` ## プロパティ Popoverは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --------------- | ------------------------ | -------------- | ------------------------------------------ | | **`placement`** | `string` | `top` | 表示する位置を指定します。top, bottom, left, right のいずれかを指定できます。 | | **`align`** | `string` | `start` | 吹き出しの位置を指定できます。start, center, end のいずれかを指定できます。 | | **`show`** | `boolean` | `false` | 表示するかどうかを制御します。 | | **`hideArrow`** | `boolean` | `false` | 矢印を非表示にするかどうかを指定します。 | | **`offset`** | `{x: number; y: number}` | `{x: 0, y: 0}` | 表示位置を任意の方向にずらすための値です。 | | **`duration`** | `number` | `380` | 表示・非表示の速さを指定できます。 | | **`noFollow`** | `boolean` | `false` | 追従させるかどうかを制御できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/Popover.svelte {@render triggerContent(toggleShow)} {#if show} {@render children?.()} {#if hideArrow === false} {/if} {/if} ``` ## 使い方 ```svelte ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} Popover を開く {/snippet} ``` --- ## サンプル ### Default Defaultでの表示です。 ```svelte ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} Popover を開く {/snippet} ``` ### Placement / Align PlacementとAlignの組み合わせによる表示例です。 ```svelte ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} top/start {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} top/center {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} top/end {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} left/start {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} left/center {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} left/end {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} right/start {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} right/center {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} right/end {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} bottom/start {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} bottom/center {/snippet} ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} bottom/end {/snippet} ``` ### Hide Arrow 矢印を非表示にすることができます。 ```svelte ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} Popover を開く {/snippet} ``` ### No Follow noFollow を指定すると、一度表示されたポップオーバーが対象要素に追従しなくなります。 そのため、スクロールしてもポップオーバーの表示位置は固定され、対象要素と一緒に移動しません。 スクロール追従が不要なケースや、パフォーマンスを重視したい場合に活用できます。 ```svelte ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} Popover を開く {/snippet} ``` ### Offset Offsetを指定することで、表示位置を調整することができます。 ```svelte ラベル ここに補足文が入ります {#snippet triggerContent(toggle)} Popover を開く {/snippet} ``` ### With DropdownMenu DropdownMenuと組み合わせた例です。 ```svelte {#snippet triggerContent(toggle)} Popover を開く {/snippet} ``` --- # Progress Bar ProgressBarは、処理の進行状況を視覚的に示すコンポーネントです。 主に、完了までの時間が予測できるタスクに使用されます。 ```svelte ``` ## プロパティ ProgressBarは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`value`** | `number` | `0` | 進行状況を表現できます。| | **`max`** | `number` | `100` | 進行状況の最大値を設定できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/ProgressBar.svelte ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 進行状況をバーのみで表示する、最も基本的なスタイルです。 ```svelte ``` ### With Label Progress Bar、ラベル、進行度を組み合わせた例です。 ```svelte ラベル {value}% ``` --- # Radio Radioは、複数の選択肢の中から、1つだけを選択する際に使用されるコンポーネントです。 ```svelte 選択肢 ``` ## プロパティ Radioは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`isError`** | `boolean` | `false` | エラー状態を表現できます。| | **`disabled`** | `boolean` | `false` | 入力を無効化します。操作できません。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Radio.svelte ``` ## 使い方 ```svelte 選択肢 ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte 選択肢 ``` ### Error 入力内容に問題があり、エラーが表示されている状態です。 ```svelte 選択肢 ``` ### Disabled 利用不可の状態です。 ```svelte 選択肢 ``` ### Group `bind:group`を使うことで、複数のラジオボタンをグループ化し、同じ値を共有できます。 ```svelte 選択肢1 選択肢2 選択肢3 ``` --- # Segmented Control SegmentedControlは、関連する選択肢をグループ化し、1つを選択することで表示内容や状態を切り替えるコンポーネントです。 ```svelte ``` ## プロパティ SegmentedControlは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`segmentedControls`** | `SegmentedControlItem[]` || セグメント項目の配列を渡します。 | | **`value`** | `number \| string` || 現在選択されているセグメントのValueを指します。 | | **`onChange`** | `(segmentedControl: SegmentedControlItem) => void` || 選択されたときのコールバック関数。 | | **`segmentContent`** | `Snippet<[SegmentedControlItem]>` || セグメントをカスタム描画するコンテンツ | ### SegmentedControlItem SegmentedControlItemは、セグメント内の情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`id`** | `number \| string` || セグメント項目のidです。| | **`label`** | `string` || セグメントの項目名です。 | | **`disabled`** | `boolean` | `false` | セグメントを無効化します。操作できません。 | | **`value`** | `boolean` || 現在選択されているセグメントのValueを指します。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新してください。 ```svelte:atoms/SegmentedControl.svelte {#each segmentedControls as segmentedControl} {@const is_selected = value ? segmentedControl.id === value : segmentedControl.value === true} onChangeSegmentedControl(segmentedControl)}> {#if segmentContent} {@render segmentContent(segmentedControl)} {:else} {segmentedControl.label} {/if} {/each} ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` ### Value Valueを指定することで、任意のセグメントを選択状態にすることも可能です。 ```svelte ``` ### OnChange コールバック関数で値を受け取ることができます。 ```svelte ``` ### Snippet Snippetも渡すことができます。 ```svelte {#snippet segmentContent(item)} {#if item.id === 1} タブテキスト {/if} {#if item.id === 2} タブテキスト {/if} {#if item.id === 3} タブテキスト {/if} {/snippet} ``` ### Disabled 利用不可の状態です。 ```svelte ``` --- # Select Selectは、選択肢をドロップダウンメニューで表示するコンポーネントです。 ```svelte ``` ## プロパティ Selectは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`options`** | `SelectOptionItem[]` || 選択肢の配列です。 | | **`size`** | `string` | `medium` | セレクトボックスの高さを指定できます。small, medium, large のいずれかを指定できます。 | | **`placeholder`** | `string` || セレクトボックスが空のときに表示されるプレースホルダーテキストです。 | | **`disabled`** | `boolean` | `false` | セレクトボックスを無効化します。無効化されたセレクトボックスは選択できません。 | | **`isError`** | `boolean` | `false` | エラー状態を視覚的に示します。バリデーション用など。 | | **`clearable`** | `boolean` | `false` | 現在選択されている値をクリアできるかどうかを指定します。`true` に設定すると、選択された値をクリアできるようになります。 | | **`onChange`** | `(value: string) => void` || 選択されたときのコールバック関数。 | ### SelectOptionItem SelectOptionItemは、各選択肢の情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`label`** | `string` || 選択肢のラベルです。| | **`value`** | `string` || 選択肢の値です。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Select.svelte onSelect(e)} role="combobox" tabindex={disabled ? -1 : 0} onkeydown={(e) => onKeydownSelect(e)} aria-controls={id} aria-expanded={isOpen} bind:this={selectBox}> {#if optionContent} {@render optionContent({ option: selectedOption, value, index: -1 })} {:else} {#if selectedOption} {selectedOption.label} {:else} {placeholder} {/if} {/if} {#if value && clearable} onClear(e)} tabindex="-1"> {:else} {/if} {#if isOpen} {#if showScrollButtons} {#if !isScrolledToTop} startScroll('up')} onmouseleave={stopScroll}> {/if} {#if !isScrolledToBottom} startScroll('down')} onmouseleave={stopScroll}> {/if} {/if} {#each options as option, index} onSelectValue(option.value)} onkeydown={(e) => onKeydown(e, option.value)} onmouseenter={(e) => onMouseenterFocus(e)} onmouseleave={(e) => onMouseleaveBlur(e)} tabindex="0" role="option" aria-selected={option.value === value} data-value={option.value}> {#if optionContent} {@render optionContent({ option, value, index })} {:else} {#if option.value === value} {/if} {option.label} {/if} {/each} {/if} ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` ### Error 選択内容に問題があり、エラーが表示されている状態です。 ```svelte {#if isError} ここにエラーメッセージが入ります。 {/if} ``` ### Disabled 利用不可の状態です。 ```svelte ``` ### Scroll 選択肢が一定量以上ある場合は、上下にスクロールボタンが表示されます。 ```svelte ``` ### OnChange コールバック関数で値を受け取ることができます。 ```svelte ``` ### OptionContent 選択肢の表示内容をカスタマイズできます。 ```svelte {#snippet optionContent({ option })} {#if option} {option.label} {:else} 選択してください {/if} {/snippet} ``` ### Clearable clearable に true を指定することで、値をクリアできるようになります。 ```svelte {#snippet optionContent({ option, value })} {#if option} {#if option.value === value} {/if} {option.label} {:else} 未選択 {/if} {/snippet} ``` ### Sizes size を指定することで、セレクトボックスのサイズを変更できます。small, medium, large のいずれかを指定してください。 ```svelte ``` --- # Separator Separatorは、コンテンツを分ける際に使用するコンポーネントです。 ```svelte 上のコンテンツ 下のコンテンツ ``` ## プロパティ Separatorは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`direction`** | `string` | `horizontal` | 線の方向を指定します。`horizontal`, `vertical` のいずれかを選択できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Separator.svelte ``` ## 使い方 ```svelte 上のコンテンツ 下のコンテンツ ``` --- ## サンプル ### Horizontal 水平方向に区切る線です。 ```svelte 上のコンテンツ 下のコンテンツ ``` ### Vertical 垂直方向に区切る線です。 ```svelte 左のコンテンツ 右のコンテンツ ``` --- # Slider Sliderは、指定された数値の範囲から値を選択するためのコンポーネントです。 ```svelte ``` ## プロパティ Sliderは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`max`** | `number` | `100` | 最大値を指定します。 | | **`min`** | `number` | `0` | 最小値を指定します。 | | **`step`** | `number` | `1` | stepを指定します。 | | **`value`** | `number` | `0` | 初期値を指定します。 | | **`trackClass`** | `string` | `0` | sliderのtrackのクラスを指定します。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Slider.svelte {@render minContent?.()} {@render maxContent?.()} ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default デフォルトの状態です。 ```svelte ``` ### With RangeLabel 最小値と最大値を数値で表示するスライダーです。 ```svelte {#snippet minContent()} {min} {/snippet} {#snippet maxContent()} {max} {/snippet} 現在の数値:{value} ``` ### With Icon 最小値と最大値をアイコンで表示するスライダーです。 ```svelte {#snippet minContent()} {/snippet} {#snippet maxContent()} {/snippet} 現在の数値:{value} ``` ### Step stepの数値を指定できます。 ```svelte {#snippet minContent()} {min} {/snippet} {#snippet maxContent()} {max} {/snippet} 現在の数値:{value} ``` --- # Sortable List Sortable Listは、ドラッグアンドドロップによって並び替えが可能なコンポーネントです。 ```svelte {#snippet children(item)} {item.name} {/snippet} ``` ## プロパティ Sortable Listは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`items`** | `SortableItem[]` | | 並び替え対象のアイテム配列。 | | **`dragHandleSelector`** | `string` | | ドラッグ開始を許可するハンドル要素のセレクタを指定します。未指定の場合は行全体でドラッグできます。 | | **`children`** | `Snippet<[T]>` | | 各アイテムの描画に使用するスニペットを指定します。 | | **`emptyContent`** | `Snippet` | | Empty状態の描画に使用するスニペットを指定します。 | | **`onUpdate`** | `(items: SortableItem[], detail: SortableUpdateDetail) => void` | | アイテム順序が更新されるたびに呼び出されます。 | **`onSorted`** | `(items: SortableItem[]) => void` | | ドラッグ操作終了時に並び替えが発生していた場合に呼び出されます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/SortableList.svelte {#snippet sortableItemWrapper(item: SortableItem, i: number = -1)} onPointerDown(i, e)}> {@render children(item.item)} {/snippet} {#each items as item, i (item[ITEM_ID_KEY])} {@render sortableItemWrapper(item, i)} {:else} {#if emptyContent} {@render emptyContent()} {/if} {/each} {#if isDragging && draggingIndex !== -1 && items[draggingIndex]} {@render sortableItemWrapper(items[draggingIndex], -1)} {/if} ``` ## 使い方 ```svelte {#snippet children(item)} {item.name} {/snippet} ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte {#snippet children(item)} {item.name} {/snippet} ``` ### DragHandler ドラッグ操作を開始する要素(ハンドル)を限定する例です。 ```svelte {#snippet children(item)} {/snippet} ``` ### Empty Snippet を利用して、Empty 状態の表示を任意にカスタマイズできます。 ```svelte {#snippet children(item)} {/snippet} {#snippet emptyContent()} アイテムがありません {/snippet} ``` ### EventHandlers 各種イベントの例です。 ```svelte {#snippet children(item)} {item.label} {/snippet} ``` --- # Spinner Spinnerは、アニメーションを使用して、処理中であることを視覚的に示します。 ```svelte ``` ## プロパティ Spinnerは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`size`** | `string` | `3rem` | サイズを指定します。 | | **`color`** | `string` | `color-primary` | カラーを指定します。カラーコードに対応します。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Spinner.svelte ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 主にタスクが終了するまでの時間が不明な場合に使用されます。 ```svelte ``` ### Color ``color``の指定で色が変えられます。 ```svelte ``` ### Sizes ``size``の指定で大きさが変えられます。 ```svelte ``` --- # Stepper Stepperは入力フォームや申請フローなど、ステップごとの進捗状況を視覚的に示しながら操作をガイドするためのコンポーネントです。 ```svelte 戻る 次へ ``` ## プロパティ Stepperは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`steps`** | `StepperStatus` | | 表示するSteps | | **`isEquallySpaced`** | `boolean` | `true` | 等間隔か。初期値は等間隔 | | **`direction`** | `StepperDirection` | `horizontal` | 表示向き。初期値はhorizontal(横表示) | | **`finishedIcon`** | `Component` | `Check` | finishedステータス時に表示するアイコン。初期はCheck | | **`errorIcon`** | `Component` | `X` | errorステータス時に表示するアイコン。初期はX | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Stepper.svelte {#if isHorizontal} {#each steps as step, i} {#if step.startContent} {@render step.startContent()} {/if} {@render stepCircle({ index: i, status: step.status })} {#if step.endContent} {@render step.endContent()} {/if} {/each} {:else} {#each steps as step, i} {#if step.startContent} {@render step.startContent()} {/if} {@render stepCircle({ index: i, status: step.status })} {#if step.endContent} {@render step.endContent()} {/if} {/each} {/if} {#snippet stepCircle({ index, status })} {#if resolveStatusIcon(status)} {@const StatusIcon = resolveStatusIcon(status)} {:else} {index + 1} {/if} {/snippet} ``` ## 使い方 ```svelte 戻る 次へ ``` --- ## サンプル ### Default 3つのステップをデフォルト設定である横向き・等間隔で表示したパターンです。 ```svelte 戻る 次へ ``` ### HorizontalStartContent 3つのステップをデフォルト設定である横向き・等間隔で表示し上にコンテンツを表示したパターンです。 ```svelte {#snippet startContentCurrent()} ラベル ここに補足文が入ります。 {/snippet} {#snippet startContentUpcoming()} ラベル ここに補足文が入ります。 {/snippet} ``` ### HorizontalEndContent 3つのステップをデフォルト設定である横向き・等間隔で表示し下にコンテンツを表示したパターンです。 ```svelte {#snippet endContentCurrent()} ラベル ここに補足文が入ります。 {/snippet} {#snippet endContentUpcoming()} ラベル ここに補足文が入ります。 {/snippet} ``` ### HorizontalBothContents 3つのステップをデフォルト設定である横向き・等間隔で表示し上下にコンテンツを表示したパターンです。 ```svelte {#snippet bothContentCurrent()} ラベル ここに補足文が入ります。 {/snippet} {#snippet bothContentUpcoming()} ラベル ここに補足文が入ります。 {/snippet} ``` ### Vertical 3つのステップを縦向き・等間隔で表示したパターンです。 ```svelte ``` ### VerticalStartContent 3つのステップを縦向き・等間隔で表示し左にコンテンツを表示したパターンです。 ```svelte {#snippet startContentCurrent()} ラベル ここに補足文が入ります。 {/snippet} {#snippet startContentUpcoming()} ラベル ここに補足文が入ります。 {/snippet} ``` ### VerticalEndContent 3つのステップを縦向き・等間隔で表示し右にコンテンツを表示したパターンです。 ```svelte {#snippet endContentCurrent()} ラベル ここに補足文が入ります。 {/snippet} {#snippet endContentUpcoming()} ラベル ここに補足文が入ります。 {/snippet} ``` ### VerticalBothContents 3つのステップを縦向き・等間隔で表示し左右にコンテンツを表示したパターンです。 ```svelte {#snippet bothContentCurrent()} ラベル ここに補足文が入ります。 {/snippet} {#snippet bothContentUpcoming()} ラベル ここに補足文が入ります。 {/snippet} ``` ### HorizontalSize 3つのステップで、横向きでサイズを指定したパターンです。 ```svelte {#snippet endContent()} ラベル ここに補足文が入ります。 {/snippet} {#snippet endContentUpcoming()} ラベル ここに補足文が入ります。 {/snippet} ``` ### VerticalSize 3つのステップで、縦向きでサイズを指定したパターンです。 ```svelte {#snippet endContent()} ラベル ここに補足文が入ります。 {/snippet} {#snippet endContentUpcoming()} ラベル ここに補足文が入ります。 {/snippet} ``` ### Error 3つのステップのうち、エラー状態を含むパターンです。 ```svelte {#snippet endContent()} ラベル ここに補足文が入ります。 {/snippet} {#snippet endContentFinished()} ラベル ここに補足文が入ります。 {/snippet} {#snippet endErrorContent()} ラベル ここにエラーメッセージが入ります。 {/snippet} ``` ### Upcoming 3つのステップで、2番目のステップをスキップしているパターンです。 ```svelte {#snippet endContent()} ラベル ここに補足文が入ります。 {/snippet} {#snippet endContentUpcoming()} ラベル ここに補足文が入ります。 {/snippet} ``` --- # Switch Switchは、有効または無効の状態を表示したり切り替えたりするために使用されるコンポーネントです。 ```svelte ``` ## プロパティ Switchは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`checked`** | `boolean` | `false` | チェック状態の値、`bind:checked` による双方向バインディングが可能です | | **`disabled`** | `boolean` | `false` | 指定するとグレーアウトされ、クリック不可になります。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Switch.svelte ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` ### Disabled 利用不可の状態です。 ```svelte ``` --- # Table Tableは、データを行と列で構造化して表示する際に使用されるコンポーネントです。 データを比較・分析しやすくするために設計されており、ヘッダー、行、列などの要素を含みます。 ```svelte {#each headItems as item} {item} {/each} {#each dataItems as data} {#each data as item} {item} {/each} {/each} 合計 テーブルデータ ``` ## プロパティ Tableは、以下のプロパティをサポートしています。 ### TableHead.TableHeadProps | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`size`** | `boolean` | `medium` | `th`のサイズを指定します。`small`, `medium`, `large` のいずれかを選択できます。 | ### TableData.TableDataProps | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`size`** | `boolean` | `medium` | `td`のサイズを指定します。`small`, `medium`, `large` のいずれかを選択できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Table.svelte {@render children?.()} ``` ```svelte:atoms/TableHead.svelte {@render children?.()} ``` ```svelte:atoms/TableData.svelte {@render children?.()} ``` ## 使い方 ```svelte {#each headItems as item} {item} {/each} {#each dataItems as data} {#each data as item} {item} {/each} {/each} 合計 テーブルデータ ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte {#each headItems as item} {item} {/each} {#each dataItems as data} {#each data as item} {item} {/each} {/each} 合計 テーブルデータ ``` ### UseComponent セル内にボタンやアイコンなどの他のコンポーネントを配置して、よりリッチなテーブルを作成することも可能です。 ```svelte {#each headItems as item} {item} {/each} {#each dataItems as data} {data.actionLabel} {#each data.items as item} {item} {/each} {/each} 合計 テーブルデータ ``` --- # Tabs Tabsは、関連するコンテンツをグループ化し、タブを切り替えることで表示内容を変更できるコンポーネントです。 ```svelte ``` ## プロパティ Tabsは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`tabs`** | `TabsItem[]` || タブ項目の配列を渡します。 | | **`currentTabId`** | `number \| string` || 現在選択されているタブのIDを指します。 | ### TabsItem TabsItemは、タブ内の情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`id`** | `number \| string` || タブ項目のidです。| | **`label`** | `string` || タブの項目名です。 | | **`disabled`** | `boolean` | `false` | タブを無効化します。操作できません。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新してください。 ```svelte:atoms/Tabs.svelte {#each tabs as tab} onChangeTab(tab)}> {tab.label} {#if currentTabId === tab.id} {/if} {/each} ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` ### Current currentTabIdを指定することで、任意のタブを選択状態にすることも可能です。 ```svelte ``` ### Disabled 利用不可の状態です。 ```svelte ``` --- # Textarea Textareaは、複数行のテキストを入力する際に使用されるコンポーネントです。 ```svelte ``` ## プロパティ Textareaは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`isError`** | `boolean` | `false` | true の場合エラー時のスタイルを適用します。 | | **`readonly`** | `boolean` | `false` | 指定すると読み取り専用の状態です。 | | **`disabled`** | `boolean` | `false` | 指定するとグレーアウトされ、クリック不可になります。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Textarea.svelte ``` ## 使い方 ```svelte ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte ``` ### Readonly 内容を編集できない、読み取り専用の状態です。 ```svelte ``` ### Error 入力内容に問題があり、エラーが表示されている状態です。 ```svelte {#if isError} ここにエラーメッセージが入ります。 {/if} ``` ### Disabled 利用不可の状態です。 ```svelte ``` ### With Label ラベルと組み合わせることも可能です。 ```svelte ラベル ここに補足文が入ります。 ``` ### Max Length 入力可能な最大文字数を設定し、超えるとエラーが表示されます。 ```svelte {#if isError} ここにエラーメッセージが入ります。 {/if} {value.length}/{maxlength} {#if isError} ここにエラーメッセージが入ります。 {/if} {#if isError} {overTexts} {:else} {value.length}/{maxlength} {/if} ``` --- # Toast Toastは、ユーザーに一時的なメッセージを通知するコンポーネントです。 アクション部分は`snippet action()`で差し替えられ、6方向の表示位置に対応しています。 位置に応じてスライド方向が変化するアニメーションで表示されます。 ```svelte addToast({ label: 'ラベル', description: 'ここに補足文が入ります' })}>Show toast {#each toasts as toast, i (toast.key)} 3 ? 'hidden' : ''}" style="transform: scale({Math.max(0.3, 1 - (toasts.length - i) / 10)}) translateY({-((toasts.length - i) * 10)}px);"> {toast.label} {toast.description} {/each} ``` ## プロパティ Toastは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`position`** | `string` | `top-center` | 表示位置を指定できます。`top-right`, `top-left`, `bottom-right`, `bottom-left`, `top-center`, `bottom-center` のいずれかを選択できます。 | | **`duration`** | `number` | `3000` | 自動で閉じるまでの時間をミリ秒で指定します。 | | **`keepOpen`** | `boolean` | `false` | trueを指定することでトーストを自動で閉じなくします。 | | **`hideCloseButton`** | `boolean` | `false` | trueを指定すると閉じるボタンを非表示にします。 | | **`transitionParams`** | `FlyParams` | `{duration: 200, x: 0, y: 0}` | アニメーションの時間・水平方向移動距離・垂直方向移動距離を指定できます。 | | **`closeButtonClass`** | `string` || 閉じるアイコンのクラスを指定できます。 | | **`open`** | `boolean` | `true` | トーストの開閉状態を制御します。 | | **`onClose`** | `() => void` || トーストが閉じられたときに呼ばれるハンドラです。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:items/Toast.svelte {@render children?.()} {#if action || !hideCloseButton} {@render action?.()} {#if !hideCloseButton} {/if} {/if} ``` ## 依存コンポーネント Toastを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](https://rabeeui.com/docs/components/button) ## 使い方 ```svelte addToast({ label: 'ラベル', description: 'ここに補足文が入ります' })}>Show toast {#each toasts as toast, i (toast.key)} 3 ? 'hidden' : ''}" style="transform: scale({Math.max(0.3, 1 - (toasts.length - i) / 10)}) translateY({-((toasts.length - i) * 10)}px);"> {toast.label} {toast.description} {/each} ``` --- ## サンプル ### Auto Close `duration`に指定した時間が経過後に自動でToastを閉じます。 ```svelte addToast({ label: 'ラベル', description: 'ここに補足文が入ります' })}>Show toast {#each toasts as toast, i (toast.key)} 3 ? 'hidden' : ''}" style="transform: scale({Math.max(0.3, 1 - (toasts.length - i) / 10)}) translateY({-((toasts.length - i) * 10)}px);"> {toast.label} {toast.description} {/each} ``` ### Auto Close with Action 自動で閉じるほか、 閉じるボタンによって閉じることができます。 ```svelte (open = true)}>Show toast {#if open} ラベル ここに補足文が入ります ボタン {/if} ``` ### Persistent `keepOpen` を `true` にすると、操作されるまで表示され続けます。 ```svelte (open = true)}>Show toast {#if open} ラベル ここに補足文が入ります (open = false)}>ボタン {/if} ``` ### Positions 6方向の表示位置に対応しています。 ```svelte (topRight = true)}>top-right (bottomRight = true)}>bottom-right (topLeft = true)}>top-left (bottomLeft = true)}>bottom-left (topCenter = true)}>top-center (bottomCenter = true)}>bottom-center {#if topRight} top-right {/if} {#if bottomRight} bottom-right {/if} {#if topLeft} top-left {/if} {#if bottomLeft} bottom-left {/if} {#if topCenter} top-center {/if} {#if bottomCenter} bottom-center {/if} ``` --- # Tooltip Tooltipは、ユーザーが要素にカーソルを合わせた際に補足情報を表示するコンポーネントです。 ```svelte ツールチップ ``` ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Tooltip.svelte {@render children?.()} ``` ## 使い方 ```svelte ツールチップ ``` --- ## サンプル ### Default 補足情報を表示している状態です。 ```svelte ツールチップ ``` ### With Button ボタンと組み合わせることもできます。 ```svelte ツールチップ ``` --- # Checkbox Card CheckboxCardは、チェックボックスとカードUIを組み合わせた選択UI向けコンポーネントです。 ## プロパティ CheckboxCardは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`children`** | `Snippet<[]>` || カード内に表示するコンテンツ | | **`group`** | `any[]` || 選択値(`bind:group` で双方向バインド) | | **`isError`** | `boolean` | `false` | `true` の場合はエラースタイルを適用します。 | | **`checked`** | `boolean` || チェック状態を制御します。 | | **`value`** | `any` || チェックボックスの値です。 | | **`indeterminate`** | `boolean` | `false` | 一部のみ選択された状態や、不確定な状態を表します。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/CheckboxCard.svelte {@render children()} ``` ## 依存コンポーネント CheckboxCardを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Checkbox](https://rabeeui.com/docs/components/checkbox) ## 使い方 ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ### Error 入力内容に問題があり、エラーが表示されている状態です。 ### Disabled 利用不可の状態です。 ### GroupText `bind:group`を使うことで、複数のチェックボックスをグループ化し、同じ値を共有できます。 ### GroupImage `bind:group`を使うことで、複数のチェックボックスをグループ化し、同じ値を共有できます。 --- # Form Form は、Webサイトやアプリケーションでユーザー入力を受け取り、送信するためのコンポーネントです。 メールアドレスやパスワードなどの入力欄をまとめ、バリデーション(required / pattern など)や送信処理を一元管理します。 ## 依存コンポーネント Formを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](https://rabeeui.com/docs/components/button) - [Calendar](https://rabeeui.com/docs/components/calendar) - [Card](https://rabeeui.com/docs/components/card) - [CheckBox](https://rabeeui.com/docs/components/checkbox) - [ImageUploader](https://rabeeui.com/docs/components/imageuploader) - [Input](https://rabeeui.com/docs/components/input) - [Label](https://rabeeui.com/docs/components/label) - [Radio](https://rabeeui.com/docs/components/radio) - [Select](https://rabeeui.com/docs/components/select) - [Textarea](https://rabeeui.com/docs/components/textarea) ## サンプル ### Login ユーザーがアカウントにサインインするためのページです。 ### Profile ユーザー自身の情報を表示・編集するためのページです。 ### Contact ユーザーが運営者へ質問や要望、問題報告を送るためのページです。 --- # Header Headerは、Webサイトやアプリケーションのページ上部に表示されるコンポーネントです。 ナビゲーションやメニューなどの主要な要素を表示します。 ## プロパティ Headerは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`desktopMenus`** | `GlobalNavigationItem[]` |[]| PC用のメニューとして表示する値の配列です。 | | **`mobileMenus`** | `MenuItem[]` |[]| SP用のメニューとして表示する値の配列です。 | | **`currentIndex`** | `number` || 現在選択されているメニューを示すハイライト用の数値です。 | | **`profileImgUrl`** | `string` |''| プロフィール画像のURLです。 | | **`placeholder`** | `string` |''| 検索窓のプレースホルダーです。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/Header.svelte {#snippet children(item, index)} {@render desktopMenusChildren?.(item, index)} {/snippet} {#if mobileMenus?.length} {#snippet children()} (isOpen = false)}> {#each mobileMenus as menu, index} {/each} {/snippet} {/if} {#snippet startContent()} {/snippet} {#if profileImgUrl} {:else} {/if} ``` ## 依存コンポーネント Headerを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](https://rabeeui.com/docs/components/button) - [Drawer](https://rabeeui.com/docs/components/drawer) - [GlobalNavigation](https://rabeeui.com/docs/components/globalnavigation) - [Input](https://rabeeui.com/docs/components/input) - [Menu](https://rabeeui.com/docs/components/menu) ## 使い方 ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 --- # Markdown Markdownは、Markdownコンポーネント内のHTML要素に対し、一貫したデザインを適用するためのスタイルのセットです。 ## プロパティ Markdownは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`text`** | `string` || マークダウンテキストです。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/Markdown.svelte {@html html} ``` ## 使い方 --- ## サンプル ### Default Markdown の基本的な表示サンプルです。 --- # Rabee UI とは Rabee UIは、Svelte × Tailwind CSS で構築された、カスタマイズを前提としたUIコンポーネント集です。 必要なUIコンポーネントのコードをプロジェクトにコピーするだけで、素早く簡単にUIを構築できます。  各コンポーネントは、プロジェクトのスタイルや設計思想に合わせて自由に調整できるよう設計されています。 Tailwindのユーティリティクラスを組み合わせることで、統一感のあるデザインを保ちながら柔軟に拡張できます。 > 「UIコンポーネントの種を育てる」ように、自分のプロダクトに合わせて自由にアレンジできます。 ## 特徴 ### Svelte × Tailwind CSSでカスタマイズ - Tailwindクラスの組み合わせで柔軟に調整可能 - 設定ファイルを上書きしてデザイントークンを一括変更 ### コンポーネント単位で使える - ライブラリではなく「コピー&ペースト」方式 - 必要なUIコンポーネントだけを選んで導入 ### ダークモード・ライトモード対応 - すべてのコンポーネントが両モードに標準対応 - プロダクト立ち上げからコストを抑えて実装可能 ### Figma [Figma Community](https://www.figma.com/community/file/1479376628733075423) | 特徴 | 詳細 | | :--- | :--- | | Variables対応 | カラートークンやスペーシングなどを変数化しており、テーマ切替や一括調整が容易 | | コミュニティ公開 | Figma Community で公開されており、誰でも参照できる | ### コードの使用例 ``` ボタン ``` ## Markdown表現例 #### テキスト装飾 これは*Italic*です ~~これはstrikethroughです~~ **これはBoldです** ``これはInline Codeです`` 1. これはListです 2. これはListです 3. これはListです - [ ] これはチェックボックスです - [ ] これはチェックボックスです - [ ] これはチェックボックスです --- # Notification Notification は、お知らせ(通知)一覧を表示するコンポーネントです。 未読・既読を分けて表示でき、未読と既読の両方が存在する場合は区切りとして「新規」を表示します。 各通知のレイアウトは itemContent を渡して自由に構成できます。 ## プロパティ Notificationは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`notifications`** | `NotificationItem[]` || 表示する通知一覧です。| | **`itemContent`** | `Snippet<[NotificationItem]>` || 表示内容を描画する Snippet です(引数に notification を受け取ります)。| NotificationItemは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`unread`** | `boolean` | | 未読かどうかを表します。 | | **`message`** | `string` | | 通知本文です。 | | **`createdAt`** | `string` | | 作成日です。 | | **`icon`** | `any` | | アイコンコンポーネントです。 | | **`iconImage`** | `string` | | アイコン画像 URL です。 | | **`onClick`** | `() => void` | | クリック時に呼ばれるコールバック関数です。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/Notification.svelte {#if notifications.length} {#each sorted as notification, index} {#if index === firstReadIndex && firstReadIndex !== 0} 新規 {/if} notification.onClick?.()}> {@render itemContent(notification)} {/each} {:else} まだ通知がありません {/if} ``` ## 使い方 --- ## サンプル ### Default Notification の基本的な表示サンプルです。 各通知の表示内容は itemContent の Snippet で構成し、アイコン・アバター、本文、日時などを自由にレイアウトできます。 ### Read-Unread Notification の 未読/既読表示のサンプルです。 未読の通知は上側にまとめて表示し、既読の通知は下側に表示します。 未読と既読の両方が存在する場合は、間に「新規」の区切りを表示します。 --- # Radio Card RadioCardは、ラジオボタンとカードUIを組み合わせた選択UI向けコンポーネントです。 ## プロパティ RadioCardは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`children`** | `Snippet<[]>` | | カード内に表示するコンテンツ | | **`group`** | `any` | | 選択値(`bind:group` で双方向バインド) | | **`isError`** | `boolean` | `false` | `true` の場合はエラースタイルを適用 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/RadioCard.svelte {@render children()} ``` ## 依存コンポーネント RadioCardを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Radio](https://rabeeui.com/docs/components/radio) ## 使い方 ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ### Error 入力内容に問題があり、エラーが表示されている状態です。 ### Disabled 利用不可の状態です。 ### GroupText `bind:group`を使うことで、複数のラジオボタンをグループ化し、同じ値を共有できます。 ### GroupImage `bind:group`を使うことで、複数のラジオボタンをグループ化し、同じ値を共有できます。 --- # Sidebar Sidebarは、Webサイトやアプリケーションの画面左側に表示されるコンポーネントです。 ヘッダーメニュー・ドロップダウンメニューなど、ナビゲーションに必要な要素をまとめて表示できます。 ## プロパティ Sidebarは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`headerMenu`** | `HeaderMenuProps` || ヘッダー部分に表示するメニュー情報(画像・タイトル・サブタイトルなど)です。 | | **`items`** | `MenuItems[]` || サイドバー内に表示するメニュー群です。 | | **`startContent`** | `Snippet` || メニュー項目の左側に表示するカスタム要素(アイコンなど)を指定できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/Sidebar.svelte {#if headerMenu.image} {:else} {/if} {headerMenu.title} {headerMenu.subTitle} {#each headerMenu.menus as menu, i} {menu.item} {#if menu.shortCutText} {menu.shortCutText} {/if} {#if i === SEPARATOR_POSITION_INDEX} {/if} {/each} {#snippet triggerContent(toggle)} {headerMenu.title} {headerMenu.subTitle} {/snippet} {#each items as item, index} {#if index !== 0} {/if} {#if item.category} {item.category} {/if} {#each item.entries || [] as entry} onClick(entry) : () => toggleOpen(entry.id)}> {#if startContent} {@render startContent()} {/if} {entry.text} {#if entry.options} {/if} {#if entry.options && isMenuOpenMap[entry.id]} {#each entry.options as option} onClickOption(option.onClick, option)}> {option.label} {/each} {/if} {/each} {/each} ``` ## 依存コンポーネント Sidebarを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Input](https://rabeeui.com/docs/components/input) - [Separator](https://rabeeui.com/docs/components/separator) ## 使い方 --- # Sidebar Dropdown SidebarDropdownは、Webサイトやアプリケーションのサイドバー内に表示されるメニューコンポーネントです。 ヘッダー・フッター・ドロップダウン形式のメニューを持ち、ナビゲーションやアカウント切り替えなどの主要な要素を表示します。 ## プロパティ SidebarDropdownは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`headerMenu`** | `HeaderMenuProps` || ヘッダー部分に表示するメニュー情報(画像・タイトル・サブタイトルなど)です。 | | **`footerMenu`** | `FooterMenuProps` || フッター部分に表示するメニュー情報(画像・タイトル・サブタイトルなど)です。 | | **`menus`** | `SidebarMenu[]` || サイドバー内に表示するドロップダウン形式のメニュー群です。 | | **`startContent`** | `Snippet` || メニュー項目の左側に表示するカスタム要素(アイコンなど)を指定できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/SidebarDropdown.svelte {#if headerMenu.image} {:else} {/if} {headerMenu.title} {headerMenu.subTitle} {#each headerMenu.menus as menu, i} {menu.item} {#if menu.shortCutText} {menu.shortCutText} {/if} {#if i === SEPARATOR_POSITION_INDEX} {/if} {/each} {#snippet triggerContent(toggle)} {headerMenu.title} {headerMenu.subTitle} {/snippet} {#each menus as menu, index} {#each menu.items as group, groupIndex (group)} {#if group.label} {group.label} {/if} {#each group.items as item} {item.label} {#if item.shortCutText} {item.shortCutText} {/if} {/each} {#if groupIndex !== menu.items.length - 1} {/if} {/each} {#snippet triggerContent(toggle)} {#if startContent} {@render startContent()} {/if} {menu.label} {/snippet} {/each} {#if footerMenu.image} {:else} {/if} {footerMenu.title} {footerMenu.subTitle} {#each footerMenu.menus as menu, i} {menu.item} {#if menu.shortCutText} {menu.shortCutText} {/if} {#if i === SEPARATOR_POSITION_INDEX} {/if} {/each} {#snippet triggerContent(toggle)} {footerMenu.title} {footerMenu.subTitle} {/snippet} ``` ## 依存コンポーネント SidebarDropdownを使うときは、以下のコンポーネントもダウンロードが必要です。 - [DropdownMenu](https://rabeeui.com/docs/components/dropdownmenu) - [Separator](https://rabeeui.com/docs/components/separator) ## 使い方 --- # Status Select StatusSelect は、ステータス選択のサンプル表示用のコンポーネントです。 複数のステータスから1つを選択するUIを提供します。 ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/StatusSelect.svelte {#snippet optionContent({ option })} {#if option} {option.label} {:else} 未選択 {/if} {/snippet} ``` ## 依存コンポーネント StatusSelectを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Select](https://rabeeui.com/docs/components/select) ## 使い方 ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 --- # Table Tableコンポーネントを使用したサンプルです。 BadgeやButtonなどのコンポーネントと組み合わせて、さまざまなデータに適したテーブルを作成できます。 ## MemberManagement メンバー一覧の表示に使うテーブルです。 ### 依存コンポーネント 上記のサンプルを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](https://rabeeui.com/docs/components/button) ## DataTable 様々なデータの表示に使うテーブルです。 ### 依存コンポーネント 上記のサンプルを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](https://rabeeui.com/docs/components/button) - [Input](https://rabeeui.com/docs/components/input) - [Pagination](https://rabeeui.com/docs/components/pagination) ## FormListTable フォーム一覧の表示に使うテーブルです。 ### 依存コンポーネント 上記のサンプルを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](https://rabeeui.com/docs/components/button) - [Badge](https://rabeeui.com/docs/components/badge) ---
Button
Input
Switch
{yearLabel}
{m + 1}月
{y}
ここに要素が入ります。
ここに補足文が入ります。
{infoCard.label}
{infoCard.description}
ここにエラーメッセージが入ります。
候補が見つかりませんでした
{item.label}
{item.description}
{value.length}/{maxlength}
{#if isError} {overTexts} {:else} {value.length}/{maxlength} {/if}
SMSで送信された認証コードを入力してください。
「{EXPECTED_VALUE}」と入力してください
コードが一致しません。
コードが一致しました。
{min}
{max}
現在の数値:{value}
{item.name}
アイテムがありません
まだ通知がありません