@cakejp/design-system 0.20.1 → 0.21.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 (161) hide show
  1. package/CHANGELOG.md +172 -0
  2. package/CLAUDE.md +5 -3
  3. package/MIGRATION.md +3 -3
  4. package/README.md +31 -11
  5. package/contracts/components.json +420 -63
  6. package/contracts/composition.json +38 -4
  7. package/contracts/rules.json +27 -5
  8. package/contracts/screen-patterns.json +6 -4
  9. package/dist/components/ec/admin-shell.js +62 -60
  10. package/dist/components/ec/anniversary-card.js +13 -12
  11. package/dist/components/ec/coupon-card.js +11 -11
  12. package/dist/components/ec/delivery-calendar.js +51 -45
  13. package/dist/components/ec/mypage-shell.js +80 -69
  14. package/dist/components/ec/product-card.js +93 -76
  15. package/dist/components/ec/product-carousel.js +65 -60
  16. package/dist/components/ec/product-detail-bar.js +13 -11
  17. package/dist/components/ec/product-detail-sidebar.js +60 -58
  18. package/dist/components/ec/product-list-item.js +64 -63
  19. package/dist/components/ec/product-option.js +30 -26
  20. package/dist/components/ec/rating-stars.js +27 -27
  21. package/dist/components/ec/review-card.js +32 -32
  22. package/dist/components/ec/review-form.js +37 -37
  23. package/dist/components/ec/shop-card.js +21 -19
  24. package/dist/components/foundations/accordion.js +33 -31
  25. package/dist/components/foundations/alert-dialog.js +4 -5
  26. package/dist/components/foundations/badge.js +5 -5
  27. package/dist/components/foundations/breadcrumb.js +27 -26
  28. package/dist/components/foundations/button.js +144 -25
  29. package/dist/components/foundations/calendar.js +28 -26
  30. package/dist/components/foundations/checkbox-card.js +71 -47
  31. package/dist/components/foundations/checkbox-group.js +30 -27
  32. package/dist/components/foundations/checkbox.js +69 -52
  33. package/dist/components/foundations/chip-variants.js +13 -0
  34. package/dist/components/foundations/command.js +81 -79
  35. package/dist/components/foundations/confirm-dialog.js +136 -0
  36. package/dist/components/foundations/context-menu.js +43 -38
  37. package/dist/components/foundations/data-table.js +87 -84
  38. package/dist/components/foundations/dialog.js +45 -36
  39. package/dist/components/foundations/dropdown-menu.js +47 -42
  40. package/dist/components/foundations/file-input.js +97 -67
  41. package/dist/components/foundations/hover-card.js +21 -21
  42. package/dist/components/foundations/menubar.js +75 -69
  43. package/dist/components/foundations/navigation-menu.js +31 -26
  44. package/dist/components/foundations/pagination.js +54 -50
  45. package/dist/components/foundations/popover.js +7 -7
  46. package/dist/components/foundations/progress.js +10 -6
  47. package/dist/components/foundations/radio-group.js +6 -3
  48. package/dist/components/foundations/responsive-dialog.js +73 -55
  49. package/dist/components/foundations/scroll-area.js +18 -14
  50. package/dist/components/foundations/select.js +44 -39
  51. package/dist/components/foundations/sheet.js +45 -37
  52. package/dist/components/foundations/skeleton.js +6 -6
  53. package/dist/components/foundations/skip-link.js +10 -8
  54. package/dist/components/foundations/slider.js +73 -48
  55. package/dist/components/foundations/sonner.js +5 -4
  56. package/dist/components/foundations/spinner.js +7 -5
  57. package/dist/components/foundations/switch.js +11 -10
  58. package/dist/components/foundations/tabs.js +54 -39
  59. package/dist/components/foundations/toggle-group.js +29 -21
  60. package/dist/components/foundations/toggle.js +20 -16
  61. package/dist/components/primitives/admin-side-nav.js +65 -62
  62. package/dist/components/primitives/banner-carousel.js +32 -29
  63. package/dist/components/primitives/bottom-tab-bar.js +16 -15
  64. package/dist/components/primitives/category-scroll.js +39 -29
  65. package/dist/components/primitives/category-shortcuts.js +9 -9
  66. package/dist/components/primitives/chat-composer.js +77 -74
  67. package/dist/components/primitives/chip.js +84 -61
  68. package/dist/components/primitives/combobox.js +63 -47
  69. package/dist/components/primitives/container.js +9 -9
  70. package/dist/components/primitives/content-card.js +15 -17
  71. package/dist/components/primitives/content-carousel.js +79 -68
  72. package/dist/components/primitives/date-picker.js +137 -99
  73. package/dist/components/primitives/footer.js +36 -37
  74. package/dist/components/primitives/header.js +175 -168
  75. package/dist/components/primitives/image-carousel.js +107 -87
  76. package/dist/components/primitives/image-gallery.js +32 -27
  77. package/dist/components/primitives/image-uploader.js +6 -6
  78. package/dist/components/primitives/list-item.js +59 -51
  79. package/dist/components/primitives/menu-drawer.js +36 -38
  80. package/dist/components/primitives/multi-select.js +89 -58
  81. package/dist/components/primitives/notification-list.js +10 -9
  82. package/dist/components/primitives/number-input.js +116 -105
  83. package/dist/components/primitives/scroll-row.js +21 -0
  84. package/dist/components/primitives/search-bar.js +31 -28
  85. package/dist/components/primitives/section-header.js +54 -53
  86. package/dist/components/primitives/side-nav.js +57 -56
  87. package/dist/components/primitives/sub-nav.js +13 -14
  88. package/dist/components/primitives/tag.js +4 -2
  89. package/dist/index.css +1 -1
  90. package/dist/index.js +3051 -924
  91. package/dist/lib/field-labelling.js +31 -21
  92. package/dist/lib/focus-ring.js +22 -4
  93. package/dist/lib/high-contrast.js +4 -0
  94. package/dist/lib/image-index.js +8 -0
  95. package/dist/lib/use-prefers-reduced-motion.js +21 -0
  96. package/dist/types/components/ec/admin-shell.d.ts +11 -1
  97. package/dist/types/components/ec/anniversary-card.d.ts +9 -1
  98. package/dist/types/components/ec/mypage-shell.d.ts +12 -1
  99. package/dist/types/components/ec/product-card.d.ts +13 -1
  100. package/dist/types/components/ec/product-carousel.d.ts +13 -1
  101. package/dist/types/components/ec/product-detail-bar.d.ts +12 -1
  102. package/dist/types/components/ec/product-detail-sidebar.d.ts +11 -1
  103. package/dist/types/components/ec/product-list-item.d.ts +9 -1
  104. package/dist/types/components/ec/rating-stars.d.ts +2 -0
  105. package/dist/types/components/ec/review-card.d.ts +1 -1
  106. package/dist/types/components/ec/shop-card.d.ts +8 -1
  107. package/dist/types/components/foundations/badge.d.ts +1 -1
  108. package/dist/types/components/foundations/breadcrumb.d.ts +8 -1
  109. package/dist/types/components/foundations/button.d.ts +38 -3
  110. package/dist/types/components/foundations/checkbox-card.d.ts +7 -1
  111. package/dist/types/components/foundations/checkbox.d.ts +1 -1
  112. package/dist/types/components/foundations/chip-variants.d.ts +2 -2
  113. package/dist/types/components/foundations/confirm-dialog.d.ts +61 -0
  114. package/dist/types/components/foundations/data-table.d.ts +9 -2
  115. package/dist/types/components/foundations/dialog.d.ts +16 -1
  116. package/dist/types/components/foundations/pagination.d.ts +1 -1
  117. package/dist/types/components/foundations/responsive-dialog.d.ts +2 -1
  118. package/dist/types/components/foundations/sheet.d.ts +12 -1
  119. package/dist/types/components/foundations/skeleton.d.ts +6 -0
  120. package/dist/types/components/foundations/slider.d.ts +15 -1
  121. package/dist/types/components/foundations/tabs.d.ts +7 -0
  122. package/dist/types/components/primitives/admin-side-nav.d.ts +22 -2
  123. package/dist/types/components/primitives/banner-carousel.d.ts +9 -1
  124. package/dist/types/components/primitives/bottom-tab-bar.d.ts +13 -2
  125. package/dist/types/components/primitives/category-scroll.d.ts +10 -1
  126. package/dist/types/components/primitives/category-shortcuts.d.ts +11 -2
  127. package/dist/types/components/primitives/chip.d.ts +22 -3
  128. package/dist/types/components/primitives/combobox.d.ts +7 -2
  129. package/dist/types/components/primitives/container.d.ts +3 -0
  130. package/dist/types/components/primitives/content-card.d.ts +1 -1
  131. package/dist/types/components/primitives/content-carousel.d.ts +12 -4
  132. package/dist/types/components/primitives/date-picker.d.ts +10 -3
  133. package/dist/types/components/primitives/footer.d.ts +1 -1
  134. package/dist/types/components/primitives/header.d.ts +14 -2
  135. package/dist/types/components/primitives/image-carousel.d.ts +23 -5
  136. package/dist/types/components/primitives/list-item.d.ts +10 -1
  137. package/dist/types/components/primitives/menu-drawer.d.ts +1 -1
  138. package/dist/types/components/primitives/multi-select.d.ts +7 -2
  139. package/dist/types/components/primitives/notification-list.d.ts +10 -1
  140. package/dist/types/components/primitives/number-input.d.ts +18 -5
  141. package/dist/types/components/primitives/scroll-row.d.ts +43 -0
  142. package/dist/types/components/primitives/section-header.d.ts +9 -2
  143. package/dist/types/components/primitives/side-nav.d.ts +13 -1
  144. package/dist/types/components/primitives/sub-nav.d.ts +1 -1
  145. package/dist/types/components/primitives/tag.d.ts +1 -1
  146. package/dist/types/index.d.ts +7 -1
  147. package/dist/types/lib/field-labelling.d.ts +23 -8
  148. package/dist/types/lib/focus-ring.d.ts +70 -3
  149. package/dist/types/lib/high-contrast.d.ts +25 -0
  150. package/dist/types/lib/image-index.d.ts +2 -0
  151. package/dist/types/lib/link-component.d.ts +26 -21
  152. package/dist/types/lib/use-prefers-reduced-motion.d.ts +9 -0
  153. package/package.json +11 -3
  154. package/src/components/COMPONENT_LOOKUP.md +18 -16
  155. package/src/preset-standalone.css +42 -0
  156. package/src/preset.css +20 -1
  157. package/src/styles/semantic.css +57 -0
  158. package/templates/AGENTS.md +5 -1
  159. package/templates/CLAUDE.md +3 -1
  160. package/tokens.json +49 -0
  161. package/dist/lib/link-component.js +0 -6
