ksk-design-system 1.40.0 → 1.41.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 (281) hide show
  1. package/AGENTS.md +2 -0
  2. package/CLAUDE.md +7 -2
  3. package/DESIGN.md +22 -7
  4. package/NATIVE_RECIPES.md +46 -1
  5. package/README.md +3 -3
  6. package/contracts/components.json +179 -21
  7. package/contracts/design-context.json +136 -0
  8. package/dist/class-names.js +2 -4
  9. package/dist/index.js +16814 -15272
  10. package/dist/native/ui.js +7306 -6317
  11. package/dist/native-D6LJPc6D.js +1748 -0
  12. package/dist/native.js +2 -1609
  13. package/dist/rolldown-runtime-Df-vAQej.js +25 -0
  14. package/dist/server-variants-BtHHqzwI.js +46 -0
  15. package/dist/types/components/patterns/admin/bulk-actions.d.ts +1 -1
  16. package/dist/types/components/patterns/admin/chart-controls.d.ts +1 -1
  17. package/dist/types/components/patterns/admin/data-table.d.ts +63 -29
  18. package/dist/types/components/patterns/admin/image-uploader.d.ts +1 -1
  19. package/dist/types/components/patterns/admin/kebab-menu.d.ts +1 -1
  20. package/dist/types/components/patterns/admin/notification-list.d.ts +1 -1
  21. package/dist/types/components/patterns/admin/search-panel.d.ts +1 -1
  22. package/dist/types/components/patterns/admin/status-tabs.d.ts +1 -1
  23. package/dist/types/components/patterns/app-header.d.ts +1 -1
  24. package/dist/types/components/patterns/banner-carousel.d.ts +1 -1
  25. package/dist/types/components/patterns/banner.d.ts +1 -1
  26. package/dist/types/components/patterns/bottom-sheet-form.d.ts +1 -1
  27. package/dist/types/components/patterns/bottom-sheet-frame.d.ts +1 -1
  28. package/dist/types/components/patterns/category-nav.d.ts +1 -1
  29. package/dist/types/components/patterns/category-scroll.d.ts +1 -1
  30. package/dist/types/components/patterns/celebration-dialog.d.ts +49 -0
  31. package/dist/types/components/patterns/celebration.d.ts +38 -2
  32. package/dist/types/components/patterns/chip-filter-bar.d.ts +38 -0
  33. package/dist/types/components/patterns/chip-selector.d.ts +1 -1
  34. package/dist/types/components/patterns/chip.d.ts +1 -1
  35. package/dist/types/components/patterns/collapsible-chip-field.d.ts +35 -0
  36. package/dist/types/components/patterns/commerce/bottom-tab-bar.d.ts +10 -2
  37. package/dist/types/components/patterns/commerce/filter-bar.d.ts +1 -1
  38. package/dist/types/components/patterns/commerce/image-carousel.d.ts +1 -1
  39. package/dist/types/components/patterns/commerce/mobile-tab-bar.d.ts +39 -0
  40. package/dist/types/components/patterns/commerce/order-summary.d.ts +1 -1
  41. package/dist/types/components/patterns/commerce/price-display.d.ts +1 -1
  42. package/dist/types/components/patterns/commerce/product-card.d.ts +1 -1
  43. package/dist/types/components/patterns/commerce/product-carousel.d.ts +1 -1
  44. package/dist/types/components/patterns/commerce/quantity-selector.d.ts +1 -1
  45. package/dist/types/components/patterns/commerce/rating-display.d.ts +1 -1
  46. package/dist/types/components/patterns/commerce/review-card.d.ts +2 -2
  47. package/dist/types/components/patterns/commerce/review-summary.d.ts +1 -1
  48. package/dist/types/components/patterns/compact-file-picker.d.ts +2 -2
  49. package/dist/types/components/patterns/confirm-dialog.d.ts +2 -1
  50. package/dist/types/components/patterns/cookie-consent.d.ts +1 -1
  51. package/dist/types/components/patterns/countdown-hero.d.ts +38 -0
  52. package/dist/types/components/patterns/detail-sheet-scaffold.d.ts +3 -3
  53. package/dist/types/components/patterns/empty-state.d.ts +1 -1
  54. package/dist/types/components/patterns/error-state.d.ts +1 -1
  55. package/dist/types/components/patterns/file-upload.d.ts +2 -1
  56. package/dist/types/components/patterns/filter-chip.d.ts +1 -1
  57. package/dist/types/components/patterns/footer.d.ts +1 -1
  58. package/dist/types/components/patterns/form-field.d.ts +1 -1
  59. package/dist/types/components/patterns/form.d.ts +3 -3
  60. package/dist/types/components/patterns/keyboard-aware-sheet-footer.d.ts +1 -1
  61. package/dist/types/components/patterns/list-item.d.ts +1 -1
  62. package/dist/types/components/patterns/list-skeletons.d.ts +2 -2
  63. package/dist/types/components/patterns/media-action-cluster.d.ts +1 -1
  64. package/dist/types/components/patterns/menu-drawer.d.ts +1 -1
  65. package/dist/types/components/patterns/mobile-app-header.d.ts +1 -1
  66. package/dist/types/components/patterns/mobile-app-shell.d.ts +1 -1
  67. package/dist/types/components/patterns/mobile-floating-action-button.d.ts +1 -1
  68. package/dist/types/components/patterns/notification-badge.d.ts +1 -1
  69. package/dist/types/components/patterns/photo-hero.d.ts +5 -5
  70. package/dist/types/components/patterns/presence-indicator.d.ts +23 -0
  71. package/dist/types/components/patterns/progress-steps.d.ts +1 -1
  72. package/dist/types/components/patterns/quick-action-grid.d.ts +2 -2
  73. package/dist/types/components/patterns/review-overlay.d.ts +1 -1
  74. package/dist/types/components/patterns/screen.d.ts +1 -1
  75. package/dist/types/components/patterns/search-bar.d.ts +1 -1
  76. package/dist/types/components/patterns/section-header.d.ts +1 -1
  77. package/dist/types/components/patterns/settings-section.d.ts +2 -2
  78. package/dist/types/components/patterns/share-buttons.d.ts +2 -1
  79. package/dist/types/components/patterns/shells/admin-shell.d.ts +1 -1
  80. package/dist/types/components/patterns/shells/app-shell.d.ts +1 -1
  81. package/dist/types/components/patterns/shells/marketing-shell.d.ts +1 -1
  82. package/dist/types/components/patterns/simple-pagination.d.ts +1 -1
  83. package/dist/types/components/patterns/stat-card.d.ts +1 -1
  84. package/dist/types/components/patterns/sticky-action-bar.d.ts +1 -1
  85. package/dist/types/components/patterns/swipe-row.d.ts +1 -1
  86. package/dist/types/components/patterns/tag-input.d.ts +2 -1
  87. package/dist/types/components/patterns/tag.d.ts +2 -2
  88. package/dist/types/components/ui/accordion.d.ts +4 -4
  89. package/dist/types/components/ui/alert-dialog.d.ts +11 -11
  90. package/dist/types/components/ui/alert.d.ts +3 -3
  91. package/dist/types/components/ui/auto-grow-textarea.d.ts +1 -1
  92. package/dist/types/components/ui/avatar.d.ts +3 -3
  93. package/dist/types/components/ui/badge.d.ts +2 -2
  94. package/dist/types/components/ui/breadcrumb.d.ts +7 -7
  95. package/dist/types/components/ui/button.d.ts +4 -2
  96. package/dist/types/components/ui/calendar.d.ts +1 -1
  97. package/dist/types/components/ui/card.d.ts +7 -7
  98. package/dist/types/components/ui/checkbox-card.d.ts +2 -2
  99. package/dist/types/components/ui/checkbox-field.d.ts +1 -1
  100. package/dist/types/components/ui/checkbox-group.d.ts +2 -2
  101. package/dist/types/components/ui/checkbox.d.ts +1 -1
  102. package/dist/types/components/ui/coach-mark.d.ts +1 -1
  103. package/dist/types/components/ui/collapsible.d.ts +3 -3
  104. package/dist/types/components/ui/combobox.d.ts +2 -1
  105. package/dist/types/components/ui/countdown-timer.d.ts +2 -1
  106. package/dist/types/components/ui/date-field.d.ts +26 -0
  107. package/dist/types/components/ui/date-picker.d.ts +3 -2
  108. package/dist/types/components/ui/dialog.d.ts +10 -10
  109. package/dist/types/components/ui/dropdown-filter.d.ts +1 -1
  110. package/dist/types/components/ui/dropdown-menu.d.ts +15 -15
  111. package/dist/types/components/ui/error-boundary.d.ts +1 -1
  112. package/dist/types/components/ui/form.d.ts +7 -7
  113. package/dist/types/components/ui/hover-card.d.ts +3 -3
  114. package/dist/types/components/ui/image-gallery.d.ts +2 -1
  115. package/dist/types/components/ui/input.d.ts +1 -1
  116. package/dist/types/components/ui/label.d.ts +1 -1
  117. package/dist/types/components/ui/multi-select.d.ts +2 -1
  118. package/dist/types/components/ui/navigation-bar.d.ts +4 -4
  119. package/dist/types/components/ui/number-input.d.ts +2 -1
  120. package/dist/types/components/ui/pagination.d.ts +7 -7
  121. package/dist/types/components/ui/pill-toggle.d.ts +1 -1
  122. package/dist/types/components/ui/popover.d.ts +4 -4
  123. package/dist/types/components/ui/progress-ring.d.ts +1 -1
  124. package/dist/types/components/ui/progress.d.ts +19 -2
  125. package/dist/types/components/ui/radio-group.d.ts +2 -2
  126. package/dist/types/components/ui/responsive-dialog.d.ts +8 -8
  127. package/dist/types/components/ui/scroll-area.d.ts +2 -2
  128. package/dist/types/components/ui/select.d.ts +8 -8
  129. package/dist/types/components/ui/separator.d.ts +1 -1
  130. package/dist/types/components/ui/sheet.d.ts +9 -9
  131. package/dist/types/components/ui/skeleton.d.ts +1 -1
  132. package/dist/types/components/ui/slider.d.ts +1 -1
  133. package/dist/types/components/ui/social-icon.d.ts +1 -1
  134. package/dist/types/components/ui/social-login-button.d.ts +1 -1
  135. package/dist/types/components/ui/spinner.d.ts +1 -1
  136. package/dist/types/components/ui/star-rating.d.ts +2 -1
  137. package/dist/types/components/ui/status-action-badge.d.ts +1 -1
  138. package/dist/types/components/ui/sub-nav.d.ts +2 -1
  139. package/dist/types/components/ui/switch.d.ts +1 -1
  140. package/dist/types/components/ui/sync-status-badge.d.ts +1 -1
  141. package/dist/types/components/ui/tabs.d.ts +4 -4
  142. package/dist/types/components/ui/textarea.d.ts +1 -1
  143. package/dist/types/components/ui/time-picker.d.ts +2 -1
  144. package/dist/types/components/ui/toast.d.ts +2 -2
  145. package/dist/types/components/ui/tooltip.d.ts +4 -4
  146. package/dist/types/index.d.ts +20 -4
  147. package/dist/types/lib/category-presets.d.ts +64 -0
  148. package/dist/types/lib/server-variants/button-variants.d.ts +2 -2
  149. package/dist/types/native/components/Accordion.d.ts +1 -1
  150. package/dist/types/native/components/Alert.d.ts +1 -1
  151. package/dist/types/native/components/AlertDialog.d.ts +2 -1
  152. package/dist/types/native/components/AppHeader.d.ts +1 -1
  153. package/dist/types/native/components/AppShell.d.ts +1 -1
  154. package/dist/types/native/components/AutoGrowTextarea.d.ts +2 -1
  155. package/dist/types/native/components/Avatar.d.ts +2 -1
  156. package/dist/types/native/components/Badge.d.ts +1 -1
  157. package/dist/types/native/components/Banner.d.ts +2 -1
  158. package/dist/types/native/components/BannerCarousel.d.ts +2 -1
  159. package/dist/types/native/components/BottomSheetForm.d.ts +1 -1
  160. package/dist/types/native/components/BottomSheetFrame.d.ts +1 -1
  161. package/dist/types/native/components/BottomTabBar.d.ts +13 -47
  162. package/dist/types/native/components/Breadcrumb.d.ts +1 -1
  163. package/dist/types/native/components/Button.d.ts +1 -1
  164. package/dist/types/native/components/Calendar.d.ts +2 -1
  165. package/dist/types/native/components/Card.d.ts +1 -1
  166. package/dist/types/native/components/CategoryNav.d.ts +1 -1
  167. package/dist/types/native/components/CategoryScroll.d.ts +2 -1
  168. package/dist/types/native/components/Celebration.d.ts +33 -1
  169. package/dist/types/native/components/CelebrationDialog.d.ts +30 -0
  170. package/dist/types/native/components/Checkbox.d.ts +2 -1
  171. package/dist/types/native/components/CheckboxCard.d.ts +2 -1
  172. package/dist/types/native/components/CheckboxField.d.ts +2 -1
  173. package/dist/types/native/components/CheckboxGroup.d.ts +2 -1
  174. package/dist/types/native/components/Chip.d.ts +1 -1
  175. package/dist/types/native/components/ChipFilterBar.d.ts +19 -0
  176. package/dist/types/native/components/ChipSelector.d.ts +2 -1
  177. package/dist/types/native/components/CoachMark.d.ts +2 -1
  178. package/dist/types/native/components/CoachMarkOverlay.d.ts +1 -1
  179. package/dist/types/native/components/Collapsible.d.ts +1 -1
  180. package/dist/types/native/components/CollapsibleChipField.d.ts +23 -0
  181. package/dist/types/native/components/Combobox.d.ts +2 -1
  182. package/dist/types/native/components/CompactFilePicker.d.ts +2 -2
  183. package/dist/types/native/components/ConfirmDialog.d.ts +2 -1
  184. package/dist/types/native/components/CountdownHero.d.ts +20 -0
  185. package/dist/types/native/components/CountdownTimer.d.ts +2 -1
  186. package/dist/types/native/components/DateField.d.ts +15 -0
  187. package/dist/types/native/components/DatePicker.d.ts +2 -1
  188. package/dist/types/native/components/DetailSheetScaffold.d.ts +3 -3
  189. package/dist/types/native/components/Dialog.d.ts +1 -1
  190. package/dist/types/native/components/DropdownFilter.d.ts +2 -1
  191. package/dist/types/native/components/DropdownMenu.d.ts +2 -1
  192. package/dist/types/native/components/EmptyState.d.ts +1 -1
  193. package/dist/types/native/components/ErrorState.d.ts +1 -1
  194. package/dist/types/native/components/FileUpload.d.ts +2 -1
  195. package/dist/types/native/components/FilterBar.d.ts +2 -1
  196. package/dist/types/native/components/FilterChip.d.ts +2 -1
  197. package/dist/types/native/components/FloatingTabBar.d.ts +30 -0
  198. package/dist/types/native/components/Footer.d.ts +2 -1
  199. package/dist/types/native/components/FormField.d.ts +1 -1
  200. package/dist/types/native/components/GlassView.d.ts +1 -1
  201. package/dist/types/native/components/GradientSurface.d.ts +27 -0
  202. package/dist/types/native/components/ImageCarousel.d.ts +2 -1
  203. package/dist/types/native/components/ImageGallery.d.ts +2 -1
  204. package/dist/types/native/components/Input.d.ts +1 -1
  205. package/dist/types/native/components/KeyboardAwareSheetFooter.d.ts +1 -1
  206. package/dist/types/native/components/Label.d.ts +1 -1
  207. package/dist/types/native/components/ListItem.d.ts +1 -1
  208. package/dist/types/native/components/ListSkeletons.d.ts +14 -1
  209. package/dist/types/native/components/MarketingShell.d.ts +1 -1
  210. package/dist/types/native/components/MediaActionCluster.d.ts +32 -0
  211. package/dist/types/native/components/MenuDrawer.d.ts +1 -1
  212. package/dist/types/native/components/MobileAppHeader.d.ts +1 -1
  213. package/dist/types/native/components/MobileAppShell.d.ts +1 -1
  214. package/dist/types/native/components/MobileFloatingActionButton.d.ts +1 -1
  215. package/dist/types/native/components/MultiSelect.d.ts +2 -1
  216. package/dist/types/native/components/NavigationBar.d.ts +1 -1
  217. package/dist/types/native/components/NotificationBadge.d.ts +1 -1
  218. package/dist/types/native/components/NumberInput.d.ts +2 -1
  219. package/dist/types/native/components/OrderSummary.d.ts +2 -1
  220. package/dist/types/native/components/Pagination.d.ts +2 -1
  221. package/dist/types/native/components/PhotoHero.d.ts +36 -0
  222. package/dist/types/native/components/PillToggle.d.ts +2 -1
  223. package/dist/types/native/components/Popover.d.ts +1 -1
  224. package/dist/types/native/components/PresenceIndicator.d.ts +15 -0
  225. package/dist/types/native/components/PriceDisplay.d.ts +2 -1
  226. package/dist/types/native/components/ProductCard.d.ts +2 -1
  227. package/dist/types/native/components/ProductCarousel.d.ts +2 -1
  228. package/dist/types/native/components/Progress.d.ts +14 -2
  229. package/dist/types/native/components/ProgressRing.d.ts +2 -1
  230. package/dist/types/native/components/ProgressSteps.d.ts +2 -1
  231. package/dist/types/native/components/QuantitySelector.d.ts +2 -1
  232. package/dist/types/native/components/QuickActionGrid.d.ts +2 -2
  233. package/dist/types/native/components/RadioGroup.d.ts +2 -1
  234. package/dist/types/native/components/RatingDisplay.d.ts +2 -1
  235. package/dist/types/native/components/ResponsiveDialog.d.ts +2 -1
  236. package/dist/types/native/components/ReviewCard.d.ts +2 -1
  237. package/dist/types/native/components/ReviewOverlay.d.ts +2 -1
  238. package/dist/types/native/components/ReviewSummary.d.ts +2 -1
  239. package/dist/types/native/components/Screen.d.ts +16 -0
  240. package/dist/types/native/components/ScrollArea.d.ts +1 -1
  241. package/dist/types/native/components/SearchBar.d.ts +2 -1
  242. package/dist/types/native/components/SectionHeader.d.ts +2 -1
  243. package/dist/types/native/components/Select.d.ts +2 -1
  244. package/dist/types/native/components/Separator.d.ts +2 -1
  245. package/dist/types/native/components/SettingsSection.d.ts +2 -2
  246. package/dist/types/native/components/ShareButtons.d.ts +2 -1
  247. package/dist/types/native/components/Sheet.d.ts +1 -1
  248. package/dist/types/native/components/SimplePagination.d.ts +2 -1
  249. package/dist/types/native/components/Skeleton.d.ts +3 -2
  250. package/dist/types/native/components/Slider.d.ts +2 -1
  251. package/dist/types/native/components/SocialIcon.d.ts +2 -1
  252. package/dist/types/native/components/SocialLoginButton.d.ts +2 -1
  253. package/dist/types/native/components/Spinner.d.ts +2 -1
  254. package/dist/types/native/components/Stack.d.ts +1 -1
  255. package/dist/types/native/components/StarRating.d.ts +2 -1
  256. package/dist/types/native/components/StatCard.d.ts +2 -1
  257. package/dist/types/native/components/StatusActionBadge.d.ts +1 -1
  258. package/dist/types/native/components/StickyActionBar.d.ts +1 -1
  259. package/dist/types/native/components/SubNav.d.ts +2 -1
  260. package/dist/types/native/components/SwipeRow.d.ts +1 -1
  261. package/dist/types/native/components/Switch.d.ts +2 -1
  262. package/dist/types/native/components/SyncStatusBadge.d.ts +2 -1
  263. package/dist/types/native/components/Tabs.d.ts +4 -4
  264. package/dist/types/native/components/Tag.d.ts +1 -1
  265. package/dist/types/native/components/TagInput.d.ts +2 -1
  266. package/dist/types/native/components/Text.d.ts +1 -1
  267. package/dist/types/native/components/Textarea.d.ts +2 -1
  268. package/dist/types/native/components/TimePicker.d.ts +2 -1
  269. package/dist/types/native/components/Toast.d.ts +1 -1
  270. package/dist/types/native/components/index.d.ts +13 -2
  271. package/dist/types/native/components/use-reduce-motion.d.ts +6 -0
  272. package/dist/types/native/theme/ThemeProvider.d.ts +1 -1
  273. package/dist/types/tokens/native/themes.d.ts +237 -0
  274. package/package.json +27 -9
  275. package/src/components/COMPONENT_LOOKUP.md +15 -8
  276. package/src/native/COMPONENT_LOOKUP.md +145 -0
  277. package/src/preset.css +25 -0
  278. package/src/styles/glass.css +42 -20
  279. package/src/themes/cobalt.css +22 -0
  280. package/tokens.json +100 -16
  281. package/dist/server-variants-qSBVrkGA.js +0 -56
