mcpField
S
skeleton

skeleton

github.com/claude-dev-suiteデザイン・UI4648 回インストール2 日前に更新
リポジトリ

skeleton について

Svelte、特に SvelteKit で Skeleton UI を使うための開発リファレンスです。コンポーネントの設定、テーマの利用、よくある問題への対処を扱います。

主な機能

  1. 01Svelte と SvelteKit の設定ガイド
  2. 02レイアウトとフォームのコンポーネント
  3. 03デザイントークンとテーマのガイド
  4. 04ストアの初期化とトラブルシューティング

活用シーン

  1. 01SvelteKit アプリでの Skeleton の設定
  2. 02テーマ対応の色とダークモードの適用
  3. 03モーダル、トースト、スタイルの問題解決

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill skeleton

インストール後、Claude Code で/skeletonを入力して読み込まれたか確認します。

同梱ファイルquick-ref/components-cheatsheet.mdtheming.md

詳細

Skeleton UI スキル

完全なリファレンス:デザイントークン、カスタムテーマ、テーマの切り替え、データ表示(カード、テーブル、アバター)、フィードバック(トースト、モーダル)、ナビゲーション(タブ、ステッパー、ページネーション)、ストアの設定については、theming.md を参照してください。

このスキルを使用しない場合

  • React/Vue/Angular プロジェクト - Skeleton は Svelte 専用です
  • プレーンな HTML/CSS - Skeleton には Svelte と Tailwind CSS が必要です
  • ヘッドレス UI が必要な場合 - Skeleton はスタイル付きコンポーネントを提供します
  • SvelteKit を使用していない場合 - Skeleton は SvelteKit 向けに最適化されています

インストール

# Create new SvelteKit project
npx sv create my-app
cd my-app

# Add Skeleton
npx @skeletonlabs/skeleton-cli add skeleton

# Or manual installation
npm install @skeletonlabs/skeleton @skeletonlabs/tw-plugin
npm install -D tailwindcss postcss autoprefixer

設定

tailwind.config.js
import { skeleton } from '@skeletonlabs/tw-plugin';

export default {
  darkMode: 'class',
  content: [
    './src/**/*.{html,js,svelte,ts}',
    require.resolve('@skeletonlabs/skeleton').replace(/\/index\.js$/, '/**/*.{html,js,svelte,ts}')
  ],
  plugins: [
    skeleton({
      themes: {
        preset: ['skeleton', 'modern', 'crimson'],
      },
    }),
  ],
};
app.postcss
@import '@skeletonlabs/skeleton/styles/skeleton.css';
@tailwind base;
@tailwind components;
@tailwind utilities;
app.html
<body data-theme="skeleton" class="h-full">
  %sveltekit.body%
</body>

レイアウトコンポーネント

AppShell
<script>
  import { AppShell, AppBar, AppRail, AppRailTile } from '@skeletonlabs/skeleton';
  let { children } = $props();
</script>

<AppShell>
  <svelte:fragment slot="header">
    <AppBar>
      <svelte:fragment slot="lead">
        <strong>My App</strong>
      </svelte:fragment>
      <svelte:fragment slot="trail">
        <button class="btn variant-filled-primary">Login</button>
      </svelte:fragment>
    </AppBar>
  </svelte:fragment>

  <svelte:fragment slot="sidebarLeft">
    <AppRail>
      <AppRailTile label="Home">🏠</AppRailTile>
      <AppRailTile label="Settings">⚙️</AppRailTile>
    </AppRail>
  </svelte:fragment>

  {@render children()}
</AppShell>

フォームコンポーネント

ボタン

<button class="btn variant-filled-primary">Primary</button>
<button class="btn variant-ghost-primary">Ghost</button>
<button class="btn variant-soft-primary">Soft</button>
<button class="btn variant-ringed-primary">Ringed</button>


<button class="btn btn-sm">Small</button>
<button class="btn btn-lg">Large</button>


<button class="btn-icon variant-filled-primary">🔔</button>
入力
<label class="label">
  <span>Email</span>
  <input class="input" type="email" placeholder="Enter email" />
</label>

<label class="label">
  <span>Message</span>
  <textarea class="textarea" rows="4"></textarea>
</label>

<label class="label">
  <span>Country</span>
  <select class="select">
    <option value="us">United States</option>
    <option value="uk">United Kingdom</option>
  </select>
</label>
チェックボックス、ラジオボタン、トグル
<label class="flex items-center space-x-2">
  <input class="checkbox" type="checkbox" />
  <span>Accept terms</span>
</label>

<label class="flex items-center space-x-2">
  <input class="radio" type="radio" name="plan" value="pro" />
  <span>Pro</span>
</label>

<label class="flex items-center space-x-2">
  <input class="toggle" type="checkbox" />
  <span>Dark mode</span>
</label>

データ表示

カード
<div class="card p-4">
  <header class="card-header">
    <h3 class="h3">Card Title</h3>
  </header>
  <section class="p-4">Card content</section>
  <footer class="card-footer">
    <button class="btn variant-filled-primary">Action</button>
  </footer>
</div>


<a href="/item/1" class="card card-hover p-4">Clickable</a>
リスト
<nav class="list-nav">
  <ul>
    <li><a href="/">Dashboard</a></li>
    <li><a href="/users">Users</a></li>
  </ul>
</nav>

ユーティリティクラス


<div class="bg-surface-100-800-token">Adapts to theme</div>


<h1 class="h1">Heading 1</h1>
<h2 class="h2">Heading 2</h2>
<p class="lead">Lead paragraph</p>


<span class="badge variant-filled-primary">Badge</span>
<span class="chip variant-filled-tertiary">Chip</span>

デザイントークン

/* Base colors */
--color-primary-500
--color-secondary-500
--color-surface-500

/* Color shades: 50-950 */
--color-primary-50    /* Lightest */
--color-primary-500   /* Base */
--color-primary-950   /* Darkest */

/* Typography */
--base-font-family
--heading-font-family

/* Border radius */
--theme-rounded-base
--theme-rounded-container
デザイントークンの使用

<div class="bg-primary-500 text-on-primary-token">
  Primary background
</div>


<div style="background-color: rgb(var(--color-primary-500));">
  Custom styling
</div>

ベストプラクティス

  1. ルートレイアウトでストアを必ず初期化します
  2. 一貫したスタイル設定にはバリアントクラスを使用します
  3. テーマに対応した色にはデザイントークンを活用します
  4. ダークモードとライトモードを自動で切り替えるには -token 接尾辞を使用します
  5. アクセシビリティを意識し、セマンティック HTML を使用します

アンチパターン

アンチパターン問題点正しい方法
ストアを初期化しないモーダルやトーストが動作しませんレイアウトで initializeStores() を呼び出します
skeleton.css を忘れるコンポーネントにスタイルが適用されませんTailwind ディレクティブより前にインポートします
Tailwind の標準色を使用するテーマ設定が崩れますデザイントークンを使用します
data-theme がないテーマが適用されません<body> に追加します
darkMode: 'media'ダークモードの設定が誤っていますdarkMode: 'class' を設定します

トラブルシューティング(クイックガイド)

問題解決策
モーダルが表示されないルートレイアウトで initializeStores() を呼び出します
スタイルが適用されないapp.postcss で skeleton.css をインポートします
テーマが適用されないbody に data-theme="skeleton" を追加します
ダークモードが動作しないtailwind.config で darkMode: 'class' を設定します
トーストが表示されないルートレイアウトに <Toast /> を追加します

リファレンスドキュメント

コメント