shark-ui について
shark-uiは、Ark UIを基盤とし、shadcnに似た開発フローを備えるShark UIコンポーネントレジストリ向けのスキルです。確認済みのドキュメントや例を参照し、RadixやshadcnのAPIを推測で使わないよう案内します。
主な機能
- 01Ark UIベースのSharkコンポーネント案内
- 02レジストリ資料によるコンポーネント検索
- 03フォームとオーバーレイの使用パターン
- 04スタイルとコンポーネント構成の規則
- 05CLIでの導入と差分確認の案内
活用シーン
- 01画面タスクに適したプリミティブの選択
- 02ドキュメントに沿ったフォームの構築
- 03ダイアログ、メニュー、コレクションの構成
- 04ローカル編集を保ったコンポーネント更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sharkui-inc/ shark-ui --skill shark-uiインストール後、Claude Code で/shark-uiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cli.mdcomponent-registry.mdreferences/primitives/accordion.mdaction-bar.mdalert-dialog.mdalert.mdannouncement.mdaspect-ratio.mdautocomplete.mdavatar.mdbadge.mdbottom-navigation.mdbreadcrumb.mdbutton-group.mdbutton.mdcalendar.mdcard.mdcarousel.mdchart.mdcheckbox.mdcircular-progress.mdcircular-slider.mdclipboard.mdcollapsible.mdcolor-picker.mdcombobox.mdcommand.mdcontext-menu.mddata-list.mddate-input.md詳細
Shark UI
Shark UI は、Ark UI を基盤とするコンポーネントレジストリで、shadcn のような開発者体験(npx shadcn@latest add @shark/<component>)を提供します。
CLI の例は、プロジェクトのパッケージランナー(npx shadcn@latest、pnpm dlx shadcn@latest、または bunx shadcn@latest)で実行してください。packageManager またはチームの規約に合わせます。
このスキルの用途
このスキルは、次の用途に使用します。
- UI タスクに適した Shark のプリミティブを選ぶ
- Shark がラップする Ark UI のパターンに沿って、正しい使用コード(インポート、構成、プロパティ)を記述する
- Shark のドキュメントや例を確認せずに、Radix/shadcn の API を想定することを避ける
- レジストリの例を、コンポーネントの組み合わせ方を知るための主要な参考資料として使用する
原則
- 既存のコンポーネントを優先します。 カスタム UI を作る前に、Shark のプリミティブと
registry/react/examples/を優先してください。references/component-registry.mdを参照してください。 - 作り直さずに組み合わせます。 設定画面のようなフローでは、ドキュメントにあるパーツ(例:
Tabs+Card+Field)を組み合わせます。ダッシュボードではSidebar、Table、チャートを使い、リポジトリ内の例に従ってください。 - カスタムクラスより組み込みのバリアントを優先します。 プリミティブを再スタイリングする前に、
variant、size、セマンティックトークンを使用してください(references/rules/styling.mdを参照)。 - セマンティックカラーを使用します。 プロダクト UI では、パレットのユーティリティを直接使うのではなく、
bg-primary、text-muted-foreground、border-inputを使用してください。
信頼できる情報源
- コンポーネントのドキュメント:
content/docs/components/*.mdx - レジストリの例:
registry/react/examples/<component>/example-*.tsx - 実装:
registry/react/components/<component>.tsx - 公開済みレジストリアイテム:
public/r/<name>.json(registry/manifest/<name>.tsからビルド) - LLM 向けルート:
app/(llms)/とlib/llms.ts - リポジトリの規約:
AGENTS.md
対象外
- ユーザーが明示的に求めない限り、Next.js アプリのルーティング、マーケティングページ、レジストリ以外のアプリコード。
- 明示的な依頼がない限り、生成済みの
public/r/*.jsonを手動で編集すること。
重要なルール
これらのルールは、Shark の出力に常に適用されます。各セクションには、該当する場合、誤った例/正しい例を含む詳細なガイダンスへのリンクがあります。
スタイリングと Tailwind → references/rules/styling.md
- レイアウトには
classNameを使用し、場当たり的な再スタイリングには使わないでください — プリミティブではバリアントとセマンティックトークンを優先します。 space-x-*/space-y-*は使用しないでください。flex/gridとgap-*を使用します。- 幅と高さが同じ場合は
size-*を使用します — アイコンや正方形のコントロールには、w-*/h-*の組み合わせよりも優先します。 truncateの短縮形を使用します —overflow-hidden text-ellipsis whitespace-nowrapは使用しません。- セマンティックトークンで対応できる場合、手動で
dark:のパレットを組み合わせないでください。 - 条件付きクラスや結合したクラスには
@/lib/utilsのcn()を使用します。 - オーバーレイに
z-indexを手動で設定しないでください —Dialog、Sheet、Drawer、AlertDialog、Menu、ContextMenu、Popover、Tooltip、HoverCardなどが重なり順を管理します。
フォームと入力 → references/rules/forms.md
- フォームのレイアウトには
FieldGroup+Fieldを使用します —div+space-y-*は使用しません。 - グループ内では
InputGroup+InputGroupInput/InputGroupTextareaを使用します —Input/Textareaを直接使用しません。 - アドオン — 入力欄の横にアクションを置く場合は、ドキュメントにある
InputGroup+InputGroupAddonのパターンを使用します。 - 少数の選択肢(2~7 個) —
Buttonをループしてアクティブ状態を手動でスタイリングするより、ToggleGroup+ToggleGroupItemを優先します。 - チェックボックス/ラジオボタンのグループには
FieldSet+FieldLegendを使用します — Field のドキュメントを参照してください。 - バリデーション —
Fieldにinvalidを設定すると、コントロールに自動的に渡されます。無効化のパターンについてはフォームガイドを参照してください。
フォームとバリデーション → references/rules/forms.md
コンポーネントの構成と合成 → references/rules/composition.md
- 正しい親の中に項目を配置する — 各プリミティブの構造に従います(例:ドキュメントに記載されているとおり、コレクション/リストのパーツ内にリスト行を配置します)。
- トリガー — Shark のパターンに従い、単一の子要素(
Button、a)とともにasChildを使用します。トリガーにはrender={...}を使用しないでください(references/rules/migration.mdを参照)。 - オーバーレイにはタイトルが必要です — アクセシビリティのために
DialogTitle、SheetTitleなどを使用します。視覚的に非表示にする場合はclassName="sr-only"を使用します。 - 複合コンポーネント — MDX と同様に、エクスポートされたパーツ(
CardHeader、TabsList+TabsTriggerなど)を使用します。プリミティブが意図的に最小限の構成でない限り、単一のスロットにまとめないでください。 TabsList内のTabsTrigger—Tabsのルート直下にトリガーを配置しないでください。Avatar+AvatarFallback— 画像の読み込みに失敗した場合に備えて、必ずフォールバックを指定します。
個別のマークアップではなく、コンポーネントを使用する
- ユースケースがドキュメントに合致する場合は、独自にスタイルを設定した
divよりもAlert、Separator、Skeleton、Badge(およびその他のプリミティブ)を優先します。 - トースト — Shark の
toast/ドキュメントのパターンに従います。必要な場合を除き、通知 DOM を独自に実装しないでください。
アイコン
- 装飾用アイコンについては、
AGENTS.mdとreferences/rules/styling.mdに従います(aria-hidden、例に示されたサイズ設定)。 - プロダクトの UI では、同じコンポーネントのレジストリ例と MDX で採用されているアイコンの扱いに合わせます。
Shark 固有のルール(必須)
- Shark または Ark の API を推測で作らないでください。MDX と
registry/react/components/<name>.tsxで確認します。 - Combobox(および類似のコンポーネント):
useFilter+useListCollection、collectionプロパティ、onInputValueChangeからのfilter(inputValue)、リスト内のcollection.items.map(...)を使用します(AGENTS.md)。 - Select/listbox でコレクションを使用する場合:例と同様に
createListCollection/useListCollectionを使用します。 - チャート:
content={(props) => <ChartTooltipContent {...props} />}を指定したChartTooltipを使用します。ツールチップのプロパティをスタブ化しないでください。静的プレビューでは、必要に応じてaccessibilityLayer={false}を指定できます(AGENTS.md)。 - Sidebar のドキュメントプレビュー:
absolute inset-0 overflow-hidden、className="absolute"を指定したSidebar、SidebarProviderのh-full、ScrollAreaがレイアウトを崩す場合はネイティブのoverflow-y-autoを使用します(AGENTS.md)。
コンポーネントの確認
一覧と ./references/primitives/<name>.md へのリンクについては、references/component-registry.md を参照してください。
使用ワークフロー
- 意図を特定します(オーバーレイ、フォーム、コレクションコントロール、チャートなど)。
references/component-registry.mdと、存在する場合は対象の./references/primitives/<name>.mdを開きます。- インストール方法、構造、API、Ark ドキュメントへのリンクについて、
content/docs/components/<name>.mdxを読みます。 registry/react/examples/<component>/example-*.tsxを少なくとも1つ開きます。- 動作が不明な場合は、Ark のインポートとプロパティの受け渡しについて
registry/react/components/<component>.tsxを読みます。 - 利用側のアプリでは、
resolvedPathsにすでにあるコンポーネントを再追加しないでください。 - アクセシビリティ、制御あり/制御なしの状態、SSR/遅延マウントのデフォルト、および上記の 重要なルール をセルフチェックします。
インストールの更新/差分確認
上流の CLI 出力をローカルの編集内容とマージする場合、上書きする前に、ファイルごとに npx shadcn@latest add @shark/<component> --dry-run と --diff を使用します。明示的なユーザーの承認なしに --overwrite を使用しないでください。references/cli.md を参照してください。
インストールのリファレンス
references/cli.md を参照してください。
npx shadcn@latest add @shark/<component>
合成度の高いプリミティブ
オーバーレイ、コレクション、アプリの外枠に関する作業を始める前に、以下のガイドを読んでください。
./references/primitives/dialog.md./references/primitives/sheet.md./references/primitives/menu.md./references/primitives/context-menu.md./references/primitives/popover.md./references/primitives/select.md./references/primitives/combobox.md./references/primitives/field.md./references/primitives/sidebar.md
詳細なリファレンス
references/rules/styling.md— セマンティックカラー、バリアント、className、間隔、size-*、truncate、ダークモード、cn()、z-indexreferences/rules/forms.md—FieldGroup、Field、InputGroup、ToggleGroup、FieldSet、バリデーションreferences/rules/composition.md— トリガー/コンテンツの階層、asChild、複合パーツreferences/rules/migration.md— Radix/shadcn の慣習と Shark/Ark(render→asChildなど)references/cli.md— CLI コマンド、@shark/*、ドライラン/差分- テーマ設定/CSS 変数 —
content/docs/(root)/styling.mdxおよびcontent/docs/(root)/内のインストール資料
出力チェックリスト
コードを返す前に、以下を確認してください。
- インポートと props が Shark のドキュメントやソースに一致している
- Shark で使われている Ark のパターンに沿った構成になっている(トリガー、コレクションオブジェクト)
- フォーム内のボタンに明示的な
typeが指定され、コントロールにラベルが関連付けられている - 該当する場合、コンボボックス/セレクトの例でコレクション+フィルターパターンを使用している
- 重要なルール(スタイリング、フォーム、構成、CLI)を満たしている