@@ -18,21 +18,22 @@
18
18
  | Avatar, AvatarImage, AvatarFallback, AvatarBadge, AvatarGroup, AvatarGroupCount | `@/components/foundations/avatar` | — | Default, フォールバック, サイズ比較, バッジ付き, グループ表示, レビュー表示例 |
19
19
  | Badge | `@/components/foundations/badge` | **variant**: `default`, `destructive`, `success`, `info-subtle`, `success-subtle`, `accent-subtle`, `caution-subtle`, `warning-subtle`, `muted-subtle`, `secondary`, `outline`, `ghost` | Default(商品ハイライト), Secondary(カテゴリ), Success(成功・完了), Warning(注意), Destructive(エラー), Outline(枠線), WithIcon, 注文ステータス例, 全バリアント一覧 |
20
20
  | Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis | `@/components/foundations/breadcrumb` | — | Default, 省略表示, 長いパス, 商品ページ例 |
21
- | Button | `@/components/foundations/button` | **variant**: `default`, `secondary`, `tertiary`, `destructive`, `ghost` | Default(CTA), Secondary(副次的), Secondary(追加済み), Tertiary(低優先度), Ghost(透明), Destructive(破壊的), Link(リンク), Inverse(暗背景用 primary), Ghost Inverse(暗背景用 secondary), Inverse + Ghost Inverse(dark CTA 帯), Overlay(画像上), サイズ比較, XL(56px / rounded-18px), Hero(56px / pill), Large, FullWidth, Disabled(無効), Loading(読込中), WithIcon, IconOnly |
21
+ | Button | `@/components/foundations/button` | **variant**: `default`, `secondary`, `tertiary`, `destructive`, `ghost` | Default(CTA), Secondary(副次的), Secondary(追加済み), Tertiary(低優先度), Outline(枠線), Ghost(透明), Destructive(破壊的), Link(リンク), Inverse(暗背景用 primary), Ghost Inverse(暗背景用 secondary), Inverse + Ghost Inverse(dark CTA 帯), Overlay(画像上), サイズ比較, XL(56px / rounded-18px), Hero(56px / pill), Large, FullWidth, Disabled(無効), Loading(処理中), interaction: loading の幅・フォーカス・送信抑止, WithIcon, IconOnly |
22
22
  | Calendar, CalendarDayButton | `@/components/foundations/calendar` | — | Default, お届け日選択, 日付範囲選択 |
