ksk-design-system 1.35.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/AGENTS.md +190 -0
- package/CLAUDE.md +189 -0
- package/DESIGN.md +190 -0
- package/LICENSE +21 -0
- package/MIGRATION.md +107 -0
- package/PUBLISHING.md +160 -0
- package/README.md +59 -0
- package/RELEASE.md +82 -0
- package/bin/init.js +112 -0
- package/contracts/components.json +1443 -0
- package/contracts/rules.json +447 -0
- package/dist/class-names.js +4 -0
- package/dist/index.js +13157 -0
- package/dist/native/ui.js +4928 -0
- package/dist/native.js +1559 -0
- package/dist/server-variants-Dr_V3bDI.js +55 -0
- package/dist/types/class-names.d.ts +27 -0
- package/dist/types/components/patterns/admin/bulk-actions.d.ts +17 -0
- package/dist/types/components/patterns/admin/chart-controls.d.ts +16 -0
- package/dist/types/components/patterns/admin/data-table.d.ts +165 -0
- package/dist/types/components/patterns/admin/image-uploader.d.ts +14 -0
- package/dist/types/components/patterns/admin/kebab-menu.d.ts +17 -0
- package/dist/types/components/patterns/admin/notification-list.d.ts +16 -0
- package/dist/types/components/patterns/admin/search-panel.d.ts +9 -0
- package/dist/types/components/patterns/admin/status-tabs.d.ts +13 -0
- package/dist/types/components/patterns/app-header.d.ts +76 -0
- package/dist/types/components/patterns/banner-carousel.d.ts +25 -0
- package/dist/types/components/patterns/banner.d.ts +13 -0
- package/dist/types/components/patterns/bottom-sheet-form.d.ts +17 -0
- package/dist/types/components/patterns/category-nav.d.ts +43 -0
- package/dist/types/components/patterns/category-scroll.d.ts +53 -0
- package/dist/types/components/patterns/chip-selector.d.ts +20 -0
- package/dist/types/components/patterns/chip.d.ts +42 -0
- package/dist/types/components/patterns/coach-mark-overlay.d.ts +66 -0
- package/dist/types/components/patterns/commerce/bottom-tab-bar.d.ts +27 -0
- package/dist/types/components/patterns/commerce/filter-bar.d.ts +39 -0
- package/dist/types/components/patterns/commerce/image-carousel.d.ts +14 -0
- package/dist/types/components/patterns/commerce/order-summary.d.ts +26 -0
- package/dist/types/components/patterns/commerce/price-display.d.ts +20 -0
- package/dist/types/components/patterns/commerce/product-card.d.ts +50 -0
- package/dist/types/components/patterns/commerce/product-carousel.d.ts +15 -0
- package/dist/types/components/patterns/commerce/quantity-selector.d.ts +21 -0
- package/dist/types/components/patterns/commerce/rating-display.d.ts +15 -0
- package/dist/types/components/patterns/commerce/review-card.d.ts +22 -0
- package/dist/types/components/patterns/commerce/review-summary.d.ts +12 -0
- package/dist/types/components/patterns/confirm-dialog.d.ts +32 -0
- package/dist/types/components/patterns/cookie-consent.d.ts +62 -0
- package/dist/types/components/patterns/empty-state.d.ts +15 -0
- package/dist/types/components/patterns/error-state.d.ts +10 -0
- package/dist/types/components/patterns/file-upload.d.ts +31 -0
- package/dist/types/components/patterns/filter-chip.d.ts +26 -0
- package/dist/types/components/patterns/footer.d.ts +24 -0
- package/dist/types/components/patterns/form-field.d.ts +30 -0
- package/dist/types/components/patterns/form.d.ts +13 -0
- package/dist/types/components/patterns/list-item.d.ts +23 -0
- package/dist/types/components/patterns/list-skeletons.d.ts +43 -0
- package/dist/types/components/patterns/menu-drawer.d.ts +27 -0
- package/dist/types/components/patterns/notification-badge.d.ts +15 -0
- package/dist/types/components/patterns/progress-steps.d.ts +7 -0
- package/dist/types/components/patterns/review-overlay.d.ts +25 -0
- package/dist/types/components/patterns/search-bar.d.ts +6 -0
- package/dist/types/components/patterns/section-header.d.ts +8 -0
- package/dist/types/components/patterns/share-buttons.d.ts +13 -0
- package/dist/types/components/patterns/shells/admin-shell.d.ts +8 -0
- package/dist/types/components/patterns/shells/app-shell.d.ts +7 -0
- package/dist/types/components/patterns/shells/marketing-shell.d.ts +7 -0
- package/dist/types/components/patterns/simple-pagination.d.ts +69 -0
- package/dist/types/components/patterns/stat-card.d.ts +43 -0
- package/dist/types/components/patterns/sticky-action-bar.d.ts +27 -0
- package/dist/types/components/patterns/swipe-row.d.ts +17 -0
- package/dist/types/components/patterns/tag-input.d.ts +20 -0
- package/dist/types/components/patterns/tag.d.ts +7 -0
- package/dist/types/components/ui/accordion.d.ts +7 -0
- package/dist/types/components/ui/alert-dialog.d.ts +47 -0
- package/dist/types/components/ui/alert.d.ts +45 -0
- package/dist/types/components/ui/auto-grow-textarea.d.ts +40 -0
- package/dist/types/components/ui/avatar.d.ts +6 -0
- package/dist/types/components/ui/badge.d.ts +18 -0
- package/dist/types/components/ui/breadcrumb.d.ts +16 -0
- package/dist/types/components/ui/button.d.ts +29 -0
- package/dist/types/components/ui/calendar.d.ts +5 -0
- package/dist/types/components/ui/card.d.ts +28 -0
- package/dist/types/components/ui/checkbox-card.d.ts +29 -0
- package/dist/types/components/ui/checkbox-field.d.ts +24 -0
- package/dist/types/components/ui/checkbox-group.d.ts +33 -0
- package/dist/types/components/ui/checkbox.d.ts +44 -0
- package/dist/types/components/ui/coach-mark.d.ts +27 -0
- package/dist/types/components/ui/collapsible.d.ts +24 -0
- package/dist/types/components/ui/combobox.d.ts +19 -0
- package/dist/types/components/ui/countdown-timer.d.ts +39 -0
- package/dist/types/components/ui/date-picker.d.ts +53 -0
- package/dist/types/components/ui/dialog.d.ts +54 -0
- package/dist/types/components/ui/dropdown-filter.d.ts +35 -0
- package/dist/types/components/ui/dropdown-menu.d.ts +42 -0
- package/dist/types/components/ui/error-boundary.d.ts +66 -0
- package/dist/types/components/ui/form.d.ts +61 -0
- package/dist/types/components/ui/hover-card.d.ts +24 -0
- package/dist/types/components/ui/image-gallery.d.ts +28 -0
- package/dist/types/components/ui/input.d.ts +17 -0
- package/dist/types/components/ui/label.d.ts +4 -0
- package/dist/types/components/ui/multi-select.d.ts +21 -0
- package/dist/types/components/ui/navigation-bar.d.ts +58 -0
- package/dist/types/components/ui/number-input.d.ts +20 -0
- package/dist/types/components/ui/pagination.d.ts +26 -0
- package/dist/types/components/ui/pill-toggle.d.ts +16 -0
- package/dist/types/components/ui/popover.d.ts +7 -0
- package/dist/types/components/ui/progress-ring.d.ts +31 -0
- package/dist/types/components/ui/progress.d.ts +34 -0
- package/dist/types/components/ui/radio-group.d.ts +22 -0
- package/dist/types/components/ui/responsive-dialog.d.ts +31 -0
- package/dist/types/components/ui/scroll-area.d.ts +5 -0
- package/dist/types/components/ui/select.d.ts +22 -0
- package/dist/types/components/ui/separator.d.ts +4 -0
- package/dist/types/components/ui/sheet.d.ts +139 -0
- package/dist/types/components/ui/skeleton.d.ts +31 -0
- package/dist/types/components/ui/slider.d.ts +14 -0
- package/dist/types/components/ui/social-icon-data.d.ts +10 -0
- package/dist/types/components/ui/social-icon.d.ts +38 -0
- package/dist/types/components/ui/social-login-button.d.ts +10 -0
- package/dist/types/components/ui/spinner.d.ts +22 -0
- package/dist/types/components/ui/star-rating.d.ts +12 -0
- package/dist/types/components/ui/sub-nav.d.ts +17 -0
- package/dist/types/components/ui/switch.d.ts +4 -0
- package/dist/types/components/ui/sync-status-badge.d.ts +17 -0
- package/dist/types/components/ui/tabs.d.ts +15 -0
- package/dist/types/components/ui/textarea.d.ts +8 -0
- package/dist/types/components/ui/time-picker.d.ts +14 -0
- package/dist/types/components/ui/toast.d.ts +49 -0
- package/dist/types/components/ui/tooltip.d.ts +7 -0
- package/dist/types/index.d.ts +174 -0
- package/dist/types/lib/server-variants/button-variants.d.ts +20 -0
- package/dist/types/lib/utils.d.ts +2 -0
- package/dist/types/native/components/Accordion.d.ts +12 -0
- package/dist/types/native/components/Alert.d.ts +9 -0
- package/dist/types/native/components/AlertDialog.d.ts +11 -0
- package/dist/types/native/components/AppHeader.d.ts +10 -0
- package/dist/types/native/components/AppShell.d.ts +13 -0
- package/dist/types/native/components/AutoGrowTextarea.d.ts +8 -0
- package/dist/types/native/components/Avatar.d.ts +8 -0
- package/dist/types/native/components/Badge.d.ts +8 -0
- package/dist/types/native/components/Banner.d.ts +10 -0
- package/dist/types/native/components/BannerCarousel.d.ts +8 -0
- package/dist/types/native/components/BottomSheetForm.d.ts +10 -0
- package/dist/types/native/components/BottomTabBar.d.ts +8 -0
- package/dist/types/native/components/Breadcrumb.d.ts +12 -0
- package/dist/types/native/components/Button.d.ts +9 -0
- package/dist/types/native/components/Calendar.d.ts +8 -0
- package/dist/types/native/components/Card.d.ts +11 -0
- package/dist/types/native/components/CategoryNav.d.ts +13 -0
- package/dist/types/native/components/CategoryScroll.d.ts +12 -0
- package/dist/types/native/components/Checkbox.d.ts +7 -0
- package/dist/types/native/components/CheckboxCard.d.ts +8 -0
- package/dist/types/native/components/CheckboxField.d.ts +8 -0
- package/dist/types/native/components/CheckboxGroup.d.ts +12 -0
- package/dist/types/native/components/Chip.d.ts +17 -0
- package/dist/types/native/components/ChipSelector.d.ts +13 -0
- package/dist/types/native/components/CoachMark.d.ts +12 -0
- package/dist/types/native/components/CoachMarkOverlay.d.ts +19 -0
- package/dist/types/native/components/Collapsible.d.ts +7 -0
- package/dist/types/native/components/Combobox.d.ts +14 -0
- package/dist/types/native/components/ConfirmDialog.d.ts +7 -0
- package/dist/types/native/components/CountdownTimer.d.ts +7 -0
- package/dist/types/native/components/DatePicker.d.ts +10 -0
- package/dist/types/native/components/Dialog.d.ts +12 -0
- package/dist/types/native/components/DropdownFilter.d.ts +12 -0
- package/dist/types/native/components/DropdownMenu.d.ts +19 -0
- package/dist/types/native/components/EmptyState.d.ts +8 -0
- package/dist/types/native/components/ErrorState.d.ts +8 -0
- package/dist/types/native/components/FileUpload.d.ts +12 -0
- package/dist/types/native/components/FilterBar.d.ts +13 -0
- package/dist/types/native/components/FilterChip.d.ts +7 -0
- package/dist/types/native/components/Footer.d.ts +9 -0
- package/dist/types/native/components/FormField.d.ts +9 -0
- package/dist/types/native/components/GlassView.d.ts +25 -0
- package/dist/types/native/components/ImageCarousel.d.ts +8 -0
- package/dist/types/native/components/ImageGallery.d.ts +7 -0
- package/dist/types/native/components/Input.d.ts +9 -0
- package/dist/types/native/components/Label.d.ts +7 -0
- package/dist/types/native/components/ListItem.d.ts +11 -0
- package/dist/types/native/components/ListSkeletons.d.ts +6 -0
- package/dist/types/native/components/MarketingShell.d.ts +9 -0
- package/dist/types/native/components/MenuDrawer.d.ts +21 -0
- package/dist/types/native/components/MultiSelect.d.ts +13 -0
- package/dist/types/native/components/NavigationBar.d.ts +18 -0
- package/dist/types/native/components/NotificationBadge.d.ts +9 -0
- package/dist/types/native/components/NumberInput.d.ts +9 -0
- package/dist/types/native/components/OrderSummary.d.ts +10 -0
- package/dist/types/native/components/Pagination.d.ts +7 -0
- package/dist/types/native/components/PillToggle.d.ts +12 -0
- package/dist/types/native/components/Popover.d.ts +14 -0
- package/dist/types/native/components/PriceDisplay.d.ts +8 -0
- package/dist/types/native/components/ProductCard.d.ts +14 -0
- package/dist/types/native/components/ProductCarousel.d.ts +11 -0
- package/dist/types/native/components/Progress.d.ts +7 -0
- package/dist/types/native/components/ProgressRing.d.ts +12 -0
- package/dist/types/native/components/ProgressSteps.d.ts +9 -0
- package/dist/types/native/components/QuantitySelector.d.ts +6 -0
- package/dist/types/native/components/RadioGroup.d.ts +13 -0
- package/dist/types/native/components/RatingDisplay.d.ts +7 -0
- package/dist/types/native/components/ResponsiveDialog.d.ts +7 -0
- package/dist/types/native/components/ReviewCard.d.ts +11 -0
- package/dist/types/native/components/ReviewOverlay.d.ts +7 -0
- package/dist/types/native/components/ReviewSummary.d.ts +7 -0
- package/dist/types/native/components/ScrollArea.d.ts +9 -0
- package/dist/types/native/components/SearchBar.d.ts +9 -0
- package/dist/types/native/components/SectionHeader.d.ts +10 -0
- package/dist/types/native/components/Select.d.ts +14 -0
- package/dist/types/native/components/Separator.d.ts +5 -0
- package/dist/types/native/components/ShareButtons.d.ts +11 -0
- package/dist/types/native/components/Sheet.d.ts +20 -0
- package/dist/types/native/components/SimplePagination.d.ts +7 -0
- package/dist/types/native/components/Skeleton.d.ts +11 -0
- package/dist/types/native/components/Slider.d.ts +9 -0
- package/dist/types/native/components/SocialIcon.d.ts +12 -0
- package/dist/types/native/components/SocialLoginButton.d.ts +8 -0
- package/dist/types/native/components/Spinner.d.ts +6 -0
- package/dist/types/native/components/Stack.d.ts +13 -0
- package/dist/types/native/components/StarRating.d.ts +9 -0
- package/dist/types/native/components/StatCard.d.ts +7 -0
- package/dist/types/native/components/StickyActionBar.d.ts +6 -0
- package/dist/types/native/components/SubNav.d.ts +12 -0
- package/dist/types/native/components/SwipeRow.d.ts +14 -0
- package/dist/types/native/components/Switch.d.ts +4 -0
- package/dist/types/native/components/SyncStatusBadge.d.ts +6 -0
- package/dist/types/native/components/Tabs.d.ts +23 -0
- package/dist/types/native/components/Tag.d.ts +10 -0
- package/dist/types/native/components/TagInput.d.ts +7 -0
- package/dist/types/native/components/Text.d.ts +10 -0
- package/dist/types/native/components/Textarea.d.ts +7 -0
- package/dist/types/native/components/TimePicker.d.ts +12 -0
- package/dist/types/native/components/Toast.d.ts +18 -0
- package/dist/types/native/components/index.d.ts +99 -0
- package/dist/types/native/components/social-icon-data.d.ts +5 -0
- package/dist/types/native/index.d.ts +4 -0
- package/dist/types/native/theme/ThemeProvider.d.ts +21 -0
- package/dist/types/native/typography.d.ts +8 -0
- package/dist/types/tokens/native/index.d.ts +13 -0
- package/dist/types/tokens/native/primitives.d.ts +116 -0
- package/dist/types/tokens/native/scales.d.ts +270 -0
- package/dist/types/tokens/native/themes.d.ts +1147 -0
- package/eslint/deprecated.js +104 -0
- package/eslint/no-colorless-border.js +217 -0
- package/package.json +215 -0
- package/scripts/codemod/README.md +51 -0
- package/scripts/codemod/template.mjs +164 -0
- package/src/components/COMPONENT_LOOKUP.md +190 -0
- package/src/preset.css +168 -0
- package/src/styles/categorical.css +161 -0
- package/src/styles/glass.css +365 -0
- package/src/styles/primitive.css +161 -0
- package/src/styles/semantic.css +247 -0
- package/src/styles/typography.css +140 -0
- package/src/themes/README.md +44 -0
- package/src/themes/blue.css +21 -0
- package/src/themes/default.css +12 -0
- package/src/themes/green.css +22 -0
- package/src/themes/orange.css +21 -0
- package/src/themes/violet.css +22 -0
- package/templates/AGENTS.md +77 -0
- package/templates/CLAUDE.md +77 -0
- package/tokens.json +607 -0
|
@@ -0,0 +1,1443 @@
|
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"name": "KSK Design System — Component Contracts",
|
|
4
|
+
"version": "1.33.0",
|
|
5
|
+
"description": "全コンポーネントの構造化定義。バリアント・アクセシビリティ要件・使用ルールを機械可読形式で管理。",
|
|
6
|
+
"counts": {
|
|
7
|
+
"ui": 56,
|
|
8
|
+
"patterns": 33,
|
|
9
|
+
"commerce": 11,
|
|
10
|
+
"admin": 8,
|
|
11
|
+
"shells": 3,
|
|
12
|
+
"total": 111
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"ui": [
|
|
16
|
+
{
|
|
17
|
+
"name": "Button",
|
|
18
|
+
"path": "src/components/ui/button.tsx",
|
|
19
|
+
"description": "アクションボタン。最重要CTAにはdefault、Liquid Glass背景にはglass。アイコン単独はiconサイズ群。",
|
|
20
|
+
"variants": [
|
|
21
|
+
"default",
|
|
22
|
+
"secondary",
|
|
23
|
+
"secondary-switch",
|
|
24
|
+
"tertiary",
|
|
25
|
+
"ghost",
|
|
26
|
+
"link",
|
|
27
|
+
"destructive",
|
|
28
|
+
"glass",
|
|
29
|
+
"accent",
|
|
30
|
+
"inverse",
|
|
31
|
+
"ghost-inverse"
|
|
32
|
+
],
|
|
33
|
+
"sizes": [
|
|
34
|
+
"xs",
|
|
35
|
+
"sm",
|
|
36
|
+
"default",
|
|
37
|
+
"lg",
|
|
38
|
+
"xl",
|
|
39
|
+
"hero",
|
|
40
|
+
"icon",
|
|
41
|
+
"icon-sm",
|
|
42
|
+
"icon-lg",
|
|
43
|
+
"icon-xl",
|
|
44
|
+
"match"
|
|
45
|
+
],
|
|
46
|
+
"accessibility": [
|
|
47
|
+
"aria-label required for icon-only buttons"
|
|
48
|
+
],
|
|
49
|
+
"rules": [
|
|
50
|
+
"Must use <Button> not <button>",
|
|
51
|
+
"Icon-only buttons require aria-label",
|
|
52
|
+
"variant=glass は背景がグラデーション/写真の場合のみ使用",
|
|
53
|
+
"variant=inverse / ghost-inverse は暗背景・ヒーローセクション専用",
|
|
54
|
+
"size=hero は hero / final-CTA 専用(ピル型 56px)"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "Input",
|
|
59
|
+
"path": "src/components/ui/input.tsx",
|
|
60
|
+
"description": "テキスト入力フィールド。h-12, rounded-sm, セマンティックトークン使用。必ずLabelとセットで使う。",
|
|
61
|
+
"variants": [],
|
|
62
|
+
"accessibility": [
|
|
63
|
+
"Must pair with <Label>"
|
|
64
|
+
],
|
|
65
|
+
"rules": [
|
|
66
|
+
"Must use <Input> not <input>"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "Calendar",
|
|
71
|
+
"path": "src/components/ui/calendar.tsx",
|
|
72
|
+
"description": "月間カレンダーグリッド。react-day-picker v9ベース。DatePickerの内部コンポーネントとして使用。",
|
|
73
|
+
"variants": [],
|
|
74
|
+
"accessibility": [
|
|
75
|
+
"Keyboard navigable",
|
|
76
|
+
"aria-selected on selected day"
|
|
77
|
+
],
|
|
78
|
+
"rules": [
|
|
79
|
+
"Use DatePicker instead of Calendar directly unless embedding in custom UI"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "DatePicker",
|
|
84
|
+
"path": "src/components/ui/date-picker.tsx",
|
|
85
|
+
"description": "日付選択UI。Popover + Calendar の組み合わせ。<input type='date'>の代替。ブラウザ依存なし。",
|
|
86
|
+
"variants": [],
|
|
87
|
+
"accessibility": [
|
|
88
|
+
"Must pair with <Label>",
|
|
89
|
+
"aria-expanded on trigger button"
|
|
90
|
+
],
|
|
91
|
+
"rules": [
|
|
92
|
+
"Use DatePicker not <input type='date'>",
|
|
93
|
+
"Use DateRangePicker for date range selection"
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"name": "Textarea",
|
|
98
|
+
"path": "src/components/ui/textarea.tsx",
|
|
99
|
+
"description": "複数行テキスト入力。コメント・説明文など長文入力に使用。必ずLabelとセットで使う。",
|
|
100
|
+
"variants": [],
|
|
101
|
+
"accessibility": [
|
|
102
|
+
"Must pair with <Label>"
|
|
103
|
+
],
|
|
104
|
+
"rules": [
|
|
105
|
+
"Must use <Textarea> not <textarea>"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"name": "Label",
|
|
110
|
+
"path": "src/components/ui/label.tsx",
|
|
111
|
+
"description": "フォームラベル。すべての入力コントロールに対して必須。htmlForで入力と紐付ける。",
|
|
112
|
+
"variants": [],
|
|
113
|
+
"rules": [
|
|
114
|
+
"Always pair with form control via htmlFor"
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"name": "Select",
|
|
119
|
+
"path": "src/components/ui/select.tsx",
|
|
120
|
+
"description": "ドロップダウン選択。Radix UIベース。SelectTrigger / SelectContent / SelectItemで構成。",
|
|
121
|
+
"variants": [],
|
|
122
|
+
"accessibility": [
|
|
123
|
+
"Must pair with <Label>"
|
|
124
|
+
],
|
|
125
|
+
"rules": [
|
|
126
|
+
"Must use <Select> not <select>"
|
|
127
|
+
]
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"name": "Checkbox",
|
|
131
|
+
"path": "src/components/ui/checkbox.tsx",
|
|
132
|
+
"description": "チェックボックス。label/description/count を渡すと自動で行型レイアウトに(filter sidebar 型)。",
|
|
133
|
+
"variants": [],
|
|
134
|
+
"accessibility": [
|
|
135
|
+
"Must pair with <Label>"
|
|
136
|
+
],
|
|
137
|
+
"rules": [
|
|
138
|
+
"label を渡すと <label> でラップされ行全体がクリッカブルになる",
|
|
139
|
+
"カード型選択は CheckboxCard を使う"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"name": "RadioGroup",
|
|
144
|
+
"path": "src/components/ui/radio-group.tsx",
|
|
145
|
+
"description": "ラジオボタングループ。単一選択に使用。各RadioGroupItemにLabelが必要。",
|
|
146
|
+
"variants": [],
|
|
147
|
+
"accessibility": [
|
|
148
|
+
"Must pair with <Label> for each item"
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"name": "Switch",
|
|
153
|
+
"path": "src/components/ui/switch.tsx",
|
|
154
|
+
"description": "トグルスイッチ。設定のON/OFFなど即時反映するアクションに使用。",
|
|
155
|
+
"variants": [],
|
|
156
|
+
"accessibility": [
|
|
157
|
+
"Must pair with <Label>"
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"name": "Card",
|
|
162
|
+
"path": "src/components/ui/card.tsx",
|
|
163
|
+
"description": "コンテンツカード。@containerクエリ対応。CardHeader/CardContent/CardFooterで構成。",
|
|
164
|
+
"subcomponents": [
|
|
165
|
+
"CardHeader",
|
|
166
|
+
"CardTitle",
|
|
167
|
+
"CardDescription",
|
|
168
|
+
"CardAction",
|
|
169
|
+
"CardContent",
|
|
170
|
+
"CardFooter"
|
|
171
|
+
],
|
|
172
|
+
"rules": [
|
|
173
|
+
"rounded-lg (8px)"
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"name": "Badge",
|
|
178
|
+
"path": "src/components/ui/badge.tsx",
|
|
179
|
+
"description": "ステータスバッジ。状態表示・カウント表示に使用。interactive要素には使わない。",
|
|
180
|
+
"variants": [
|
|
181
|
+
"default",
|
|
182
|
+
"secondary",
|
|
183
|
+
"outline",
|
|
184
|
+
"destructive",
|
|
185
|
+
"success",
|
|
186
|
+
"warning",
|
|
187
|
+
"info",
|
|
188
|
+
"subtle",
|
|
189
|
+
"ghost"
|
|
190
|
+
],
|
|
191
|
+
"rules": [
|
|
192
|
+
"rounded-full only"
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"name": "Avatar",
|
|
197
|
+
"path": "src/components/ui/avatar.tsx",
|
|
198
|
+
"description": "ユーザーアバター。AvatarImage(画像)とAvatarFallback(イニシャル・アイコン)で構成。",
|
|
199
|
+
"subcomponents": [
|
|
200
|
+
"AvatarImage",
|
|
201
|
+
"AvatarFallback"
|
|
202
|
+
],
|
|
203
|
+
"rules": [
|
|
204
|
+
"rounded-full only",
|
|
205
|
+
"Use DiceBear shapes for placeholder, not pravatar.cc"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"name": "Dialog",
|
|
210
|
+
"path": "src/components/ui/dialog.tsx",
|
|
211
|
+
"description": "タスク面用の中央モーダル(role=dialog)。フォーム入力・絞り込み等の「作業する」面に使う。削除/送信等の割り込み確認は ConfirmDialog / AlertDialog(role=alertdialog) を使い分ける。モバイルは ResponsiveDialog 推奨。position=\"top\" でモバイル向け上部寄せ。",
|
|
212
|
+
"subcomponents": [
|
|
213
|
+
"DialogTrigger",
|
|
214
|
+
"DialogContent",
|
|
215
|
+
"DialogHeader",
|
|
216
|
+
"DialogTitle",
|
|
217
|
+
"DialogDescription",
|
|
218
|
+
"DialogFooter",
|
|
219
|
+
"DialogClose"
|
|
220
|
+
],
|
|
221
|
+
"rules": [
|
|
222
|
+
"rounded-2xl (16px)",
|
|
223
|
+
"shadow-[var(--shadow-dialog)]",
|
|
224
|
+
"p-6 padding"
|
|
225
|
+
]
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"name": "Sheet",
|
|
229
|
+
"path": "src/components/ui/sheet.tsx",
|
|
230
|
+
"description": "サイドパネル・ボトムシート。フィルター・メニュー・補助入力に使用。モーダルより軽いコンテキストに。snapPoints でスナップ式、swipeToClose で下スワイプ閉じを有効化。",
|
|
231
|
+
"subcomponents": [
|
|
232
|
+
"SheetTrigger",
|
|
233
|
+
"SheetContent",
|
|
234
|
+
"SheetHeader",
|
|
235
|
+
"SheetTitle",
|
|
236
|
+
"SheetDescription",
|
|
237
|
+
"SheetFooter",
|
|
238
|
+
"SheetClose",
|
|
239
|
+
"SheetDragIndicator"
|
|
240
|
+
],
|
|
241
|
+
"rules": [
|
|
242
|
+
"Side panel, not modal",
|
|
243
|
+
"swipeToClose は side=bottom / bottom-glass のみ有効"
|
|
244
|
+
],
|
|
245
|
+
"variants": {
|
|
246
|
+
"side": [
|
|
247
|
+
"top",
|
|
248
|
+
"bottom",
|
|
249
|
+
"left",
|
|
250
|
+
"right",
|
|
251
|
+
"float",
|
|
252
|
+
"float-glass",
|
|
253
|
+
"bottom-glass"
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"name": "Popover",
|
|
259
|
+
"path": "src/components/ui/popover.tsx",
|
|
260
|
+
"description": "ポップオーバー。ツールチップより情報量が多い場合・インタラクティブな補助UIに使用。",
|
|
261
|
+
"subcomponents": [
|
|
262
|
+
"PopoverTrigger",
|
|
263
|
+
"PopoverContent",
|
|
264
|
+
"PopoverAnchor"
|
|
265
|
+
],
|
|
266
|
+
"rules": [
|
|
267
|
+
"shadow-[var(--shadow-lg)]"
|
|
268
|
+
]
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"name": "Tooltip",
|
|
272
|
+
"path": "src/components/ui/tooltip.tsx",
|
|
273
|
+
"description": "ツールチップ。アイコンや省略テキストへの補足説明に使用。テキストのみ・短文のみ。",
|
|
274
|
+
"subcomponents": [
|
|
275
|
+
"TooltipProvider",
|
|
276
|
+
"TooltipTrigger",
|
|
277
|
+
"TooltipContent"
|
|
278
|
+
],
|
|
279
|
+
"rules": [
|
|
280
|
+
"shadow-[var(--shadow-tooltip)]"
|
|
281
|
+
]
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"name": "Tabs",
|
|
285
|
+
"path": "src/components/ui/tabs.tsx",
|
|
286
|
+
"description": "タブナビゲーション。同一コンテキスト内のビュー切り替えに使用。",
|
|
287
|
+
"subcomponents": [
|
|
288
|
+
"TabsList",
|
|
289
|
+
"TabsTrigger",
|
|
290
|
+
"TabsContent"
|
|
291
|
+
]
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"name": "Accordion",
|
|
295
|
+
"path": "src/components/ui/accordion.tsx",
|
|
296
|
+
"description": "アコーディオン。FAQ・設定項目など折りたたみコンテンツに使用。",
|
|
297
|
+
"subcomponents": [
|
|
298
|
+
"AccordionItem",
|
|
299
|
+
"AccordionTrigger",
|
|
300
|
+
"AccordionContent"
|
|
301
|
+
]
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"name": "Separator",
|
|
305
|
+
"path": "src/components/ui/separator.tsx",
|
|
306
|
+
"description": "区切り線。セクション間・リスト項目間の視覚的分離に使用。"
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"name": "Progress",
|
|
310
|
+
"path": "src/components/ui/progress.tsx",
|
|
311
|
+
"description": "進捗バー。color variant (default/success/warning/caution) + transition duration (none/sm/md/lg) 拡張済。",
|
|
312
|
+
"rules": [
|
|
313
|
+
"値超過で variant を切替: 100% 超なら caution",
|
|
314
|
+
"達成カード等は transitionDuration=\"lg\" で緩やかに"
|
|
315
|
+
]
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"name": "ScrollArea",
|
|
319
|
+
"path": "src/components/ui/scroll-area.tsx",
|
|
320
|
+
"description": "カスタムスクロールエリア。OSネイティブスクロールを隠してDS統一スクロールバーを表示。",
|
|
321
|
+
"subcomponents": [
|
|
322
|
+
"ScrollBar"
|
|
323
|
+
]
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"name": "Pagination",
|
|
327
|
+
"path": "src/components/ui/pagination.tsx",
|
|
328
|
+
"description": "ページネーション。リスト・テーブルのページ送りに使用。",
|
|
329
|
+
"subcomponents": [
|
|
330
|
+
"PaginationContent",
|
|
331
|
+
"PaginationItem",
|
|
332
|
+
"PaginationLink",
|
|
333
|
+
"PaginationNext",
|
|
334
|
+
"PaginationPrevious",
|
|
335
|
+
"PaginationEllipsis"
|
|
336
|
+
]
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"name": "Breadcrumb",
|
|
340
|
+
"path": "src/components/ui/breadcrumb.tsx",
|
|
341
|
+
"description": "パンくずリスト。現在位置の階層表示に使用。",
|
|
342
|
+
"subcomponents": [
|
|
343
|
+
"BreadcrumbList",
|
|
344
|
+
"BreadcrumbItem",
|
|
345
|
+
"BreadcrumbLink",
|
|
346
|
+
"BreadcrumbPage",
|
|
347
|
+
"BreadcrumbSeparator",
|
|
348
|
+
"BreadcrumbEllipsis"
|
|
349
|
+
]
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"name": "Skeleton",
|
|
353
|
+
"path": "src/components/ui/skeleton.tsx",
|
|
354
|
+
"description": "読み込み中プレースホルダ。width/height/rounded shorthand 対応。",
|
|
355
|
+
"rules": [
|
|
356
|
+
"数値は px、文字列は CSS 値として渡る",
|
|
357
|
+
"rounded: none/sm/md/lg/xl/2xl/full プリセット"
|
|
358
|
+
]
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"name": "ResponsiveDialog",
|
|
362
|
+
"path": "src/components/ui/responsive-dialog.tsx",
|
|
363
|
+
"description": "レスポンシブダイアログ。PCではDialog、モバイルではSheetに自動切り替え。useMediaQueryフック使用。",
|
|
364
|
+
"subcomponents": [
|
|
365
|
+
"ResponsiveDialogTrigger",
|
|
366
|
+
"ResponsiveDialogContent",
|
|
367
|
+
"ResponsiveDialogHeader",
|
|
368
|
+
"ResponsiveDialogTitle",
|
|
369
|
+
"ResponsiveDialogDescription",
|
|
370
|
+
"ResponsiveDialogFooter",
|
|
371
|
+
"ResponsiveDialogClose"
|
|
372
|
+
],
|
|
373
|
+
"rules": [
|
|
374
|
+
"Dialog on desktop, Sheet on mobile. Use useMediaQuery hook."
|
|
375
|
+
]
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"name": "Toast",
|
|
379
|
+
"path": "src/components/ui/toast.tsx",
|
|
380
|
+
"description": "トースト通知。操作結果フィードバックに使用。2 つの呼び出し方をサポート: (1) <Toaster> + useToast() の Provider モード、(2) sonner ライクな fire-and-forget API (`toast.success(...)` 等) — 後者は Toaster 不要で、初回呼び出し時に document.body 直下へ portal root を自動挿入する。",
|
|
381
|
+
"variants": [
|
|
382
|
+
"default",
|
|
383
|
+
"success",
|
|
384
|
+
"caution",
|
|
385
|
+
"warning",
|
|
386
|
+
"info"
|
|
387
|
+
],
|
|
388
|
+
"rules": [
|
|
389
|
+
"Provider モード: <Toaster> でラップし useToast() で呼び出す",
|
|
390
|
+
"Fire-and-forget: `import { toast } from \"ksk-design-system\"` → `toast.success(\"保存しました\")`。<Toaster> 設置不要",
|
|
391
|
+
"両 API は内部で同じ singleton store を共有するため、<Toaster> がある場合はそれを優先し auto-mounted viewport は描画しない",
|
|
392
|
+
"新規 action prop で右側に CTA ボタン (元に戻す / 再試行 等) を表示できる"
|
|
393
|
+
]
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"name": "ProgressRing",
|
|
397
|
+
"path": "src/components/ui/progress-ring.tsx",
|
|
398
|
+
"description": "円形プログレス表示。SVGベース。0〜100の進捗を円弧で表示。中央にラベル(%またはカスタム)表示。",
|
|
399
|
+
"sizes": [
|
|
400
|
+
"sm",
|
|
401
|
+
"md",
|
|
402
|
+
"lg",
|
|
403
|
+
"xl"
|
|
404
|
+
],
|
|
405
|
+
"rules": [
|
|
406
|
+
"Use for circular progress only. Use <Progress> for linear progress bar."
|
|
407
|
+
]
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
"name": "NumberInput",
|
|
411
|
+
"path": "src/components/ui/number-input.tsx",
|
|
412
|
+
"description": "数値入力コンポーネント。+/-ボタン付き。min/max/stepのガード・通貨フォーマット対応。<input type='number'>の代替。",
|
|
413
|
+
"features": [
|
|
414
|
+
"increment",
|
|
415
|
+
"decrement",
|
|
416
|
+
"min-max-clamp",
|
|
417
|
+
"format",
|
|
418
|
+
"keyboard-arrow"
|
|
419
|
+
],
|
|
420
|
+
"rules": [
|
|
421
|
+
"Use NumberInput not <input type='number'>",
|
|
422
|
+
"Use format prop for currency display"
|
|
423
|
+
]
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"name": "PillToggle",
|
|
427
|
+
"path": "src/components/ui/pill-toggle.tsx",
|
|
428
|
+
"description": "ピル型トグルセグメント。2〜4選択肢の切り替えに使用。TabsよりコンパクトなビューフィルターUI。",
|
|
429
|
+
"sizes": [
|
|
430
|
+
"sm",
|
|
431
|
+
"md"
|
|
432
|
+
],
|
|
433
|
+
"rules": [
|
|
434
|
+
"Use for 2-4 options only. For 5+ options use Tabs."
|
|
435
|
+
]
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"name": "StarRating",
|
|
439
|
+
"path": "src/components/ui/star-rating.tsx",
|
|
440
|
+
"description": "星評価コンポーネント。onChange省略で表示専用、指定でインタラクティブ入力。0.5刻みの半星表示対応。",
|
|
441
|
+
"sizes": [
|
|
442
|
+
"sm",
|
|
443
|
+
"md",
|
|
444
|
+
"lg"
|
|
445
|
+
],
|
|
446
|
+
"rules": [
|
|
447
|
+
"Omit onChange for read-only display. Pass onChange for interactive input."
|
|
448
|
+
]
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"name": "NavigationBar",
|
|
452
|
+
"path": "src/components/ui/navigation-bar.tsx",
|
|
453
|
+
"description": "iOS 26スタイルのナビゲーションバー。左ボタン(戻る/閉じる)、絶対中央タイトル、右スロット(シェア等)。",
|
|
454
|
+
"variants": [
|
|
455
|
+
"default (secondary buttons)",
|
|
456
|
+
"glass (Liquid Glass buttons)"
|
|
457
|
+
],
|
|
458
|
+
"props": {
|
|
459
|
+
"leftIcon": "\"back\" | \"close\" | ReactNode",
|
|
460
|
+
"title": "ReactNode",
|
|
461
|
+
"rightSlot": "ReactNode",
|
|
462
|
+
"onShare": "() => void (シェアボタン簡便prop)",
|
|
463
|
+
"glass": "boolean — Liquid Glass variant",
|
|
464
|
+
"transparent": "boolean — 背景なし"
|
|
465
|
+
},
|
|
466
|
+
"accessibility": [
|
|
467
|
+
"aria-label auto-set for back/close/share",
|
|
468
|
+
"leftLabel / shareLabel で上書き可"
|
|
469
|
+
],
|
|
470
|
+
"rules": [
|
|
471
|
+
"タイトルは absolute 中央配置",
|
|
472
|
+
"glass=true は写真・グラデーション背景上でのみ使用",
|
|
473
|
+
"Button size=\"icon-xl\" (44px Apple HIG minimum)"
|
|
474
|
+
]
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
"name": "CoachMark",
|
|
478
|
+
"path": "src/components/ui/coach-mark.tsx",
|
|
479
|
+
"description": "オンボーディング吹き出し(ガイド/ツールチップ)。ステップ番号・次へボタン・閉じるボタン対応。",
|
|
480
|
+
"variants": [],
|
|
481
|
+
"accessibility": [],
|
|
482
|
+
"rules": []
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
"name": "CountdownTimer",
|
|
486
|
+
"path": "src/components/ui/countdown-timer.tsx",
|
|
487
|
+
"description": "カウントダウン。granularity=\"day\"|\"hour\"|\"minute\"|\"second\" で粒度切替可。日単位は labels.todayLabel/dayUnit 等で i18n。",
|
|
488
|
+
"variants": [],
|
|
489
|
+
"accessibility": [
|
|
490
|
+
"aria-live for screen reader updates"
|
|
491
|
+
],
|
|
492
|
+
"rules": [
|
|
493
|
+
"結婚式/旅行など \"あと N 日\" 用途は granularity=\"day\"",
|
|
494
|
+
"competition timer は \"second\" (既定)"
|
|
495
|
+
]
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
"name": "ImageGallery",
|
|
499
|
+
"path": "src/components/ui/image-gallery.tsx",
|
|
500
|
+
"description": "画像ギャラリー。複数画像のグリッド表示 + ライトボックス。",
|
|
501
|
+
"variants": [],
|
|
502
|
+
"accessibility": [
|
|
503
|
+
"alt text required for each image"
|
|
504
|
+
],
|
|
505
|
+
"rules": []
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
"name": "SocialIcon",
|
|
509
|
+
"path": "src/components/ui/social-icon.tsx",
|
|
510
|
+
"description": "SNS / 外部サービスのブランドアイコン。socialicon/ の SVG を生成スクリプトで安定データ化して描画。platform / shape / tone を props で指定。",
|
|
511
|
+
"variants": [
|
|
512
|
+
"shape: original / square / rounded-square / rounded",
|
|
513
|
+
"tone: brand / mono(currentColor) / gray"
|
|
514
|
+
],
|
|
515
|
+
"accessibility": [
|
|
516
|
+
"role=\"img\"",
|
|
517
|
+
"装飾用途では aria-hidden を付与"
|
|
518
|
+
],
|
|
519
|
+
"rules": [
|
|
520
|
+
"platform はファイル名でなく正規化キーで指定",
|
|
521
|
+
"アイコン定義は social-icon-data.tsx(scripts/generate-social-icons.mjs で自動生成・手編集禁止)",
|
|
522
|
+
"PNG 埋め込み(<image>/base64)の SVG は生成時に除外"
|
|
523
|
+
]
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
"name": "SocialLoginButton",
|
|
527
|
+
"path": "src/components/ui/social-login-button.tsx",
|
|
528
|
+
"description": "ソーシャルログインボタン (Google / Apple / Line)。OAuthフロー開始用。",
|
|
529
|
+
"variants": [
|
|
530
|
+
"google",
|
|
531
|
+
"apple",
|
|
532
|
+
"line"
|
|
533
|
+
],
|
|
534
|
+
"accessibility": [
|
|
535
|
+
"aria-label with provider name"
|
|
536
|
+
],
|
|
537
|
+
"rules": []
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
"name": "SubNav",
|
|
541
|
+
"path": "src/components/ui/sub-nav.tsx",
|
|
542
|
+
"description": "横スクロール サブナビゲーション。underline / chip バリアント。アクティブ項目の自動スクロール対応。",
|
|
543
|
+
"variants": [],
|
|
544
|
+
"accessibility": [
|
|
545
|
+
"role=\"tablist\"",
|
|
546
|
+
"aria-selected on active tab"
|
|
547
|
+
],
|
|
548
|
+
"rules": []
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
"name": "Alert",
|
|
552
|
+
"path": "src/components/ui/alert.tsx",
|
|
553
|
+
"description": "アラート/通知。composable と prop-based の 2 つの API を持つ。",
|
|
554
|
+
"variants": [
|
|
555
|
+
"info",
|
|
556
|
+
"success",
|
|
557
|
+
"error",
|
|
558
|
+
"warning",
|
|
559
|
+
"inline-info",
|
|
560
|
+
"inline-caution",
|
|
561
|
+
"inline-warning"
|
|
562
|
+
],
|
|
563
|
+
"accessibility": [
|
|
564
|
+
"role=\"alert\" 自動付与"
|
|
565
|
+
],
|
|
566
|
+
"rules": [
|
|
567
|
+
"bordered は白背景+カラー枠線",
|
|
568
|
+
"inline は色付き背景・コンパクト",
|
|
569
|
+
"bordered variant (success/info/error/warning) は title/description prop で自動アイコン表示可"
|
|
570
|
+
]
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
"name": "AlertDialog",
|
|
574
|
+
"path": "src/components/ui/alert-dialog.tsx",
|
|
575
|
+
"description": "「アクションを止める」割り込み確認の基盤(role=alertdialog)。破壊的アクションの二段階確認に使用。中央表示・オーバーレイ外クリックでは閉じない(明示的に選ばせる)。タスク面の中央モーダルは Dialog を使う。",
|
|
576
|
+
"variants": [
|
|
577
|
+
"default",
|
|
578
|
+
"sm"
|
|
579
|
+
],
|
|
580
|
+
"accessibility": [
|
|
581
|
+
"フォーカストラップ",
|
|
582
|
+
"aria-modal",
|
|
583
|
+
"ESCキーで閉じる"
|
|
584
|
+
],
|
|
585
|
+
"rules": [
|
|
586
|
+
"Action に variant=destructive でデストラクティブCTA",
|
|
587
|
+
"Cancel は variant=tertiary デフォルト"
|
|
588
|
+
]
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
"name": "Spinner",
|
|
592
|
+
"path": "src/components/ui/spinner.tsx",
|
|
593
|
+
"description": "ローディングインジケーター。非同期処理中の待機状態に使用。",
|
|
594
|
+
"sizes": [
|
|
595
|
+
"sm",
|
|
596
|
+
"md",
|
|
597
|
+
"lg"
|
|
598
|
+
],
|
|
599
|
+
"accessibility": [
|
|
600
|
+
"role=\"status\"",
|
|
601
|
+
"aria-label=\"読み込み中\""
|
|
602
|
+
],
|
|
603
|
+
"rules": [
|
|
604
|
+
"--Brand-Primary 色で回転"
|
|
605
|
+
]
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
"name": "Slider",
|
|
609
|
+
"path": "src/components/ui/slider.tsx",
|
|
610
|
+
"description": "数値スライダー。価格帯フィルタ・音量など連続値の入力。範囲スライダー(2ハンドル)も対応。",
|
|
611
|
+
"accessibility": [
|
|
612
|
+
"Radix Slider 準拠",
|
|
613
|
+
"キーボード操作対応(矢印キー)"
|
|
614
|
+
],
|
|
615
|
+
"rules": [
|
|
616
|
+
"defaultValue は配列",
|
|
617
|
+
"範囲スライダーは defaultValue={[min, max]}"
|
|
618
|
+
]
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
"name": "DropdownMenu",
|
|
622
|
+
"path": "src/components/ui/dropdown-menu.tsx",
|
|
623
|
+
"description": "ドロップダウンメニュー。アクション一覧・並び替え・表示設定。サブメニュー・チェックボックス・ラジオグループ対応。",
|
|
624
|
+
"variants": [
|
|
625
|
+
"default",
|
|
626
|
+
"destructive (DropdownMenuItem)"
|
|
627
|
+
],
|
|
628
|
+
"accessibility": [
|
|
629
|
+
"キーボード操作",
|
|
630
|
+
"role=\"menu\""
|
|
631
|
+
],
|
|
632
|
+
"rules": [
|
|
633
|
+
"lucide-react 非依存(インラインSVG)",
|
|
634
|
+
"DropdownMenuTrigger には asChild 推奨"
|
|
635
|
+
]
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
"name": "CheckboxCard",
|
|
639
|
+
"path": "src/components/ui/checkbox-card.tsx",
|
|
640
|
+
"description": "カード型チェックボックス。複数選択のカード型UI。単一選択には RadioGroup を使用。",
|
|
641
|
+
"accessibility": [
|
|
642
|
+
"Radix Checkbox 準拠",
|
|
643
|
+
"disabled 状態対応"
|
|
644
|
+
],
|
|
645
|
+
"rules": [
|
|
646
|
+
"CheckboxCardGroup でグループ化",
|
|
647
|
+
"expandedContent で選択時展開",
|
|
648
|
+
"badge でタグ表示"
|
|
649
|
+
]
|
|
650
|
+
},
|
|
651
|
+
{
|
|
652
|
+
"name": "CheckboxGroup",
|
|
653
|
+
"path": "src/components/ui/checkbox-group.tsx",
|
|
654
|
+
"description": "複数チェックボックスのグループラッパー。ラベル・必須バッジ・グリッドレイアウト・エラー表示付き。",
|
|
655
|
+
"accessibility": [
|
|
656
|
+
"fieldset + legend によるグループ化",
|
|
657
|
+
"aria-invalid でエラー状態"
|
|
658
|
+
],
|
|
659
|
+
"rules": [
|
|
660
|
+
"columns で 1〜3 カラム対応(デフォルト 2)",
|
|
661
|
+
"required で必須バッジ",
|
|
662
|
+
"error でエラーメッセージ"
|
|
663
|
+
]
|
|
664
|
+
},
|
|
665
|
+
{
|
|
666
|
+
"name": "CheckboxField",
|
|
667
|
+
"path": "src/components/ui/checkbox-field.tsx",
|
|
668
|
+
"description": "フォーム内の単体チェックボックス(同意・確認用)。インラインラベル + 任意の説明 / エラー。チェックと文字の縦整列を正準化し、画面側で手組みするズレを防ぐ。filter 行用の <Checkbox label> とは役割が別。",
|
|
669
|
+
"accessibility": [
|
|
670
|
+
"Label が htmlFor/id で Checkbox と自動紐付け",
|
|
671
|
+
"error 指定時に aria-invalid + aria-describedby",
|
|
672
|
+
"items-start で複数行ラベルも先頭行に整列"
|
|
673
|
+
],
|
|
674
|
+
"rules": [
|
|
675
|
+
"フォームの同意 / 確認チェックに使う(checkbox + label の手組みを禁止)",
|
|
676
|
+
"filter サイドバー等の行クリック型は <Checkbox label> を使う",
|
|
677
|
+
"description で補足、error でエラーメッセージ"
|
|
678
|
+
]
|
|
679
|
+
},
|
|
680
|
+
{
|
|
681
|
+
"name": "HoverCard",
|
|
682
|
+
"path": "src/components/ui/hover-card.tsx",
|
|
683
|
+
"description": "ホバー情報カード。プロフィールプレビューや補足情報に使用。",
|
|
684
|
+
"accessibility": [
|
|
685
|
+
"Radix HoverCard 準拠",
|
|
686
|
+
"openDelay / closeDelay 設定可"
|
|
687
|
+
],
|
|
688
|
+
"rules": [
|
|
689
|
+
"HoverCardTrigger に asChild 推奨",
|
|
690
|
+
"タッチデバイスでは表示されない点に注意"
|
|
691
|
+
]
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
"name": "Collapsible",
|
|
695
|
+
"path": "src/components/ui/collapsible.tsx",
|
|
696
|
+
"description": "折りたたみパネル。単独の折りたたみに使用。FAQ・詳細表示に適用。複数グループは Accordion を使用。",
|
|
697
|
+
"accessibility": [
|
|
698
|
+
"Radix Collapsible 準拠",
|
|
699
|
+
"aria-expanded"
|
|
700
|
+
],
|
|
701
|
+
"rules": [
|
|
702
|
+
"CollapsibleTrigger に asChild 推奨",
|
|
703
|
+
"複数グループには Accordion を使用"
|
|
704
|
+
]
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
"name": "Form",
|
|
708
|
+
"path": "src/components/ui/form.tsx",
|
|
709
|
+
"description": "react-hook-form 統合フォームラッパー。FormProvider + Controller のラッパー群。FormField / FormItem / FormLabel / FormControl / FormDescription / FormMessage で構成。",
|
|
710
|
+
"accessibility": [
|
|
711
|
+
"aria-describedby 自動付与",
|
|
712
|
+
"aria-invalid でエラー状態",
|
|
713
|
+
"FormLabel と FormControl が htmlFor/id で自動紐付け"
|
|
714
|
+
],
|
|
715
|
+
"rules": [
|
|
716
|
+
"useForm() の戻り値を Form に展開して渡す",
|
|
717
|
+
"FormControl でラップしたコンポーネントに自動的に aria-* が付与される",
|
|
718
|
+
"react-hook-form 必須 (peer dependency)"
|
|
719
|
+
]
|
|
720
|
+
},
|
|
721
|
+
{
|
|
722
|
+
"name": "Combobox",
|
|
723
|
+
"path": "src/components/ui/combobox.tsx",
|
|
724
|
+
"description": "コンボボックス。リスト + 検索の組合せ入力。Radix Combobox + cmdk ベース。",
|
|
725
|
+
"variants": [],
|
|
726
|
+
"sizes": [],
|
|
727
|
+
"accessibility": [
|
|
728
|
+
"aria-expanded",
|
|
729
|
+
"role=combobox"
|
|
730
|
+
],
|
|
731
|
+
"rules": [
|
|
732
|
+
"select で代替できない検索付きセレクトに使う"
|
|
733
|
+
]
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
"name": "DropdownFilter",
|
|
737
|
+
"path": "src/components/ui/dropdown-filter.tsx",
|
|
738
|
+
"description": "DataTable / 検索結果の絞り込みドロップダウン。getDisplayLabel/valueOnly/pristineValue/option.icon 拡張対応。",
|
|
739
|
+
"variants": [],
|
|
740
|
+
"sizes": [],
|
|
741
|
+
"accessibility": [
|
|
742
|
+
"aria-haspopup=listbox",
|
|
743
|
+
"aria-expanded"
|
|
744
|
+
],
|
|
745
|
+
"rules": [
|
|
746
|
+
"DataTable のフィルタ列で使う",
|
|
747
|
+
"getDisplayLabel で表示変換",
|
|
748
|
+
"valueOnly で \"ラベル: 値\" を省略",
|
|
749
|
+
"pristineValue を指定するとデフォルト値選択時は active 扱いしない",
|
|
750
|
+
"option.icon でラベル左にアイコン表示(チップは選択中 option のアイコンを表示・currentColor 継承)"
|
|
751
|
+
]
|
|
752
|
+
},
|
|
753
|
+
{
|
|
754
|
+
"name": "MultiSelect",
|
|
755
|
+
"path": "src/components/ui/multi-select.tsx",
|
|
756
|
+
"description": "複数選択可能なセレクト。選択済みは Chip で表示。",
|
|
757
|
+
"variants": [],
|
|
758
|
+
"sizes": [],
|
|
759
|
+
"accessibility": [
|
|
760
|
+
"aria-multiselectable"
|
|
761
|
+
],
|
|
762
|
+
"rules": [
|
|
763
|
+
"3 件以上選択する用途に。少数なら CheckboxGroup を優先"
|
|
764
|
+
]
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
"name": "SyncStatusBadge",
|
|
768
|
+
"path": "src/components/ui/sync-status-badge.tsx",
|
|
769
|
+
"description": "同期状態表示。idle / syncing / success / error / offline。",
|
|
770
|
+
"variants": [],
|
|
771
|
+
"sizes": [],
|
|
772
|
+
"accessibility": [
|
|
773
|
+
"live region 想定"
|
|
774
|
+
],
|
|
775
|
+
"rules": [
|
|
776
|
+
"管理画面のヘッダー / 編集中状態表示で使う"
|
|
777
|
+
]
|
|
778
|
+
},
|
|
779
|
+
{
|
|
780
|
+
"name": "TimePicker",
|
|
781
|
+
"path": "src/components/ui/time-picker.tsx",
|
|
782
|
+
"description": "時刻選択。15 分刻みデフォルト。HH:mm。",
|
|
783
|
+
"variants": [],
|
|
784
|
+
"sizes": [],
|
|
785
|
+
"accessibility": [
|
|
786
|
+
"aria-label required"
|
|
787
|
+
],
|
|
788
|
+
"rules": [
|
|
789
|
+
"timezone 非対応。タイムゾーンが要件なら別実装"
|
|
790
|
+
]
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
"name": "AutoGrowTextarea",
|
|
794
|
+
"path": "src/components/ui/auto-grow-textarea.tsx",
|
|
795
|
+
"description": "Textarea ラッパー。入力に合わせて自動高さ調整 + 任意で文字数カウンタ。",
|
|
796
|
+
"variants": [],
|
|
797
|
+
"sizes": [],
|
|
798
|
+
"accessibility": [
|
|
799
|
+
"aria-label inherits from Textarea"
|
|
800
|
+
],
|
|
801
|
+
"rules": [
|
|
802
|
+
"長文メモ・コメント入力で <Textarea> の代わりに使う",
|
|
803
|
+
"maxLength 指定でカウンタが自動表示"
|
|
804
|
+
]
|
|
805
|
+
},
|
|
806
|
+
{
|
|
807
|
+
"name": "ErrorBoundary",
|
|
808
|
+
"path": "src/components/ui/error-boundary.tsx",
|
|
809
|
+
"description": "React の componentDidCatch をラップした汎用フォールバック。labels prop で i18n、onError で logger 連携、onReset で再試行ボタン、fallback で完全カスタムレンダリング。",
|
|
810
|
+
"variants": [],
|
|
811
|
+
"sizes": [],
|
|
812
|
+
"accessibility": [
|
|
813
|
+
"role=alert"
|
|
814
|
+
],
|
|
815
|
+
"rules": [
|
|
816
|
+
"onError は dev 時には自動 console.error。本番では明示指定時のみ"
|
|
817
|
+
]
|
|
818
|
+
}
|
|
819
|
+
],
|
|
820
|
+
"patterns": [
|
|
821
|
+
{
|
|
822
|
+
"name": "Banner",
|
|
823
|
+
"path": "src/components/patterns/banner.tsx",
|
|
824
|
+
"description": "フィードバックバナー。情報・成功・警告・注意の状態を色+アイコン+テキストで表示。",
|
|
825
|
+
"variants": [
|
|
826
|
+
"info",
|
|
827
|
+
"success",
|
|
828
|
+
"warning",
|
|
829
|
+
"caution"
|
|
830
|
+
],
|
|
831
|
+
"rules": [
|
|
832
|
+
"Color + icon + text (never color alone)"
|
|
833
|
+
]
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
"name": "EmptyState",
|
|
837
|
+
"path": "src/components/patterns/empty-state.tsx",
|
|
838
|
+
"description": "空状態プレースホルダー。データゼロ時のUX向上に使用。アクションまたは説明文を必ず含める。",
|
|
839
|
+
"rules": [
|
|
840
|
+
"Always include an action or explanation"
|
|
841
|
+
]
|
|
842
|
+
},
|
|
843
|
+
{
|
|
844
|
+
"name": "ErrorState",
|
|
845
|
+
"path": "src/components/patterns/error-state.tsx",
|
|
846
|
+
"description": "エラー状態表示。API失敗・権限エラー等に使用。リトライアクションを必ず含める。",
|
|
847
|
+
"rules": [
|
|
848
|
+
"Color + icon + text. Include retry action."
|
|
849
|
+
]
|
|
850
|
+
},
|
|
851
|
+
{
|
|
852
|
+
"name": "SectionHeader",
|
|
853
|
+
"path": "src/components/patterns/section-header.tsx",
|
|
854
|
+
"description": "セクション見出し+アクションのセット。リスト上部の「一覧」+「もっと見る」等に使用。",
|
|
855
|
+
"rules": [
|
|
856
|
+
"typo-heading-* for title"
|
|
857
|
+
]
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
"name": "StatCard",
|
|
861
|
+
"path": "src/components/patterns/stat-card.tsx",
|
|
862
|
+
"description": "KPI / メトリクス表示カード。interactive prop で button 化、focus-ring / active:scale 自動付与。",
|
|
863
|
+
"rules": [
|
|
864
|
+
"interactive または onClick を渡せば role=button + キーボード操作対応"
|
|
865
|
+
]
|
|
866
|
+
},
|
|
867
|
+
{
|
|
868
|
+
"name": "ListItem",
|
|
869
|
+
"path": "src/components/patterns/list-item.tsx",
|
|
870
|
+
"description": "汎用リストアイテム。left/right/bottomスロット付き。設定・通知・ユーザー一覧等に使用。"
|
|
871
|
+
},
|
|
872
|
+
{
|
|
873
|
+
"name": "SearchBar",
|
|
874
|
+
"path": "src/components/patterns/search-bar.tsx",
|
|
875
|
+
"description": "検索バー。アイコン+テキスト入力の組み合わせ。ページ内検索・フィルタリングに使用。"
|
|
876
|
+
},
|
|
877
|
+
{
|
|
878
|
+
"name": "Chip",
|
|
879
|
+
"path": "src/components/patterns/chip.tsx",
|
|
880
|
+
"description": "クリック可能なフィルタ・キーワードチップ。soldOut/count/href/removable 状態を持つ。",
|
|
881
|
+
"variants": [
|
|
882
|
+
"filled",
|
|
883
|
+
"accent",
|
|
884
|
+
"outline"
|
|
885
|
+
],
|
|
886
|
+
"sizes": [
|
|
887
|
+
"sm",
|
|
888
|
+
"md",
|
|
889
|
+
"lg",
|
|
890
|
+
"tile"
|
|
891
|
+
],
|
|
892
|
+
"rules": [
|
|
893
|
+
"Tag (表示専用) との違いは interactive 性",
|
|
894
|
+
"soldOut は斜線オーバーレイ + disabled",
|
|
895
|
+
"href を渡すと <a> でレンダリング",
|
|
896
|
+
"shape=pill (既定) / square、size=tile は正方形タイル"
|
|
897
|
+
]
|
|
898
|
+
},
|
|
899
|
+
{
|
|
900
|
+
"name": "Tag",
|
|
901
|
+
"path": "src/components/patterns/tag.tsx",
|
|
902
|
+
"description": "表示のみラベル。カテゴリ・ステータスの視覚的表示に使用。Chipと違いクリック不可。",
|
|
903
|
+
"rules": [
|
|
904
|
+
"rounded-sm (4px)",
|
|
905
|
+
"Display-only, not interactive"
|
|
906
|
+
]
|
|
907
|
+
},
|
|
908
|
+
{
|
|
909
|
+
"name": "NotificationBadge",
|
|
910
|
+
"path": "src/components/patterns/notification-badge.tsx",
|
|
911
|
+
"description": "通知件数バッジ。アイコン・アバターに重ねて件数表示。99件超は「99+」表示。",
|
|
912
|
+
"rules": [
|
|
913
|
+
"rounded-full only",
|
|
914
|
+
"Max display: 99+"
|
|
915
|
+
]
|
|
916
|
+
},
|
|
917
|
+
{
|
|
918
|
+
"name": "ProgressSteps",
|
|
919
|
+
"path": "src/components/patterns/progress-steps.tsx",
|
|
920
|
+
"description": "ステップ進捗表示。チェックアウト・登録フロー等の多段階プロセスの現在地を示す。"
|
|
921
|
+
},
|
|
922
|
+
{
|
|
923
|
+
"name": "FormField",
|
|
924
|
+
"path": "src/components/patterns/form-field.tsx",
|
|
925
|
+
"description": "フォームフィールドラッパー。Label+Input+エラーメッセージをセットで管理。バリデーション表示付き。",
|
|
926
|
+
"rules": [
|
|
927
|
+
"Label + Input + error message as unit"
|
|
928
|
+
]
|
|
929
|
+
},
|
|
930
|
+
{
|
|
931
|
+
"name": "Form",
|
|
932
|
+
"path": "src/components/patterns/form.tsx",
|
|
933
|
+
"description": "フォームコンテナ。FormRoot/FormSection/FormActionsで構成。複数FormFieldをまとめる。",
|
|
934
|
+
"subcomponents": [
|
|
935
|
+
"FormRoot",
|
|
936
|
+
"FormSection",
|
|
937
|
+
"FormActions"
|
|
938
|
+
]
|
|
939
|
+
},
|
|
940
|
+
{
|
|
941
|
+
"name": "AppHeader",
|
|
942
|
+
"path": "src/components/patterns/app-header.tsx",
|
|
943
|
+
"description": "モバイルアプリ向けページヘッダー。leading(戻るボタン等)・title・subtitle・trailingスロット付き。sticky/bordered対応。",
|
|
944
|
+
"slots": [
|
|
945
|
+
"leading",
|
|
946
|
+
"title",
|
|
947
|
+
"subtitle",
|
|
948
|
+
"trailing"
|
|
949
|
+
],
|
|
950
|
+
"rules": [
|
|
951
|
+
"For mobile app page headers. Use sticky prop for fixed-top behavior."
|
|
952
|
+
]
|
|
953
|
+
},
|
|
954
|
+
{
|
|
955
|
+
"name": "TagInput",
|
|
956
|
+
"path": "src/components/patterns/tag-input.tsx",
|
|
957
|
+
"description": "タグ複数入力フィールド。Enter/カンマで追加・Backspaceで削除。max・allowDuplicates制御対応。",
|
|
958
|
+
"features": [
|
|
959
|
+
"add-on-enter",
|
|
960
|
+
"add-on-comma",
|
|
961
|
+
"remove-on-backspace",
|
|
962
|
+
"max",
|
|
963
|
+
"duplicates-control"
|
|
964
|
+
],
|
|
965
|
+
"rules": [
|
|
966
|
+
"Use for multi-value text input (tags, emails, keywords)"
|
|
967
|
+
]
|
|
968
|
+
},
|
|
969
|
+
{
|
|
970
|
+
"name": "SwipeRow",
|
|
971
|
+
"path": "src/components/patterns/swipe-row.tsx",
|
|
972
|
+
"description": "スワイプアクション付きリスト行。左スワイプでアクションボタンを表示。タッチ/マウス両対応。",
|
|
973
|
+
"features": [
|
|
974
|
+
"swipe-to-reveal",
|
|
975
|
+
"snap-behavior",
|
|
976
|
+
"multiple-actions"
|
|
977
|
+
],
|
|
978
|
+
"rules": [
|
|
979
|
+
"Mobile list items with swipe actions (delete, archive, etc.)"
|
|
980
|
+
]
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
"name": "ConfirmDialog",
|
|
984
|
+
"path": "src/components/patterns/confirm-dialog.tsx",
|
|
985
|
+
"description": "確認ダイアログ。AlertDialog(role=alertdialog)基盤の割り込み確認。削除・送信等の重要操作前に PC/SP とも中央アラートで確認。外クリックでは閉じない・非同期onConfirm対応・ローディング状態あり。",
|
|
986
|
+
"variants": [
|
|
987
|
+
"default",
|
|
988
|
+
"destructive"
|
|
989
|
+
],
|
|
990
|
+
"rules": [
|
|
991
|
+
"Use destructive variant for delete/irreversible actions",
|
|
992
|
+
"Use ConfirmDialog not custom Dialog for confirmation flows"
|
|
993
|
+
]
|
|
994
|
+
},
|
|
995
|
+
{
|
|
996
|
+
"name": "BottomSheetForm",
|
|
997
|
+
"path": "src/components/patterns/bottom-sheet-form.tsx",
|
|
998
|
+
"description": "ボトムシートフォーム。タスク追加・編集等のフォームをモバイルシートで表示。ドラッグハンドル・固定フッター付き。",
|
|
999
|
+
"features": [
|
|
1000
|
+
"drag-handle",
|
|
1001
|
+
"scrollable-content",
|
|
1002
|
+
"fixed-footer",
|
|
1003
|
+
"async-submit"
|
|
1004
|
+
],
|
|
1005
|
+
"rules": [
|
|
1006
|
+
"Use for mobile form inputs. Sheet side is always bottom."
|
|
1007
|
+
]
|
|
1008
|
+
},
|
|
1009
|
+
{
|
|
1010
|
+
"name": "ChipSelector",
|
|
1011
|
+
"path": "src/components/patterns/chip-selector.tsx",
|
|
1012
|
+
"description": "チップ複数選択コンポーネント。カテゴリ・タグ等の複数/単一選択に使用。max上限・removableバッジ対応。",
|
|
1013
|
+
"features": [
|
|
1014
|
+
"multi-select",
|
|
1015
|
+
"single-select",
|
|
1016
|
+
"max-limit",
|
|
1017
|
+
"removable"
|
|
1018
|
+
],
|
|
1019
|
+
"rules": [
|
|
1020
|
+
"Use multiple=false for single-select. Use max to limit selection count."
|
|
1021
|
+
]
|
|
1022
|
+
},
|
|
1023
|
+
{
|
|
1024
|
+
"name": "StickyActionBar",
|
|
1025
|
+
"path": "src/components/patterns/sticky-action-bar.tsx",
|
|
1026
|
+
"description": "画面下部スティッキー CTA ゾーン。iOS safe-area-inset-bottom 対応。bordered prop でボーダー制御。",
|
|
1027
|
+
"accessibility": [
|
|
1028
|
+
"safe-area-inset-bottom 対応"
|
|
1029
|
+
],
|
|
1030
|
+
"rules": [
|
|
1031
|
+
"子要素に Button w-full を推奨",
|
|
1032
|
+
"SheetContent 内では sticky が効かないため注意"
|
|
1033
|
+
]
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
"name": "CategoryNav",
|
|
1037
|
+
"path": "src/components/patterns/category-nav.tsx",
|
|
1038
|
+
"description": "40px 円アイコン横スクロールカテゴリフィルター。選択状態(isSelected)対応。href / onClick どちらも可。",
|
|
1039
|
+
"accessibility": [
|
|
1040
|
+
"href のある場合は <a>、ない場合は <button>"
|
|
1041
|
+
],
|
|
1042
|
+
"rules": [
|
|
1043
|
+
"フィルター用途に使用(セクションタイトルなし)",
|
|
1044
|
+
"選択状態は isSelected で制御",
|
|
1045
|
+
"CategoryScroll との違い: コンパクト・フィルター用途"
|
|
1046
|
+
]
|
|
1047
|
+
},
|
|
1048
|
+
{
|
|
1049
|
+
"name": "CategoryScroll",
|
|
1050
|
+
"path": "src/components/patterns/category-scroll.tsx",
|
|
1051
|
+
"description": "カテゴリスクロールセクション。SectionHeader + サムネイル(画像+ラベル)横スクロール。layout=grid で複数行対応。",
|
|
1052
|
+
"accessibility": [
|
|
1053
|
+
"img に alt 必須"
|
|
1054
|
+
],
|
|
1055
|
+
"rules": [
|
|
1056
|
+
"thumbnailShape=circle + thumbnailSize=sm でクイックアクセス風",
|
|
1057
|
+
"layout=grid で複数行グリッド",
|
|
1058
|
+
"moreHref で もっと見るリンク"
|
|
1059
|
+
]
|
|
1060
|
+
},
|
|
1061
|
+
{
|
|
1062
|
+
"name": "BannerCarousel",
|
|
1063
|
+
"path": "src/components/patterns/banner-carousel.tsx",
|
|
1064
|
+
"description": "バナーカルーセル。複数バナー画像を自動スライド表示。トップページのキービジュアルや特集告知に使用。"
|
|
1065
|
+
},
|
|
1066
|
+
{
|
|
1067
|
+
"name": "Footer",
|
|
1068
|
+
"path": "src/components/patterns/footer.tsx",
|
|
1069
|
+
"description": "フッター。リンクグループ・コピーライト・SNSリンクを含むページ下部コンポーネント。"
|
|
1070
|
+
},
|
|
1071
|
+
{
|
|
1072
|
+
"name": "MenuDrawer",
|
|
1073
|
+
"path": "src/components/patterns/menu-drawer.tsx",
|
|
1074
|
+
"description": "メニュードロワー。ハンバーガーメニュークリックで表示されるサイドナビゲーション。セクション・アイテム構造を持つ。"
|
|
1075
|
+
},
|
|
1076
|
+
{
|
|
1077
|
+
"name": "ShareButtons",
|
|
1078
|
+
"path": "src/components/patterns/share-buttons.tsx",
|
|
1079
|
+
"description": "シェアボタン群。LINE / Twitter / Facebook などのSNSシェアボタンをまとめて表示。"
|
|
1080
|
+
},
|
|
1081
|
+
{
|
|
1082
|
+
"name": "FileUpload",
|
|
1083
|
+
"path": "src/components/patterns/file-upload.tsx",
|
|
1084
|
+
"description": "ファイルアップロード(ドラッグ&ドロップ + ボタン)。",
|
|
1085
|
+
"variants": [
|
|
1086
|
+
"single",
|
|
1087
|
+
"multiple"
|
|
1088
|
+
],
|
|
1089
|
+
"sizes": [],
|
|
1090
|
+
"accessibility": [
|
|
1091
|
+
"aria-label",
|
|
1092
|
+
"drop zone announces"
|
|
1093
|
+
],
|
|
1094
|
+
"rules": [
|
|
1095
|
+
"画像専用なら ImageUploader を使う"
|
|
1096
|
+
]
|
|
1097
|
+
},
|
|
1098
|
+
{
|
|
1099
|
+
"name": "ReviewOverlay",
|
|
1100
|
+
"path": "src/components/patterns/review-overlay.tsx",
|
|
1101
|
+
"description": "レビュー入力オーバーレイ。星評価 + テキスト + 投稿。",
|
|
1102
|
+
"variants": [],
|
|
1103
|
+
"sizes": [],
|
|
1104
|
+
"accessibility": [
|
|
1105
|
+
"role=dialog",
|
|
1106
|
+
"aria-modal"
|
|
1107
|
+
],
|
|
1108
|
+
"rules": [
|
|
1109
|
+
"commerce のレビュー投稿で使う"
|
|
1110
|
+
]
|
|
1111
|
+
},
|
|
1112
|
+
{
|
|
1113
|
+
"name": "SimplePagination",
|
|
1114
|
+
"path": "src/components/patterns/simple-pagination.tsx",
|
|
1115
|
+
"description": "簡易ページネーション(前後 + 現在ページのみ)。スペース節約。",
|
|
1116
|
+
"variants": [],
|
|
1117
|
+
"sizes": [
|
|
1118
|
+
"sm",
|
|
1119
|
+
"md"
|
|
1120
|
+
],
|
|
1121
|
+
"accessibility": [
|
|
1122
|
+
"nav role"
|
|
1123
|
+
],
|
|
1124
|
+
"rules": [
|
|
1125
|
+
"フル機能は Pagination (ui/) を使う"
|
|
1126
|
+
]
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
"name": "CoachMarkOverlay",
|
|
1130
|
+
"path": "src/components/patterns/coach-mark-overlay.tsx",
|
|
1131
|
+
"description": "selector ベースの多ステップ onboarding ツアー。spotlight 切り抜き + tooltip。",
|
|
1132
|
+
"variants": [
|
|
1133
|
+
"default",
|
|
1134
|
+
"brand"
|
|
1135
|
+
],
|
|
1136
|
+
"sizes": [],
|
|
1137
|
+
"accessibility": [
|
|
1138
|
+
"role=dialog",
|
|
1139
|
+
"aria-modal",
|
|
1140
|
+
"aria-label"
|
|
1141
|
+
],
|
|
1142
|
+
"rules": [
|
|
1143
|
+
"isCoachCompleted/markCoachCompleted で完了状態を永続化",
|
|
1144
|
+
"対象要素が見つからない step は画面中央フォールバック"
|
|
1145
|
+
]
|
|
1146
|
+
},
|
|
1147
|
+
{
|
|
1148
|
+
"name": "CookieConsent",
|
|
1149
|
+
"path": "src/components/patterns/cookie-consent.tsx",
|
|
1150
|
+
"description": "GDPR/APPI 準拠の汎用クッキー同意バナー。文言は labels prop で完全に上書き可能。",
|
|
1151
|
+
"variants": [],
|
|
1152
|
+
"sizes": [],
|
|
1153
|
+
"accessibility": [
|
|
1154
|
+
"role=dialog",
|
|
1155
|
+
"aria-modal=false",
|
|
1156
|
+
"aria-label"
|
|
1157
|
+
],
|
|
1158
|
+
"rules": [
|
|
1159
|
+
"isCookieDecided() で同意済か判定",
|
|
1160
|
+
"onDecide コールバックで analytics に送る",
|
|
1161
|
+
"storageKey/eventName でマルチアプリ衝突回避"
|
|
1162
|
+
]
|
|
1163
|
+
},
|
|
1164
|
+
{
|
|
1165
|
+
"name": "ListSkeleton / GridSkeleton",
|
|
1166
|
+
"path": "src/components/patterns/list-skeletons.tsx",
|
|
1167
|
+
"description": "リスト型 (上部フィルタ + N 行) / グリッド型 (M×N カード) の汎用 Skeleton レイアウト。同一ファイルに 2 component。",
|
|
1168
|
+
"variants": [],
|
|
1169
|
+
"sizes": [],
|
|
1170
|
+
"accessibility": [
|
|
1171
|
+
"aria-busy",
|
|
1172
|
+
"aria-label"
|
|
1173
|
+
],
|
|
1174
|
+
"rules": [
|
|
1175
|
+
"loadingLabel prop で i18n",
|
|
1176
|
+
"ListSkeleton: rowHeight で 1 行高",
|
|
1177
|
+
"GridSkeleton: columns 1-4 + cardHeight で調整"
|
|
1178
|
+
]
|
|
1179
|
+
},
|
|
1180
|
+
{
|
|
1181
|
+
"name": "FilterChip",
|
|
1182
|
+
"path": "src/components/patterns/filter-chip.tsx",
|
|
1183
|
+
"description": "FilterBar 内で「絞り込み中かどうか」を表すトグル chip。active 時は \"ラベル: 値\" 表記、再タップで off。",
|
|
1184
|
+
"variants": [
|
|
1185
|
+
"active",
|
|
1186
|
+
"inactive"
|
|
1187
|
+
],
|
|
1188
|
+
"sizes": [],
|
|
1189
|
+
"accessibility": [],
|
|
1190
|
+
"rules": [
|
|
1191
|
+
"isActive 切替時に key を変えて Chip を強制再マウント (selected キャッシュ残り防止)"
|
|
1192
|
+
]
|
|
1193
|
+
}
|
|
1194
|
+
],
|
|
1195
|
+
"commerce": [
|
|
1196
|
+
{
|
|
1197
|
+
"name": "ProductCard",
|
|
1198
|
+
"path": "src/components/patterns/commerce/product-card.tsx",
|
|
1199
|
+
"description": "商品カード。縦型・横型レイアウト対応。お気に入り・割引バッジ・カートボタンを内包。",
|
|
1200
|
+
"variants": [
|
|
1201
|
+
"vertical",
|
|
1202
|
+
"horizontal"
|
|
1203
|
+
],
|
|
1204
|
+
"features": [
|
|
1205
|
+
"favorite",
|
|
1206
|
+
"discount-badge",
|
|
1207
|
+
"cart-button"
|
|
1208
|
+
],
|
|
1209
|
+
"rules": [
|
|
1210
|
+
"rounded-lg for card",
|
|
1211
|
+
"PriceDisplay for price",
|
|
1212
|
+
"RatingDisplay for rating"
|
|
1213
|
+
]
|
|
1214
|
+
},
|
|
1215
|
+
{
|
|
1216
|
+
"name": "ProductCarousel",
|
|
1217
|
+
"path": "src/components/patterns/commerce/product-carousel.tsx",
|
|
1218
|
+
"description": "商品横スクロールカルーセル。おすすめ・ランキング表示に使用。SectionHeader統合済み。",
|
|
1219
|
+
"features": [
|
|
1220
|
+
"section-header",
|
|
1221
|
+
"horizontal-scroll",
|
|
1222
|
+
"ranking"
|
|
1223
|
+
]
|
|
1224
|
+
},
|
|
1225
|
+
{
|
|
1226
|
+
"name": "PriceDisplay",
|
|
1227
|
+
"path": "src/components/patterns/commerce/price-display.tsx",
|
|
1228
|
+
"description": "価格表示コンポーネント。税込表示・セール価格・範囲価格に対応。ProductCardと組み合わせて使用。",
|
|
1229
|
+
"sizes": [
|
|
1230
|
+
"xs",
|
|
1231
|
+
"sm",
|
|
1232
|
+
"md",
|
|
1233
|
+
"lg"
|
|
1234
|
+
],
|
|
1235
|
+
"features": [
|
|
1236
|
+
"sale",
|
|
1237
|
+
"range",
|
|
1238
|
+
"tax-inclusive"
|
|
1239
|
+
]
|
|
1240
|
+
},
|
|
1241
|
+
{
|
|
1242
|
+
"name": "RatingDisplay",
|
|
1243
|
+
"path": "src/components/patterns/commerce/rating-display.tsx",
|
|
1244
|
+
"description": "星評価+レビュー件数表示。ProductCardと組み合わせて使用。",
|
|
1245
|
+
"features": [
|
|
1246
|
+
"star-rating",
|
|
1247
|
+
"review-count"
|
|
1248
|
+
]
|
|
1249
|
+
},
|
|
1250
|
+
{
|
|
1251
|
+
"name": "QuantitySelector",
|
|
1252
|
+
"path": "src/components/patterns/commerce/quantity-selector.tsx",
|
|
1253
|
+
"description": "数量増減セレクター。カート内(sm)・商品詳細ページ(md)で使用。最小値1のガード付き。",
|
|
1254
|
+
"sizes": [
|
|
1255
|
+
"sm",
|
|
1256
|
+
"md"
|
|
1257
|
+
],
|
|
1258
|
+
"rules": [
|
|
1259
|
+
"sm: cart compact, md: product detail page"
|
|
1260
|
+
]
|
|
1261
|
+
},
|
|
1262
|
+
{
|
|
1263
|
+
"name": "OrderSummary",
|
|
1264
|
+
"path": "src/components/patterns/commerce/order-summary.tsx",
|
|
1265
|
+
"description": "注文サマリー。小計・送料・合計の表示。fixed(画面固定)とinline(ページ内埋め込み)に対応。",
|
|
1266
|
+
"variants": [
|
|
1267
|
+
"fixed",
|
|
1268
|
+
"inline"
|
|
1269
|
+
]
|
|
1270
|
+
},
|
|
1271
|
+
{
|
|
1272
|
+
"name": "ImageCarousel",
|
|
1273
|
+
"path": "src/components/patterns/commerce/image-carousel.tsx",
|
|
1274
|
+
"description": "商品画像カルーセル。スクロールスナップ・ドット・矢印・自動再生対応。商品詳細ページに使用。",
|
|
1275
|
+
"features": [
|
|
1276
|
+
"scroll-snap",
|
|
1277
|
+
"dots",
|
|
1278
|
+
"arrows",
|
|
1279
|
+
"autoPlay"
|
|
1280
|
+
]
|
|
1281
|
+
},
|
|
1282
|
+
{
|
|
1283
|
+
"name": "BottomTabBar",
|
|
1284
|
+
"path": "src/components/patterns/commerce/bottom-tab-bar.tsx",
|
|
1285
|
+
"description": "SP 下部固定タブナビゲーション。default と pill(iOS 26 Liquid Glass)バリアント。",
|
|
1286
|
+
"features": [
|
|
1287
|
+
"badge",
|
|
1288
|
+
"safe-area"
|
|
1289
|
+
],
|
|
1290
|
+
"rules": [
|
|
1291
|
+
"Mobile only. Use safe-area-inset-bottom."
|
|
1292
|
+
]
|
|
1293
|
+
},
|
|
1294
|
+
{
|
|
1295
|
+
"name": "FilterBar",
|
|
1296
|
+
"path": "src/components/patterns/commerce/filter-bar.tsx",
|
|
1297
|
+
"description": "商品フィルターバー。Chip+ソート+件数表示の組み合わせ。商品一覧ページの上部に配置。",
|
|
1298
|
+
"features": [
|
|
1299
|
+
"chips",
|
|
1300
|
+
"sort",
|
|
1301
|
+
"count"
|
|
1302
|
+
]
|
|
1303
|
+
},
|
|
1304
|
+
{
|
|
1305
|
+
"name": "ReviewCard",
|
|
1306
|
+
"path": "src/components/patterns/commerce/review-card.tsx",
|
|
1307
|
+
"description": "レビューカード。投稿者アバター・星評価・本文・投稿日を表示。商品詳細のレビュー一覧に使用。",
|
|
1308
|
+
"features": [
|
|
1309
|
+
"avatar",
|
|
1310
|
+
"star-rating",
|
|
1311
|
+
"date"
|
|
1312
|
+
],
|
|
1313
|
+
"rules": [
|
|
1314
|
+
"Object-Rating token for star fill"
|
|
1315
|
+
]
|
|
1316
|
+
},
|
|
1317
|
+
{
|
|
1318
|
+
"name": "ReviewSummary",
|
|
1319
|
+
"path": "src/components/patterns/commerce/review-summary.tsx",
|
|
1320
|
+
"description": "レビュー集計。平均評価・星分布バー・総件数を表示。商品詳細のレビューセクション見出しに使用。",
|
|
1321
|
+
"features": [
|
|
1322
|
+
"average",
|
|
1323
|
+
"distribution-bars",
|
|
1324
|
+
"count"
|
|
1325
|
+
],
|
|
1326
|
+
"rules": [
|
|
1327
|
+
"Object-Rating token for distribution bars"
|
|
1328
|
+
]
|
|
1329
|
+
}
|
|
1330
|
+
],
|
|
1331
|
+
"admin": [
|
|
1332
|
+
{
|
|
1333
|
+
"name": "DataTable",
|
|
1334
|
+
"path": "src/components/patterns/admin/data-table.tsx",
|
|
1335
|
+
"description": "管理画面データテーブル。ソート・チェックボックス・行アクション・インライン編集・ドラッグ並び替え対応。",
|
|
1336
|
+
"features": [
|
|
1337
|
+
"sort",
|
|
1338
|
+
"checkbox",
|
|
1339
|
+
"actions",
|
|
1340
|
+
"inline-edit",
|
|
1341
|
+
"drag"
|
|
1342
|
+
],
|
|
1343
|
+
"rules": [
|
|
1344
|
+
"20+ sub-components. Use DataTableHead, DataTableRow, DataTableCell."
|
|
1345
|
+
]
|
|
1346
|
+
},
|
|
1347
|
+
{
|
|
1348
|
+
"name": "KebabMenu",
|
|
1349
|
+
"path": "src/components/patterns/admin/kebab-menu.tsx",
|
|
1350
|
+
"description": "テーブル行アクションメニュー(⋮ボタン)。編集・削除・複製等の行単位操作に使用。",
|
|
1351
|
+
"rules": [
|
|
1352
|
+
"For table row actions only"
|
|
1353
|
+
]
|
|
1354
|
+
},
|
|
1355
|
+
{
|
|
1356
|
+
"name": "BulkActions",
|
|
1357
|
+
"path": "src/components/patterns/admin/bulk-actions.tsx",
|
|
1358
|
+
"description": "一括選択操作バー。選択件数表示・クリアボタン・カスタムアクションスロット。",
|
|
1359
|
+
"rules": [
|
|
1360
|
+
"Show only when rows are selected"
|
|
1361
|
+
]
|
|
1362
|
+
},
|
|
1363
|
+
{
|
|
1364
|
+
"name": "StatusTabs",
|
|
1365
|
+
"path": "src/components/patterns/admin/status-tabs.tsx",
|
|
1366
|
+
"description": "ステータス別タブ。受付中・処理中・完了等のステータスで一覧を切り替え。カウントバッジ付き。",
|
|
1367
|
+
"features": [
|
|
1368
|
+
"count-badge"
|
|
1369
|
+
]
|
|
1370
|
+
},
|
|
1371
|
+
{
|
|
1372
|
+
"name": "SearchPanel",
|
|
1373
|
+
"path": "src/components/patterns/admin/search-panel.tsx",
|
|
1374
|
+
"description": "管理画面検索パネル。複数条件の絞り込みフォーム。grid/flexレイアウト・リセットボタン付き。",
|
|
1375
|
+
"layouts": [
|
|
1376
|
+
"grid",
|
|
1377
|
+
"flex"
|
|
1378
|
+
],
|
|
1379
|
+
"features": [
|
|
1380
|
+
"search",
|
|
1381
|
+
"reset"
|
|
1382
|
+
]
|
|
1383
|
+
},
|
|
1384
|
+
{
|
|
1385
|
+
"name": "ImageUploader",
|
|
1386
|
+
"path": "src/components/patterns/admin/image-uploader.tsx",
|
|
1387
|
+
"description": "画像アップロードコンポーネント。ドラッグ&ドロップ・複数ファイル対応。グリッドレイアウト表示。",
|
|
1388
|
+
"features": [
|
|
1389
|
+
"upload",
|
|
1390
|
+
"delete",
|
|
1391
|
+
"grid-layout"
|
|
1392
|
+
]
|
|
1393
|
+
},
|
|
1394
|
+
{
|
|
1395
|
+
"name": "NotificationList",
|
|
1396
|
+
"path": "src/components/patterns/admin/notification-list.tsx",
|
|
1397
|
+
"description": "通知リスト。縦型(フィード)・横型(ヘッダードロップダウン)レイアウトに対応。",
|
|
1398
|
+
"layouts": [
|
|
1399
|
+
"vertical",
|
|
1400
|
+
"horizontal"
|
|
1401
|
+
]
|
|
1402
|
+
},
|
|
1403
|
+
{
|
|
1404
|
+
"name": "ChartControls",
|
|
1405
|
+
"path": "src/components/patterns/admin/chart-controls.tsx",
|
|
1406
|
+
"description": "グラフ操作コントロール。粒度(時間/日/週/月)・期間(7日〜カスタム)・前期比トグルのチップ群。ダッシュボードのグラフ上部に配置。",
|
|
1407
|
+
"features": [
|
|
1408
|
+
"granularity",
|
|
1409
|
+
"period",
|
|
1410
|
+
"comparison"
|
|
1411
|
+
],
|
|
1412
|
+
"rules": [
|
|
1413
|
+
"Chips wrap on narrow widths (flex-wrap)"
|
|
1414
|
+
]
|
|
1415
|
+
}
|
|
1416
|
+
],
|
|
1417
|
+
"shells": [
|
|
1418
|
+
{
|
|
1419
|
+
"name": "AdminShell",
|
|
1420
|
+
"path": "src/components/patterns/shells/admin-shell.tsx",
|
|
1421
|
+
"description": "管理画面レイアウトシェル。サイドバー+ヘッダー+メインコンテンツ構成。管理・ダッシュボード系ページ用。",
|
|
1422
|
+
"rules": [
|
|
1423
|
+
"For admin/dashboard pages"
|
|
1424
|
+
]
|
|
1425
|
+
},
|
|
1426
|
+
{
|
|
1427
|
+
"name": "AppShell",
|
|
1428
|
+
"path": "src/components/patterns/shells/app-shell.tsx",
|
|
1429
|
+
"description": "汎用アプリレイアウトシェル。ヘッダー+メインコンテンツ+フッター構成。一般的なWebアプリページ用。",
|
|
1430
|
+
"rules": [
|
|
1431
|
+
"For general app pages"
|
|
1432
|
+
]
|
|
1433
|
+
},
|
|
1434
|
+
{
|
|
1435
|
+
"name": "MarketingShell",
|
|
1436
|
+
"path": "src/components/patterns/shells/marketing-shell.tsx",
|
|
1437
|
+
"description": "マーケティング・LPレイアウトシェル。最大幅コントロール・ヒーロー対応。LP・ランディングページ用。",
|
|
1438
|
+
"rules": [
|
|
1439
|
+
"For LP/marketing pages"
|
|
1440
|
+
]
|
|
1441
|
+
}
|
|
1442
|
+
]
|
|
1443
|
+
}
|