Babelize Elements

インストール

お好みのパッケージマネージャーを使って、プロジェクトに @babelize/elements をインストールします。

Babelize Elements は、React + Tailwind CSS のあらゆるプロジェクトにそのまま組み込めます。Next.js、Vite、Remix、その他 React をバンドルする環境が対象です。パッケージには TypeScript の型定義と、ESM および CJS のビルドが含まれています。ランタイムの依存関係は少なく、shadcn のエコシステムでは標準的なものです。アニメーションには motion、アイコンには lucide-react を使用します。

パッケージマネージャー

お好みのパッケージマネージャーでライブラリ全体をインストールします:

npm install @babelize/elements

Tailwind にパッケージを認識させる

Tailwind は、ソースファイル内で見つけたクラスのみを生成し、node_modules はスキャンしません。この手順を行わないと、コンポーネントはスタイルなしで描画されます。

インストールしたパッケージを Tailwind に一度指定します:

Tailwind をインポートしている CSS ファイルに @source の行を追加します。パスはそのファイルからの相対パスです:

app/globals.css
@import "tailwindcss";
@source "../node_modules/@babelize/elements/dist";

この手順は npm パッケージの場合のみ必要です。shadcn CLI でインストールしたコンポーネントは、Tailwind がすでにスキャンしているお使いのソースツリー内に配置されます。

テーマのトークン

コンポーネントは shadcn/ui のセマンティックトークン(bg-popover、text-muted-foreground、ring-ring など)でスタイルされるため、アプリのテーマ、角丸、ダークモードが自動的に反映されます。

すでに shadcn/ui を使用していますか? 特別な作業は不要です。shadcn init でトークンがすでに定義されています。

shadcn/ui を使用していませんか? Tailwind をインポートしている CSS ファイルに、トークンを一度追加してください。これは shadcn のニュートラルテーマです。ブランドに合わせて任意の値を変更できます。

app/globals.css
/* Make `dark:` follow the `.dark` class, as the tokens below do. */
@custom-variant dark (&:is(.dark *));

:root {
  --radius: 0.625rem;
  --background: oklch(1 0 0);
  --foreground: oklch(0.145 0 0);
  --card: oklch(1 0 0);
  --card-foreground: oklch(0.145 0 0);
  --popover: oklch(1 0 0);
  --popover-foreground: oklch(0.145 0 0);
  --primary: oklch(0.205 0 0);
  --primary-foreground: oklch(0.985 0 0);
  --secondary: oklch(0.97 0 0);
  --secondary-foreground: oklch(0.205 0 0);
  --muted: oklch(0.97 0 0);
  --muted-foreground: oklch(0.556 0 0);
  --accent: oklch(0.97 0 0);
  --accent-foreground: oklch(0.205 0 0);
  --destructive: oklch(0.577 0.245 27.325);
  --border: oklch(0.922 0 0);
  --input: oklch(0.922 0 0);
  --ring: oklch(0.708 0 0);
}

.dark {
  --background: oklch(0.145 0 0);
  --foreground: oklch(0.985 0 0);
  --card: oklch(0.205 0 0);
  --card-foreground: oklch(0.985 0 0);
  --popover: oklch(0.205 0 0);
  --popover-foreground: oklch(0.985 0 0);
  --primary: oklch(0.922 0 0);
  --primary-foreground: oklch(0.205 0 0);
  --secondary: oklch(0.269 0 0);
  --secondary-foreground: oklch(0.985 0 0);
  --muted: oklch(0.269 0 0);
  --muted-foreground: oklch(0.708 0 0);
  --accent: oklch(0.269 0 0);
  --accent-foreground: oklch(0.985 0 0);
  --destructive: oklch(0.704 0.191 22.216);
  --border: oklch(1 0 0 / 10%);
  --input: oklch(1 0 0 / 15%);
  --ring: oklch(0.556 0 0);
}

@theme inline {
  --radius-sm: calc(var(--radius) - 4px);
  --radius-md: calc(var(--radius) - 2px);
  --radius-lg: var(--radius);
  --radius-xl: calc(var(--radius) + 4px);
  --color-background: var(--background);
  --color-foreground: var(--foreground);
  --color-card: var(--card);
  --color-card-foreground: var(--card-foreground);
  --color-popover: var(--popover);
  --color-popover-foreground: var(--popover-foreground);
  --color-primary: var(--primary);
  --color-primary-foreground: var(--primary-foreground);
  --color-secondary: var(--secondary);
  --color-secondary-foreground: var(--secondary-foreground);
  --color-muted: var(--muted);
  --color-muted-foreground: var(--muted-foreground);
  --color-accent: var(--accent);
  --color-accent-foreground: var(--accent-foreground);
  --color-destructive: var(--destructive);
  --color-border: var(--border);
  --color-input: var(--input);
  --color-ring: var(--ring);
}

Tailwind v3 の場合は、shadcn v3 ガイドのとおり、同じ変数を tailwind.config.js 内の theme.extend.colors に対応付けてください。コンポーネントは Tailwind v4 向けに設計されています。v3 でも動作しますが、v4 のみのユーティリティ(shadow-xs など)は効果がなくなります。

すべてのコンポーネントは、パーツごとの上書き用に classNames prop も受け取るため、ソースをフォークしなくても任意のスロットのスタイルを変更できます。

コンポーネントを個別にインストールする

コンポーネントを1つずつ、コードベースに直接インストールしたい場合は、shadcn CLI を使用してください:

npx shadcn@latest add @babelize/language-switcher

または、パッケージに含まれる CLI を使用してください:

npx @babelize/elements add language-switcher

いずれの方法でも、コンポーネント(およびその cn ユーティリティと依存関係)が components/ui/ ディレクトリに書き込まれ、それ以降のコードはお客様の管理下になります。

前提条件

依存関係最小バージョン
React>=18
React DOM>=18
Tailwind CSS>=3
Node.js>=20

インストールの確認

コンポーネントをインポートして、すべてが正しく接続されていることを確認します:

import { LanguageSwitcher } from "@babelize/elements";

export function App() {
  return (
    <LanguageSwitcher
      locales={[{ code: "en" }, { code: "fr" }, { code: "es" }]}
      defaultValue="en"
      onValueChange={(code) => console.log("changed to", code)}
    />
  );
}

すべてのコンポーネントは TypeScript を優先して設計されており、独自の props インターフェースをエクスポートし、既存の next-intl、react-i18next、またはカスタムの i18n セットアップと連携して動作します。

次のステップ

このページの内容