23
23
  | Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent | `@/components/foundations/card` | **surface**: `default`, `primary` | Default, アクション付き, surface=, サーフェス文脈の伝播, 注文サマリー例 |
24
- | CheckboxCardGroup, CheckboxCardItem | `@/components/foundations/checkbox-card` | — | Default, 説明付き, 無効状態, 展開コンテンツ付き, ギフトオプション選択例, アレルギー情報例, バッジ付き, エラー状態 |
24
+ | CheckboxCardGroup, CheckboxCardItem | `@/components/foundations/checkbox-card` | — | Default, 説明付き, 無効状態, 展開コンテンツ付き, ギフトオプション選択例, アレルギー情報例, バッジ付き, エラー状態, interaction: 読み上げ名と説明の分離 |
25
25
  | CheckboxGroup, CheckboxGroupItem | `@/components/foundations/checkbox-group` | — | Default, 選択済み, エラー, 非活性, ヘルプテキスト付き, 1カラム, 説明付き |
26
26
  | Checkbox | `@/components/foundations/checkbox` | — | Default, チェック済み, 件数バッジ付き, 説明テキスト付き, 非活性, HoverState, filter sidebar 実用例, 素の Checkbox(label なし), エラーパターン, グループ例 |
27
27
  | Collapsible, CollapsibleTrigger, CollapsibleContent | `@/components/foundations/collapsible` | — | Default, CouponCodeInput, OrderOptions |
28
28
  | Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator | `@/components/foundations/command` | — | Default, ProductSearch, DeliveryOptions |
29
+ | ConfirmDialogProvider | `@/components/foundations/confirm-dialog` | — | Destructive, Default, Queue, interaction: 確定・キャンセル・Esc とフォーカス復帰, interaction: 待ち行列で 1 件ずつ表示, interaction: 閉じかけに次の確認が来てもフォーカスは呼び出し元へ, interaction: メニュー項目から呼ぶと閉じた後はメニューのトリガーへ |
29
30
  | ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuCheckboxItem, ContextMenuRadioItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuShortcut, ContextMenuGroup, ContextMenuPortal, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuRadioGroup | `@/components/foundations/context-menu` | — | Default, WithCheckboxItems |
30
31
  | DataTable, DataTableTable, DataTableHeader, DataTableBody, DataTableRow, DataTableHead, DataTableCell, DataTableAvatarCell, DataTableImageCell, DataTableLinkCell, DataTableCheckboxCell, DataTableActionCell, DataTableInputCell, DataTableSelectCell, DataTableNumberCell, DataTableDragHandleCell, DataTableBulkActions, DataTableSectionRow, DataTableAddRow, DataTableEmptyState | `@/components/foundations/data-table` | **state**: `default`, `selected`<br>**width**: `auto`, `max`, `hug`<br>**align**: `left`, `right`, `center` | Default, チェックボックス選択, タイトル固定, セクション, 空状態, 新規追加行, セル型バリエーション, 実用例(注文管理), 入力系セル一覧, ソートヘッダー, D&D並び替え, interaction: チェック欄の操作と選択通知 |
31
- | Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger | `@/components/foundations/dialog` | — | Default, 確認ダイアログ, フォーム入力, interaction: 開閉とフォーカストラップ |
32
+ | Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger | `@/components/foundations/dialog` | — | Default, 確認ダイアログ, フォーム入力, サイズ(size), サイズ(SP は画面幅に収まる), interaction: 開閉とフォーカストラップ, NestedSelectKeyboard, NestedDatePickerKeyboard |
32
33
  | Drawer, DrawerPortal, DrawerOverlay, DrawerTrigger, DrawerClose, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription | `@/components/foundations/drawer` | — | Default, カート追加クイックビュー |
33
34
  | DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent | `@/components/foundations/dropdown-menu` | — | Default, グループ付き, 注文アクション例 |
34
35
  | Field, FieldLabel, FieldSet, FieldLegend, FieldGroup, FieldDescription, FieldError, FieldSeparator | `@/components/foundations/field` | — | フォーム一式, ラベル付き区切り, Field / FieldLabel(1フィールドの箱) |
35
- | FileInput | `@/components/foundations/file-input` | — | Default, 複数選択 + accept, 無効, maxSize 超過エラー, FormField 連携 |
36
+ | FileInput | `@/components/foundations/file-input` | — | Default, 複数選択 + accept, 無効, maxSize 超過エラー, FormField 連携, interaction: native FormData と controlled value の同期 |
36
37
  | Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField | `@/components/foundations/form` | — | RHF register / reset 統合, DeliveryAddressForm, ReviewForm, ContactForm, RHF: register() + 保存済みの初期値, RHF: Controller + 保存済みの初期値 |
37
38
  | HoverCard, HoverCardTrigger, HoverCardContent | `@/components/foundations/hover-card` | — | Default, DeliveryInfo, RatingDetail |
38
39
  | IconBadge | `@/components/foundations/icon-badge` | **size**: `md`, `ml`, `lg` | md(44px), ml(48px), lg(72px), サイズ比較, Card 内(間隔=Card の gap-4), リスト見出し(md) |
@@ -44,22 +45,22 @@
44
45
  | Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverHeader, PopoverTitle, PopoverDescription | `@/components/foundations/popover` | — | Default, DeliveryDatePicker, AllergyInfo |
45
46
  | Progress | `@/components/foundations/progress` | — | Default, 送料無料まで, 送料無料達成 |
46
47
  | RadioGroup, RadioGroupItem | `@/components/foundations/radio-group` | — | Default, 説明付き, 選択済み, 無効状態, エラーパターン, 補足説明なし, 配送方法選択例, チップ型(choice chip), チップ型(制御・無効), チップ型(エラー), 支払い方法(クレカ入力済), 支払い方法(クレカ未入力) |