package/AGENTS.md CHANGED
@@ -17,6 +17,7 @@
17
17
  ```
18
18
  contracts/rules.json # 禁止パターン32件・AIアンチパターン10件・a11y要件
19
19
  contracts/components.json # 全112コンポーネントの定義・バリアント・ルール
20
+ contracts/design-context.json # DESIGN.md と正本ファイルの関係・AI向け検査方針
20
21
  tokens.json # カラー・スペーシング・シャドウトークン
21
22
  src/components/COMPONENT_LOOKUP.md # バリアント・インポートパス一覧(自動生成)
22
23
  ```
@@ -92,6 +93,7 @@ Brand色を差し替え(10行)→ Primitive Layer → Semantic Layer → Bri
92
93
  | **AGENTS.md**(本ファイル) | 概要・技術スタック・コマンド・クイックスタート |
93
94
  | **contracts/components.json** | 全112コンポーネントの構造化定義(バリアント・アクセシビリティ要件) |
94
95
  | **contracts/rules.json** | 禁止パターン32件・AIアンチパターン10件・アクセシビリティ要件 |
96
+ | **contracts/design-context.json** | `DESIGN.md` の役割・正本ファイル・外部 DESIGN.md 参照方針 |
95
97
  | **tokens.json** | カラー・スペーシング・シャドウトークンの機械可読定義 |
