@cakejp/design-system 0.3.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.
Files changed (131) hide show
  1. package/AGENTS.md +144 -0
  2. package/CHANGELOG.md +115 -0
  3. package/CLAUDE.md +188 -0
  4. package/CLAUDE_PRODUCTION.md +121 -0
  5. package/MIGRATION.md +228 -0
  6. package/README.md +79 -0
  7. package/RELEASE.md +205 -0
  8. package/bin/init.js +134 -0
  9. package/component-registry.json +1146 -0
  10. package/contracts/components.json +730 -0
  11. package/contracts/rules.json +559 -0
  12. package/dist/index.css +1 -0
  13. package/dist/index.js +9344 -0
  14. package/dist/types/components/ec/_mypage-menu-data.d.ts +15 -0
  15. package/dist/types/components/ec/admin-layout.d.ts +31 -0
  16. package/dist/types/components/ec/anniversary-card.d.ts +50 -0
  17. package/dist/types/components/ec/cake-logo.d.ts +22 -0
  18. package/dist/types/components/ec/chart-controls.d.ts +16 -0
  19. package/dist/types/components/ec/countdown-timer.d.ts +24 -0
  20. package/dist/types/components/ec/coupon-card.d.ts +47 -0
  21. package/dist/types/components/ec/delivery-calendar.d.ts +36 -0
  22. package/dist/types/components/ec/order-section.d.ts +29 -0
  23. package/dist/types/components/ec/order-summary.d.ts +36 -0
  24. package/dist/types/components/ec/payment-method.d.ts +41 -0
  25. package/dist/types/components/ec/product-card.d.ts +77 -0
  26. package/dist/types/components/ec/product-carousel.d.ts +56 -0
  27. package/dist/types/components/ec/product-cta.d.ts +35 -0
  28. package/dist/types/components/ec/product-detail-bar.d.ts +62 -0
  29. package/dist/types/components/ec/product-detail-sidebar.d.ts +115 -0
  30. package/dist/types/components/ec/product-list-item.d.ts +90 -0
  31. package/dist/types/components/ec/product-option.d.ts +62 -0
  32. package/dist/types/components/ec/rating-stars.d.ts +30 -0
  33. package/dist/types/components/ec/review-card.d.ts +44 -0
  34. package/dist/types/components/ec/review-form.d.ts +40 -0
  35. package/dist/types/components/ec/review-summary.d.ts +53 -0
  36. package/dist/types/components/ec/shop-card.d.ts +48 -0
  37. package/dist/types/components/ec/stat-card.d.ts +44 -0
  38. package/dist/types/components/foundations/accordion.d.ts +7 -0
  39. package/dist/types/components/foundations/alert-dialog.d.ts +18 -0
  40. package/dist/types/components/foundations/alert.d.ts +42 -0
  41. package/dist/types/components/foundations/aspect-ratio.d.ts +3 -0
  42. package/dist/types/components/foundations/avatar.d.ts +11 -0
  43. package/dist/types/components/foundations/badge.d.ts +9 -0
  44. package/dist/types/components/foundations/breadcrumb.d.ts +11 -0
  45. package/dist/types/components/foundations/button.d.ts +10 -0
  46. package/dist/types/components/foundations/calendar.d.ts +8 -0
  47. package/dist/types/components/foundations/card.d.ts +9 -0
  48. package/dist/types/components/foundations/checkbox-card.d.ts +30 -0
  49. package/dist/types/components/foundations/checkbox-group.d.ts +53 -0
  50. package/dist/types/components/foundations/checkbox.d.ts +4 -0
  51. package/dist/types/components/foundations/collapsible.d.ts +5 -0
  52. package/dist/types/components/foundations/command.d.ts +18 -0
  53. package/dist/types/components/foundations/context-menu.d.ts +25 -0
  54. package/dist/types/components/foundations/data-table.d.ts +104 -0
  55. package/dist/types/components/foundations/dialog.d.ts +17 -0
  56. package/dist/types/components/foundations/drawer.d.ts +13 -0
  57. package/dist/types/components/foundations/dropdown-menu.d.ts +25 -0
  58. package/dist/types/components/foundations/form.d.ts +24 -0
  59. package/dist/types/components/foundations/hover-card.d.ts +6 -0
  60. package/dist/types/components/foundations/input.d.ts +3 -0
  61. package/dist/types/components/foundations/label.d.ts +7 -0
  62. package/dist/types/components/foundations/menubar.d.ts +26 -0
  63. package/dist/types/components/foundations/navigation-menu.d.ts +14 -0
  64. package/dist/types/components/foundations/pagination.d.ts +13 -0
  65. package/dist/types/components/foundations/popover.d.ts +10 -0
  66. package/dist/types/components/foundations/progress.d.ts +4 -0
  67. package/dist/types/components/foundations/radio-group.d.ts +9 -0
  68. package/dist/types/components/foundations/responsive-dialog.d.ts +52 -0
  69. package/dist/types/components/foundations/scroll-area.d.ts +5 -0
  70. package/dist/types/components/foundations/select.d.ts +15 -0
  71. package/dist/types/components/foundations/separator.d.ts +4 -0
  72. package/dist/types/components/foundations/sheet.d.ts +14 -0
  73. package/dist/types/components/foundations/skeleton.d.ts +2 -0
  74. package/dist/types/components/foundations/slider.d.ts +4 -0
  75. package/dist/types/components/foundations/sonner.d.ts +3 -0
  76. package/dist/types/components/foundations/spinner.d.ts +6 -0
  77. package/dist/types/components/foundations/switch.d.ts +13 -0
  78. package/dist/types/components/foundations/table.d.ts +10 -0
  79. package/dist/types/components/foundations/tabs.d.ts +12 -0
  80. package/dist/types/components/foundations/textarea.d.ts +3 -0
  81. package/dist/types/components/foundations/toggle-group.d.ts +23 -0
  82. package/dist/types/components/foundations/toggle.d.ts +9 -0
  83. package/dist/types/components/foundations/tooltip.d.ts +7 -0
  84. package/dist/types/components/pages/cake/_mypage-shell.d.ts +41 -0
  85. package/dist/types/components/primitives/banner-carousel.d.ts +54 -0
  86. package/dist/types/components/primitives/bottom-tab-bar.d.ts +39 -0
  87. package/dist/types/components/primitives/bulk-action-bar.d.ts +32 -0
  88. package/dist/types/components/primitives/category-scroll.d.ts +70 -0
  89. package/dist/types/components/primitives/category-shortcuts.d.ts +44 -0
  90. package/dist/types/components/primitives/chip.d.ts +44 -0
  91. package/dist/types/components/primitives/coach-mark.d.ts +28 -0
  92. package/dist/types/components/primitives/empty-state.d.ts +36 -0
  93. package/dist/types/components/primitives/error-state.d.ts +41 -0
  94. package/dist/types/components/primitives/filter-bar.d.ts +56 -0
  95. package/dist/types/components/primitives/footer.d.ts +81 -0
  96. package/dist/types/components/primitives/form-field.d.ts +46 -0
  97. package/dist/types/components/primitives/header.d.ts +69 -0
  98. package/dist/types/components/primitives/image-carousel.d.ts +52 -0
  99. package/dist/types/components/primitives/image-gallery.d.ts +35 -0
  100. package/dist/types/components/primitives/image-uploader.d.ts +19 -0
  101. package/dist/types/components/primitives/kebab-menu.d.ts +38 -0
  102. package/dist/types/components/primitives/list-item.d.ts +60 -0
  103. package/dist/types/components/primitives/menu-drawer.d.ts +75 -0
  104. package/dist/types/components/primitives/notification-badge.d.ts +30 -0
  105. package/dist/types/components/primitives/notification-list.d.ts +45 -0
  106. package/dist/types/components/primitives/price-display.d.ts +33 -0
  107. package/dist/types/components/primitives/progress-steps.d.ts +27 -0
  108. package/dist/types/components/primitives/quantity-selector.d.ts +50 -0
  109. package/dist/types/components/primitives/search-bar.d.ts +31 -0
  110. package/dist/types/components/primitives/search-panel.d.ts +41 -0
  111. package/dist/types/components/primitives/section-header.d.ts +51 -0
  112. package/dist/types/components/primitives/share-buttons.d.ts +23 -0
  113. package/dist/types/components/primitives/side-nav.d.ts +62 -0
  114. package/dist/types/components/primitives/social-login-button.d.ts +24 -0
  115. package/dist/types/components/primitives/status-count-tabs.d.ts +14 -0
  116. package/dist/types/components/primitives/sticky-action-bar.d.ts +7 -0
  117. package/dist/types/components/primitives/sub-nav.d.ts +34 -0
  118. package/dist/types/components/primitives/tag.d.ts +19 -0
  119. package/dist/types/index.d.ts +109 -0
  120. package/dist/types/lib/utils.d.ts +2 -0
  121. package/package.json +186 -0
  122. package/scripts/codemod/check-migration.mjs +97 -0
  123. package/scripts/codemod/v0.2-to-v0.3.mjs +192 -0
  124. package/src/preset-standalone.css +109 -0
  125. package/src/preset.css +288 -0
  126. package/src/styles/primitive.css +139 -0
  127. package/src/styles/semantic.css +203 -0
  128. package/src/styles/typography.css +129 -0
  129. package/templates/AGENTS.md +56 -0
  130. package/templates/CLAUDE.md +56 -0
  131. package/tokens.json +127 -0