47
- | ResponsiveDialog, ResponsiveDialogTrigger, ResponsiveDialogContent, ResponsiveDialogHeader, ResponsiveDialogFooter, ResponsiveDialogTitle, ResponsiveDialogDescription, ResponsiveDialogClose | `@/components/foundations/responsive-dialog` | — | 確認ダイアログ, フォーム入力, お知らせ(閉じるのみ), お届け日選択(選択リスト) |
48
+ | ResponsiveDialog, ResponsiveDialogTrigger, ResponsiveDialogContent, ResponsiveDialogHeader, ResponsiveDialogFooter, ResponsiveDialogTitle, ResponsiveDialogDescription, ResponsiveDialogClose | `@/components/foundations/responsive-dialog` | — | 確認ダイアログ, フォーム入力, 幅を広げる(size), お知らせ(閉じるのみ), お届け日選択(選択リスト) |
48
49
  | ScrollArea, ScrollBar | `@/components/foundations/scroll-area` | — | Default, HorizontalTagScroll, OrderHistoryList |
49
50
  | Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue | `@/components/foundations/select` | — | Default, ラベル付き, グループ分け, サイズ比較, 注文フォーム例, エラーパターン, 横並びパターン(氏名・住所), Input と並置(高さが揃う) |
50
51
  | Separator | `@/components/foundations/separator` | — | Default(水平), 垂直, 注文確認ページ例 |
51
- | Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription | `@/components/foundations/sheet` | — | Default, モバイルメニュー, 商品フィルター, スライド方向 |
52
+ | Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription | `@/components/foundations/sheet` | — | Default, モバイルメニュー, 商品フィルター, スライド方向, サイズ(size), サイズ(SP は画面の 3/4) |
52
53
  | Skeleton | `@/components/foundations/skeleton` | — | Default, 円形(アバター用), 商品カードスケルトン, 商品グリッドスケルトン, レビュースケルトン, 商品詳細ページスケルトン |
53
54
  | SkipLink | `@/components/foundations/skip-link` | — | Default, CustomTarget |
54
- | Slider | `@/components/foundations/slider` | — | Default, PriceRangeFilter, ServingSizeSelector, RatingFilter |
55
+ | Slider | `@/components/foundations/slider` | — | Default, PriceRangeFilter, ServingSizeSelector, RatingFilter, interaction: 範囲スライダーの Home / End, interaction: 値なしは 1 つまみ |
55
56
  | SocialIcon | `@/components/foundations/social-icon` | — | Brand, Mono |
56
57
  | Toaster | `@/components/foundations/sonner` | — | Default, AddToCart, FavoriteAdded, StockError, OrderProcessing |
57
58
  | Spinner | `@/components/foundations/spinner` | — | Default, Small, Large, InlineWithText, FullPage |
58
59
  | Switch | `@/components/foundations/switch` | — | Default, ON 状態, 無効, サイズ比較, ブロック型, 通知設定例(リスト型) |
59
60
  | Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption | `@/components/foundations/table` | — | Default, フッター付き, 商品比較例, カート注文サマリー |
60
- | Tabs, TabsList, TabsTrigger, TabsContent | `@/components/foundations/tabs` | **variant**: `underbar`, `segment`<br>**scrollable**: `true`<br>**size**: `md`, `sm` | Default(Underbar), タブ数バリエーション, 横スクロール(多数タブ), PC モード(文字幅ベース), Segment(ピル型), Segment 3択, 狭幅(サイドバー 266px), interaction: クリックと矢印キーでの切り替え |
61
+ | Tabs, TabsList, TabsTrigger, TabsContent | `@/components/foundations/tabs` | **variant**: `underbar`, `segment`<br>**scrollable**: `true`<br>**size**: `md`, `sm` | Default(Underbar), タブ数バリエーション, 横スクロール(多数タブ), PC モード(文字幅ベース), Segment(ピル型), Segment 3択, 狭幅(サイドバー 266px), 縦向き(orientation=vertical), interaction: 縦向きの並びと上下キー, interaction: クリックと矢印キーでの切り替え |
61
62
  | Textarea | `@/components/foundations/textarea` | — | Default, 無効, メッセージカード入力例, エラーパターン, レビュー投稿例, 文字数カウンタ |
62
- | ToggleGroup, ToggleGroupItem | `@/components/foundations/toggle-group` | **width**: `fit`, `full`<br>**variant**: `default`, `outline`<br>**size**: `default`, `sm`, `lg`<br>**variant**: `default`, `outline`<br>**size**: `default`, `sm`, `lg` | Default, 複数選択, サイズ, アイコン付き, アイコンのみ, 無効 |
63
+ | ToggleGroup, ToggleGroupItem | `@/components/foundations/toggle-group` | **width**: `fit`, `full`<br>**variant**: `default`, `outline`<br>**variant**: `default`, `outline`<br>**size**: `default`, `sm`, `lg` | Default, 複数選択, サイズ, アイコン付き, アイコンのみ, 無効 |
63
64
  | Toggle | `@/components/foundations/toggle` | **variant**: `default`, `outline`<br>**size**: `default`, `sm`, `lg` | Default, TextFormatting, FavoriteToggle, Outline, Sizes |
64
65
  | Tooltip, TooltipTrigger, TooltipContent, TooltipProvider | `@/components/foundations/tooltip` | — | Default, 表示位置, アイコンボタン例 |
65
66
 
@@ -77,13 +78,13 @@
77
78
  | CategoryScroll | `@/components/primitives/category-scroll` | — | Default, CircleThumbnails |
78
79
  | CategoryShortcuts | `@/components/primitives/category-shortcuts` | — | Default, 選択あり, インタラクティブ(onClick), 商品一覧ページでの使用例 |
79
80
  | ChatComposer | `@/components/primitives/chat-composer` | — | 基本, 添付あり, ⌘Enter 送信, 送信中, 無効化, 文字数カウンタ |
80
- | Chip | `@/components/primitives/chip` | **variant**: `filled`, `accent`<br>**size**: `sm`, `md`, `lg`, `tile`<br>**shape**: `pill`, `square` | Default, 人気キーワード, 全バリアント, States(hover / disabled), サイズ比較, サイズタイル(狭い横並び), フィルター選択, 削除可能(選択済みフィルター), 検索画面での使用例 |
81
+ | Chip | `@/components/primitives/chip` | **variant**: `filled`, `accent`, `selected`<br>**size**: `sm`, `md`, `lg`, `tile`<br>**shape**: `pill`, `square` | Default, 人気キーワード, 全バリアント, States(hover / disabled), サイズ比較, サイズタイル(狭い横並び), フィルター選択, 削除可能(選択済みフィルター), 検索画面での使用例 |
81
82
  | CoachMark | `@/components/primitives/coach-mark` | — | オンボーディング, 全方向, オンボーディング各方向 |