96
98
  | **src/components/COMPONENT_LOOKUP.md** | 全112コンポーネントのバリアント・インポートパス(自動生成) |
97
99
  | **DESIGN.md** | AI エージェント向け視覚言語サマリ(トークン+意図・voice・motion) |
package/CLAUDE.md CHANGED
@@ -59,6 +59,7 @@ Brand色を差し替え(10行)→ Primitive Layer → Semantic Layer → Bri
59
59
  | **AGENTS.md** | 同上(Codex用。セッション開始時の読み込み指示・編集後コマンドを明記) |
60
60
  | **contracts/components.json** | 全112コンポーネントの構造化定義(バリアント・アクセシビリティ要件) |
61
61
  | **contracts/rules.json** | 禁止パターン32件・AIアンチパターン10件・アクセシビリティ要件 |
62
+ | **contracts/design-context.json** | `DESIGN.md` の役割・正本ファイル・外部 DESIGN.md 参照方針 |
62
63
  | **tokens.json** | カラー・スペーシング・シャドウトークンの機械可読定義 |
63
64
  | **src/components/COMPONENT_LOOKUP.md** | 全112コンポーネントのバリアント・インポートパス一覧(自動生成) |
64
65
  | **DESIGN.md** | AI エージェント向け視覚言語サマリ(トークン+意図・voice・motion) |
