@cakejp/design-system 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -1
- package/CLAUDE.md +22 -128
- package/README.md +5 -0
- package/bin/init.js +2 -2
- package/contracts/components.json +5 -1
- package/contracts/rules.json +17 -0
- package/dist/index.css +1 -1
- package/dist/index.js +846 -827
- package/dist/types/components/ec/product-carousel.d.ts +1 -1
- package/dist/types/components/primitives/form-field.d.ts +10 -1
- package/dist/types/components/primitives/list-item.d.ts +4 -1
- package/package.json +3 -3
- package/templates/AGENTS.md +1 -1
- package/templates/CLAUDE.md +1 -1
- package/AGENTS.md +0 -144
package/CHANGELOG.md
CHANGED
|
@@ -7,7 +7,53 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
## [0.
|
|
10
|
+
## [0.6.0] - 2026-06-11
|
|
11
|
+
|
|
12
|
+
### ✨ Added
|
|
13
|
+
|
|
14
|
+
- **ListItem**: インタラクティブ(`href` / `onClick`)な行に hover 背景(`Surface-Tertiary`)と focus-visible リング(`Focus-High-Emphasis`)を追加。`onClick` のみの場合は `role="button"` + Enter / Space キー操作にも対応。表示専用行(href/onClick なし)は変化なし (#21)
|
|
15
|
+
|
|
16
|
+
### 🐛 Fixed
|
|
17
|
+
|
|
18
|
+
- **border(全コンポーネント)**: 色指定のない `border` を持つ 16 コンポーネントに border 色を明示し、Tailwind v4 のグローバル base reset 非依存に。消費側がリセットを取り込まないと罫線が要素の文字色へ化ける問題を防止。回帰防止 lint(`scripts/check-border-color.mjs`)と「`dist/index.css` import 必須」の明記を追加 (#20)
|
|
19
|
+
- **文脈非依存性(text / icon / bg)**: 消費側の文字色・背景を継承して崩れる箇所を全コンポーネント監査で修正(敵対的検証で実害 12 / 誤検出 19 を仕分け)。Storybook に継承漏れを目視検出する「Hostile ctx」トグルを追加 (#23)
|
|
20
|
+
- **ListItem**: href(リンク)行で `onClick` / `aria-*` / `data-*` が内側要素に残り、キーボード操作時に発火しない問題を修正。props と focus を anchor に集約 (#24)
|
|
21
|
+
|
|
22
|
+
### 🛡 Internal
|
|
23
|
+
|
|
24
|
+
- **lint**: `check-border-color` が CVA 定義内の border も走査するよう拡張(色なし border の回帰防止を強化) (#24)
|
|
25
|
+
- **Storybook**: 「Hostile ctx」検出ツールが Radix Portal(Dialog/Popover 等)の継承漏れも検出できるよう body へのスタイル適用に対応 (#24)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## [0.5.0] - 2026-06-08
|
|
30
|
+
|
|
31
|
+
### 🚨 Breaking Changes
|
|
32
|
+
|
|
33
|
+
- **SectionHeader**: デフォルトの横余白 `px-4` を撤廃。従来の見た目を維持するには親要素側で `px-4` を付与してください (#14)
|
|
34
|
+
|
|
35
|
+
### ✨ Added
|
|
36
|
+
|
|
37
|
+
- **FormField**: `descriptionPosition` prop を追加(`"above"` | `"below"`)。グリッド横並び配置で description の有無による入力要素の縦位置ズレを `"below"` で回避可能 (#16)
|
|
38
|
+
|
|
39
|
+
### 🐛 Fixed
|
|
40
|
+
|
|
41
|
+
- **Input / Textarea**: ホバー時に緑ボーダー(`Focus-High-Emphasis`)を表示するように統一。Select / Checkbox と同じフィードバックに揃えた (#16)
|
|
42
|
+
- **Select / Checkbox / SearchBar**: ホバー/フォーカス時のボーダー色をオレンジ(`Brand-Cake-Orange`)から緑(`Focus-High-Emphasis`)に修正。フォーム要素全体でフォーカス色を統一 (#15)
|
|
43
|
+
- ボーダー色の `transition` に `border-color` を追加し、ホバー時のアニメーションをスムーズ化 (#16)
|
|
44
|
+
|
|
45
|
+
### 🛡 Internal
|
|
46
|
+
|
|
47
|
+
- SSR 後方互換テスト(17ケース)と tokens.json↔semantic.css 同期テストを追加 (#12)
|
|
48
|
+
- GitHub Actions CI を追加(PR + push:main で品質ゲート + テスト自動実行) (#12)
|
|
49
|
+
- lint-scratch: `<a href>` ルールに `lint-scratch-allow` コメント除外を追加 (#12)
|
|
50
|
+
- check-responsive: `grep` + `pipefail` によるサイレント失敗を修正 (#12)
|
|
51
|
+
- Codex 設定(`.codex/`)とプロジェクトスキル(`.agents/skills/`)を追加 (#13)
|
|
52
|
+
- Chip の States ストーリーに状態説明 JSDoc を追加 (#10)
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## [0.3.0] - 2026-05-04
|
|
11
57
|
|
|
12
58
|
### 🚨 Breaking Changes
|
|
13
59
|
|
package/CLAUDE.md
CHANGED
|
@@ -1,35 +1,32 @@
|
|
|
1
|
-
# Cake.jp Design System —
|
|
1
|
+
# Cake.jp Design System — 利用ガイド
|
|
2
|
+
|
|
3
|
+
> **このファイルは `@cakejp/design-system` を利用するプロジェクト向けです。**
|
|
4
|
+
> DS リポジトリ自体の開発には **CLAUDE_DEV.md** を参照してください。
|
|
2
5
|
|
|
3
6
|
## 目的
|
|
4
7
|
|
|
5
8
|
Cake.jp のフロントエンドとデザインシステムを正式に接続する。
|
|
6
|
-
PdM や社長が AI(Claude 等)で HTML
|
|
7
|
-
デザイナー・フロントエンドがいなくても、モック → バックエンド開発へそのまま移行できる品質を目指す。
|
|
9
|
+
PdM や社長が AI(Claude 等)で HTML モックを作る際、このパッケージを参照して高精度なモックを生成できるようにする。
|
|
8
10
|
|
|
9
11
|
---
|
|
10
12
|
|
|
11
|
-
##
|
|
13
|
+
## コードを書く前に必ず読むこと
|
|
12
14
|
|
|
13
|
-
**コードを1
|
|
15
|
+
**コードを1行でも書く前に、以下のファイルを読み込むこと。**
|
|
16
|
+
パスは `node_modules/@cakejp/design-system/` 配下、または DS リポジトリ直下。
|
|
14
17
|
|
|
15
18
|
| ファイル | 内容 | いつ読むか |
|
|
16
19
|
|---------|------|----------|
|
|
17
20
|
| **contracts/rules.json** | 禁止パターン・アクセシビリティ要件・ライティングルール | **コード生成前に必ず** |
|
|
18
|
-
| **contracts/components.json** |
|
|
21
|
+
| **contracts/components.json** | 全コンポーネントの定義(variants・rules・accessibility) | コンポーネント利用・画面作成時 |
|
|
19
22
|
| **tokens.json** | カラー・タイポグラフィ・スペーシング・影・角丸 | トークン値を参照する時 |
|
|
20
|
-
| **CLAUDE_PRODUCTION.md** | 本番実装参照ルール・Figmaチェックリスト・本番サイト対応表 |
|
|
21
|
-
|
|
22
|
-
> ※ Codex を使う場合は **AGENTS.md** を参照すること(明示的なファイル読み込み手順を記載)。
|
|
23
|
+
| **CLAUDE_PRODUCTION.md** | 本番実装参照ルール・Figmaチェックリスト・本番サイト対応表 | 本番再現・新規画面作成時 |
|
|
23
24
|
|
|
24
25
|
---
|
|
25
26
|
|
|
26
|
-
##
|
|
27
|
-
|
|
28
|
-
> 「読みます」ではなく「書く前にブロックする」ゲートとして運用すること。
|
|
27
|
+
## スクラッチコード禁止ルール
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
下記のいずれかを CSS または JSX に追加しようとした場合、**書く手を止めて** `contracts/components.json` と Storybook で同等パターンを探すこと:
|
|
29
|
+
下記のいずれかを CSS または JSX に追加しようとした場合、**書く手を止めて** `contracts/components.json` で同等パターンを探すこと:
|
|
33
30
|
|
|
34
31
|
| 追加しようとしているもの | DSで確認すること |
|
|
35
32
|
|------------------------|----------------|
|
|
@@ -39,128 +36,24 @@ PdM や社長が AI(Claude 等)で HTML モックを作る際、このリポ
|
|
|
39
36
|
| カスタムボーダー半径(`border-radius: ...px`) | `tokens.json` の `radius.*` を使う |
|
|
40
37
|
| カスタムフォントサイズ・ウェイト | `tokens.json` の `typography.*` を使う |
|
|
41
38
|
| 新しい `<div>` ラッパーでレイアウト構造を作る | Card, Section, Stack 等のコンポーネントに置き換えられないか確認 |
|
|
39
|
+
| 生の `<button>` `<input>` `<select>` `<textarea>` `<table>` | DS の Button / Input / Select / Textarea / DataTable を使う |
|
|
42
40
|
|
|
43
41
|
**確認手順:**
|
|
44
42
|
1. `contracts/components.json` で該当コンポーネントを検索
|
|
45
|
-
2.
|
|
46
|
-
3. DSに存在しない場合のみ、カスタム実装を許可(その場合はコメントで理由を記載)
|
|
47
|
-
|
|
48
|
-
### 書いた後ゲート(強制)
|
|
49
|
-
|
|
50
|
-
`.tsx` `.css` `.module.css` を**1ファイルでも編集したら必ず実行**:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
bash scripts/lint-scratch.sh
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
エラーが出た場合: **そのエラーを修正するまで次のタスクに進んではならない。**
|
|
57
|
-
|
|
58
|
-
> lint-scratch.sh が通っていないコードは未完成扱い。
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## ドキュメント構成
|
|
63
|
-
|
|
64
|
-
| ファイル | 内容 |
|
|
65
|
-
|---------|------|
|
|
66
|
-
| **CLAUDE.md**(本ファイル) | 概要・技術スタック・コマンド(Claude Code用) |
|
|
67
|
-
| **AGENTS.md** | 同上(Codex用。セッション開始時の読み込み指示・編集後コマンドを明記) |
|
|
68
|
-
| **contracts/components.json** | 全103コンポーネントの構造化定義(バリアント・アクセシビリティ要件) |
|
|
69
|
-
| **contracts/rules.json** | 禁止パターン・アクセシビリティ要件・タイポグラフィ定義 |
|
|
70
|
-
| **tokens.json** | カラー・スペーシング・シャドウトークンの機械可読定義 |
|
|
71
|
-
| **CLAUDE_PRODUCTION.md** | 本番実装参照ルール・Figmaチェックリスト(Cake.jp固有) |
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## デザインリソース
|
|
76
|
-
|
|
77
|
-
| リソース | URL |
|
|
78
|
-
|---------|-----|
|
|
79
|
-
| Figma Design System | https://www.figma.com/design/ExHuJOWJChJtk0qiskqEsI/Cake.jp-Design-System?node-id=18168-44099 |
|
|
43
|
+
2. DSに存在しない場合のみ、カスタム実装を許可(その場合はコメントで理由を記載)
|
|
80
44
|
|
|
81
45
|
---
|
|
82
46
|
|
|
83
47
|
## 技術スタック
|
|
84
48
|
|
|
85
49
|
- React 19 + TypeScript
|
|
86
|
-
- Vite(ビルド)
|
|
87
50
|
- Tailwind CSS v4(`@import "tailwindcss"` 構文。`@tailwind base` は v3 記法で使用禁止)
|
|
88
51
|
- shadcn/ui(Radix UI ベース、Cake.jp テーマ適用済み)
|
|
89
|
-
- Storybook(`@storybook/react-vite`)
|
|
90
52
|
- CVA(class-variance-authority)でバリアント管理
|
|
91
53
|
- Lucide React + iconsax-react(アイコン)
|
|
92
54
|
|
|
93
55
|
---
|
|
94
56
|
|
|
95
|
-
## ディレクトリ構成
|
|
96
|
-
|
|
97
|
-
```
|
|
98
|
-
src/
|
|
99
|
-
├── components/
|
|
100
|
-
│ ├── foundations/ # shadcn ベース汎用 UI(46個・全事業共通)
|
|
101
|
-
│ ├── primitives/ # 業界汎用パターン(35個・jobboard等他事業でも再利用可)
|
|
102
|
-
│ ├── ec/ # Cake.jp / EC 事業特化(23個・商品・配送・クーポン等)
|
|
103
|
-
│ └── pages/ # ページ単位のストーリー
|
|
104
|
-
├── prototypes/ # /mock スキルで生成されたプロトタイプ
|
|
105
|
-
├── lib/
|
|
106
|
-
│ └── utils.ts # cn() ユーティリティ
|
|
107
|
-
└── index.css # カラートークン定義 + Tailwind 設定
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### 3層構造の依存ルール
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
ec/ ← Cake.jp 特化(最上位)
|
|
114
|
-
↓
|
|
115
|
-
primitives/ ← 業界汎用パターン
|
|
116
|
-
↓
|
|
117
|
-
foundations/ ← shadcn ベース(最下位)
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
- `foundations/` は他層に依存しない
|
|
121
|
-
- `primitives/` は `foundations/` のみ参照可
|
|
122
|
-
- `ec/` は `foundations/` と `primitives/` を参照可
|
|
123
|
-
- **逆方向の依存は禁止**(primitives から ec を import する等)
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## コマンド
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
# 開発サーバー(Storybook)
|
|
131
|
-
npm run storybook
|
|
132
|
-
|
|
133
|
-
# プロトタイプビューアー
|
|
134
|
-
npm run dev
|
|
135
|
-
# → http://localhost:5173/prototypes
|
|
136
|
-
|
|
137
|
-
# ビルド
|
|
138
|
-
npm run build-storybook
|
|
139
|
-
|
|
140
|
-
# パッケージビルド(npm install 時に自動実行)
|
|
141
|
-
npm run build:lib
|
|
142
|
-
|
|
143
|
-
# 型チェック
|
|
144
|
-
npx tsc --noEmit
|
|
145
|
-
|
|
146
|
-
# リント
|
|
147
|
-
npm run lint
|
|
148
|
-
|
|
149
|
-
# スクラッチ検出(実装後に必ず実行)
|
|
150
|
-
bash scripts/lint-scratch.sh
|
|
151
|
-
|
|
152
|
-
# コンポーネント再利用チェック
|
|
153
|
-
bash scripts/check-story-reuse.sh
|
|
154
|
-
|
|
155
|
-
# ドリフト検出(コンポーネント追加後に実行)
|
|
156
|
-
bash scripts/check-drift.sh
|
|
157
|
-
|
|
158
|
-
# 全チェック一括実行
|
|
159
|
-
npm run check
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
---
|
|
163
|
-
|
|
164
57
|
## カラートークン早見表
|
|
165
58
|
|
|
166
59
|
| 用途 | トークン |
|
|
@@ -177,12 +70,13 @@ npm run check
|
|
|
177
70
|
|
|
178
71
|
---
|
|
179
72
|
|
|
180
|
-
##
|
|
73
|
+
## AI 生成コードの典型的な誤り
|
|
181
74
|
|
|
182
|
-
|
|
75
|
+
`contracts/rules.json` の `aiPatterns` セクションで詳細を確認すること。主な注意点:
|
|
183
76
|
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
77
|
+
- **価格表記**: `¥{数字,区切り}(税込)` — `円` `税込み` `(税込)` は禁止
|
|
78
|
+
- **日付表記**: `M月D日(曜日)` — `YYYY/MM/DD` や英語表記禁止
|
|
79
|
+
- **aria-label**: 日本語で記述 — 英語 aria-label 禁止
|
|
80
|
+
- **input type="date"**: 使用禁止 — Popover と Calendar を組み合わせる
|
|
81
|
+
- **Tag に onClick**: 禁止 — 押せるものは Chip を使う
|
|
82
|
+
- **SectionHeader 手書き**: 禁止 — `SectionHeader` コンポーネントを使う
|
package/README.md
CHANGED
|
@@ -19,6 +19,11 @@ import "@cakejp/design-system/dist/index.css"
|
|
|
19
19
|
<Button>カートに入れる</Button>
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
> **`dist/index.css` の import は必須。**
|
|
23
|
+
> このCSSにはカラートークン定義に加え、Tailwind v4 のベースレイヤー(`* { border-color: var(--border) }` 等)が含まれます。
|
|
24
|
+
> import しないと、Tailwind v4 の border-color 既定が `currentColor` のままになり、コンポーネントの罫線や枠線がその要素の文字色に化けます(例: テーブルの行罫線が黒くなる)。
|
|
25
|
+
> 自前の Tailwind 設定にマージしたい場合は `@cakejp/design-system/preset`(base レイヤー込み)を参照してください。
|
|
26
|
+
|
|
22
27
|
## 構造
|
|
23
28
|
|
|
24
29
|
3-tier アーキテクチャ:
|
package/bin/init.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// @cakejp/design-system init
|
|
4
4
|
// Consumer プロジェクトに AI (Claude / Codex) 向けルールファイルを設置する。
|
|
5
5
|
// AI エージェントは node_modules 配下のファイルを自動で読まないため、
|
|
6
|
-
// プロジェクトルートに AGENTS.md / CLAUDE.md(node_modules 内の DS
|
|
6
|
+
// プロジェクトルートに AGENTS.md / CLAUDE.md(node_modules 内の DS 利用ガイドを
|
|
7
7
|
// 参照する薄いポインタ)を置く必要がある。
|
|
8
8
|
//
|
|
9
9
|
// Usage:
|
|
@@ -128,7 +128,7 @@ if (created > 0) {
|
|
|
128
128
|
console.log(`
|
|
129
129
|
次のステップ:
|
|
130
130
|
1. AI (Claude Code / Codex) を再起動してルールを読み込ませる
|
|
131
|
-
2. UI を作る前に必ず node_modules/@cakejp/design-system/{
|
|
131
|
+
2. UI を作る前に必ず node_modules/@cakejp/design-system/{CLAUDE.md,contracts/*,tokens.json} を AI に読ませる
|
|
132
132
|
3. スクラッチコード(ハードコードカラー・余白・角丸等)を書かない運用を徹底する
|
|
133
133
|
`)
|
|
134
134
|
}
|
|
@@ -424,8 +424,12 @@
|
|
|
424
424
|
{
|
|
425
425
|
"name": "FormField",
|
|
426
426
|
"path": "src/components/primitives/form-field.tsx",
|
|
427
|
+
"variants": {
|
|
428
|
+
"descriptionPosition": ["above", "below"]
|
|
429
|
+
},
|
|
427
430
|
"rules": [
|
|
428
|
-
"Label+Input+エラーメッセージをセットで管理"
|
|
431
|
+
"Label+Input+エラーメッセージをセットで管理",
|
|
432
|
+
"グリッド横並び時は descriptionPosition='below' で高さを揃える"
|
|
429
433
|
]
|
|
430
434
|
},
|
|
431
435
|
{
|
package/contracts/rules.json
CHANGED
|
@@ -407,6 +407,23 @@
|
|
|
407
407
|
"message": "AI生成パターン: 左端カラーストライプ禁止(Alert含む)",
|
|
408
408
|
"fix": "border rounded-lg で全周ボーダー"
|
|
409
409
|
},
|
|
410
|
+
{
|
|
411
|
+
"id": "B1",
|
|
412
|
+
"severity": "error",
|
|
413
|
+
"category": "component",
|
|
414
|
+
"scope": "designSystemInternal",
|
|
415
|
+
"appliesTo": ["components/foundations/", "components/primitives/", "components/ec/"],
|
|
416
|
+
"pattern": "border 幅ユーティリティ(border / border-b / border-l 等)に色クラスが同居していない",
|
|
417
|
+
"message": "DSコンポーネントで色指定のない border を使わない。Tailwind v4 の border-color 既定は currentColor。消費アプリが preset.css のグローバル base リセット(* { @apply border-border })を取り込まない場合、罫線が要素の文字色に化ける(例: テーブル行に text-[var(--Text-High-Emphasis)] を付けると罫線が黒 #1C1A1A になる)。コンポーネントはグローバルリセットに依存せず自前で border 色を持つこと。",
|
|
418
|
+
"fix": "同じ className 内に border-[var(--Border-Medium-Emphasis)] 等を明示する(透明が意図なら border-transparent)。検査: npm run lint:border(scripts/check-border-color.mjs)"
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"id": "AI5",
|
|
422
|
+
"severity": "warning",
|
|
423
|
+
"category": "ai-pattern",
|
|
424
|
+
"message": "文脈非依存違反: text色/背景/アイコン色を明示せず親の継承や Tailwind v4 既定(border/ring/outline=currentColor)に委ねる。消費側が濃色テキストや色付き背景を敷くと文字・アイコン・枠が化ける。サーフェス(カード/オーバーレイ等)が bg 未指定だと親背景が透ける。",
|
|
425
|
+
"fix": "テキスト要素に text-[var(--Text-*)]、サーフェスに bg-[var(--Surface-*)] を明示。Content/オーバーレイ系ラッパは text-popover-foreground 等で子を隔離する。Storybook ツールバーの『Hostile ctx』を loud にして漏れ(マゼンタ化・背景透け)を目視確認する。"
|
|
426
|
+
},
|
|
410
427
|
{
|
|
411
428
|
"id": "AI3",
|
|
412
429
|
"severity": "warning",
|