82
83
  | Combobox | `@/components/primitives/combobox` | — | Default |
83
84
  | Container | `@/components/primitives/container` | — | Default(page / default gutter), サイズ比較, gutter 比較 |
84
85
  | ContentCard, ContentList | `@/components/primitives/content-card` | — | 縦(グリッド一覧), 一覧での高さ揃え, 横(画像が左), リスト(Medium 型), 長いタグラベル |
85
- | ContentCarousel | `@/components/primitives/content-carousel` | — | ヒーローバナー, 自動再生(5秒), peek表示, 多列カード(PC 3枚), 1枚のみ |
86
- | DatePicker, DateTimePicker | `@/components/primitives/date-picker` | — | 日付ピッカー, 初期値あり, 選択範囲を制限, 特定日を無効化, FormField 連携, 無効化, クリア可能(任意項目) |
86
+ | ContentCarousel | `@/components/primitives/content-carousel` | — | ヒーローバナー, 自動再生(5秒), peek表示, peek表示(Container の中), 多列カード(PC 3枚), 1枚のみ |
87
+ | DatePicker, DateTimePicker | `@/components/primitives/date-picker` | — | 日付ピッカー, 初期値あり, 選択範囲を制限, 特定日を無効化, FormField 連携, 無効化, クリア可能(任意項目), interaction: クリア後のフォーカス, interaction: FormField のエラーと接続 |
87
88
  | EmptyState | `@/components/primitives/empty-state` | — | お気に入り商品(空), カート(空), ブックマーク(空), 検索結果なし, 汎用(説明のみ) |
88
89
  | ErrorState, NotFoundIllustration | `@/components/primitives/error-state` | — | ネットワークエラー, サーバーエラー, ページが見つからない, タイムアウト, 404(notFound variant), 404(文言上書き), イラスト単体 |
89
90
  | FilterBar | `@/components/primitives/filter-bar` | — | SP, SP(選択済み), PC, 地域フィルター, もっと絞り込む |
@@ -91,20 +92,21 @@
91
92
  | FormField | `@/components/primitives/form-field` | — | — |
92
93
  | FunnelShell | `@/components/primitives/funnel-shell` | — | 注文内容の確認(ご購入手続き) |
93
94
  | Header | `@/components/primitives/header` | — | ロゴ+アクション, ロゴ+未ログイン, ロゴ+グローバルナビ+検索スロット(PC), ロゴ+長いナビ(中幅で自動退避), ロゴ+ナビ(navBreakpoint=lg), containerSize=page(本文と左端を揃える), ロゴセンター(決済・申し込み用), 戻る+タイトル, 戻る+検索バー, 戻る+右側アクション, カスタムロゴ |
94
- | ImageCarousel | `@/components/primitives/image-carousel` | — | バナーカルーセル, 横長バナー, 正方形(商品画像), OGP比率, 自動再生(3秒), PC幅(ビューポート切替で確認), トップページ ヒーローバナー |
95
+ | ImageCarousel | `@/components/primitives/image-carousel` | — | バナーカルーセル, peek表示(Container の中), 横長バナー, 正方形(商品画像), OGP比率, 自動再生(3秒), PC幅(ビューポート切替で確認), トップページ ヒーローバナー |
95
96
  | ImageGallery | `@/components/primitives/image-gallery` | — | ドット付き, サムネイル付き, バナー(16:9), PC商品詳細, 単一画像 |
96
97
  | ImageInput | `@/components/primitives/image-input` | **aspect**: `square`, `landscape`<br>**size**: `sm`, `md`, `lg` | 基本, 保存済み画像あり, 表示サイズ, FormField 連携, 検証エラー, クリア不可, 無効化 |
97
98
  | ImageUploader | `@/components/primitives/image-uploader` | — | — |
98
99
  | KebabMenu | `@/components/primitives/kebab-menu` | — | — |
99
100
  | ListItem | `@/components/primitives/list-item` | — | デフォルト(矢印), キャプション付き, アイコン付き, テキスト値, バッジ付き, トグル, 矢印なし, 選択状態, メニューリスト(複数行), アイコン付きメニュー, インタラクティブ(hover / focus) |
100
101
  | MenuDrawer | `@/components/primitives/menu-drawer` | — | デフォルト(最小構成), ログイン済 (ユーザー名表示), 未ログイン (ログインボタン表示), サムネイル付きカテゴリ, バナー付き, 全部入り (大規模アプリ向け), ログインリンク非表示 |
101
- | MultiSelect | `@/components/primitives/multi-select` | — | Default |
102
+ | MultiSelect | `@/components/primitives/multi-select` | — | Default, interaction: Chip 削除後のフォーカス |
102
103
  | NotificationBadge | `@/components/primitives/notification-badge` | **color**: `red`, `green`<br>**size**: `sm`, `md` | Default, ドットバッジ, 数値バッジ, カラーバリエーション, ヘッダーでの使用例, 非表示状態 |
103
104
  | NotificationList | `@/components/primitives/notification-list` | — | デフォルト, 横並び(管理画面向け), 空の状態 |
104
- | NumberInput, QuantitySelector | `@/components/primitives/number-input` | — | Default, コンパクト型(sm), サイズ比較, 最小・最大値, 無効状態, エラー状態, ゴミ箱アイコン, ゴミ箱+削除確認ダイアログ, 直接入力パターン, 商品詳細での使用例, カート内での使用例, 価格・在庫入力(管理画面), interaction: 増減と min/max のクランプ |
105
+ | NumberInput, QuantitySelector | `@/components/primitives/number-input` | — | Default, コンパクト型(sm), サイズ比較, 最小・最大値, 無効状態, エラー状態, ゴミ箱アイコン, ゴミ箱+削除確認ダイアログ, 直接入力パターン, 商品詳細での使用例, カート内での使用例, 価格・在庫入力(管理画面), interaction: 増減と min/max のクランプ, interaction: 上限・下限でもフォーカスを保つ, interaction: error の aria-invalid, interaction: FormField と接続 |
105
106
  | PriceDisplay | `@/components/primitives/price-display` | — | Default, セール価格, サイズ比較, セール × サイズ, 税込ラベルなし, 高額商品, 価格レンジ |