@@ -66,8 +67,9 @@ Brand色を差し替え(10行)→ Primitive Layer → Semantic Layer → Bri
66
67
  **セッション開始時 / コードを書く前に必ず読む:**
67
68
  1. `contracts/rules.json` の `prohibited` と `aiPatterns`(AIが典型的に犯すパターン集)を確認
68
69
  2. `contracts/components.json` でコンポーネント定義・バリアントを確認
69
- 3. `src/components/COMPONENT_LOOKUP.md` で既存コンポーネントを確認(手書き・再定義の防止)
70
- 4. `tokens.json` でカラー・余白・影・タイポのトークンを確認
70
+ 3. `contracts/design-context.json` で `DESIGN.md` と正本ファイルの関係を確認
71
+ 4. `src/components/COMPONENT_LOOKUP.md` で既存コンポーネントを確認(手書き・再定義の防止)
72
+ 5. `tokens.json` でカラー・余白・影・タイポのトークンを確認
71
73
 
72
74
  **`.tsx` を編集したら `bash scripts/lint-scratch.sh`、コンポーネント増減時は `npm run check` を実行すること。**
73
75
 
@@ -114,6 +116,9 @@ bash scripts/check-drift.sh
114
116
  # COMPONENT_LOOKUP.md 再生成(コンポーネント追加後に実行)
115
117
  npm run generate:lookup
116
118
 
119
+ # DESIGN.md contract 検査
120
+ npm run lint:design
121
+
117
122
  # 全チェック(tsc + lint + drift + lookup 一括)
118
123
  npm run check