@@ -0,0 +1,730 @@
1
+ {
2
+ "meta": {
3
+ "name": "Cake.jp Design System — Component Contracts",
4
+ "version": "0.1.0",
5
+ "description": "全コンポーネントの構造化定義。バリアント・アクセシビリティ要件・使用ルールを機械可読形式で管理。",
6
+ "counts": {
7
+ "foundations": 46,
8
+ "primitives": 34,
9
+ "ec": 23,
10
+ "total": 103
11
+ }
12
+ },
13
+ "foundations": [
14
+ {
15
+ "name": "Accordion",
16
+ "path": "src/components/foundations/accordion.tsx"
17
+ },
18
+ {
19
+ "name": "AlertDialog",
20
+ "path": "src/components/foundations/alert-dialog.tsx",
21
+ "rules": [
22
+ "破壊的操作の確認に使用。削除ボタン押下後に必ず挟む"
23
+ ]
24
+ },
25
+ {
26
+ "name": "Alert",
27
+ "path": "src/components/foundations/alert.tsx",
28
+ "variants": [
29
+ "default",
30
+ "destructive"
31
+ ]
32
+ },
33
+ {
34
+ "name": "AspectRatio",
35
+ "path": "src/components/foundations/aspect-ratio.tsx",
36
+ "rules": [
37
+ "<img>を裸で置かない。必ずAspectRatioで囲む"
38
+ ]
39
+ },
40
+ {
41
+ "name": "Avatar",
42
+ "path": "src/components/foundations/avatar.tsx",
43
+ "subcomponents": [
44
+ "AvatarImage",
45
+ "AvatarFallback"
46
+ ]
47
+ },
48
+ {
49
+ "name": "Badge",
50
+ "path": "src/components/foundations/badge.tsx",
51
+ "rules": [
52
+ "ステータス・件数表示専用。削除ボタンを付けない(削除できるものはChip)"
53
+ ]
54
+ },
55
+ {
56
+ "name": "Breadcrumb",
57
+ "path": "src/components/foundations/breadcrumb.tsx",
58
+ "subcomponents": [
59
+ "BreadcrumbList",
60
+ "BreadcrumbItem",
61
+ "BreadcrumbLink",
62
+ "BreadcrumbPage",
63
+ "BreadcrumbSeparator"
64
+ ]
65
+ },
66
+ {
67
+ "name": "Button",
68
+ "path": "src/components/foundations/button.tsx",
69
+ "variants": [
70
+ "default",
71
+ "secondary",
72
+ "tertiary",
73
+ "destructive",
74
+ "ghost",
75
+ "link"
76
+ ],
77
+ "sizes": [
78
+ "xs",
79
+ "sm",
80
+ "default",
81
+ "lg",
82
+ "xl"
83
+ ],
84
+ "accessibility": [
85
+ "aria-label必須(アイコンのみの場合)"
86
+ ],
87
+ "rules": [
88
+ "<button>を直接使わない。必ずButtonコンポーネントを使う"
89
+ ]
90
+ },
91
+ {
92
+ "name": "Calendar",
93
+ "path": "src/components/foundations/calendar.tsx",
94
+ "rules": [
95
+ "<input type='date'>を使わない。PopoverとCalendarを組み合わせる"
96
+ ]
97
+ },
98
+ {
99
+ "name": "Card",
100
+ "path": "src/components/foundations/card.tsx",
101
+ "subcomponents": [
102
+ "CardHeader",
103
+ "CardTitle",
104
+ "CardDescription",
105
+ "CardContent",
106
+ "CardFooter"
107
+ ],
108
+ "rules": [
109
+ "paddingはCard本体のp-4で一括管理。全幅コンテンツは-mx-4で突き破る"
110
+ ]
111
+ },
112
+ {
113
+ "name": "CheckboxCard",
114
+ "path": "src/components/foundations/checkbox-card.tsx"
115
+ },
116
+ {
117
+ "name": "CheckboxGroup",
118
+ "path": "src/components/foundations/checkbox-group.tsx"
119
+ },
120
+ {
121
+ "name": "Checkbox",
122
+ "path": "src/components/foundations/checkbox.tsx",
123
+ "accessibility": [
124
+ "必ずLabelと紐付ける"
125
+ ]
126
+ },
127
+ {
128
+ "name": "Collapsible",
129
+ "path": "src/components/foundations/collapsible.tsx",
130
+ "subcomponents": [
131
+ "CollapsibleTrigger",
132
+ "CollapsibleContent"
133
+ ]
134
+ },
135
+ {
136
+ "name": "Command",
137
+ "path": "src/components/foundations/command.tsx"
138
+ },
139
+ {
140
+ "name": "ContextMenu",
141
+ "path": "src/components/foundations/context-menu.tsx"
142
+ },
143
+ {
144
+ "name": "DataTable",
145
+ "path": "src/components/foundations/data-table.tsx",
146
+ "rules": [
147
+ "管理画面のテーブルはui/tableでなくこちらを使う。ソート・選択行・アクションメニュー対応"
148
+ ]
149
+ },
150
+ {
151
+ "name": "Dialog",
152
+ "path": "src/components/foundations/dialog.tsx",
153
+ "subcomponents": [
154
+ "DialogTrigger",
155
+ "DialogContent",
156
+ "DialogHeader",
157
+ "DialogTitle",
158
+ "DialogDescription",
159
+ "DialogFooter",
160
+ "DialogClose"
161
+ ],
162
+ "rules": [
163
+ "div.fixed.inset-0で自作しない。ESC・Tab・背景スクロールを自動処理"
164
+ ]
165
+ },
166
+ {
167
+ "name": "Drawer",
168
+ "path": "src/components/foundations/drawer.tsx"
169
+ },
170
+ {
171
+ "name": "DropdownMenu",
172
+ "path": "src/components/foundations/dropdown-menu.tsx"
173
+ },
174
+ {
175
+ "name": "Form",
176
+ "path": "src/components/foundations/form.tsx",
177
+ "accessibility": [
178
+ "aria-describedbyでエラーメッセージを紐付ける"
179
+ ]
180
+ },
181
+ {
182
+ "name": "HoverCard",
183
+ "path": "src/components/foundations/hover-card.tsx"
184
+ },
185
+ {
186
+ "name": "Input",
187
+ "path": "src/components/foundations/input.tsx",
188
+ "accessibility": [
189
+ "必ずLabelと紐付ける"
190
+ ],
191
+ "rules": [
192
+ "<input>を直接使わない。type='email'/'tel'を適切に指定する"
193
+ ]
194
+ },
195
+ {
196
+ "name": "Label",
197
+ "path": "src/components/foundations/label.tsx",
198
+ "rules": [
199
+ "全フォーム入力に紐付け必須"
200
+ ]
201
+ },
202
+ {
203
+ "name": "Menubar",
204
+ "path": "src/components/foundations/menubar.tsx"
205
+ },
206
+ {
207
+ "name": "NavigationMenu",
208
+ "path": "src/components/foundations/navigation-menu.tsx"
209
+ },
210
+ {
211
+ "name": "Pagination",
212
+ "path": "src/components/foundations/pagination.tsx"
213
+ },
214
+ {
215
+ "name": "Popover",
216
+ "path": "src/components/foundations/popover.tsx",
217
+ "subcomponents": [
218
+ "PopoverTrigger",
219
+ "PopoverContent",
220
+ "PopoverAnchor"
221
+ ]
222
+ },
223
+ {
224
+ "name": "Progress",
225
+ "path": "src/components/foundations/progress.tsx"
226
+ },
227
+ {
228
+ "name": "RadioGroup",
229
+ "path": "src/components/foundations/radio-group.tsx",
230
+ "accessibility": [
231
+ "各RadioGroupItemにLabel必須"
232
+ ]
233
+ },
234
+ {
235
+ "name": "ResponsiveDialog",
236
+ "path": "src/components/foundations/responsive-dialog.tsx",
237
+ "rules": [
238
+ "デスクトップ=Dialog、モバイル=Sheetを自動切替"
239
+ ]
240
+ },
241
+ {
242
+ "name": "ScrollArea",
243
+ "path": "src/components/foundations/scroll-area.tsx"
244
+ },
245
+ {
246
+ "name": "Select",
247
+ "path": "src/components/foundations/select.tsx",
248
+ "rules": [
249
+ "<select>HTMLネイティブを使わない"
250
+ ]
251
+ },
252
+ {
253
+ "name": "Separator",
254
+ "path": "src/components/foundations/separator.tsx"
255
+ },
256
+ {
257
+ "name": "Sheet",
258
+ "path": "src/components/foundations/sheet.tsx",
259
+ "subcomponents": [
260
+ "SheetTrigger",
261
+ "SheetContent",
262
+ "SheetHeader",
263
+ "SheetTitle",
264
+ "SheetDescription",
265
+ "SheetFooter",
266
+ "SheetClose"
267
+ ]
268
+ },
269
+ {
270
+ "name": "Skeleton",
271
+ "path": "src/components/foundations/skeleton.tsx",
272
+ "rules": [
273
+ "アニメーションはpulseのみ許可"
274
+ ]
275
+ },
276
+ {
277
+ "name": "Slider",
278
+ "path": "src/components/foundations/slider.tsx"
279
+ },
280
+ {
281
+ "name": "Sonner",
282
+ "path": "src/components/foundations/sonner.tsx",
283
+ "rules": [
284
+ "トースト内にアクションリンクを入れない。左ボーダーではなく背景色全体で状態を表現"
285
+ ]
286
+ },
287
+ {
288
+ "name": "Spinner",
289
+ "path": "src/components/foundations/spinner.tsx"
290
+ },
291
+ {
292
+ "name": "Switch",
293
+ "path": "src/components/foundations/switch.tsx",
294
+ "accessibility": [
295
+ "Label必須"
296
+ ]
297
+ },
298
+ {
299
+ "name": "Table",
300
+ "path": "src/components/foundations/table.tsx",
301
+ "rules": [
302
+ "管理画面ではDataTableを使う。数値列はtext-right"
303
+ ]
304
+ },
305
+ {
306
+ "name": "Tabs",
307
+ "path": "src/components/foundations/tabs.tsx",
308
+ "subcomponents": [
309
+ "TabsList",
310
+ "TabsTrigger",
311
+ "TabsContent"
312
+ ]
313
+ },
314
+ {
315
+ "name": "Textarea",
316
+ "path": "src/components/foundations/textarea.tsx",
317
+ "accessibility": [
318
+ "Label必須"
319
+ ]
320
+ },
321
+ {
322
+ "name": "ToggleGroup",
323
+ "path": "src/components/foundations/toggle-group.tsx",
324
+ "rules": [
325
+ "水平パディングはコンポーネント内に入れない。親が管理する"
326
+ ]
327
+ },
328
+ {
329
+ "name": "Toggle",
330
+ "path": "src/components/foundations/toggle.tsx"
331
+ },
332
+ {
333
+ "name": "Tooltip",
334
+ "path": "src/components/foundations/tooltip.tsx",
335
+ "rules": [
336
+ "truncateで切ったテキストには必ずTooltipで全文表示"
337
+ ]
338
+ }
339
+ ],
340
+ "primitives": [
341
+ {
342
+ "name": "CoachMark",
343
+ "path": "src/components/primitives/coach-mark.tsx"
344
+ },
345
+ {
346
+ "name": "BannerCarousel",
347
+ "path": "src/components/primitives/banner-carousel.tsx"
348
+ },
349
+ {
350
+ "name": "StickyActionBar",
351
+ "path": "src/components/primitives/sticky-action-bar.tsx",
352
+ "rules": [
353
+ "モバイル固定フッターCTA"
354
+ ]
355
+ },
356
+ {
357
+ "name": "BottomTabBar",
358
+ "path": "src/components/primitives/bottom-tab-bar.tsx",
359
+ "rules": [
360
+ "モバイル専用。safe-area-inset-bottom対応必須"
361
+ ]
362
+ },
363
+ {
364
+ "name": "BulkActionBar",
365
+ "path": "src/components/primitives/bulk-action-bar.tsx",
366
+ "rules": [
367
+ "テーブル選択時の一括操作バー。div手書き禁止"
368
+ ]
369
+ },
370
+ {
371
+ "name": "CategoryShortcuts",
372
+ "path": "src/components/primitives/category-shortcuts.tsx"
373
+ },
374
+ {
375
+ "name": "CategoryScroll",
376
+ "path": "src/components/primitives/category-scroll.tsx"
377
+ },
378
+ {
379
+ "name": "Chip",
380
+ "path": "src/components/primitives/chip.tsx",
381
+ "variants": [
382
+ "default",
383
+ "active",
384
+ "disabled"
385
+ ],
386
+ "features": [
387
+ "count"
388
+ ],
389
+ "rules": [
390
+ "フィルター・ステータスタブに使う。ToggleGroup+Badge手書き禁止",
391
+ "Tagと違い押せる・削除できる"
392
+ ]
393
+ },
394
+ {
395
+ "name": "EmptyState",
396
+ "path": "src/components/primitives/empty-state.tsx",
397
+ "rules": [
398
+ "必ずアクションまたは説明を含める"
399
+ ]
400
+ },
401
+ {
402
+ "name": "ErrorState",
403
+ "path": "src/components/primitives/error-state.tsx",
404
+ "rules": [
405
+ "色+アイコン+テキスト必須。リトライアクションを含める"
406
+ ]
407
+ },
408
+ {
409
+ "name": "FilterBar",
410
+ "path": "src/components/primitives/filter-bar.tsx",
411
+ "features": [
412
+ "chips",
413
+ "sort",
414
+ "count"
415
+ ]
416
+ },
417
+ {
418
+ "name": "Footer",
419
+ "path": "src/components/primitives/footer.tsx"
420
+ },
421
+ {
422
+ "name": "FormField",
423
+ "path": "src/components/primitives/form-field.tsx",
424
+ "rules": [
425
+ "Label+Input+エラーメッセージをセットで管理"
426
+ ]
427
+ },
428
+ {
429
+ "name": "ImageCarousel",
430
+ "path": "src/components/primitives/image-carousel.tsx",
431
+ "features": [
432
+ "scroll-snap",
433
+ "dots",
434
+ "arrows",
435
+ "autoPlay"
436
+ ]
437
+ },
438
+ {
439
+ "name": "ImageGallery",
440
+ "path": "src/components/primitives/image-gallery.tsx"
441
+ },
442
+ {
443
+ "name": "ImageUploader",
444
+ "path": "src/components/primitives/image-uploader.tsx",
445
+ "features": [
446
+ "upload",
447
+ "delete",
448
+ "grid"
449
+ ]
450
+ },
451
+ {
452
+ "name": "KebabMenu",
453
+ "path": "src/components/primitives/kebab-menu.tsx",
454
+ "rules": [
455
+ "テーブル行アクション用"
456
+ ]
457
+ },
458
+ {
459
+ "name": "ListItem",
460
+ "path": "src/components/primitives/list-item.tsx"
461
+ },
462
+ {
463
+ "name": "MenuDrawer",
464
+ "path": "src/components/primitives/menu-drawer.tsx"
465
+ },
466
+ {
467
+ "name": "SubNav",
468
+ "path": "src/components/primitives/sub-nav.tsx"
469
+ },
470
+ {
471
+ "name": "NotificationBadge",
472
+ "path": "src/components/primitives/notification-badge.tsx",
473
+ "rules": [
474
+ "最大表示: 99+"
475
+ ]
476
+ },
477
+ {
478
+ "name": "NotificationList",
479
+ "path": "src/components/primitives/notification-list.tsx",
480
+ "layouts": [
481
+ "vertical",
482
+ "horizontal"
483
+ ]
484
+ },
485
+ {
486
+ "name": "PriceDisplay",
487
+ "path": "src/components/primitives/price-display.tsx",
488
+ "features": [
489
+ "sale",
490
+ "strikethrough",
491
+ "tax-inclusive"
492
+ ],
493
+ "rules": [
494
+ "価格表記: ¥{数字,区切り}(税込)"
495
+ ]
496
+ },
497
+ {
498
+ "name": "ProgressSteps",
499
+ "path": "src/components/primitives/progress-steps.tsx"
500
+ },
501
+ {
502
+ "name": "QuantitySelector",
503
+ "path": "src/components/primitives/quantity-selector.tsx",
504
+ "features": [
505
+ "increment",
506
+ "decrement",
507
+ "trash-icon"
508
+ ]
509
+ },
510
+ {
511
+ "name": "SearchBar",
512
+ "path": "src/components/primitives/search-bar.tsx"
513
+ },
514
+ {
515
+ "name": "SearchPanel",
516
+ "path": "src/components/primitives/search-panel.tsx",
517
+ "layouts": [
518
+ "grid",
519
+ "flex"
520
+ ]
521
+ },
522
+ {
523
+ "name": "SectionHeader",
524
+ "path": "src/components/primitives/section-header.tsx",
525
+ "rules": [
526
+ "タイトル+もっと見るボタンをCardTitle+Button手書き禁止。SectionHeaderを使う"
527
+ ]
528
+ },
529
+ {
530
+ "name": "ShareButtons",
531
+ "path": "src/components/primitives/share-buttons.tsx"
532
+ },
533
+ {
534
+ "name": "SocialLoginButton",
535
+ "path": "src/components/primitives/social-login-button.tsx"
536
+ },
537
+ {
538
+ "name": "StatusCountTabs",
539
+ "path": "src/components/primitives/status-count-tabs.tsx",
540
+ "rules": [
541
+ "ToggleGroup+Badge手書き禁止。Chip count propを使う"
542
+ ]
543
+ },
544
+ {
545
+ "name": "Tag",
546
+ "path": "src/components/primitives/tag.tsx",
547
+ "rules": [
548
+ "表示専用。onClickを付けない(押せるものはChip)"
549
+ ]
550
+ },
551
+ {
552
+ "name": "SideNav",
553
+ "path": "src/components/primitives/side-nav.tsx",
554
+ "category": "navigation"
555
+ }
556
+ ],
557
+ "ec": [
558
+ {
559
+ "name": "AdminLayout",
560
+ "path": "src/components/ec/admin-layout.tsx",
561
+ "rules": [
562
+ "管理画面のレイアウトシェル"
563
+ ]
564
+ },
565
+ {
566
+ "name": "AnniversaryCard",
567
+ "path": "src/components/ec/anniversary-card.tsx"
568
+ },
569
+ {
570
+ "name": "CakeLogo",
571
+ "path": "src/components/ec/cake-logo.tsx"
572
+ },
573
+ {
574
+ "name": "ChartControls",
575
+ "path": "src/components/ec/chart-controls.tsx"
576
+ },
577
+ {
578
+ "name": "CountdownTimer",
579
+ "path": "src/components/ec/countdown-timer.tsx",
580
+ "variants": [
581
+ "before",
582
+ "active",
583
+ "ended"
584
+ ]
585
+ },
586
+ {
587
+ "name": "CouponCard",
588
+ "path": "src/components/ec/coupon-card.tsx",
589
+ "layouts": [
590
+ "vertical",
591
+ "horizontal"
592
+ ]
593
+ },
594
+ {
595
+ "name": "DeliveryCalendar",
596
+ "path": "src/components/ec/delivery-calendar.tsx"
597
+ },
598
+ {
599
+ "name": "OrderSection",
600
+ "path": "src/components/ec/order-section.tsx",
601
+ "variants": [
602
+ "default",
603
+ "empty",
604
+ "error"
605
+ ]
606
+ },
607
+ {
608
+ "name": "OrderSummary",
609
+ "path": "src/components/ec/order-summary.tsx"
610
+ },
611
+ {
612
+ "name": "PaymentMethod",
613
+ "path": "src/components/ec/payment-method.tsx"
614
+ },
615
+ {
616
+ "name": "ProductCard",
617
+ "path": "src/components/ec/product-card.tsx",
618
+ "layouts": [
619
+ "vertical",
620
+ "horizontal"
621
+ ],
622
+ "features": [
623
+ "favorite",
624
+ "discount-badge",
625
+ "rating"
626
+ ]
627
+ },
628
+ {
629
+ "name": "ProductCarousel",
630
+ "path": "src/components/ec/product-carousel.tsx"
631
+ },
632
+ {
633
+ "name": "ProductCTA",
634
+ "path": "src/components/ec/product-cta.tsx",
635
+ "variants": [
636
+ "cart",
637
+ "timesale",
638
+ "reserve",
639
+ "restock"
640
+ ]
641
+ },
642
+ {
643
+ "name": "ProductDetailBar",
644
+ "path": "src/components/ec/product-detail-bar.tsx",
645
+ "rules": [
646
+ "スティッキーヘッダー。タブ+評価表示"
647
+ ]
648
+ },
649
+ {
650
+ "name": "ProductDetailSidebar",
651
+ "path": "src/components/ec/product-detail-sidebar.tsx"
652
+ },
653
+ {
654
+ "name": "ProductOption",
655
+ "path": "src/components/ec/product-option.tsx",
656
+ "variants": [
657
+ "quantity",
658
+ "select",
659
+ "text",
660
+ "checkbox",
661
+ "image",
662
+ "candle",
663
+ "letter"
664
+ ]
665
+ },
666
+ {
667
+ "name": "RatingStars",
668
+ "path": "src/components/ec/rating-stars.tsx",
669
+ "features": [
670
+ "sparkle-icon",
671
+ "review-count"
672
+ ]
673
+ },
674
+ {
675
+ "name": "ReviewCard",
676
+ "path": "src/components/ec/review-card.tsx",
677
+ "variants": [
678
+ "list",
679
+ "card",
680
+ "pc"
681
+ ],
682
+ "features": [
683
+ "helpful-count",
684
+ "like"
685
+ ]
686
+ },
687
+ {
688
+ "name": "ReviewForm",
689
+ "path": "src/components/ec/review-form.tsx",
690
+ "features": [
691
+ "rating",
692
+ "text",
693
+ "image-upload"
694
+ ]
695
+ },
696
+ {
697
+ "name": "ReviewSummary",
698
+ "path": "src/components/ec/review-summary.tsx",
699
+ "features": [
700
+ "average-score",
701
+ "star-gauge"
702
+ ]
703
+ },
704
+ {
705
+ "name": "ShopCard",
706
+ "path": "src/components/ec/shop-card.tsx",
707
+ "features": [
708
+ "rating",
709
+ "delivery-date",
710
+ "bookmark"
711
+ ]
712
+ },
713
+ {
714
+ "name": "StatCard",
715
+ "path": "src/components/ec/stat-card.tsx"
716
+ },
717
+ {
718
+ "name": "Header",
719
+ "path": "src/components/primitives/header.tsx"
720
+ },
721
+ {
722
+ "name": "ProductListItem",
723
+ "path": "src/components/ec/product-list-item.tsx",
724
+ "category": "display",
725
+ "rules": [
726
+ "カート/注文履歴/レビュー variant を持つ商品リスト行"
727
+ ]
728
+ }
729
+ ]
730
+ }