106
107
  | ProgressSteps | `@/components/primitives/progress-steps` | — | ステップ1(カート), ステップ2(注文内容), ステップ3(確認), ステップ4(完了), 全ステップ一覧, 会員登録フロー |
107
108
  | Prose | `@/components/primitives/prose` | — | 記事本文(Container narrow と組み合わせ), children を包む, 幅の広い表(ページを横に伸ばさない) |
109
+ | ScrollRow | `@/components/primitives/scroll-row` | — | Container の中, スナップ, はみ出さない(bleed=false), タグの列 |
108
110
  | SearchBar | `@/components/primitives/search-bar` | — | Default, Small(ヘッダー向け), form モード(JS 不要・SEO 向け), カスタムプレースホルダー |
109
111
  | SearchPanel | `@/components/primitives/search-panel` | — | — |
110
112
  | SectionHeader | `@/components/primitives/section-header` | — | Default, サブタイトル付き, リンクなし, カスタムラベル, カルーセルナビ付き, ナビのみ, ナビ(先頭位置), アクションボタン付き, サブタイトル + アクション, 狭幅のサブタイトル + アクション, サイズ一覧, キャプション付きサイズ比較, align=, LPヒーロー(SP 3xl / PC 5xl), align=, start / center 比較 |
@@ -117,7 +119,7 @@
117
119
  | StatusCountTabs | `@/components/primitives/status-count-tabs` | — | — |
118
120
  | StickyActionBar | `@/components/primitives/sticky-action-bar` | — | SingleButton, TwoButtons, WithPrice |
119
121
  | SubNav | `@/components/primitives/sub-nav` | — | テキスト(本番準拠), チップ型, アクティブなし |
120
- | Tag | `@/components/primitives/tag` | **variant**: `default`, `caution`, `sale`, `warning`, `info`, `info-fill`, `success`, `accent`, `timesale`, `berry`, `coupon`<br>**size**: `sm`, `md` | Default, 全バリアント一覧, サイズ比較, アイコン付き, 配送方法タグ, 商品カード内の例 |
122
+ | Tag | `@/components/primitives/tag` | **variant**: `default`, `image`, `caution`, `sale`, `warning`, `info`, `info-fill`, `success`, `accent`, `timesale`, `berry`, `coupon`<br>**size**: `sm`, `md` | Default, 全バリアント一覧, サイズ比較, アイコン付き, 配送方法タグ, 商品カード内の例 |
121
123
  | Timeline | `@/components/primitives/timeline` | — | Default, カスタムマーカー |
122
124
  | WorkspaceShell | `@/components/primitives/workspace-shell` | — | 集中編集ワークスペース, ヘッダー中央寄せ(headerLayout=center), 1カラム集中編集 |
123
125
 
@@ -338,6 +338,48 @@
338
338
  --Border-Brand-Subtle: rgba(224, 75, 0, 0.24);
339
339
  }
340
340
 
341
+ /* --- Layer 2b: High Contrast(コントラストを上げる)---
342
+ *
343
+ * 正本 src/styles/semantic.css 末尾の「High Contrast」節の hex 展開。
344
+ * 新ロール(--Border-Control / --Surface-Control-Track / --Focus-Ring-Control)は
345
+ * **高コントラストのときだけ**宣言する(:root / .dark では宣言しない)。部品側が
346
+ * var(--Border-Control, var(--Border-Medium-Emphasis)) のフォールバック付きで参照するので、
347
+ * 未宣言(既定)のときは従来の見た目のまま、要素単位の上書きにも追従する。
348
+ * - OS の「コントラストを上げる」: @media (prefers-contrast: more)
349
+ * - アプリが <html> へ付ける data-contrast="more"(任意の祖先も可だが、body 直下へ Portal される内容には届かない)
350
+ * 値: light = Gray-600 #787675(白に 4.52:1)/ dark = White-alpha-500 #FFFFFF80(黒に 5.32:1)/
351
+ * フォーカスリング = #0C9E66(白に 3.44:1・黒に 6.10:1。既定の 50% リングを不透明にする)。
352
+ * semantic.css を変更したら、ここも合わせて直す(__tests__/contrast-more-tokens.test.ts が一致を検査する)。
353
+ * ソース順は semantic.css と同じ(属性 light → 属性 dark → @media light → dark)。
354
+ */
355
+ [data-contrast="more"] {
356
+ --Border-Control: #787675;
357
+ --Surface-Control-Track: #787675;
358
+ --Focus-Ring-Control: #0C9E66;
359
+ }
360
+
361
+ .dark[data-contrast="more"],
362
+ .dark [data-contrast="more"],
363
+ [data-contrast="more"] .dark {
364
+ --Border-Control: #FFFFFF80;
365
+ --Surface-Control-Track: #FFFFFF80;
366
+ --Focus-Ring-Control: #0C9E66;
367
+ }
368
+
369
+ @media (prefers-contrast: more) {
370
+ :root {
371
+ --Border-Control: #787675;
372
+ --Surface-Control-Track: #787675;
373
+ --Focus-Ring-Control: #0C9E66;
374
+ }
375
+
376
+ .dark {
377
+ --Border-Control: #FFFFFF80;
378
+ --Surface-Control-Track: #FFFFFF80;
379
+ --Focus-Ring-Control: #0C9E66;
380
+ }
381
+ }
382
+
341
383
  /* --- Bridge: Semantic → shadcn tokens --- */