119
124
  ```
package/DESIGN.md CHANGED
@@ -32,7 +32,7 @@ colors:
32
32
  info: "#2563EB"
33
33
  typography:
34
34
  fontFamily: "system-ui, -apple-system, 'Hiragino Sans', 'Noto Sans JP', sans-serif"
35
- display: { fontSize: "48px", lineHeight: "1.2", fontWeight: 700 } # typo-display-xl
35
+ display: { fontSize: "48px", lineHeight: "1.25", fontWeight: 700 } # typo-display-xl
36
36
  heading: { fontSize: "18px", lineHeight: "1.5", fontWeight: 700 } # typo-heading-lg(基準)
37
37
  body: { fontSize: "14px", lineHeight: "1.75", fontWeight: 400 } # typo-body-md(基準)
38
38
  label: { fontSize: "12px", lineHeight: "1.5", fontWeight: 500 } # typo-label-sm
@@ -45,12 +45,12 @@ rounded:
45
45
  full: "9999px" # Button / Chip
46
46
  spacing:
47
47
  unit: "4px" # 4px グリッド(scale: 0,4,8,12,16,20,24,28,32,36,40,44,48,...)
48
- page: "16px" # 画面端マージン var(--page-px)
48
+ page: "16px" # 基準画面端マージン。実レイアウトは Screen / Shell の padding contract を優先
49
49
  elevation: # 影色は neutral(Gray-900 ベース rgba(17,24,39,…))でテーマ非依存
50
- sm: "0 1px 2px rgba(0,0,0,0.05)"
51
- md: "0 0 8px rgba(20,20,20,0.08)"
52
- lg: "0 12px 32px -4px rgba(17,24,39,0.12), 0 8px 16px -6px rgba(17,24,39,0.12)"
53
- dialog: "0 12px 32px -4px rgba(17,24,39,0.12), 0 8px 16px -6px rgba(17,24,39,0.12), 0 1px 4px 1px rgba(0,0,0,0.2)"
50
+ sm: "0 1px 2px 0 rgba(0, 0, 0, 0.05)"
51
+ md: "0 0 8px rgba(20, 20, 20, 0.08)"
52
+ lg: "0px 12px 32px -4px rgba(17, 24, 39, 0.12), 0px 8px 16px -6px rgba(17, 24, 39, 0.12)"
53
+ dialog: "0px 12px 32px -4px rgba(17, 24, 39, 0.12), 0px 8px 16px -6px rgba(17, 24, 39, 0.12), 0px 1px 4px 1px rgba(0, 0, 0, 0.2)"
54
54
  motion:
55
55
  microIn: "150ms ease-out" # fade-in / scale-in
56
56
  enter: "200ms ease-out" # fade-in-up / slide-in
@@ -93,6 +93,21 @@ EC/BtoC 系)を回すのが狙い。
93
93
  - **基盤**: React 19 + Tailwind v4 + shadcn/Radix + iconsax。
94
94
  - **判断基準**: 色・余白・タイポは必ずトークン経由。生の値を書かない(後述 Do/Don't)。
95
95
 
96
+ ## Source Of Truth
97
+
98
+ `DESIGN.md` は Google DESIGN.md の「front matter + rationale」形式を参考にした **AI 向け配布サマリ**であり、
99
+ 実装正本ではない。KSK の正本は次のファイルに置く。
100
+
101
+ - `tokens.json`: primitive / semantic / dark semantic / typography / spacing / shadow / touch target。
102
+ - `src/styles/*.css`: 実際に publish される CSS custom properties と typography / glass utilities。
103
+ - `contracts/rules.json`: 禁止パターン、AI anti-pattern、a11y、consumer lint の正本。
104
+ - `contracts/components.json`: component 名、variant、subcomponent、usage rule、件数の正本。
105
+ - `src/components/COMPONENT_LOOKUP.md`: import map、Storybook coverage、DS-first recipe の生成済み索引。
106
+
107
+ Google DESIGN.md は互換フォーマットと検査観点の参照に留める。Google 側の alpha schema / CLI を
108
+ KSK の必須正本・publish 依存にせず、KSK 固有の multi-theme / native / categorical / component contract は
109
+ `contracts/design-context.json` と repo 内 checker で管理する。
110
+
96
111
  ## Colors
97
112
 
98
113
  3層トークン。コンポーネントは**必ず Semantic 層を `var()` で参照**する(Primitive 直参照・生 hex 禁止)。
@@ -125,7 +140,7 @@ EC/BtoC 系)を回すのが狙い。
125
140
  ## Layout & Spacing
126
141
 
127
142
  - **4px グリッド**。余白・サイズは 4 の倍数(scale 0–60)。
128
- - 画面端マージン: `var(--page-px)`(既定 16px)。
143
+ - 画面端マージン: 16px を基準にしつつ、実レイアウトでは `Screen` / shell component の padding contract を優先する。
129
144
  - **タッチターゲット**(モバイル): WCAG 2.5.5 / Apple HIG に従い主要操作(ボタン/アイコンボタン/入力/ナビ)の
130
145
  **min は 44px** 以上、推奨 48px。44 未満が避けられない **チップ(min 32px)は hitSlop**(不可視の拡張タップ領域)で
131
146
  実効 44px を確保する。値の正本は `tokens.json` の `touchTargets`。
package/NATIVE_RECIPES.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # KSK Design System Native Recipes
2
2
 
3
- Native / Expo consumer は、新規 UI を作る前に `ksk-design-system/native/ui` の既存コンポーネントを確認してください。ローカル `ds/` に独自 wrapper を増やす前に、このファイルの recipe を使います。
3
+ Native / Expo consumer は、新規 UI を作る前に `ksk-design-system/native/ui` の既存コンポーネントを確認してください。ローカル `ds/` に独自 wrapper を増やす前に、`src/native/COMPONENT_LOOKUP.md` とこのファイルの recipe を使います。
4
+
5
+ ## Component lookup
6
+
7
+ RN 側の公開 export 一覧は `src/native/COMPONENT_LOOKUP.md` で確認できます。Web 側の `src/components/COMPONENT_LOOKUP.md` と同じく、consumer 実装前の DS-first チェックに使います。
8
+
9
+ ```tsx
10
+ import { Button, Screen, PhotoHero } from "ksk-design-system/native/ui"
11
+ ```
4
12
 
5
13
  ## Expo Router / React Navigation bottom tabs
6
14
 
@@ -102,6 +110,43 @@ import {
102
110
 
103
111
  Web/PWA consumer は `ksk-design-system` の `MobileAppShell` と `BottomTabBar variant="pill"` / `MobileFloatingActionButton` を組み合わせます。`bottomNavMode="fixed"` では shell が fixed wrapper と safe-area padding を持ちます。既に fixed な nav を渡す場合は `bottomNavMode="external"` を指定します。
104
112
 
113
+ ## Fullscreen screen / photo onboarding
114
+
115
+ `Screen` は header / internal scroll body / footer CTA の骨組みです。写真背景のオンボーディングや入口画面は `PhotoHero` の compound slots を使います。consumer 側で safe-area footer や写真上 typography を再実装しません。
116
+
117
+ ```tsx
118
+ import { Button, PhotoHero, Screen } from "ksk-design-system/native/ui"
119
+
120
+ <Screen scroll={false} padding="none">
121
+ <PhotoHero src={{ uri: heroUrl }} overlay="dark" align="bottom">
122
+ <PhotoHero.Eyebrow>WELCOME</PhotoHero.Eyebrow>
123
+ <PhotoHero.Title>今日の準備を始める</PhotoHero.Title>
124
+ <PhotoHero.Body>写真の上でも読める DS typography と overlay をまとめて扱います。</PhotoHero.Body>
125
+ <PhotoHero.Actions>
126
+ <Button variant="glass" onPress={start}>始める</Button>
127
+ </PhotoHero.Actions>
128
+ </PhotoHero>
129
+ </Screen>
130
+ ```
131
+
132
+ ## Media action cluster
133
+
134
+ 動画・写真上の Like / Share / Save などの操作群は `MediaActionCluster` を使います。`position="fixed"` は RN では absolute と同等に扱い、`href` は `Linking.openURL` に委譲します。
135
+
136
+ ```tsx
137
+ <View style={{ flex: 1 }}>
138
+ <PhotoHero src={{ uri: mediaUrl }} overlay="medium">
139
+ <MediaActionCluster
140
+ anchor="bottom-right"
141
+ items={[
142
+ { label: "いいね", icon: <HeartIcon />, active: liked, onPress: toggleLike },
143
+ { label: "シェア", icon: <ShareIcon />, onPress: share },
144
+ ]}
145
+ />
146
+ </PhotoHero>
147
+ </View>
148
+ ```
149
+
105
150
  ## Settings screens
106
151
 
107
152
  設定画面は `SettingsSection` と `SettingsListRow` を使います。`Card + SectionHeader + ListItem` のローカル wrapper を consumer 側で複製しないでください。
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
  - **アクセシブル** — shadcn/ui(Radix UI ベース)+ `@storybook/addon-a11y` で a11y を担保
15
15
  - **Tailwind CSS v4 ネイティブ** — `@theme` ベースのトークン設計
16
16
  - **型安全** — React 19 + TypeScript、CVA によるバリアント管理
17
- - **125 + 96 コンポーネント** — Web 125(UI 57 / EC 11 / 管理 8 / シェル 3 / パターン 46)+ React Native 96
17
+ - **125 Web コンポーネント + 126 React Native exports** — Web 125(UI 57 / EC 11 / 管理 8 / シェル 3 / パターン 46)+ RN `native/ui` 公開 export 126
18
18
  - **iOS 26 Liquid Glass 対応** — RN 側 `GlassView` + `Button variant="glass"`、Web 側 `.glass` CSS マテリアル
19
19
 
20
20
  ## 🎨 テーマ
@@ -131,7 +131,7 @@ import { BottomTabBar } from "ksk-design-system"
131
131
 
132
132
  ### React Native / Expo
133
133
 
134
- `ksk-design-system/native/ui` から直接 RN 用コンポーネント(91 個)を import できます。iOS 26 の **Liquid Glass** にも対応:
134
+ `ksk-design-system/native/ui` から直接 RN 用コンポーネント export(126 個)を import できます。iOS 26 の **Liquid Glass** にも対応:
135
135
 
136
136
  ```tsx
137
137
  import { ThemeProvider, Button, Card, GlassView } from "ksk-design-system/native/ui"
@@ -144,7 +144,7 @@ npx expo install expo-glass-effect expo-blur
144
144
 
145
145
  Web は backdrop-filter で擬似、Android は半透明 surface でフォールバックします。
146
146
 
147
- Expo Router / React Navigation の tab bar、native `GlassView`、Button loading、settings/attachment/mobile shell recipes は `NATIVE_RECIPES.md` を参照してください。
147
+ 既存コンポーネントの確認は `src/native/COMPONENT_LOOKUP.md`、Expo Router / React Navigation の tab bar、native `GlassView`、Button loading、fullscreen/media/settings/attachment/mobile shell recipes は `NATIVE_RECIPES.md` を参照してください。
148
148
 
149
149
  ## 🧪 試してみる(1コマンドお試し)
150
150
 
@@ -4,19 +4,19 @@
4
4
  "version": "1.34.0",
5
5
  "description": "全コンポーネントの構造化定義。バリアント・アクセシビリティ要件・使用ルールを機械可読形式で管理。",
6
6
  "counts": {
7
- "ui": 57,
8
- "patterns": 46,
9
- "commerce": 11,
7
+ "ui": 58,
8
+ "patterns": 51,
9
+ "commerce": 12,
10
10
  "admin": 8,
11
11
  "shells": 3,
12
- "total": 125
12
+ "total": 132
13
13
  }
14
14
  },
15
15
  "ui": [
16
16
  {
17
17
  "name": "Button",
18
18
  "path": "src/components/ui/button.tsx",
19
- "description": "アクションボタン。最重要CTAにはdefault、Liquid Glass背景にはglass、暗背景上のLiquid Glassにはglass-inverse。アイコン単独はiconサイズ群。",
19
+ "description": "アクションボタン。最重要CTAにはdefault、Liquid Glass背景にはglass、暗背景上のLiquid Glassにはglass-inverse、ブランドカラーをティントしたglassはglass-accent(FAB等)。アイコン単独はiconサイズ群。",
20
20
  "variants": [
21
21
  "default",
22
22
  "secondary",
@@ -27,6 +27,7 @@
27
27
  "destructive",
28
28
  "glass",
29
29
  "glass-inverse",
30
+ "glass-accent",
30
31
  "accent",
31
32
  "inverse",
32
33
  "ghost-inverse"
@@ -42,6 +43,7 @@
42
43
  "icon-sm",
43
44
  "icon-lg",
44
45
  "icon-xl",
46
+ "icon-fab",
45
47
  "match"
46
48
  ],
47
49
  "accessibility": [
@@ -97,6 +99,20 @@
97
99
  "Use DateRangePicker for date range selection"
98
100
  ]
99
101
  },
102
+ {
103
+ "name": "DateField",
104
+ "path": "src/components/ui/date-field.tsx",
105
+ "description": "DatePicker を \"YYYY-MM-DD\" ISO 文字列 API でラップする adapter。バックエンド/store が ISO date 文字列で日付を保持する場合に使う。value=\"\" が未選択を表す。",
106
+ "variants": [],
107
+ "accessibility": [
108
+ "Must pair with <Label>",
109
+ "aria-expanded on trigger button(内部 DatePicker 由来)"
110
+ ],
111
+ "rules": [
112
+ "value/onChange は常に \"YYYY-MM-DD\" 文字列。Date オブジェクトを直接渡さない",
113
+ "strToDate/dateToStr は new Date(y, m-1, d) のローカルタイム方式(TZ ずれ回避)"
114
+ ]
115
+ },
100
116
  {
101
117
  "name": "Textarea",
102
118
  "path": "src/components/ui/textarea.tsx",
@@ -317,9 +333,16 @@
317
333
  {
318
334
  "name": "Progress",
319
335
  "path": "src/components/ui/progress.tsx",
320
- "description": "進捗バー。color variant (default/success/warning/caution) + transition duration (none/sm/md/lg) 拡張済。",
336
+ "description": "進捗バー。color variant (default/success/warning/caution) + transition duration (none/sm/md/lg) + autoColor 閾値切替に対応。",
337
+ "features": [
338
+ "color-variants",
339
+ "transition-duration",
340
+ "auto-color-thresholds"
341
+ ],
321
342
  "rules": [
322
- "値超過で variant を切替: 100% 超なら caution",
343
+ "値に応じた色切替は autoColor を使い、consumer 側で個別に if 文と className を重ねない",
344
+ "autoColor=true の既定閾値は 80% 以上 warning、100% 以上 caution",
345
+ "しきい値がアプリごとに違う場合は autoColor={{ successBelow, warningFrom, warningBelow, cautionFrom }} を使う",
323
346
  "達成カード等は transitionDuration=\"lg\" で緩やかに"
324
347
  ]
325
348
  },
@@ -1049,7 +1072,7 @@
1049
1072
  {
1050
1073
  "name": "Celebration",
1051
1074
  "path": "src/components/patterns/celebration.tsx",
1052
- "description": "マイルストーン達成・大目標達成などの祝い演出。confetti / emoji 表示、actions slot、interactive card tap、cardless モード、tap dismiss、prefers-reduced-motion 対応。",
1075
+ "description": "マイルストーン達成・大目標達成などの祝い演出。confetti / emoji 表示、actions slot、interactive card tap、cardless モード、tap dismiss、prefers-reduced-motion 対応。confetti の duration / colors / driftRange をカスタマイズ可能。effect で confetti の演出モード(fall / burst)を切り替え可能(Issue #111)。",
1053
1076
  "variants": [
1054
1077
  "confetti",
1055
1078
  "emoji",
@@ -1061,18 +1084,25 @@
1061
1084
  "interactive",
1062
1085
  "cardless",
1063
1086
  "tap-dismiss",
1064
- "duration-control"
1087
+ "duration-control",
1088
+ "custom-duration",
1089
+ "custom-colors",
1090
+ "custom-drift-range",
1091
+ "emoji-animation-pop-or-bounce",
1092
+ "effect-fall-or-burst",
1093
+ "confetti-burst-radial-360"
1065
1094
  ],
1066
1095
  "accessibility": [
1067
1096
  "role=status",
1068
1097
  "aria-live=polite",
1069
- "prefers-reduced-motion で confetti を抑制"
1098
+ "prefers-reduced-motion で confetti を抑制(emojiAnimation=bounce も含む。effect=burst も同様にスキップ)"
1070
1099
  ],
1071
1100
  "rules": [
1072
1101
  "一時的な達成演出に使用",
1073
1102
  "ローディングや常時表示の装飾用途には使わない",
1074
1103
  "CTA を含む達成 UI は actions slot を使い、カード tap で任意 dismiss したい場合は interactive または onTapDismiss を使う",
1075
- "カード不要の演出は cardless を使う"
1104
+ "カード不要の演出は cardless を使う",
1105
+ "effect は既定 \"fall\"(後方互換)。クラッカーが弾けた感じにしたい達成演出は effect=\"burst\" を使う(中央から全方位 360° に放射)"
1076
1106
  ]
1077
1107
  },
1078
1108
  {
@@ -1184,6 +1214,81 @@
1184
1214
  "Do not patch selected flicker in consumer CSS; Chip handles Android tap highlight and touch transition behavior."
1185
1215
  ]
1186
1216
  },
1217
+ {
1218
+ "name": "CollapsibleChipField",
1219
+ "path": "src/components/patterns/collapsible-chip-field.tsx",
1220
+ "description": "折りたたみ式の単一選択チップフィールド。未選択時は全選択肢を展開表示し、選択後は選択中の1チップのみに折りたたむ。再タップで解除(onClear)または再選択用に再展開する。belle-todo 移植(Issue #106)。ChipSelector(複数選択)とは別 API・別用途。",
1221
+ "features": [
1222
+ "single-select",
1223
+ "collapse-on-select",
1224
+ "always-expanded-mode",
1225
+ "leading-icon-or-label"
1226
+ ],
1227
+ "rules": [
1228
+ "ChipSelector(chip-selector.tsx)とは別コンポーネント。混同して置き換えない。",
1229
+ "onClear 未指定時、選択済み chip の再タップは解除でなく再選択用の再展開のみ(required field 対応)。",
1230
+ "label 指定時は幅 w-20 固定でフィールドリストの他行とラベル幅を揃える。"
1231
+ ]
1232
+ },
1233
+ {
1234
+ "name": "ChipFilterBar",
1235
+ "path": "src/components/patterns/chip-filter-bar.tsx",
1236
+ "description": "Chip を横スクロール表示するフィルターバーパターン。sticky モード・結果件数表示・bare(ラッパーなし)モードを持つ。belle-todo 移植(Issue #104)。",
1237
+ "features": [
1238
+ "horizontal-scroll",
1239
+ "sticky-mode",
1240
+ "result-count",
1241
+ "bare-mode"
1242
+ ],
1243
+ "rules": [
1244
+ "commerce/FilterBar(filters/sortOptions 統合型)とは別コンポーネント。children に任意の Chip 群を渡すシンプルなラッパー。",
1245
+ "sticky 時の top オフセットは stickyOffset prop で指定する(固定ヘッダー高さの相殺用)。",
1246
+ "resultCountLabel 未指定時は \"{n}件\" を表示。i18n が必要な場合は関数 props で差し替える。",
1247
+ "bare=true 時は overflow/padding ラッパーを付けない。外側スクロールコンテナと共有する場合に使う。"
1248
+ ]
1249
+ },
1250
+ {
1251
+ "name": "CelebrationDialog",
1252
+ "path": "src/components/patterns/celebration-dialog.tsx",
1253
+ "description": "達成演出用の Dialog + Celebration confetti + emoji/title/description/actions スロット合成パターン。belle-todo の MilestoneCelebration を参考に、MILESTONES 定義・アップセル CTA・store・i18n・analytics は持ち込まずスロット化(Issue #110)。confetti の既定 effect は \"burst\"(クラッカー演出)(Issue #111)。",
1254
+ "features": [
1255
+ "dialog-based",
1256
+ "confetti-overlay",
1257
+ "emoji-slot",
1258
+ "actions-slot",
1259
+ "auto-dismiss",
1260
+ "emoji-animation-pop-or-bounce",
1261
+ "confetti-props-passthrough",
1262
+ "effect-burst-default"
1263
+ ],
1264
+ "accessibility": [
1265
+ "DS Dialog(Radix)ベースのため Esc / overlay クリックで閉じる",
1266
+ "prefers-reduced-motion で confetti・emoji bounce を抑制"
1267
+ ],
1268
+ "rules": [
1269
+ "MILESTONES 定義・アップセル文言・分析トラッキングは呼び出し側で actions スロットに組み込む。コンポーネント内部に業務ロジックを持たせない。",
1270
+ "autoDismissMs 指定時は経過後に onOpenChange(false) を呼ぶだけで、closeロジック自体は呼び出し側に委譲する。",
1271
+ "effect 既定は \"burst\"(達成演出はクラッカーが標準)。fall に戻したい場合は effect=\"fall\" を明示する。",
1272
+ "confetti 系 props(particleCount/duration/colors/driftRange)は Celebration へそのままパススルー。"
1273
+ ]
1274
+ },
1275
+ {
1276
+ "name": "CountdownHero",
1277
+ "path": "src/components/patterns/countdown-hero.tsx",
1278
+ "description": "装飾的な serif 数字で目標日までの残日数を表示するヒーロー表示。belle-todo の CountdownSection を参考に、日付編集フォーム・wedding イラスト・i18n・store は持ち込まず表示専用に再設計(Issue #110)。",
1279
+ "features": [
1280
+ "large-serif-number",
1281
+ "today-past-active-states",
1282
+ "illustration-slot",
1283
+ "iso-string-or-date-target"
1284
+ ],
1285
+ "rules": [
1286
+ "既存の CountdownTimer(残日数ピル表示)とは別コンポーネント。装飾ヒーロー表示専用で置き換えない。",
1287
+ "日付編集フォームは持ち込まない。表示専用コンポーネント。",
1288
+ "illustration スロットに wedding 画像等のドメイン固有アセットを直接埋め込まない。呼び出し側が用意する。",
1289
+ "serif フォントは --font-display-serif トークン未定義環境向けに Georgia / Noto Serif JP / serif へフォールバックする。"
1290
+ ]
1291
+ },
1187
1292
  {
1188
1293
  "name": "StickyActionBar",
1189
1294
  "path": "src/components/patterns/sticky-action-bar.tsx",
@@ -1265,7 +1370,8 @@
1265
1370
  "safe-area anchor",
1266
1371
  "idle auto-hide",
1267
1372
  "glass buttons",
1268
- "text-on-media"
1373
+ "text-on-media",
1374
+ "React Native port"
1269
1375
  ],
1270
1376
  "accessibility": [
1271
1377
  "role=group",
@@ -1277,7 +1383,8 @@
1277
1383
  "メディア上の操作群に使用する。通常画面の下部 CTA には StickyActionBar を使う",
1278
1384
  "items[].label は必須。アイコン単独にしない",
1279
1385
  "暗い写真・動画・濃色面上では glass-inverse / text-on-media を維持する",
1280
- "autoHideMs=null で idle fade を無効化できる"
1386
+ "autoHideMs=null で idle fade を無効化できる",
1387
+ "React Native consumer は ksk-design-system/native/ui の MediaActionCluster を使い、ローカル overlay action を再実装しない"
1281
1388
  ]
1282
1389
  },
1283
1390
  {
@@ -1290,7 +1397,8 @@
1290
1397
  "min-h-0 guard",
1291
1398
  "fixed header slot",
1292
1399
  "fixed footer slot",
1293
- "safe-area bottom"
1400
+ "safe-area bottom",
1401
+ "React Native port"
1294
1402
  ],
1295
1403
  "accessibility": [
1296
1404
  "main landmark",
@@ -1300,7 +1408,8 @@
1300
1408
  "body スクロールを使わないアプリのフルスクリーン画面に使う",
1301
1409
  "本文が長い画面では scroll=true のまま使う",
1302
1410
  "写真ヒーローなど 1 画面固定では scroll=false と padding=none を組み合わせる",
1303
- "footer には主要 CTA を置き、safe-area 余白を消費側で再実装しない"
1411
+ "footer には主要 CTA を置き、safe-area 余白を消費側で再実装しない",
1412
+ "React Native consumer は ksk-design-system/native/ui の Screen を使い、header/body/footer shell をローカル再実装しない"
1304
1413
  ]
1305
1414
  },
1306
1415
  {
@@ -1312,7 +1421,8 @@
1312
1421
  "medium / dark overlay",
1313
1422
  "bottom / center align",
1314
1423
  "on-image typography",
1315
- "compound slots"
1424
+ "compound slots",
1425
+ "React Native port"
1316
1426
  ],
1317
1427
  "subcomponents": [
1318
1428
  "PhotoHero.Eyebrow",
@@ -1326,8 +1436,9 @@
1326
1436
  ],
1327
1437
  "rules": [
1328
1438
  "オンボーディング入口・写真スライド・メディア上 CTA に使う",
1329
- "写真上の CTA には Button variant=glass-inverse / ghost-inverse を使う",
1330
- "本文が長い場合は Screen scroll=true 側で内部スクロールを確保する"
1439
+ "写真上の CTA には Web では Button variant=glass-inverse / ghost-inverse、React Native では Button variant=glass を使う",
1440
+ "本文が長い場合は Screen scroll=true 側で内部スクロールを確保する",
1441
+ "React Native consumer は ksk-design-system/native/ui の PhotoHero compound slots を使い、写真上 typography をローカル再実装しない"
1331
1442
  ]
1332
1443
  },
1333
1444
  {
@@ -1426,7 +1537,8 @@
1426
1537
  "rules": [
1427
1538
  "loadingLabel prop で i18n",
1428
1539
  "ListSkeleton: rowHeight で 1 行高",
1429
- "GridSkeleton: columns 1-4 + cardHeight で調整"
1540
+ "GridSkeleton: columns 1-4 + cardHeight で調整",
1541
+ "React Native consumer は ksk-design-system/native/ui の ListSkeleton / GridSkeleton alias を使う"
1430
1542
  ]
1431
1543
  },
1432
1544
  {
@@ -1443,6 +1555,21 @@
1443
1555
  "isActive 切替時に key を変えて Chip を強制再マウント (selected キャッシュ残り防止)"
1444
1556
  ]
1445
1557
  },
1558
+ {
1559
+ "name": "PresenceIndicator",
1560
+ "path": "src/components/patterns/presence-indicator.tsx",
1561
+ "description": "「誰か(何か)が今いる/見ている」ことを示す汎用インジケーター。Avatar(イニシャル)+ 右下ステータスドット + statusText + Badge(badgeLabel 指定時)。realtime 取得ロジックや i18n は持ち込まず表示専用。",
1562
+ "variants": [],
1563
+ "sizes": [],
1564
+ "accessibility": [
1565
+ "role=\"status\" + aria-label で name/statusText を読み上げ",
1566
+ "ステータスドットは aria-hidden(色だけに依存させない)"
1567
+ ],
1568
+ "rules": [
1569
+ "online=false は中立色(--Object-Low-Emphasis)、online=true(既定)は --Object-Success",
1570
+ "レスポンシブ非表示は呼び出し側の責務(className でユーティリティを渡す)"
1571
+ ]
1572
+ },
1446
1573
  {
1447
1574
  "name": "BottomSheetFrame",
1448
1575
  "path": "src/components/patterns/bottom-sheet-frame.tsx",
@@ -1655,7 +1782,7 @@
1655
1782
  {
1656
1783
  "name": "BottomTabBar",
1657
1784
  "path": "src/components/patterns/commerce/bottom-tab-bar.tsx",
1658
- "description": "SP 下部固定タブナビゲーション。default と pill(iOS 26 Liquid Glass)バリアント。pill は centerAction・ラベル表示・inverse tone・mobile shell max-width に対応。",
1785
+ "description": "SP 下部固定タブナビゲーション。default と pill(iOS 26 Liquid Glass)バリアント。pill は centerAction・ラベル表示・inverse tone・mobile shell max-width・floatingPosition(left/center/right)に対応。",
1659
1786
  "features": [
1660
1787
  "badge",
1661
1788
  "centerAction",
@@ -1665,6 +1792,7 @@
1665
1792
  "fixed-or-absolute",
1666
1793
  "maxWidth",
1667
1794
  "inverse-tone",
1795
+ "floatingPosition",
1668
1796
  "native Expo Router tabBar adapter",
1669
1797
  "native hidden routes"
1670
1798
  ],
@@ -1677,9 +1805,27 @@
1677
1805
  "Use tone='inverse' over dark photo/video/gradient backgrounds.",
1678
1806
  "Use pillPosition='absolute' only inside controlled shells or Storybook demos; fixed is the app default.",
1679
1807
  "Set maxWidth to the mobile web shell width when the app is centered in a desktop viewport.",
1808
+ "Use floatingPosition='left'|'right' (variant='pill' only) when a FAB is placed on the opposite side; default 'center' keeps the existing centered float.",
1680
1809
  "Native Expo Router / React Navigation consumers should use createExpoRouterTabBar instead of local floating tab bars."
1681
1810
  ]
1682
1811
  },
1812
+ {
1813
+ "name": "MobileTabBar",
1814
+ "path": "src/components/patterns/commerce/mobile-tab-bar.tsx",
1815
+ "description": "BottomTabBar の consumer-friendly ラッパー。tabs/activeTab/onSelect のジェネリック API から iconsax Linear/Bulk アイコンの自動切替・pill navigation・addAction 中央 CTA を組み立てる。belle-todo の MobileTabBar を移植。",
1816
+ "features": [
1817
+ "generic tab key",
1818
+ "iconsax Linear/Bulk auto-switch",
1819
+ "addAction center CTA",
1820
+ "pointer capture blur",
1821
+ "floatingPosition passthrough"
1822
+ ],
1823
+ "rules": [
1824
+ "tabs は BottomTabBarItem を手組みせず MobileTabItem<T>[](key/label/Icon)で渡す",
1825
+ "addAction 指定時はブランド色丸背景 + Add アイコンが自動で centerAction になる",
1826
+ "floatingPosition='left'|'right' を使う場合は FAB を反対側に併置する"
1827
+ ]
1828
+ },
1683
1829
  {
1684
1830
  "name": "FilterBar",
1685
1831
  "path": "src/components/patterns/commerce/filter-bar.tsx",
@@ -1728,18 +1874,30 @@
1728
1874
  "edit-trigger",
1729
1875
  "rich-column-helpers",
1730
1876
  "date-column",
1877
+ "date-cell",
1731
1878
  "chip-column",
1732
1879
  "select-column",
1880
+ "select-popper-position",
1733
1881
  "sort",
1734
1882
  "checkbox",
1735
1883
  "actions",
1884
+ "row-click",
1885
+ "full-cell-hit-area",
1736
1886
  "inline-edit",
1887
+ "flexible-column-width",
1737
1888
  "drag",
1738
- "section-row"
1889
+ "section-row",
1890
+ "section-sticky-left",
1891
+ "section-heading-emphasis"
1739
1892
  ],
1740
1893
  "rules": [
1741
1894
  "rows/columns API は最短実装向け",
1742
1895
  "DateField / Chip cluster / typed Select などのリッチ列は cell と edit.trigger、または createDataTableDateColumn / createDataTableChipColumn / createDataTableSelectColumn を使う",
1896
+ "行全体をクリック可能にする場合は DataTable の onRowClick または DataTableRow の onRowClick を使い、独自の tr/td クリック実装を作らない",
1897
+ "Select セルは DataTableSelectCell または createDataTableSelectColumn を使い、ポップオーバー位置は contentPosition で調整する",
1898
+ "日付編集セルは DataTableDateCell または createDataTableDateColumn を使う",
1899
+ "残り幅を受け持つ列は width=\"flex\" を使い、手書き className の w-full/min-w 再実装を避ける",
1900
+ "セクション見出しを横スクロール中も左に残す場合は DataTableSectionRow stickyLeft / headingSize を使う",
1743
1901
  "複雑なテーブル全体構成は DataTableHead, DataTableRow, DataTableCell などのサブコンポーネントを使う"
1744
1902
  ]
1745
1903
  },