- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Attachment
- Avatar
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Calendar
- Card
- Carousel
- Chart
- Checkbox
- Collapsible
- Combobox
- Command
- Context Menu
- Data Table
- Date Picker
- Dialog
- Direction
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Input OTP
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Message Scroller
- Native Select
- Navigation Menu
- Pagination
- Popover
- Progress
- Questionnaire
- Radio Group
- Resizable
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Toggle Group
- Tooltip
- Typography
ブロック
コンポーネントをブロック ライブラリに提供します。
ブロック ライブラリ に貢献するコミュニティを募集しています。コンポーネントとブロックを他の開発者と共有し、高品質で再利用可能なコンポーネントのライブラリの構築に役立ちます。
アプリケーション、マーケティング、製品など、あらゆる種類のブロックを見てみたいと思っています。
ワークスペースをセットアップする#
リポジトリをフォークする#
git clone https://github.com/shadcn-ui/ui.git新しいブランチを作成する#
git checkout -b username/my-new-block依存関係をインストールする#
pnpm install開発サーバーを起動します#
pnpm www:devブロックを追加する#
ブロックは、単一のコンポーネント (例: ui コンポーネントのバリエーション)、または複数のコンポーネント、フック、ユーティリティを含む複合コンポーネント (例: ダッシュボード) の場合があります。
新しいブロックを作成する#
apps/www/registry/new-york/blocks ディレクトリに新しいフォルダーを作成します。フォルダーの名前がケバブケースで、new-york の下にあることを確認してください。
apps
└── www
└── registry
└── new-york
└── blocks
└── dashboard-01注意: ビルド スクリプトは、default スタイルのブロックのビルドを処理します。
ブロック ファイルを追加します#
ファイルをブロック フォルダーに追加します。以下は、ページ、コンポーネント、フック、ユーティリティを含むブロックの例です。
dashboard-01
└── page.tsx
└── components
└── hello-world.tsx
└── example-card.tsx
└── hooks
└── use-hello-world.ts
└── lib
└── format-date.ts注意: 1 つのファイルから始めて、後でさらにファイルを追加できます。
ブロックをレジストリに追加します#
ブロック定義を registry-blocks.tsx に追加します。#
ブロックをレジストリに追加するには、ブロック定義を registry-blocks.ts に追加する必要があります。
これは、[https://ui.shadcn.com/schema/registry-item.json](https://ui.shadcn.com/schema/registry-item.json] のレジストリ スキーマに従います。
export const blocks = [
// ...
{
name: "dashboard-01",
author: "shadcn (https://ui.shadcn.com)",
title: "Dashboard",
description: "A simple dashboard with a hello world component.",
type: "registry:block",
registryDependencies: ["input", "button", "card"],
dependencies: ["zod"],
files: [
{
path: "blocks/dashboard-01/page.tsx",
type: "registry:page",
target: "app/dashboard/page.tsx",
},
{
path: "blocks/dashboard-01/components/hello-world.tsx",
type: "registry:component",
},
{
path: "blocks/dashboard-01/components/example-card.tsx",
type: "registry:component",
},
{
path: "blocks/dashboard-01/hooks/use-hello-world.ts",
type: "registry:hook",
},
{
path: "blocks/dashboard-01/lib/format-date.ts",
type: "registry:lib",
},
],
categories: ["dashboard"],
},
]名前、説明、タイプ、registryDependency、依存関係、ファイル、およびカテゴリを必ず追加してください。これらのそれぞれについては、スキーマ ドキュメント (近日公開予定) で詳しく説明します。
ビルド スクリプトを実行する#
pnpm registry:build注意: 変更のたびにこのスクリプトを実行する必要はありません。ブロック定義を更新する場合にのみ実行する必要があります。
ブロックを表示する#
ビルド スクリプトが完了すると、http://localhost:3333/blocks/[CATEGORY] でブロックを表示するか、http://localhost:3333/view/styles/new-york/dashboard-01 で全画面プレビューを表示できます。


ブロックを構築する#
これで、ブロック フォルダー内のファイルを編集し、ブラウザーで変更を表示することで、ブロックを構築できるようになります。
さらにファイルを追加する場合は、必ずブロック定義の files 配列に追加してください。
ブロックを公開する#
ブロックを公開する準備ができたら、メイン リポジトリにプルリクエストを送信できます。
ビルド スクリプトを実行する#
pnpm registry:buildスクリーンショットをキャプチャする#
pnpm registry:capture注意: 以前にキャプチャ スクリプトを実行したことがある場合は、apps/www/public/r/styles/new-york にある既存のスクリーンショット (明るい部分と暗い部分の両方) を削除して、スクリプトを再度実行する必要がある場合があります。
プルリクエストを送信する#
変更をコミットし、メイン リポジトリにプルリクエストを送信します。
あなたのブロックはレビューされ、マージされます。マージされると、Web サイトに公開され、CLI 経由でインストールできるようになります。
カテゴリ#
categories プロパティは、レジストリ内のブロックを整理するために使用されます。
カテゴリを追加する#
新しいカテゴリを追加する必要がある場合は、それを apps/www/registry/registry-categories.ts の registryCategories 配列に追加します。
export const registryCategories = [
// ...
{
name: "Input",
slug: "input",
hidden: false,
},
]ガイドライン#
ブロック ライブラリに貢献する際に従うべきガイドラインをいくつか示します。
- ブロック定義には次のプロパティが必要です:
name、description、type、files、およびcategories。 - 必ずすべてのレジストリ依存関係を
registryDependenciesにリストしてください。レジストリの依存関係は、レジストリ内のコンポーネントの名前です。input、button、cardなど - 必ずすべての依存関係を
dependenciesにリストしてください。依存関係は、レジストリ内のパッケージの名前です。zod、sonnerなど - ブロックにページ (オプション) がある場合、それは
files配列の最初のエントリであり、targetプロパティを持つ必要があります。これは、CLI がファイルベースのルーティングの正しい場所にページを配置するのに役立ちます。 - インポートでは常に
@/registryパスを使用する必要があります。 例:import { Input } from "@/registry/new-york/input"