342
384
  :root {
343
385
  --spacing-1: 0.25rem; /* 4px - scale 1 */
package/src/preset.css CHANGED
@@ -42,7 +42,8 @@
42
42
  Tailwind 本体ではなく tw-animate-css のユーティリティ。preset が配らないと、
43
43
  自分で tw-animate-css を入れた consumer だけアニメーションが動く暗黙依存になる
44
44
  (実例: cakejp-biz-mag のモバイルメニューが無言で無アニメーションだった)。
45
- パッケージ解決で consumer の node_modules から読む(DS の dependency)。 */
45
+ パッケージ解決で consumer の node_modules から読む(DS の dependency)。
46
+ prefers-reduced-motion では再生時間を 0.01ms に落とす(末尾の @layer base を参照)。 */
46
47
  @import "tw-animate-css";
47
48
 
48
49
  /* --- Dark mode variant --- */
@@ -409,4 +410,22 @@
409
410
  body {
410
411
  color: var(--foreground);
411
412
  }
413
+
414
+ /* prefers-reduced-motion: tw-animate-css の開閉アニメーション
415
+ * animate-in / animate-out(Popover / DropdownMenu / Select / Tooltip / HoverCard / ContextMenu /
416
+ * Menubar など)の再生時間は --tw-animation-duration → --tw-duration → 0.15s の順で決まる。
417
+ * duration-[var(--Motion-Duration-*)] を付けていない部品は reduced-motion でも 150ms 再生されていた。
418
+ * --tw-animation-duration を duration トークン(reduced-motion では 0.01ms)に向け、
419
+ * motion.css の --Motion-Duration-* と同じく一括で実質停止させる。
420
+ * - 0 ではなく 0.01ms: animationend を待つ Radix の閉じ処理(Presence)が止まらないようにする
421
+ * - base 層に置く: 利用側が animation-duration-* を明示した要素は、その指定を優先する
422
+ * - --tw-animation-duration は継承しない @property(tw-animate-css が登録)なので全要素に宣言する
423
+ * 通常の設定では何も変わらない。 */
424
+ @media (prefers-reduced-motion: reduce) {
425
+ *,
426
+ ::before,
427
+ ::after {
428
+ --tw-animation-duration: var(--Motion-Duration-Fast, 0.01ms);
429
+ }
430
+ }
412
431
  }
@@ -219,3 +219,60 @@
219
219
 
220
220
  /* Third-Party(ダークでも同じ) */
221
221
  }
222
+
223
+ /* ============================================
224
+ * High Contrast(コントラストを上げる)
225
+ *
226
+ * 入力・選択の操作部品の枠、スライダーの溝、リングだけのフォーカスは、既定では面の区切りと
227
+ * 同じ淡い色で、WCAG 1.4.11(非テキスト)の 3:1 に届かない(issue #301。既定の見た目の
228
+ * 変更は別判断のため据え置き)。次のどちらかのときだけ、3:1 以上の色に切り替える。
229
+ * - OS の「コントラストを上げる」(@media (prefers-contrast: more))
230
+ * - アプリが <html> へ付ける data-contrast="more"(常時 opt-in。任意の祖先も可だが、body 直下へ Portal される
231
+ * Dialog / Sheet / Popover 等の内容には届かない)
232
+ *
233
+ * 新ロール(--Border-Control / --Surface-Control-Track / --Focus-Ring-Control)は
234
+ * **ここ以外では宣言しない**(:root / .dark / @theme では宣言しない)。部品側は
235
+ * var(--Border-Control, var(--Border-Medium-Emphasis)) のようにフォールバック付きで参照するため、
236
+ * 未宣言のとき(= 既定)は従来と同じ変数をその要素で解決する。:root で宣言すると :root で
237
+ * 解決済みの値を子孫が継承し、消費側がラッパー要素単位で --Border-Medium-Emphasis 等を
238
+ * 上書きしても追従しなくなる(姉妹 DS ksk の #645 で見つかった後退)。
239
+ *
240
+ * 値は Surface-Primary(light = 白 / dark = 黒に合成)に対する実測。
241
+ * --Border-Control / --Surface-Control-Track
242
+ * light: Gray-600 #787675 = 4.52:1 / dark: White-alpha-500 を黒へ合成した #808080 = 5.32:1
243
+ * --Focus-Ring-Control(既定の 50% リングの代わりに不透明で描く)
244
+ * light: Focus-High-Emphasis #0C9E66 = 3.44:1 / dark: 6.10:1
245
+ * scripts/check-contrast.mjs が高コントラストの 2 モード(属性 / @media)を**例外なし**で 3:1 検査し、
246
+ * __tests__/contrast-more-tokens.test.ts が下の値と tokens.json の semanticContrastMore の一致を固定する。
247
+ *
248
+ * ソース順は検査と対応している(同じ詳細度では後に書いたものが勝つ):
249
+ * .dark(上の通常ブロック)→ 属性(light)→ 属性(dark)→ @media(light → dark)。
250
+ * 順を変えると scripts/check-contrast.mjs が失敗する。
251
+ * ============================================ */
252
+ [data-contrast="more"] {
253
+ --Border-Control: var(--Primitive-Gray-600);
254
+ --Surface-Control-Track: var(--Primitive-Gray-600);
255
+ --Focus-Ring-Control: var(--Focus-High-Emphasis);
256
+ }
257
+
258
+ .dark[data-contrast="more"],
259
+ .dark [data-contrast="more"],
260
+ [data-contrast="more"] .dark {
261
+ --Border-Control: var(--Primitive-White-alpha-500);
262
+ --Surface-Control-Track: var(--Primitive-White-alpha-500);
263
+ --Focus-Ring-Control: var(--Focus-High-Emphasis);
264
+ }
265
+
266
+ @media (prefers-contrast: more) {
267
+ :root {
268
+ --Border-Control: var(--Primitive-Gray-600);
269
+ --Surface-Control-Track: var(--Primitive-Gray-600);
270
+ --Focus-Ring-Control: var(--Focus-High-Emphasis);
271
+ }
272
+
273
+ .dark {
274
+ --Border-Control: var(--Primitive-White-alpha-500);
275
+ --Surface-Control-Track: var(--Primitive-White-alpha-500);
276
+ --Focus-Ring-Control: var(--Focus-High-Emphasis);
277
+ }
278
+ }
@@ -15,7 +15,9 @@ Codex(および他の AI エージェント)は UI 作業を始める前に
15
15
  |---------|------|
16
16
  | `node_modules/@cakejp/design-system/CLAUDE.md` | DS 利用ガイド・禁止パターン |
17
17
  | `node_modules/@cakejp/design-system/contracts/components.json` | 全コンポーネントの定義・バリアント |
18
- | `node_modules/@cakejp/design-system/src/components/COMPONENT_LOOKUP.md` | 125コンポーネントの軽量な早見表 |
18
+ | `node_modules/@cakejp/design-system/src/components/COMPONENT_LOOKUP.md` | 全コンポーネントの軽量な早見表(自動生成。件数は `contracts/components.json` の `meta.counts`) |
19
+ | `node_modules/@cakejp/design-system/contracts/screen-patterns.json` | 画面パターン判断基準(CRUD・編集/作成/削除UIの選択) |
20
+ | `node_modules/@cakejp/design-system/contracts/composition.json` | ページ骨格・余白リズム・視覚階層の組み方 |
19
21
  | `node_modules/@cakejp/design-system/contracts/rules.json` | 禁止パターン・アクセシビリティ要件 |
