Claude-skill-registry jp-ui-components
jp-uiのコンポーネント作成とStorybook Page作成のルールを守るためのスキル。Base UIラッパーの方針、render/useRenderの維持、レイアウト/余白/幅ルールを適用する。
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/jp-ui-components" ~/.claude/skills/majiayu000-claude-skill-registry-jp-ui-components && rm -rf "$T"
manifest:
skills/data/jp-ui-components/SKILL.mdsource content
jp-ui Components
方針
- 既存のPageに合わせる:
,src/pages/ColorsPage.*
,src/pages/IconsPage.*
を基準にする。src/pages/TypesettingPage.* - Pageは基本「背景・文字色・上下余白」を持つラッパーで、中身は適切なmax-widthのコンテナで中央寄せする。
- 「幅を満たす系(Field, InputBoxなど)」も、コンテナの幅はmax-widthで制限し、要素はコンテナ幅100% にする。
- ルールを守らない実装が出やすいので、幅・中央寄せ・コンテナ構造は明示的にコード化する。
実装ルール(必須)
-
Pageラッパー
とpadding
/background
を指定する。color- 例:
padding: 32px 16px 80px; background-color: var(--surface); color: var(--on-surface);
-
中央寄せコンテナ
は デフォルト 640px とする。max-width- 特別な指定がある場合のみ、その数値を使う(例: 一覧/グリッドで
)。max-width: 960px
を指定する。margin: 0 auto; width: 100%;
-
幅を満たす系アイテム(Field, InputBox など)
- コンテナ内で
とし、コンテナのmax-widthで制約する。width: 100% - 画面全幅に引き伸ばさない。必ず中央寄せコンテナの中に置く。
- コンテナ内で
コンポーネント作成ルール(必須)
-
Base UIラッパーが原則
- Base UIコンポーネントは原則ラッパーTSXを作り、利用体験を統一する(className自動付与・variant/slotの共通化など)。
- 例外として、ラッパーが不要なほど単純な場合のみBase UIを直接使用する。
-
render/useRenderの維持
- Base UIの
の仕組みは壊さない。render
が関数のときも必ずマージする。className - 自前コンポーネントは
を使い、useRender
を透過できるAPIにする。render
- Base UIの
-
テンプレ利用
- Base UIラッパーは
をベースに作成する。templates/base-ui-wrapper.tsx - 自前コンポーネントは
をベースに作成する。templates/custom-use-render.tsx
- Base UIラッパーは
-
Exampleを正にする
- 各コンポーネントには
を同階層に作り、Exampleを実装例の正とする。Example.tsx - Storybookの
はDefault
を基本とする。render: () => <Example />
は Example を元に自動生成されるため、Exampleが実装例の唯一の情報源になる。docs/llm- 同一ディレクトリに複数コンポーネントがある場合は
で区別して良い。*Example.tsx
- 各コンポーネントには
推奨構成(最小形)
// src/pages/FooPage.tsx import styles from './FooPage.module.css'; export function FooPage() { return ( <div className={styles.Page}> <div className={styles.Container}> {/* contents */} </div> </div> ); }
/* src/pages/FooPage.module.css */ .Page { padding: 32px 16px 80px; background-color: var(--surface); color: var(--on-surface); } .Container { width: 100%; max-width: 640px; /* default. override when specified */ margin: 0 auto; }
追加メモ
- 既存Pageの実装に合わせて、
やdisplay: grid
は必要に応じて追加する。gap - ルールがぶれそうな場合は、Containerの責務をコメントで短く明示する。