# 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@next ``` ## 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を利用しています。カラー定義を独立して管理できるよう、`rabeeui.css` として別ファイルに配置することをおすすめします(`app.css` に直接書いても動作します)。 ```less:rabeeui.css @theme { /* surface */ --color-surface: #FFF; --color-subtle: #FAFAFA; --color-inverse: #18181B; --color-muted: #E4E4E7; --color-accent: #F4F4F5; --color-subarea: #FAFAFA; --color-subarea-accent: #F4F4F5; /* foreground */ --color-foreground: #18181B; --color-accent-foreground: #18181B; --color-muted-foreground: #71717A; --color-subtle-foreground: #A1A1AA; --color-inverse-foreground: #FAFAFA; --color-bright-foreground: #FAFAFA; --color-subarea-foreground: #3F3F46; --color-subarea-accent-foreground: #18181B; --color-link: #2563EB; --color-link-visited: #7E22CE; /* border */ --color-border: #E4E4E7; --color-input: #E4E4E7; --color-ring: #2563EB; /* function */ --color-destructive: #DC2626; --color-destructive-foreground: #FEF2F2; --color-warning: #FBBF24; --color-warning-foreground: #451A03; --color-success: #16A34A; --color-success-foreground: #F0FDF4; --color-primary: #2563EB; --color-primary-foreground: #EFF6FF; /* overlay */ --color-overlay-bright: #FFFFFF; --color-overlay-dark: #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 { html.dark { /* surface */ --color-surface: #09090B; --color-subtle: #18181B; --color-inverse: #FAFAFA; --color-muted: #27272A; --color-accent: #27272A; --color-subarea: #18181B; --color-subarea-accent: #27272A; /* foreground */ --color-foreground: #FAFAFA; --color-accent-foreground: #FAFAFA; --color-muted-foreground: #A1A1AA; --color-subtle-foreground: #71717A; --color-inverse-foreground: #18181B; --color-bright-foreground: #FAFAFA; --color-subarea-foreground: #F4F4F5; --color-subarea-accent-foreground: #FAFAFA; --color-link: #60A5FA; --color-link-visited: #C084FC; /* border */ --color-border: #3F3F46; --color-input: #3F3F46; --color-ring: #1D4ED8; /* function */ --color-destructive: #B91C1C; --color-destructive-foreground: #FEF2F2; --color-warning: #F59E0B; --color-warning-foreground: #451A03; --color-success: #15803D; --color-success-foreground: #F0FDF4; --color-primary: #1D4ED8; --color-primary-foreground: #EFF6FF; /* overlay */ --color-overlay-bright: #FFFFFF; --color-overlay-dark: #09090B; } } ``` `app.css` で Tailwind と `rabeeui.css` を読み込みます。 ```less:app.css @import 'tailwindcss'; @import './rabeeui.css'; ``` `rabeeui.css` を分けない場合は、`@import './rabeeui.css';` の代わりに `rabeeui.css` の内容をコピーして貼り付けてください。 > 2026年4月28日より前のバージョン(旧カラー命名 `base-container-*` / `base-stroke-*` などを使用)から移行する場合は、[カラークラス名の移行ガイド](/docs/migration/colors)を参照してください。 ## 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) --- # 変更履歴 Rabee UI のリリースごとの変更点をまとめています。アップデート時の参考にしてください。 ---- ## 2026年5月27日 コンポーネント1種とサンプル1種を新たに追加しました。詳細は[プレスリリース](https://prtimes.jp/main/html/rd/p/000000028.000097622.html)をご覧ください。 ### 追加 - [Link](/docs/components/link) ... 別タブで開くリンクに ExternalLink アイコンを自動表示するテキストリンクコンポーネント - [Pricing](/docs/samples/pricing) ... 月払い/年払いを切り替えられる料金プランのサンプル ### 変更 - [Button](/docs/components/button#heading-sub-9) ... Loading 状態のサンプルを連打防止パターンに刷新 ---- ## 2026年4月28日 サンプル4種を新たに追加し、カラー定義を刷新しました。詳細は[プレスリリース](https://prtimes.jp/main/html/rd/p/000000028.000097622.html)をご覧ください。 ### 追加 - [Error Layout](/docs/samples/errorlayout) ... エラーページ用のレイアウトサンプル - [Admin Layout](/docs/samples/adminlayout) ... 管理画面向けのレイアウトサンプル - [Authentication](/docs/samples/authentication) ... サインイン / サインアップ / 登録のサンプル - [Header](/docs/samples/header) ... ロゴつきヘッダー / スニペットなどのサンプル ### 変更 - [Lucide Icons](/docs/setup) ... v1 対応に伴い、インストールコマンドと import のパスが変更 - [Sidebar](/docs/samples/sidebar) ... ヘッダーメニュー項目に `onclick` を追加 ### 修正 - [Toast](/docs/components/toast) ... AutoClose の scale 計算を修正し、最新トーストが等倍で表示されるようになりました ### 移行が必要な変更 - [カラー定義](/docs/colors) ... カラークラスの命名を刷新。詳細は[移行ガイド](/docs/migration/colors)をご覧ください - [Chip](/docs/components/chip) ... Badge から Chip にリネーム。バリアント・トーンを追加 - [Modal](/docs/components/modal) ... Dialog から Modal にリネーム。フォーカストラップと `aria-modal` を追加 --- # カラー定義について Rabee UIで使用している色と用途の一覧です。実際に使用するCSSは[セットアップの手順](/docs/setup)で確認できます。 ## 概要 Rabee UIのカラーは、適用対象によって分類されるカラーと、機能によって分類されるカラーがあります。 適用対象によって分類するカラーは、Surface、Foreground、Border、Overlayの4種類があります。 機能によって分類するカラーは、Primary、Destructive、Success、Warningの4種類があります。 ## Surface ページ、カード、ボタンなどの背景に使用するカラーです。 | 名前 | 値 (Light) | 値 (Dark) | 用途 | |---|---|---|---| | surface | `#FFF` | `#09090B` | 基準となる背景色です。 | | inverse | `#18181B` | `#FAFAFA` | ライトモードでは暗く、ダークモードでは明るい背景色です。Tooltipなど周囲とのコントラストを強めたい要素に使います。 | | muted | `#E4E4E7` | `#27272A` | 主張を抑えた背景色です。Disabled状態などに使います。 | | subtle | `#FAFAFA` | `#18181B` | surfaceより控えめな背景色です。Tableのヘッダーなどに使います。 | | accent | `#F4F4F5` | `#27272A` | hoverなどのやや目立たせたい状態に使う背景色です。 | | subarea | `#FAFAFA` | `#18181B` | Sidebarなど、メインではない補助的なエリアの背景色です。 | | subarea-accent | `#F4F4F5` | `#27272A` | subarea内で、hoverなどのやや目立たせたい状態に使う背景色です。 | ## Foreground テキスト・アイコンなどの前景に使用するカラーです。 | 名前 | 値 (Light) | 値 (Dark) | 用途 | |---|---|---|---| | foreground | `#18181B` | `#FAFAFA` | 基準となるテキスト・アイコンの色です。 | | inverse-foreground | `#FAFAFA` | `#18181B` | inverseの背景色の上に乗せるテキスト・アイコンの色です。 | | bright-foreground | `#FAFAFA` | `#FAFAFA` | ライト・ダークを問わず常に明るく表示するテキスト・アイコンの色です。primaryなどの色が濃い背景の上に使います。 | | muted-foreground | `#71717A` | `#A1A1AA` | プレースホルダーなど、主張を抑えたテキスト・アイコンの色です。 | | subtle-foreground | `#A1A1AA` | `#71717A` | 補足説明など、最も主張の弱いテキスト・アイコンの色です。 | | accent-foreground | `#18181B` | `#FAFAFA` | hoverなどのやや目立たせたい状態に使うテキスト・アイコンの色です。 | | subarea-foreground | `#3F3F46` | `#F4F4F5` | subareaで使うテキスト・アイコンの色です。 | | subarea-accent-foreground | `#18181B` | `#FAFAFA` | subareaで、hoverなどのやや目立たせたい状態に使うテキスト・アイコンの色です。 | | link | `#2563EB` | `#60A5FA` | リンクテキストの色です。 | | link-visited | `#7E22CE` | `#C084FC` | 訪問済みのリンクテキストの色です。 | ## Border ボーダーに使用するカラーです。 | 名前 | 値 (Light) | 値 (Dark) | 用途 | |---|---|---|---| | border | `#E4E4E7` | `#3F3F46` | 基準となるボーダーの色です。 | | input | `#E4E4E7` | `#3F3F46` | InputやTextareaなど、フォーム要素に使うボーダー色です。 | | ring | `#2563EB` | `#1D4ED8` | フォーカス時に表示するリングの色です。 | ## Overlay モーダルなど、要素の前面に重ねて使うカラーです。 | 名前 | 値 (Light) | 値 (Dark) | 用途 | |---|---|---|---| | overlay-bright | `#FFF` | `#FFF` | ライト・ダークを問わず常に明るいオーバーレイの色です。 | | overlay-dark | `#09090B` | `#09090B` | ライト・ダークを問わず常に暗いオーバーレイの色です。 | ## Function 機能を示すカラーです。背景、前景、ボーダーのいずれにも使うことができます。 | 名前 | 値 (Light) | 値 (Dark) | 用途 | |---|---|---|---| | primary | `#2563EB` | `#1D4ED8` | 主要なアクションを示す色です。 | | primary-foreground | `#EFF6FF` | `#EFF6FF` | primary背景の上に乗せるテキスト・アイコンの色です。 | | destructive | `#DC2626` | `#B91C1C` | 削除など、破壊的なアクションを示す色です。 | | destructive-foreground | `#FEF2F2` | `#FEF2F2` | destructive背景の上に乗せるテキスト・アイコンの色です。 | | success | `#16A34A` | `#15803D` | 成功・完了を示す色です。 | | success-foreground | `#F0FDF4` | `#F0FDF4` | success背景の上に乗せるテキスト・アイコンの色です。 | | warning | `#FBBF24` | `#F59E0B` | 警告・注意を示す色です。 | | warning-foreground | `#451A03` | `#451A03` | warning背景の上に乗せるテキスト・アイコンの色です。 | --- # Accordion Accordionは、クリックするとコンテンツが展開・折りたためる見出しのリストです。 必要な情報をコンパクトに整理し、ユーザーが見たい内容だけを表示できます。 ```svelte ここにコンテンツ内容が入ります ここにコンテンツ内容が入ります ここにコンテンツ内容が入ります ``` ## プロパティ Accordionは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`title`** | `string` || 見出しの文言を設定できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Accordion.svelte {title} {@render children()} ``` ## 使い方 ```svelte ここにコンテンツ内容が入ります ここにコンテンツ内容が入ります ここにコンテンツ内容が入ります ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```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 `disabled` フラグを活用することで、ローディング状態のボタンを表現することができます。 ```svelte {#if isSubmitting} {/if} 送信する ``` ### 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)} {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} {day.value} {/each} {/each} {/each} {:else} {#if type === 'month'} {#each Array(DISPLAY_MONTH_NUM) as _, m} {@const isDisabled = monthDisabled(m)} changeDisplayMonth(m)} onkeydown={(e) => handleKeyDownMonth(e, m)}> {m + 1}月 {/each} {:else if type === 'year'} {#each yearRange as y} {@const year_disabled = yearDisabled(y)} changeDisplayYear(y)} onkeydown={(e) => handleKeyDownYear(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 ``` --- # Chip Chipは、主に情報を表示するためのコンポーネントです。 必要に応じて、リンクやボタンとして遷移可能なパーツとしても活用できます。 ```svelte チップ ``` ## プロパティ Chipは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`variant`** | `string` | - | チップのバリアントを指定します。`primary`, `secondary`, `success`, `warning`, `danger` のいずれかを選択できます。 | | **`tone`** | `string` | `filled` | チップのトーンを指定します。`filled`, `outlined`, `soft` のいずれかを選択できます。 | | **`link`** | `boolean` | `false` | リンクやボタンとして使用する場合に指定します。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Chip.svelte {@render children?.()} ``` ## 使い方 ```svelte チップ ``` --- ## サンプル ### Default Defaultでの表示です。 ```svelte チップ ``` ### Variants チップのタイプを変更することもできます。 ```svelte primary secondary success warning danger ``` ### Tones チップのトーンを変更することもできます。 ```svelte filled outlined soft ``` ### Link リンクとして Chip を利用したい場合は、`` タグ等にChipのクラスやスタイルを適用することで、同じ見た目を再現できます。 ```svelte {#each TONES as tone} {#each VARIANTS as variant} チップ {/each} {/each} ``` --- # Combobox Comboboxは、入力フィールドと候補リストを組み合わせて、ユーザーがテキスト入力または候補の選択によって値を指定できるコンポーネントです。 検索やフィルタリングによって、効率的に目的の項目を探すことができます。 ```svelte ``` ## プロパティ | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`options`** | `ComboboxOption[]` | | 選択肢の配列です。 | | **`placeholder`** | `string` | `プレースホルダー` | 入力欄のプレースホルダーです。 | | **`disabled`** | `boolean` | `false` | コンボボックスを無効化します。無効化されたコンボボックスは選択できません。 | | **`isError`** | `boolean` | `false` | エラー状態を視覚的に示します。バリデーション用など。 | | **`multi`** | `boolean` | `false` | `true` にすると複数選択が可能になります。 | | **`isOpen`** | `boolean` | `false` | コンボボックスの候補リストの開閉状態を制御します。 | | **`showSelect`** | `boolean` | `false` | 選択した値を表示します。(multiと併用で複数選択表示可能) | ### ComboboxOptionItem | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`label`** | `string` | | 選択肢のラベルです。 | | **`value`** | `string \| number` | | 選択肢の値です。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Combobox.svelte {#if multi && showSelect && selectedOptions.length} {#each selectedOptions as selected} {selected.label} handleToggle(selected.value)} aria-label="選択をクリア"> {/each} {/if} 0 ? selectedLabel : query} {placeholder} {disabled} bind:this={inputElement} oninput={handleInputChange} onfocus={openListbox} /> {#if !multi && showSelect && value.length > 0} {:else} {/if} {#if isOpen} {#if showScrollButtons} {#if !isScrolledToTop} startScroll('up')} onmouseleave={stopScroll}> {/if} {#if !isScrolledToBottom} startScroll('down')} onmouseleave={stopScroll}> {/if} {/if} (isKeyboardNavigating = false)} onmouseleave={handleListMouseLeave}> {#each filtered as option, i} handleClickOption(e, option.value, i)} onkeydown={(e) => handleItemKeydown(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](/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={(e) => handleKeyDownMenu(e, 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](/docs/components/input) - [Separator](/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} ``` --- # Drawer Drawerは、任意のコンテンツを受け取り、画面の上下左右いずれかの端からスライドインで表示できるコンポーネントです。 ```svelte Open Drawer {#snippet children()} (isOpen = false)}> タイトル ここに補足文が入ります。 {/snippet} ``` ## プロパティ drawerは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | |------|-----|-------------|------| | **`direction`** | `string` | `"left"` | Drawer の表示方向 | | **`isOpen`** | `boolean` | `false` | Drawer を表示するかどうか | | **`dismissible`** | `boolean` | `true` | Drawer 外をクリックすると閉じるかどうか | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/Drawer.svelte {#if isOpen} {@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} handleKeyDown(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](/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} handleClickMenu(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 fileInputElement?.click()} ondrop={handleDrop} ondragover={handleDragOver} ondragleave={handleDragLeave} 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 ``` --- ## サンプル ### Default 基本的なテキスト入力の状態です。 ```svelte ``` ### Readonly 内容を編集できない、読み取り専用の状態です。 ```svelte ``` ### Error 入力内容に問題があり、エラーが表示されている状態です。 ```svelte {#if isError} ここにエラーメッセージが入ります。 {/if} ``` ### Disabled 利用不可の状態です。 ```svelte ``` ### Width 入力フィールドを異なる幅で表示した例です。 ```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} handleInputEvent(e, index)} onfocus={() => handleFocus(index)} onkeydown={(e) => handleKeydown(e, index)} onpaste={handlePaste} oncompositionstart={() => (isComposing = true)} oncompositionend={() => handleCompositionEnd(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 ラベル ``` --- # Link Linkは、テキストリンクを表示するコンポーネントです。 `target="_blank"` を指定すると External アイコンを自動表示し、`rel="noopener noreferrer"` を自動付与します。 ```svelte リンクテキスト ``` ## プロパティ Linkは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`variant`** | `string` | `primary` | リンクの色を指定します。`primary`, `secondary` のいずれかを選択できます。 | | **`disabled`** | `boolean` | `false` | 指定するとグレーアウトされ、クリック不可になります。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:atoms/Link.svelte {@render children?.()} {#if isExternal} {/if} ``` ## 使い方 ```svelte リンクテキスト ``` --- ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ```svelte リンクテキスト ``` ### External `target="_blank"` を指定すると、External アイコンを表示し、`rel="noopener noreferrer"` を自動付与します。 ```svelte 外部サイトへ ``` ### Disabled 利用不可の状態です。 ```svelte リンクテキスト ``` ### Variants リンクの色を変更することもできます。 ```svelte primary secondary ``` --- # 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} handleClickOption(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`, `danger`, `warning`, `success` のいずれかを選択できます。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:items/Message.svelte {#if variant === 'danger'} {:else if variant === 'warning'} {:else if variant === 'success'} {:else} {/if} {@render children?.()} ``` ## 使い方 ```svelte ラベル ここに補足文が入ります。 ``` --- ## サンプル ### Default 緊急性や重要度の高くない、一般的な情報を表示します。 ```svelte ラベル ここに補足文が入ります。 ``` ### Variants メッセージのタイプを変更することもできます。 ```svelte ラベル ここに補足文が入ります。 ラベル ここに補足文が入ります。 ラベル ここに補足文が入ります。 ラベル ここに補足文が入ります。 ``` --- # Modal Modalは、画面全体にオーバーレイを重ねて、特定の状態やコンテンツを最前面に提示するコンポーネントです。 ユーザーに対して明示的な情報を提示したり、オプションを選択させるときに使用できます。 ```svelte Open Modal ラベル ここに補足文が入ります。 ``` ## プロパティ Modalは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`isOpen`** | `boolean` | `false` | Modal を表示するかどうか。 | | **`dismissible`** | `boolean` | `true` | 背景クリックおよびEscキーで閉じる動作を無効にするかどうか。 | | **`hideCloseButton`** | `boolean` | `false` | trueのとき、閉じるボタンを非表示にします。 | | **`unstyled`** | `boolean` | `false` | trueのとき、モーダル本体のスタイルを適用しません。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modals/Modal.svelte {#if isOpen} {@render children()} {#if !hideCloseButton} (isOpen = false)} data-close-button> {/if} {/if} ``` ## 依存コンポーネント Modalを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](/docs/components/button) ## 使い方 ```svelte Open Modal ラベル ここに補足文が入ります。 ``` --- ## サンプル ### Default Defaultでの表示です。 ```svelte Open Modal ラベル ここに補足文が入ります。 ``` ### HideCloseButton 閉じるボタンが非表示の状態です。 ```svelte Open Modal ラベル ここに補足文が入ります。 ``` ### With Input,Select `Input`や`Select`などの要素と組み合わせることもできます。 ```svelte Open Modal ラベル ここに補足文が入ります。 ラベル ラベル handleClick(false)}>キャンセル handleClick(true)}>決定 ``` ### Alert Dialog ユーザーへの情報の通知のみを目的するシーンは、モーダルを閉じるアクションのみを提供するAlert Dialogとして使用できます。 ```svelte Open Modal データの読み込みに失敗しました 情報を取得できませんでした。 画面を更新して再度お試しください。 (isOpen = false)} data-auto-focus>閉じる ``` ### Confirm Dialog データの削除確認など、注意喚起が必要なシーンでは、モーダルを閉じる機能を無くすことでConfirm Dialogとして使用できます。 ```svelte Open Modal プロジェクトを削除しますか? この操作は取り消せません。 削除すると、すべてのデータが完全に消去されます。 (isOpen = false)} data-auto-focus>キャンセル (isOpen = false)}>削除 ``` ### Focus Trap `inert`属性を使用して、モーダルが開いている間は背景の要素にフォーカスできないようにしています。Tabキーやマウスクリックで背景の入力欄やボタンにフォーカスが移ることを防ぎます。 ```svelte 背景のフォーム alert('背景のボタンがクリックされました')}>背景のボタン Open Modal フォーカストラップ inert属性により、モーダルが開いている間は背景の要素にフォーカスできません。 (isOpen = false)}>閉じる ``` ### Loading 非同期処理の実行中など、画面遷移や再操作を防ぎたいシーンでは、Spinnerと組み合わせて使うことでLoadingとして使用できます。 ```svelte Open Modal ``` --- # 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 {prevLabel} {#each pages as page} {#if page === 'ellipsis'} {:else} {#key page} handleClickPage(page)}> {page} {/key} {/if} {/each} {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 のいずれかを指定できます。 | | **`isOpen`** | `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(toggle)} {#if isOpen} {@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} handleChangeSegmentedControl(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 handleSelect(e)} role="combobox" tabindex={disabled ? -1 : 0} onkeydown={(e) => handleKeydownSelect(e)} aria-controls={id} aria-expanded={isOpen} bind:this={selectBoxElement}> {#if optionContent} {@render optionContent({ option: selectedOption, value, index: -1 })} {:else} {#if selectedOption} {selectedOption.label} {:else} {placeholder} {/if} {/if} {#if value && clearable} handleClear(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} handleSelectValue(option.value)} onkeydown={(e) => handleKeydown(e, option.value)} onmouseenter={(e) => handleMouseenterFocus(e)} onmouseleave={(e) => handleMouseleaveBlur(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)} handlePointerDown(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} handleChangeTab(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 - 1 - i) / 10)}) translateY({-((toasts.length - 1 - 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` || 閉じるアイコンのクラスを指定できます。 | | **`isOpen`** | `boolean` | `false` | トーストの開閉状態を制御します。 | | **`onClose`** | `() => void` || トーストが閉じられたときに呼ばれるハンドラです。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:items/Toast.svelte {@render children?.()} {#if action || !hideCloseButton} {@render action?.()} {#if !hideCloseButton} {/if} {/if} ``` ## 依存コンポーネント Toastを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](/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 - 1 - i) / 10)}) translateY({-((toasts.length - 1 - 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 - 1 - i) / 10)}) translateY({-((toasts.length - 1 - i) * 10)}px);"> {toast.label} {toast.description} {/each} ``` ### Auto Close with Action 自動で閉じるほか、 閉じるボタンによって閉じることができます。 ```svelte (isOpen = true)}>Show toast {#if isOpen} ラベル ここに補足文が入ります ボタン {/if} ``` ### Persistent `keepOpen` を `true` にすると、操作されるまで表示され続けます。 ```svelte (isOpen = true)}>Show toast {#if isOpen} ラベル ここに補足文が入ります (isOpen = 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 ツールチップ ``` --- # カラークラス名の移行ガイド > **このガイドの対象**: 2026年4月28日のリリースより前のバージョンを使っているプロジェクト向けです。4月28日以降のリリースでは新しいカラー命名が標準となっているため、新規導入の場合は[セットアップの手順](/docs/setup)をそのまま参照してください。 Rabee UI のカラー定義は、短く直感的な名前に刷新されました。既存プロジェクトでは、以下のいずれかの方針で移行できます。 - **方法1: Claude Code で置き換える(推奨)** ... AIに文脈を踏まえて旧クラス名を新クラス名に置換させる - **方法2: sed コマンドで一括置換する** ... 機械的に文字列置換を行う - **方法3: 新旧併用(段階的移行)** ... 互換用の CSS を追加し、旧クラス名も引き続き動作させる ### 置き換えの対象 以下はすべて旧命名のサフィックスを含むため、置き換え対象です。方法1・方法2 のマッピングはこれらすべてを同じルール(サフィックスの変更)でカバーします。 - Tailwind ユーティリティクラス ... `bg-*`、`text-*`、`border-*`、`divide-*`、`outline-*`、`ring-*`、`from-*`、`to-*` など - `@apply` ディレクティブ内の記述 ... `@apply bg-base-container-default;` など - CSS 変数の参照 ... `color: var(--color-base-foreground-default);` など - CSS 変数の独自定義・上書き ... `@theme { --color-base-container-default: ...; }` など ## 方法1: Claude Code で置き換える(推奨) Claude Code を使うと、`border-input` と `border-border` の使い分けのように**文脈に応じた判断が必要な箇所**も処理できます。プロジェクトのルートで Claude Code を起動し、以下のプロンプトを貼り付けて実行してください。 ````markdown Rabee UI のカラークラス名を新しい命名に置き換えてください。 ## 参考資料(作業前に WebFetch で必ず読み込んでください) - カラーの名前と用途: https://rabeeui.com/docs/colors - 本移行ガイド全体: https://rabeeui.com/docs/migration/colors ## 対象 `src/` 配下のすべての `.svelte` / `.ts` / `.tsx` / `.css` / `.js` / `.jsx` / `.html` ファイル。 以下の**すべて**が対象です(サフィックスが共通なので下記マッピングで一括対応できます)。 - Tailwind ユーティリティクラス(`bg-base-container-default` など) - `@apply` ディレクティブ(`@apply bg-base-container-default;` など) - CSS 変数の参照(`var(--color-base-container-default)` など) - CSS 変数の独自定義・上書き(`--color-base-container-default: ...;` など) ## 置換マッピング ### Surface - `base-container-default` → `surface` - `base-surface-default` → `surface` - `base-container-primary` → `inverse` - `base-container-muted` → `muted` - `base-container-subarea-accent` → `subarea-accent` - `base-container-accent` → `accent` - `base-surface-subarea-default` → `subarea` - `base-surface-muted` → `subtle` ### Foreground - `base-foreground-on-fill-inverse` → `inverse-foreground` - `base-foreground-on-fill-bright` → `bright-foreground` - `base-foreground-subarea-default` → `subarea-foreground` - `base-foreground-subarea-accent` → `subarea-accent-foreground` - `base-foreground-default` → `foreground` - `base-foreground-accent` → `accent-foreground` - `base-foreground-muted` → `muted-foreground` - `base-foreground-subtle` → `subtle-foreground` - `base-foreground-link` → `link` ### Border - `base-stroke-default` → 下記「注意事項」参照 ### Function - `destructive-on-fill` → `destructive-foreground` - `warning-on-fill` → `warning-foreground` - `success-on-fill` → `success-foreground` - `primary-on-fill` → `primary-foreground` ### Overlay - `alpha-bright` → `overlay-bright` - `alpha-gloom` → `overlay-dark` ## 注意事項 1. **`base-stroke-default` の置き換え**: フォーム入力要素(Checkbox、Radio、Input、Textarea、Select など)の内部で使われている場合は `border-input` / `divide-input` に、Card / CheckboxCard / RadioCard などフォーム**以外**では `border-border` / `divide-border` に置き換えてください。文脈を読んで判断してください。 2. **`ring-primary` / `outline-primary` の扱い**: 旧コードがフォーカスリングを `primary` カラーで描画していた箇所は、専用トークン `ring-ring` / `outline-ring` に置き換えてください。ただし装飾用途(ボタンのアクセントリングなど)で意図的に `primary` カラーを使っている場合はそのまま維持してください。 3. **作業後**: 置き換えた箇所を一覧で報告し、特に `border-input` / `border-border` の使い分けと `ring-primary` / `outline-primary` の判断根拠を示してください。 ```` Claude Code から置換結果の報告が出たら、レビューしてからマージすることをおすすめします。 ## 方法2: sed コマンドで一括置換する 機械的に文字列置換だけしたい場合は `sed` が使えます。この方法では `base-stroke-default` はすべて `border` に置換されるので、**フォーム要素の箇所は置換後に手動で `border-input` / `divide-input` へ修正**してください。 ```bash find src -type f \( -name "*.svelte" -o -name "*.ts" -o -name "*.css" \) \ -exec sed -i '' \ -e 's/base-container-default/surface/g' \ -e 's/base-container-primary/inverse/g' \ -e 's/base-container-muted/muted/g' \ -e 's/base-container-subarea-accent/subarea-accent/g' \ -e 's/base-container-accent/accent/g' \ -e 's/base-surface-default/surface/g' \ -e 's/base-surface-subarea-default/subarea/g' \ -e 's/base-surface-muted/subtle/g' \ -e 's/base-foreground-on-fill-inverse/inverse-foreground/g' \ -e 's/base-foreground-on-fill-bright/bright-foreground/g' \ -e 's/base-foreground-subarea-default/subarea-foreground/g' \ -e 's/base-foreground-subarea-accent/subarea-accent-foreground/g' \ -e 's/base-foreground-default/foreground/g' \ -e 's/base-foreground-accent/accent-foreground/g' \ -e 's/base-foreground-muted/muted-foreground/g' \ -e 's/base-foreground-subtle/subtle-foreground/g' \ -e 's/base-foreground-link/link/g' \ -e 's/base-stroke-default/border/g' \ -e 's/destructive-on-fill/destructive-foreground/g' \ -e 's/warning-on-fill/warning-foreground/g' \ -e 's/success-on-fill/success-foreground/g' \ -e 's/primary-on-fill/primary-foreground/g' \ -e 's/alpha-bright/overlay-bright/g' \ -e 's/alpha-gloom/overlay-dark/g' \ {} + ``` ### 注意: 置換漏れが起きやすいケース sed は単純な文字列置換なので、以下のようなケースは**拾いきれません**。方法1(Claude Code)と比べると漏れが発生しやすいため、置換後の検証が必須です。 - **対象拡張子の不足** ... 上記コマンドは `.svelte` / `.ts` / `.css` のみを対象としています。プロジェクトで `.tsx` / `.jsx` / `.js` / `.html` / `.vue` / `.scss` / `.pcss` / `.less` などを使っている場合は `find` の `-name` に追加してください(raw CSS の `var(--color-*)` 参照も対象に含めるため) - **プラットフォーム依存** ... `sed -i ''` は macOS 向けの書き方です。Linux では `sed -i`(空文字の引数なし)に書き換える必要があります - **動的に組み立てたクラス名** ... `` `text-${variant}-foreground-default` ``、`cva` のバリアントで分割された文字列、テンプレート文字列連結などは置換されません - **順序は長いサフィックスから先に** ... 短いパターンが長いパターンの一部になると先行マッチで壊れるため、長い方を先に置換します(上記コマンドもこの順序で並べてあります) - **`base-stroke-default` は一律で `border` に置換される** ... フォーム要素(Checkbox / Radio / Input / Textarea / Select など)の内部ボーダーは手動で `border-input` / `divide-input` に直してください - **外部ドキュメントやビルド成果物** ... `README.md` / `CHANGELOG.md` や `dist/` 配下のコード例・スクリーンショットなどは含まれていません ### 置換後の確認 以下のコマンドで旧クラス名の残存をチェックすることをおすすめします。 ```bash grep -rnE 'base-(container|surface|foreground|stroke)|-on-fill|alpha-(bright|gloom)' src/ ``` ヒットした箇所は手動で修正するか、方法1(Claude Code)に切り替えて文脈判断を任せるのが安全です。また、各画面を目視で確認し、色が崩れていないかレビューすることをおすすめします。 ## 方法3: 新旧併用(段階的移行) 一気に置き換えることが難しい場合、旧クラス名を新 CSS 変数へのエイリアスとして定義する互換 CSS を追加する方法があります。互換 CSS を読み込んでいる間は、旧クラス名と新クラス名の両方が動作します。 ### 手順 1. プロジェクトの CSS ディレクトリに以下の内容で `colors-compat.css` を配置する 2. `app.css` で Rabee UI の新カラー定義(`rabeeui.css`)を読み込んだ**後**に `@import` する ```less:app.css @import 'tailwindcss'; @import './rabeeui.css'; @import './colors-compat.css'; ``` ### `colors-compat.css` の中身 ```css:colors-compat.css @theme { /* container(旧) → surface 系(新) */ --color-base-container-default: var(--color-surface); --color-base-container-primary: var(--color-inverse); --color-base-container-muted: var(--color-muted); --color-base-container-accent: var(--color-accent); --color-base-container-subarea-accent: var(--color-subarea-accent); /* surface(旧) → surface 系(新) */ --color-base-surface-default: var(--color-surface); --color-base-surface-subarea-default: var(--color-subarea); --color-base-surface-muted: var(--color-subtle); /* foreground(旧) → foreground 系(新) */ --color-base-foreground-default: var(--color-foreground); --color-base-foreground-accent: var(--color-accent-foreground); --color-base-foreground-muted: var(--color-muted-foreground); --color-base-foreground-subtle: var(--color-subtle-foreground); --color-base-foreground-on-fill-inverse: var(--color-inverse-foreground); --color-base-foreground-on-fill-bright: var(--color-bright-foreground); --color-base-foreground-subarea-default: var(--color-subarea-foreground); --color-base-foreground-subarea-accent: var(--color-subarea-accent-foreground); --color-base-foreground-link: var(--color-link); /* stroke(旧) → border(新) */ --color-base-stroke-default: var(--color-border); /* function on-fill(旧) → *-foreground(新) */ --color-destructive-on-fill: var(--color-destructive-foreground); --color-warning-on-fill: var(--color-warning-foreground); --color-success-on-fill: var(--color-success-foreground); --color-primary-on-fill: var(--color-primary-foreground); /* alpha(旧) → overlay(新) */ --color-alpha-bright: var(--color-overlay-bright); --color-alpha-gloom: var(--color-overlay-dark); } ``` 本ファイルを読み込むと、旧変数が新変数のエイリアスとなり、Tailwind が旧クラス名に対応するユーティリティクラスを自動生成します。ダークモードの切り替えも新変数経由で追従するため、個別に対応する必要はありません。 > **注意**: 互換レイヤーは恒久的に使うものではなく、**移行期間中の一時的な措置**です。最終的には方法1または方法2で完全置き換えを行い、互換 CSS を削除することをおすすめします。 ## クラス名の対応表 下表は Tailwind ユーティリティクラスの例で示していますが、**CSS 変数を直接参照している箇所** も同じサフィックスの変更で置き換わります(例: `--color-base-container-default` → `--color-surface`、`var(--color-base-foreground-muted)` → `var(--color-muted-foreground)`)。 ### Surface(背景) | 旧クラス名 | 新クラス名 | |---|---| | `bg-base-container-default` / `bg-base-surface-default` | `bg-surface` | | `bg-base-container-primary` | `bg-inverse` | | `bg-base-container-muted` | `bg-muted` | | `bg-base-container-accent` | `bg-accent` | | `bg-base-container-subarea-accent` | `bg-subarea-accent` | | `bg-base-surface-subarea-default` | `bg-subarea` | | `bg-base-surface-muted` | `bg-subtle` | ### Foreground(前景) | 旧クラス名 | 新クラス名 | |---|---| | `text-base-foreground-default` | `text-foreground` | | `text-base-foreground-accent` | `text-accent-foreground` | | `text-base-foreground-muted` | `text-muted-foreground` | | `text-base-foreground-subtle` | `text-subtle-foreground` | | `text-base-foreground-on-fill-inverse` | `text-inverse-foreground` | | `text-base-foreground-on-fill-bright` | `text-bright-foreground` | | `text-base-foreground-subarea-default` | `text-subarea-foreground` | | `text-base-foreground-subarea-accent` | `text-subarea-accent-foreground` | | `text-base-foreground-link` | `text-link` | ### Border(ボーダー) | 旧クラス名 | 新クラス名 | |---|---| | `border-base-stroke-default` / `divide-base-stroke-default` | `border-border` / `divide-border`(または `border-input` ※) | ※ フォーム要素(Input、Textarea、Select、Checkbox、Radio 等)のボーダーは `border-input` を使います。詳細は後述の「注意事項」を参照してください。 ### Function(機能カラー) | 旧クラス名 | 新クラス名 | |---|---| | `bg-destructive-on-fill` / `text-destructive-on-fill` | `bg-destructive-foreground` / `text-destructive-foreground` | | `bg-warning-on-fill` / `text-warning-on-fill` | `bg-warning-foreground` / `text-warning-foreground` | | `bg-success-on-fill` / `text-success-on-fill` | `bg-success-foreground` / `text-success-foreground` | | `bg-primary-on-fill` / `text-primary-on-fill` | `bg-primary-foreground` / `text-primary-foreground` | ### Overlay(オーバーレイ) | 旧クラス名 | 新クラス名 | |---|---| | `bg-alpha-bright` | `bg-overlay-bright` | | `bg-alpha-gloom` | `bg-overlay-dark` | ## 注意事項 ### `warning-foreground` の値変更 `--color-warning-on-fill` (旧: `#18181B`) は `--color-warning-foreground` (新: `#451A03`) に置き換わり、**値自体も変更されました**。コントラストを改善するための修正です。方法3の互換 CSS を使用する場合も、新しい値(`#451A03`)が適用されます。 ### `border-input` と `border-border` の使い分け フォーム要素専用のボーダー色として `border-input` が追加されました。現在 `--color-border` と `--color-input` は同じ値ですが、将来的に分離する余地を残すため使い分けることをおすすめします。 - **`border-input`** ... Checkbox、Radio、Input、Textarea、Select など、フォーム内部の要素 - **`border-border`** ... Card、Checkbox Card、Radio Card など、フォーム**以外**または複合的な要素 旧 `border-base-stroke-default` を置き換える際は、対象要素がフォーム入力要素かどうかを確認することをおすすめします。 ### `ring` / `outline`(フォーカスリング・グロー)について フォーカス時のリング色として `--color-ring` が新規追加されました。旧コードが `primary` をフォーカスリングに流用していた場合、以下のように色トークンの置き換えが必要です。 | 旧 | 新 | |---|---| | `ring-primary` | `ring-ring` | | `outline-primary` | `outline-ring` | これに加えて、Rabee UI 内では用途ごとに `ring-*` と `outline-*` を以下のように使い分けています。移行時は色トークンの rename だけでなく、この慣習も参考にすると揃えやすくなります。 - **一般的なフォーカスリング** → `outline-ring outline-offset-2 focus-visible:outline-2`(Button、Input、Select、Menu 等の多くのコンポーネントで採用) - **hover 時の薄いグロー** → `hover:ring-4 hover:ring-ring/20`(Checkbox、Radio、Switch 等) - **inset ring や thumb の focus 表示** → `ring-*`(Slider、Notification 等で引き続き利用) `ring-primary/20`(旧ロジックの hover グロー)を使っていた場合は、`ring-ring/20` に置き換えてください。 お困りの際は、[お問い合わせフォーム](https://formee.me/@rabee/contact-rabeeui)または [Discord](https://discord.gg/VjtgZ4dkQa) からお気軽にご相談ください。 --- # Admin Layout Admin Layoutは、管理画面の各ページで必要となるタイトル、アクション、パンくずなどの基本構成を管理するコンポーネントです。 ## インストールの手順 以下のコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ## 依存コンポーネント 上記のサンプルを使うときは、以下のコンポーネントもダウンロードが必要です。 - [HeaderSnippet](/docs/samples/header) - [Sidebar](/docs/samples/sidebar) - [Breadcrumb](/docs/components/breadcrumb) - [Button](/docs/components/button) - [Chip](/docs/components/chip) - [Table](/docs/components/table) --- # Authentication Authenticationは、ユーザーがサービスを利用するために本人確認を行う一連の画面コンポーネントです。 ## 依存コンポーネント Authenticationを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](/docs/components/button) - [Card](/docs/components/card) - [CheckBox](/docs/components/checkbox) - [ImageUploader](/docs/components/imageuploader) - [Input](/docs/components/input) - [Label](/docs/components/label) ## サンプル ### Signup サービスを初めて利用するユーザーが新規アカウントを作成する画面です。 ### Registration サービスを初めて利用するユーザーが、新規アカウントの情報を入力して登録する画面です。 ### Signin サービスを使ったことのあるユーザーがサインインする画面です。 --- # 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](/docs/components/checkbox) ## 使い方 ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ### Error 入力内容に問題があり、エラーが表示されている状態です。 ### Disabled 利用不可の状態です。 ### GroupText `bind:group`を使うことで、複数のチェックボックスをグループ化し、同じ値を共有できます。 ### GroupImage `bind:group`を使うことで、複数のチェックボックスをグループ化し、同じ値を共有できます。 --- # Error Layout ErrorLayout は、HTTP ステータスコードに応じてメッセージを切り替えて表示するエラーページ向けレイアウトです。 4xx, 5xx 等のステータスコードに応じて、見出しと説明文、TOP への導線をまとめて表示できます。 ## プロパティ ErrorLayout は、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`statusCode`** | `number` | | 表示するHTTPステータスコードです。未定義のコードでは汎用エラー文言を表示します。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/ErrorLayout.svelte {#if statusCode} {statusCode} {/if} {errorMessageItem.title} {errorMessageItem.message} TOPへ戻る ``` ## 使い方 --- ## サンプル ### 404 ページが見つからない場合の表示です。 ### 403 アクセス権限がない場合の表示です。 ### 500 サーバーエラーが発生した場合の表示です。 --- # Form Form は、Webサイトやアプリケーションでユーザー入力を受け取り、送信するためのコンポーネントです。 メールアドレスやパスワードなどの入力欄をまとめ、バリデーション(required / pattern など)や送信処理を一元管理します。 ## 依存コンポーネント Formを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](/docs/components/button) - [Calendar](/docs/components/calendar) - [Card](/docs/components/card) - [CheckBox](/docs/components/checkbox) - [ImageUploader](/docs/components/imageuploader) - [Input](/docs/components/input) - [Label](/docs/components/label) - [Radio](/docs/components/radio) - [Select](/docs/components/select) - [Textarea](/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](/docs/components/button) - [Drawer](/docs/components/drawer) - [GlobalNavigation](/docs/components/globalnavigation) - [Input](/docs/components/input) - [Menu](/docs/components/menu) ## 使い方 --- # Header Snippet Header Snippetは、任意のコンテンツ・ハンバーガーメニュー・プロフィール画像で構成されるヘッダーのサンプルレイアウトです。 ## プロパティ Header Snippetは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`mobileMenus`** | `MenuItem[]` |[]| SP用のメニューとして表示する値の配列です。 | | **`currentIndex`** | `number` || 現在選択されているメニューを示すハイライト用の数値です。 | | **`profileImgUrl`** | `string` |''| プロフィール画像のURLです。 | | **`startContent`** | `Snippet` || 左側に配置するコンテンツです。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/HeaderSnippet.svelte {#if startContent} {@render startContent()} {/if} {#if mobileMenus.length} {#snippet children()} (isOpen = false)}> {#each mobileMenus as menu, index} {/each} {/snippet} {/if} {#if profileImgUrl} {:else} {/if} ``` ## 依存コンポーネント Header Snippetを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](/docs/components/button) - [Drawer](/docs/components/drawer) - [Menu](/docs/components/menu) ## 使い方 --- # 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 の 未読/既読表示のサンプルです。 未読の通知は上側にまとめて表示し、既読の通知は下側に表示します。 未読と既読の両方が存在する場合は、間に「新規」の区切りを表示します。 --- # Pricing Pricing は、料金プランをカードで並べて表示するサンプルです。 ## インストールの手順 以下のコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ### PricingCard ```svelte:atoms/PricingCard.svelte {plan.name} {#if plan.description} {plan.description} {/if} {plan.price} {#if plan.caption} {plan.caption} {/if} {#if button} {@render button()} {/if} {#if plan.labels?.length || plan.features?.length} {#if plan.labels?.length} {#each plan.labels as { label, value }} {label} {value} {/each} {/if} {#if plan.features?.length} {#each plan.features as feature} {feature.label} {/each} {/if} {/if} ``` ## 依存コンポーネント Pricing を使うときは、以下のコンポーネントもダウンロードが必要です。 - [PricingCard](#heading-sub-1) - [SegmentedControl](/docs/components/segmentedcontrol) - [Button](/docs/components/button) --- # Radio Card RadioCardは、ラジオボタンとカードUIを組み合わせた選択UI向けコンポーネントです。 ## プロパティ RadioCardは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`children`** | `Snippet<[]>` | | カード内に表示するコンテンツ | | **`group`** | `any` | | 選択値(`bind:group` で双方向バインド) | | **`isError`** | `boolean` | `false` | `true` の場合はエラースタイルを適用 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/RadioCard.svelte {@render children()} ``` ## 依存コンポーネント RadioCardを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Radio](/docs/components/radio) ## 使い方 ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 ### Error 入力内容に問題があり、エラーが表示されている状態です。 ### Disabled 利用不可の状態です。 ### GroupText `bind:group`を使うことで、複数のラジオボタンをグループ化し、同じ値を共有できます。 ### GroupImage `bind:group`を使うことで、複数のラジオボタンをグループ化し、同じ値を共有できます。 --- # Sidebar Sidebarは、Webサイトやアプリケーションの画面左側に表示されるコンポーネントです。 ヘッダーメニュー・ドロップダウンメニューなど、ナビゲーションに必要な要素をまとめて表示できます。 ## プロパティ Sidebarは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`headerMenu`** | `HeaderMenuProps` || ヘッダー部分に表示するメニュー情報(画像・タイトル・サブタイトルなど)です。 | | **`items`** | `MenuItems[]` || サイドバー内に表示するメニュー群です。 | | **`startContent`** | `Snippet` || メニュー項目の左側に表示するカスタム要素(アイコンなど)を指定できます。 | ### HeaderMenuProps HeaderMenuPropsは、ヘッダー部分に表示する情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`image`** | `string` || ヘッダーメニューに表示させる画像です。 | | **`title`** | `string` || ヘッダーメニューに表示させるタイトルです。 | | **`subTitle`** | `string` || ヘッダーメニューに表示させるサブタイトルです。 | | **`menus`** | `HeaderMenusProps[]` || ドロップダウンメニューで表示する項目の配列です。 | ### HeaderMenusProps HeaderMenusPropsは、ヘッダーのドロップダウン内の各メニュー項目を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`item`** | `string` || メニューセクションのラベルです。 | | **`shortCutText`** | `string` || ショートカットテキストです。 | | **`onClick`** | `() => void` || 押下時に発火させるコールバック関数です。 | ### MenuItems MenuItemsは、サイドバーのメニューカテゴリを表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`id`** | `string` || メニューカテゴリの一意な識別子です。 | | **`category`** | `string` || カテゴリのラベルです。 | | **`entries`** | `MenuEntry[]` || カテゴリ内のメニュー項目の配列です。 | ### MenuEntry MenuEntryは、各メニュー項目を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`id`** | `string` || メニュー項目の一意な識別子です。 | | **`text`** | `string` || メニュー項目のラベルです。 | | **`options`** | `MenuOptionProps[]` || サブメニューの設定です。 | ### MenuOptionProps MenuOptionPropsは、サブメニュー内の各オプションを表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`id`** | `string` || オプションの一意な識別子です。 | | **`label`** | `string` || オプションのラベルです。 | | **`onClick`** | `(items: MenuOptionProps) => void` || 押下時に発火させるコールバック関数です。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```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} handleClick(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} handleClickOption(option.onClick, option)}> {option.label} {/each} {/if} {/each} {/each} ``` ## 依存コンポーネント Sidebarを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Input](/docs/components/input) - [Popover](/docs/components/popover) - [Separator](/docs/components/separator) ## 使い方 --- # Sidebar Dropdown SidebarDropdownは、Webサイトやアプリケーションのサイドバー内に表示されるメニューコンポーネントです。 ヘッダー・フッター・ドロップダウン形式のメニューを持ち、ナビゲーションやアカウント切り替えなどの主要な要素を表示します。 ## プロパティ SidebarDropdownは、以下のプロパティをサポートしています。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`headerMenu`** | `HeaderMenuProps` || ヘッダー部分に表示するメニュー情報(画像・タイトル・サブタイトルなど)です。 | | **`footerMenu`** | `FooterMenuProps` || フッター部分に表示するメニュー情報(画像・タイトル・サブタイトルなど)です。 | | **`menus`** | `SidebarMenu[]` || サイドバー内に表示するドロップダウン形式のメニュー群です。 | | **`startContent`** | `Snippet` || メニュー項目の左側に表示するカスタム要素(アイコンなど)を指定できます。 | ### HeaderMenuProps HeaderMenuPropsは、ヘッダー部分に表示する情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`image`** | `string` || ヘッダーメニューに表示させる画像です。 | | **`title`** | `string` || ヘッダーメニューに表示させるタイトルです。 | | **`subTitle`** | `string` || ヘッダーメニューに表示させるサブタイトルです。 | | **`menus`** | `HeaderMenusProps[]` || ドロップダウンメニューで表示する項目の配列です。 | ### FooterMenuProps FooterMenuPropsは、フッター部分に表示する情報を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`image`** | `string` || フッターメニューに表示させる画像です。 | | **`title`** | `string` || フッターメニューに表示させるタイトルです。 | | **`subTitle`** | `string` || フッターメニューに表示させるサブタイトルです。 | | **`menus`** | `FooterMenusProps[]` || ドロップダウンメニューで表示する項目の配列です。 | ### HeaderMenusProps HeaderMenusPropsは、ヘッダーのドロップダウン内の各メニュー項目を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`item`** | `string` || メニューセクションのラベルです。 | | **`shortCutText`** | `string` || ショートカットテキストです。 | | **`onClick`** | `() => void` || 押下時に発火させるコールバック関数です。 | ### FooterMenusProps FooterMenusPropsは、フッターのドロップダウン内の各メニュー項目を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`item`** | `string` || メニューセクションのラベルです。 | | **`shortCutText`** | `string` || ショートカットテキストです。 | | **`onClick`** | `() => void` || 押下時に発火させるコールバック関数です。 | ### SidebarMenu SidebarMenuは、ドロップダウンメニューの各メニューを表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`label`** | `string` || メニューのラベルです。 | | **`items`** | `DropdownSection[]` || メニュー内のセクションの配列です。 | ### DropdownSection DropdownSectionは、ドロップダウン内のセクションを表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`label`** | `string` || セクションのラベルです。 | | **`items`** | `DropdownItem[]` || セクション内のメニュー項目の配列です。 | ### DropdownItem DropdownItemは、ドロップダウン内の各メニュー項目を表すオブジェクトです。 | 名前 | 型 | デフォルト値 | 説明 | | --- | --- | --- | --- | | **`label`** | `string` || メニュー項目のラベルです。 | | **`shortCutText`** | `string` || ショートカットテキストです。 | | **`subMenus`** | `DropdownSection[]` || サブメニューのセクションの配列です。 | ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```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](/docs/components/dropdownmenu) - [Popover](/docs/components/popover) - [Separator](/docs/components/separator) ## 使い方 --- # Status Select StatusSelect は、ステータス選択のサンプル表示用のコンポーネントです。 複数のステータスから1つを選択するUIを提供します。 ## インストールの手順 以下のコンポーネントのコードを、使いたいプロジェクトにコピー&ペーストします。 パスは実際のプロジェクトの構成にあわせて更新します。 ```svelte:modules/StatusSelect.svelte {#snippet optionContent({ option })} {#if option} {option.label} {:else} 未選択 {/if} {/snippet} ``` ## 依存コンポーネント StatusSelectを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Select](/docs/components/select) ## 使い方 ## サンプル ### Default 特に操作が行われていない、デフォルトの状態です。 --- # Table Tableコンポーネントを使用したサンプルです。 ChipやButtonなどのコンポーネントと組み合わせて、さまざまなデータに適したテーブルを作成できます。 ## MemberManagement メンバー一覧の表示に使うテーブルです。 ### 依存コンポーネント 上記のサンプルを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](/docs/components/button) - [Table](/docs/components/table) ## DataTable 様々なデータの表示に使うテーブルです。 ### 依存コンポーネント 上記のサンプルを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](/docs/components/button) - [Input](/docs/components/input) - [Pagination](/docs/components/pagination) - [Table](/docs/components/table) ## FormListTable フォーム一覧の表示に使うテーブルです。 ### 依存コンポーネント 上記のサンプルを使うときは、以下のコンポーネントもダウンロードが必要です。 - [Button](/docs/components/button) - [Chip](/docs/components/chip) - [Table](/docs/components/table) ---
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}」と入力してください
コードが一致しません。
コードが一致しました。
情報を取得できませんでした。 画面を更新して再度お試しください。
この操作は取り消せません。 削除すると、すべてのデータが完全に消去されます。
inert属性により、モーダルが開いている間は背景の要素にフォーカスできません。
{min}
{max}
現在の数値:{value}
{item.name}
アイテムがありません
{statusCode}
{errorMessageItem.message}
まだ通知がありません
{plan.name}
{plan.description}
{plan.price}
{plan.caption}