20
22
  | `node_modules/@cakejp/design-system/tokens.json` | カラー・余白・角丸・影・タイポ |
21
23
 
@@ -33,6 +35,8 @@ Codex(および他の AI エージェント)は UI 作業を始める前に
33
35
  | カスタムフォントサイズ・ウェイト | `tokens.json` の `typography.*` |
34
36
  | `::before` / `::after` で装飾 | DS の `SectionHeader`, `Chip`, `Badge` 等の variants |
35
37
  | 新しい `<div>` ラッパーでレイアウト | `Card`, `Section`, `Stack` 等のコンポーネント |
38
+ | `window.confirm()` で確認 | `useConfirm`(アプリのルートに `ConfirmDialogProvider` を 1 つ置き、`const ok = await confirm({ title, description })`) |
39
+ | 処理中のボタンを `disabled` + 自作スピナー(`Spinner` / `Loader2`)で組む | `Button` の `loading`(`<Button loading>保存</Button>`。幅とフォーカスを保ったまま押せなくする) |
36
40
 
37
41
  DS に該当パターンが無い場合のみカスタム実装を許可。その場合は**必ずコメントで理由を記載**すること。
38
42
 
@@ -15,7 +15,7 @@ Codex(および他の AI エージェント)は UI 作業を始める前に
15
15
  |---------|------|
16
16
  | `node_modules/@cakejp/design-system/CLAUDE.md` | DS 利用ガイド・禁止パターン |
17
17
  | `node_modules/@cakejp/design-system/contracts/components.json` | 全コンポーネントの定義・バリアント |
18
- | `node_modules/@cakejp/design-system/src/components/COMPONENT_LOOKUP.md` | 125コンポーネントの軽量な早見表 |
18
+ | `node_modules/@cakejp/design-system/src/components/COMPONENT_LOOKUP.md` | 全コンポーネントの軽量な早見表(自動生成。件数は `contracts/components.json` の `meta.counts`) |
19
19
  | `node_modules/@cakejp/design-system/contracts/screen-patterns.json` | 画面パターン判断基準(CRUD・編集/作成/削除UIの選択) |
20
20
  | `node_modules/@cakejp/design-system/contracts/composition.json` | ページ骨格・余白リズム・視覚階層の組み方 |
21
21
  | `node_modules/@cakejp/design-system/contracts/rules.json` | 禁止パターン・アクセシビリティ要件 |
@@ -35,6 +35,8 @@ Codex(および他の AI エージェント)は UI 作業を始める前に
35
35
  | カスタムフォントサイズ・ウェイト | `tokens.json` の `typography.*` |
36
36
  | `::before` / `::after` で装飾 | DS の `SectionHeader`, `Chip`, `Badge` 等の variants |
37
37
  | 新しい `<div>` ラッパーでレイアウト | `Card`, `Section`, `Stack` 等のコンポーネント |
38
+ | `window.confirm()` で確認 | `useConfirm`(アプリのルートに `ConfirmDialogProvider` を 1 つ置き、`const ok = await confirm({ title, description })`) |
39
+ | 処理中のボタンを `disabled` + 自作スピナー(`Spinner` / `Loader2`)で組む | `Button` の `loading`(`<Button loading>保存</Button>`。幅とフォーカスを保ったまま押せなくする) |
38
40
 
39
41
  DS に該当パターンが無い場合のみカスタム実装を許可。その場合は**必ずコメントで理由を記載**すること。
40
42
 
package/tokens.json CHANGED
@@ -752,6 +752,55 @@
752
752
  "usage": "Overlay-Scrim のCSS契約値"
753
753
  }
754
754
  }
755
+ },
756
+ "semanticContrastMore": {
757
+ "description": "コントラストを上げる設定(OS の prefers-contrast: more、またはアプリが付ける data-contrast=\"more\")のときだけ宣言される新ロール。:root / .dark では宣言しない。部品は var(--Border-Control, var(--Border-Medium-Emphasis)) のようにフォールバック付きで参照する。値の正本は src/styles/semantic.css 末尾の High Contrast 節で、__tests__/contrast-more-tokens.test.ts が一致を固定する",
758
+ "light": {
759
+ "border": {
760
+ "control": {
761
+ "value": "var(--Primitive-Gray-600)",
762
+ "hex": "#787675",
763
+ "usage": "Border-Control。入力・選択の操作部品の枠・輪郭(対象は CLAUDE_DEV.md の「高コントラスト」節)。Surface-Primary に対し 4.52:1"
764
+ }
765
+ },
766
+ "surface": {
767
+ "control-track": {
768
+ "value": "var(--Primitive-Gray-600)",
769
+ "hex": "#787675",
770
+ "usage": "Surface-Control-Track。Slider の溝。Surface-Primary に対し 4.52:1"
771
+ }
772
+ },
773
+ "focus": {
774
+ "ring-control": {
775
+ "value": "var(--Focus-High-Emphasis)",
776
+ "hex": "#0C9E66",
777
+ "usage": "Focus-Ring-Control。リングだけでフォーカスを示す部品(FOCUS_RING_ONLY / FOCUS_RING_INSET)の不透明なリング。既定は 50% 透過で 3:1 未満。Surface-Primary に対し 3.44:1"
778
+ }
779
+ }
780
+ },
781
+ "dark": {
782
+ "border": {
783
+ "control": {
784
+ "value": "var(--Primitive-White-alpha-500)",
785
+ "hex": "#FFFFFF80",
786
+ "usage": "Border-Control。dark の Surface-Primary(黒に合成)に対し 5.32:1"
787
+ }
788
+ },
789
+ "surface": {
790
+ "control-track": {
791
+ "value": "var(--Primitive-White-alpha-500)",
792
+ "hex": "#FFFFFF80",
793
+ "usage": "Surface-Control-Track。dark の Surface-Primary に対し 5.32:1"
794
+ }
795
+ },
796
+ "focus": {
797
+ "ring-control": {
798
+ "value": "var(--Focus-High-Emphasis)",
799
+ "hex": "#0C9E66",
800
+ "usage": "Focus-Ring-Control。dark の Surface-Primary に対し 6.10:1"
801
+ }
802
+ }
803
+ }
755
804
  }
756
805
  },
757
806
  "typography": {
@@ -1,6 +0,0 @@
1
- function n(r, e) {
2
- return e || !r ? "a" : r;
3
- }
4
- export {
5
- n as resolveLinkComponent
6
- };