@cakejp/design-system 0.6.0 → 0.9.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 +85 -0
- package/CLAUDE.md +6 -3
- package/contracts/components.json +160 -13
- package/contracts/composition.json +135 -0
- package/contracts/rules.json +49 -10
- package/contracts/screen-patterns.json +224 -0
- package/dist/index.css +1 -1
- package/dist/index.js +2880 -2262
- package/dist/types/components/ec/admin-layout.d.ts +8 -1
- package/dist/types/components/{pages/cake/_mypage-shell.d.ts → ec/mypage-shell.d.ts} +1 -1
- package/dist/types/components/foundations/icon-badge.d.ts +18 -0
- package/dist/types/components/primitives/admin-header.d.ts +29 -0
- package/dist/types/components/primitives/admin-side-nav.d.ts +67 -0
- package/dist/types/components/primitives/category-scroll.d.ts +1 -1
- package/dist/types/components/primitives/container.d.ts +18 -0
- package/dist/types/components/primitives/ec-page-shell.d.ts +47 -0
- package/dist/types/components/primitives/filter-bar.d.ts +1 -1
- package/dist/types/components/primitives/funnel-shell.d.ts +52 -0
- package/dist/types/components/primitives/section-header.d.ts +9 -1
- package/dist/types/components/primitives/section-nav.d.ts +60 -0
- package/dist/types/components/primitives/section.d.ts +26 -0
- package/dist/types/components/primitives/workspace-layout.d.ts +42 -0
- package/dist/types/index.d.ts +20 -3
- package/package.json +5 -5
- package/src/preset-standalone.css +15 -0
- package/src/preset.css +9 -0
- package/templates/CLAUDE.md +2 -0
- package/tokens.json +22 -7
- package/PUBLISHING.md +0 -106
- package/RELEASE.md +0 -205
- package/component-registry.json +0 -1149
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"name": "Cake.jp Design System — Screen Patterns Contracts",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"description": "CRUD 機能でどの画面パターンを使うかの機械可読な判断基準。5パターンの定義・CRUD 対応・決定木・編集UIの観点比較を構造化する。人間向けの解説は guidelines/foundations/screen-patterns.md。",
|
|
6
|
+
"source": "GitHub issue #37 CRUDの画面設計の型化と基本パターンの整備",
|
|
7
|
+
"relatedContract": "本契約はページ種別の選択(何を使うか)を担う。選んだ後の骨格の組み方(外枠構造・余白リズム・視覚階層)は contracts/composition.json を参照する。",
|
|
8
|
+
"shellComponents": "各パターンの dsComponents に挙がるレイアウトシェル(AdminLayout / WorkspaceLayout / MypageShell 等)の実装一覧は contracts/components.json の kind:\"shell\" を参照する。",
|
|
9
|
+
"disclaimer": "本契約は正解を1つに固定するものではない。最適なパターンは案件ごとに変わり、集中させたい度合いのグラデーション・IA設計・API制約(1回保存か段階保存か・楽観ロック・URL直リンク要件等)に依存する。decisionTree は候補を1つに絞るための共通言語であり、絞った後にIA/API制約で調整してよい(理由を残すこと)。",
|
|
10
|
+
"model": {
|
|
11
|
+
"description": "画面パターンは2軸で整理する。第1軸=シェル(通常シェル Standard を保つか / 集中モード Focused か / オーバーレイか)、第2軸=態様(見る / 変更して保存・確定する)。",
|
|
12
|
+
"axes": {
|
|
13
|
+
"shell": ["standard(グロナビ/サイドナビを保つ通常シェル)", "focused(グロナビを外す集中モード)", "overlay(元画面の上に重ねる)"],
|
|
14
|
+
"mode": ["view(見る・探す・一覧する)", "edit(内容を変更して保存・確定する)"]
|
|
15
|
+
},
|
|
16
|
+
"standardPageNote": "Standard Page は通常シェルの総称(上位分類)で、View(閲覧)と Edit(変更して保存・確定)の2態様を持つ。Edit はフォームに限らず、通常シェルを保ったまま内容を変更し保存/確定する画面全般(管理フォーム編集・カートの数量変更+購入手続きへ・記事の軽い編集)を含む。"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"patterns": [
|
|
20
|
+
{
|
|
21
|
+
"id": "standard-page-view",
|
|
22
|
+
"name": "Standard Page(View)",
|
|
23
|
+
"group": "standard-page",
|
|
24
|
+
"aliases": ["通常ページ", "Standard Page"],
|
|
25
|
+
"purpose": "閲覧・一覧・詳細の表示(Read)。見る・探す・一覧するのが主目的。グロナビ/サイドナビを保つ通常シェル。",
|
|
26
|
+
"dsComponents": ["AdminLayout", "EcPageShell", "DataTable", "Section", "Container", "SectionHeader"],
|
|
27
|
+
"dsComponentsNote": "シェルは文脈で選ぶ: 管理画面=AdminLayout(サイドナビ+ヘッダー内包)/ EC 消費者側=EcPageShell(Header+BottomTabBar を SP 下部固定で受ける最頻出の骨格)/ マイページ配下=MypageShell。中身は Section(全幅背景帯)+ Container(中央寄せ・左右余白)で組む。",
|
|
28
|
+
"navigation": {
|
|
29
|
+
"globalNav": "あり",
|
|
30
|
+
"breadcrumb": "あり",
|
|
31
|
+
"header": "通常ヘッダー"
|
|
32
|
+
},
|
|
33
|
+
"crud": ["Read"],
|
|
34
|
+
"whenToUse": [
|
|
35
|
+
"一覧・詳細・ダッシュボードなど閲覧が主目的",
|
|
36
|
+
"編集の保存が主目的ではない"
|
|
37
|
+
],
|
|
38
|
+
"whenNotToUse": [
|
|
39
|
+
"通常シェルを保ったまま内容を変更し保存/確定するのが主目的(→ Standard Page(Edit))",
|
|
40
|
+
"複数情報をまたぐ集中編集(→ Focused Workspace)"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "standard-page-edit",
|
|
45
|
+
"name": "Standard Page(Edit)",
|
|
46
|
+
"group": "standard-page",
|
|
47
|
+
"aliases": ["通常ページ+保存", "Form Page", "form-page"],
|
|
48
|
+
"purpose": "通常シェル(グロナビ/サイドナビ)を保ったまま内容を変更し保存/確定する画面全般。フォームに限らない(管理フォーム編集・カートの数量変更+購入手続きへ・記事の軽い編集)。既存管理画面ではこれがスタンダード。",
|
|
49
|
+
"dsComponents": ["AdminLayout", "EcPageShell", "Form", "Section", "Container", "SectionHeader"],
|
|
50
|
+
"dsComponentsNote": "シェルは文脈で選ぶ: 管理画面のフォーム編集=AdminLayout / EC 消費者側の編集(カートの数量変更+確定 等)=EcPageShell(下部 CTA 主体なら bottomTab の代わりに StickyActionBar を渡す)/ マイページ配下=MypageShell。",
|
|
51
|
+
"navigation": {
|
|
52
|
+
"globalNav": "あり",
|
|
53
|
+
"breadcrumb": "あり",
|
|
54
|
+
"header": "通常ヘッダー"
|
|
55
|
+
},
|
|
56
|
+
"crud": ["Update", "Create"],
|
|
57
|
+
"whenToUse": [
|
|
58
|
+
"単一エンティティのまとまった項目を1画面で編集・保存する(管理フォーム編集)",
|
|
59
|
+
"サイドナビ/グロナビのコンテキストを保ったまま内容を変更したい",
|
|
60
|
+
"その場で編集し確定アクションへ進む(例: カートの数量変更→購入手続きへ)",
|
|
61
|
+
"通常シェルを保った軽い編集(例: 記事の見出し・本文の軽微な修正)",
|
|
62
|
+
"1回保存が基本で未保存の途中状態が発生しにくい"
|
|
63
|
+
],
|
|
64
|
+
"whenNotToUse": [
|
|
65
|
+
"一部の軽い項目だけ・一覧を見たまま素早く終わる(→ ResponsiveDialog)",
|
|
66
|
+
"複数情報を横断し段階的で時間がかかる・没入して執筆したい(→ Focused Workspace)"
|
|
67
|
+
],
|
|
68
|
+
"examples": [
|
|
69
|
+
"管理画面の商品編集フォーム(サイドナビを保ったまま保存)",
|
|
70
|
+
"EC のカート画面(シェル維持・その場で数量変更・購入手続きへ確定)",
|
|
71
|
+
"記事エディタの軽い編集(通常シェルのまま見出し・本文を直す。没入執筆なら Focused Workspace)"
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "focused-workspace",
|
|
76
|
+
"name": "Focused Workspace",
|
|
77
|
+
"aliases": ["Full Page", "編集ワークスペース", "集中モード"],
|
|
78
|
+
"purpose": "複数情報をまたぐ複雑な編集に集中する。グロナビを外し編集に専念させる。",
|
|
79
|
+
"dsComponents": ["WorkspaceLayout", "FunnelShell", "SectionNav", "ResponsiveDialog"],
|
|
80
|
+
"dsComponentsNote": "実装は用途で 2 つのシェルを使い分ける。管理の複雑編集(複数情報を横断・編集に集中)=WorkspaceLayout(グロナビ非表示・編集ヘッダーを内包)。EC 購入導線(カート→お届け先→支払い→確認 の一直線ファネル)=FunnelShell(グロナビ・BottomTabBar・パンくずなし・進捗インジケータ+下部 CTA を内包)。どちらも手組みの独自レイアウトを作らない。編集内のセクションナビには SectionNav(ページ内アンカー移動専用。SideNav を流用しない)を渡す。編集内の作成・編集ダイアログには ResponsiveDialog / AlertDialog を併用する。",
|
|
81
|
+
"navigation": {
|
|
82
|
+
"globalNav": "なし(編集内のセクションナビ=アンカー/ステップは可)",
|
|
83
|
+
"breadcrumb": "原則なし(戻る導線で代替)",
|
|
84
|
+
"header": "編集ヘッダー(左上=戻る、右上=ワークスペース全体の上位アクションのみ・ある場合)"
|
|
85
|
+
},
|
|
86
|
+
"crud": ["Create", "Update"],
|
|
87
|
+
"whenToUse": [
|
|
88
|
+
"複数エンティティ・関連情報をまたぐ編集",
|
|
89
|
+
"作業時間が長い・段階的(下書き・途中保存・複数ステップ)",
|
|
90
|
+
"未保存状態が発生しやすくブラウザ更新・戻るの破棄/復元を考慮したい",
|
|
91
|
+
"URL 共有・直接アクセスが必要",
|
|
92
|
+
"バリデーションやAPIエラー(409・404・権限・競合)が複雑",
|
|
93
|
+
"将来的に項目・ステップが増える見込みが大きい"
|
|
94
|
+
],
|
|
95
|
+
"whenNotToUse": [
|
|
96
|
+
"一部の軽い項目だけの編集(→ ResponsiveDialog)",
|
|
97
|
+
"通常シェルを保ったまま保存/確定する標準編集(→ Standard Page(Edit))"
|
|
98
|
+
],
|
|
99
|
+
"detailRules": [
|
|
100
|
+
"グロナビは出さない",
|
|
101
|
+
"編集内のセクションナビ(アンカー/ステップ)は可",
|
|
102
|
+
"編集ヘッダー左上=戻る導線",
|
|
103
|
+
"編集ヘッダー右上=ワークスペース全体の上位アクションのみ(例: 登録申請・公開申請・承認依頼・全体を確定する)。ある場合のみ置く",
|
|
104
|
+
"セクション/行単位の操作(商品を追加・行を削除・セクション単位の編集・個別項目の保存)はヘッダーでなく対象コンテンツの近くに置く",
|
|
105
|
+
"パンくずは原則置かず戻る導線で代替する",
|
|
106
|
+
"離脱・更新・戻るで作業が失われないよう未保存の破棄/復元を設計する",
|
|
107
|
+
"管理画面限定ではなくEC側にも集中モードは存在し、その場合ヘッダーの上位アクションや戻り先が変わる"
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"id": "responsive-dialog",
|
|
112
|
+
"name": "ResponsiveDialog",
|
|
113
|
+
"aliases": ["Semi Modal"],
|
|
114
|
+
"purpose": "軽〜中程度の作成・編集。一覧のコンテキストを維持したまま素早く終える。",
|
|
115
|
+
"dsComponents": ["ResponsiveDialog"],
|
|
116
|
+
"dsComponentsNote": "PC=Dialog / SP=Sheet を自動切替。素の Dialog / Sheet を手組みで出し分けない。",
|
|
117
|
+
"navigation": {
|
|
118
|
+
"globalNav": "元画面のまま(オーバーレイ表示)",
|
|
119
|
+
"breadcrumb": "元画面のまま",
|
|
120
|
+
"header": "ダイアログ/シートのヘッダー"
|
|
121
|
+
},
|
|
122
|
+
"crud": ["Create", "Update"],
|
|
123
|
+
"whenToUse": [
|
|
124
|
+
"入力項目が少ない一部の軽い項目の作成・編集",
|
|
125
|
+
"一覧のコンテキストを見たまま作業したい",
|
|
126
|
+
"その場で短時間に完結する(未保存状態が発生しにくい)",
|
|
127
|
+
"バリデーション・APIエラーが単純"
|
|
128
|
+
],
|
|
129
|
+
"whenNotToUse": [
|
|
130
|
+
"複数情報を横断し段階的で時間がかかる(→ Focused Workspace)",
|
|
131
|
+
"URL 共有・直接アクセス・ブラウザ更新の考慮が必要(→ Focused Workspace)",
|
|
132
|
+
"破壊的操作の確認(→ AlertDialog)"
|
|
133
|
+
]
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "dialog",
|
|
137
|
+
"name": "Dialog / AlertDialog",
|
|
138
|
+
"aliases": ["Dialog"],
|
|
139
|
+
"purpose": "確認・警告・実行確認。操作を一度止めて明示的に確認する。破壊的操作は AlertDialog。",
|
|
140
|
+
"dsComponents": ["Dialog", "AlertDialog"],
|
|
141
|
+
"navigation": {
|
|
142
|
+
"globalNav": "元画面のまま(オーバーレイ表示)",
|
|
143
|
+
"breadcrumb": "元画面のまま",
|
|
144
|
+
"header": "ダイアログのヘッダー"
|
|
145
|
+
},
|
|
146
|
+
"crud": ["Delete"],
|
|
147
|
+
"whenToUse": [
|
|
148
|
+
"削除確認・実行確認・警告",
|
|
149
|
+
"操作を一度止めて明示的な確認を取りたい",
|
|
150
|
+
"選択肢を提示して分岐させたい",
|
|
151
|
+
"破壊的操作(削除・取り消し)の確認は AlertDialog"
|
|
152
|
+
],
|
|
153
|
+
"whenNotToUse": [
|
|
154
|
+
"フォーム入力(→ ResponsiveDialog)",
|
|
155
|
+
"破壊的確認なのに素の Dialog で組む(→ AlertDialog)"
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"crudMatrix": [
|
|
160
|
+
{ "operation": "Read", "situation": "閲覧・一覧・詳細", "pattern": "standard-page-view" },
|
|
161
|
+
{ "operation": "Create", "situation": "軽い作成(項目少・一覧文脈維持)", "pattern": "responsive-dialog" },
|
|
162
|
+
{ "operation": "Create", "situation": "複雑な作成(複数情報をまたぐ・段階的)", "pattern": "focused-workspace" },
|
|
163
|
+
{ "operation": "Update", "situation": "標準的な編集(通常シェルを保ったまま保存/確定。管理フォーム編集・カートの数量変更+確定・記事の軽い編集)", "pattern": "standard-page-edit", "note": "既存仕様のスタンダード" },
|
|
164
|
+
{ "operation": "Update", "situation": "軽い編集(一部の軽い項目・一覧文脈維持)", "pattern": "responsive-dialog" },
|
|
165
|
+
{ "operation": "Update", "situation": "複雑な編集(複数情報を横断・編集に集中)", "pattern": "focused-workspace" },
|
|
166
|
+
{ "operation": "Delete", "situation": "削除確認・警告・実行確認", "pattern": "dialog", "note": "破壊的操作は AlertDialog" }
|
|
167
|
+
],
|
|
168
|
+
"decisionTree": [
|
|
169
|
+
{
|
|
170
|
+
"step": 1,
|
|
171
|
+
"question": "破壊的操作の確認か?(削除・取り消しなど、一度止めて明示的に確認したい)",
|
|
172
|
+
"yes": "dialog",
|
|
173
|
+
"yesNote": "AlertDialog を使う",
|
|
174
|
+
"no": 2
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"step": 2,
|
|
178
|
+
"question": "確認・警告・実行確認のダイアログか?(破壊的でないが操作を一度止めたい・選択肢を提示したい)",
|
|
179
|
+
"yes": "dialog",
|
|
180
|
+
"yesNote": "Dialog を使う",
|
|
181
|
+
"no": 3
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"step": 3,
|
|
185
|
+
"question": "閲覧が主目的か?(見る・探す・一覧する。編集の保存が主目的ではない)",
|
|
186
|
+
"yes": "standard-page-view",
|
|
187
|
+
"no": 4
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"step": 4,
|
|
191
|
+
"question": "編集が複数の関連情報・エンティティをまたぐか?(例: 商品+価格+配送+公開設定を横断)",
|
|
192
|
+
"yes": "focused-workspace",
|
|
193
|
+
"no": 5
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"step": 5,
|
|
197
|
+
"question": "下書き・複数ステップの段階的作業、または URL共有・直接アクセス・ブラウザ更新への考慮が必要か?",
|
|
198
|
+
"yes": "focused-workspace",
|
|
199
|
+
"no": 6
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"step": 6,
|
|
203
|
+
"question": "一部の軽い項目だけで、一覧のコンテキストを見たまま素早く終わるか?",
|
|
204
|
+
"yes": "responsive-dialog",
|
|
205
|
+
"no": "standard-page-edit",
|
|
206
|
+
"noNote": "通常シェルを保ったまま保存/確定する既存管理画面の標準形(Standard Page(Edit)。旧称 Form Page。カートの数量変更+確定・記事の軽い編集もここ)"
|
|
207
|
+
}
|
|
208
|
+
],
|
|
209
|
+
"editUiSelection": {
|
|
210
|
+
"description": "ResponsiveDialog vs Standard Page(Edit) vs Focused Workspace の観点別比較。standardPageEdit は旧称 Form Page。多数決ではなく、強い制約(未保存状態・APIエラー・URL共有)が1つでも右に振れたら Focused Workspace を検討する。",
|
|
211
|
+
"criteria": [
|
|
212
|
+
{ "criterion": "入力項目数", "responsiveDialog": "少ない", "standardPageEdit": "中程度", "focusedWorkspace": "多い" },
|
|
213
|
+
{ "criterion": "編集対象", "responsiveDialog": "一部の軽い項目(参照不要)", "standardPageEdit": "単一エンティティのまとまった項目", "focusedWorkspace": "複数エンティティ・関連情報をまたぐ" },
|
|
214
|
+
{ "criterion": "作業時間", "responsiveDialog": "短い(その場で完結)", "standardPageEdit": "中程度(1画面で完結)", "focusedWorkspace": "長い・段階的" },
|
|
215
|
+
{ "criterion": "一覧コンテキスト", "responsiveDialog": "見たまま作業したい", "standardPageEdit": "通常シェル(サイドナビ/グロナビ)を保って作業", "focusedWorkspace": "不要・むしろ集中したい" },
|
|
216
|
+
{ "criterion": "未保存状態", "responsiveDialog": "発生しにくい(1回保存)", "standardPageEdit": "1回保存が基本", "focusedWorkspace": "発生しやすい(下書き・途中保存・複数ステップ)" },
|
|
217
|
+
{ "criterion": "バリデーション", "responsiveDialog": "単純", "standardPageEdit": "標準", "focusedWorkspace": "複雑(相互依存・条件付き)" },
|
|
218
|
+
{ "criterion": "APIエラー", "responsiveDialog": "単純表示で足りる", "standardPageEdit": "標準表示", "focusedWorkspace": "409・404・権限・競合を丁寧に扱いたい" },
|
|
219
|
+
{ "criterion": "URL共有・直接アクセス", "responsiveDialog": "不要", "standardPageEdit": "ページURLはあるが編集は付随", "focusedWorkspace": "必要(編集画面自体を共有・直リンク)" },
|
|
220
|
+
{ "criterion": "ブラウザ更新・戻る・進む", "responsiveDialog": "考慮不要", "standardPageEdit": "通常想定", "focusedWorkspace": "考慮したい(未保存の破棄/復元)" },
|
|
221
|
+
{ "criterion": "将来拡張", "responsiveDialog": "小さい", "standardPageEdit": "中程度", "focusedWorkspace": "大きい(項目・ステップが増える見込み)" }
|
|
222
|
+
]
|
|
223
|
+
}
|
|
224
|
+
}
|