ksk-design-system 1.37.4 → 1.38.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 (32) hide show
  1. package/AGENTS.md +20 -6
  2. package/CLAUDE.md +5 -5
  3. package/PUBLISHING.md +22 -22
  4. package/README.md +40 -2
  5. package/RELEASE.md +4 -4
  6. package/contracts/components.json +144 -17
  7. package/dist/class-names.js +1 -1
  8. package/dist/index.js +4141 -3194
  9. package/dist/native.js +44 -4
  10. package/dist/{server-variants-Dr_V3bDI.js → server-variants-qSBVrkGA.js} +1 -0
  11. package/dist/types/components/patterns/admin/data-table.d.ts +59 -4
  12. package/dist/types/components/patterns/admin/kebab-menu.d.ts +10 -2
  13. package/dist/types/components/patterns/celebration.d.ts +17 -0
  14. package/dist/types/components/patterns/empty-state.d.ts +4 -1
  15. package/dist/types/components/patterns/media-action-cluster.d.ts +30 -0
  16. package/dist/types/components/patterns/photo-hero.d.ts +28 -0
  17. package/dist/types/components/patterns/screen.d.ts +20 -0
  18. package/dist/types/components/patterns/share-buttons.d.ts +6 -3
  19. package/dist/types/components/ui/button.d.ts +1 -1
  20. package/dist/types/components/ui/dialog.d.ts +17 -6
  21. package/dist/types/components/ui/sheet.d.ts +17 -6
  22. package/dist/types/components/ui/sub-nav.d.ts +4 -0
  23. package/dist/types/index.d.ts +12 -3
  24. package/dist/types/lib/server-variants/button-variants.d.ts +1 -1
  25. package/dist/types/tokens/native/themes.d.ts +40 -0
  26. package/package.json +2 -1
  27. package/src/components/COMPONENT_LOOKUP.md +12 -8
  28. package/src/preset.css +14 -0
  29. package/src/styles/glass.css +19 -0
  30. package/src/styles/semantic.css +42 -0
  31. package/src/styles/typography.css +6 -0
  32. package/tokens.json +8 -0
package/AGENTS.md CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  ```
18
18
  contracts/rules.json # 禁止パターン32件・AIアンチパターン10件・a11y要件
19
- contracts/components.json # 全110コンポーネントの定義・バリアント・ルール
19
+ contracts/components.json # 全112コンポーネントの定義・バリアント・ルール
20
20
  tokens.json # カラー・スペーシング・シャドウトークン
21
21
  src/components/COMPONENT_LOOKUP.md # バリアント・インポートパス一覧(自動生成)
22
22
  ```
@@ -90,10 +90,10 @@ Brand色を差し替え(10行)→ Primitive Layer → Semantic Layer → Bri
90
90
  | ファイル | 内容 |
91
91
  |---------|------|
92
92
  | **AGENTS.md**(本ファイル) | 概要・技術スタック・コマンド・クイックスタート |
93
- | **contracts/components.json** | 全110コンポーネントの構造化定義(バリアント・アクセシビリティ要件) |
93
+ | **contracts/components.json** | 全112コンポーネントの構造化定義(バリアント・アクセシビリティ要件) |
94
94
  | **contracts/rules.json** | 禁止パターン32件・AIアンチパターン10件・アクセシビリティ要件 |
95
95
  | **tokens.json** | カラー・スペーシング・シャドウトークンの機械可読定義 |
96
- | **src/components/COMPONENT_LOOKUP.md** | 全110コンポーネントのバリアント・インポートパス(自動生成) |
96
+ | **src/components/COMPONENT_LOOKUP.md** | 全112コンポーネントのバリアント・インポートパス(自動生成) |
97
97
  | **DESIGN.md** | AI エージェント向け視覚言語サマリ(トークン+意図・voice・motion) |
98
98
 
99
99
  ---
@@ -103,12 +103,12 @@ Brand色を差し替え(10行)→ Primitive Layer → Semantic Layer → Bri
103
103
  ```
104
104
  src/
105
105
  ├── components/
106
- │ ├── ui/ # 汎用UIコンポーネント 55
106
+ │ ├── ui/ # 汎用UIコンポーネント 56
107
107
  │ ├── patterns/
108
108
  │ │ ├── commerce/ # EC系 11個
109
109
  │ │ ├── admin/ # 管理画面系 8個
110
110
  │ │ ├── shells/ # レイアウトシェル 3個
111
- │ │ └── ... # 汎用パターン 33
111
+ │ │ └── ... # 汎用パターン 34
112
112
  │ └── icons/
113
113
  ├── styles/
114
114
  │ ├── primitive.css # Layer 1: 原色パレット
@@ -116,7 +116,7 @@ src/
116
116
  │ └── typography.css # typo-* ユーティリティ 17クラス
117
117
  ├── themes/ # default / orange / green / violet / blue
118
118
  ├── preset.css # 外部プロジェクト向けプリセット
119
- └── index.ts # Public API(110コンポーネント)
119
+ └── index.ts # Public API(112コンポーネント)
120
120
  ```
121
121
 
122
122
  ---
@@ -188,3 +188,17 @@ import { Button, Card, Input, FormField } from "ksk-design-system"
188
188
  - [ ] `bash scripts/check-drift.sh` を実行して乖離がないことを確認
189
189
  - [ ] Storybook のストーリーファイル(`.stories.tsx`)を作成
190
190
  - [ ] `node scripts/generate-component-lookup.mjs` を実行して COMPONENT_LOOKUP.md を更新
191
+
192
+ <!-- BEGIN:codex-pr-review-guidelines -->
193
+ ## Codex PR Review Guidelines
194
+
195
+ Codex code review is expected to run on pull requests for this repository after the repository is enabled in ChatGPT Codex Code review settings. If an immediate review is needed, comment `@codex review` on the pull request.
196
+
197
+ When reviewing, prioritize P0/P1 issues: security/privacy regressions, data loss, broken auth, broken build/test, user-visible behavior changes, and missing validation around env vars, migrations, background jobs, notifications, payments, storage, and external APIs.
198
+
199
+ For UI changes, verify design-system usage before accepting scratch components or hard-coded styling. Reusable primitives that belong in the design system should be moved there instead of duplicated locally.
200
+
201
+ Respect this repository's local ownership rules and validation commands. A review should mention the commands that were run, or explicitly state what could not be run. Do not approve or recommend merge while required checks, migrations, secrets, or runtime configuration are unverified.
202
+
203
+ Do not implement or change payment, billing, or subscription logic without explicit user confirmation.
204
+ <!-- END:codex-pr-review-guidelines -->
package/CLAUDE.md CHANGED
@@ -57,10 +57,10 @@ Brand色を差し替え(10行)→ Primitive Layer → Semantic Layer → Bri
57
57
  |---------|------|
58
58
  | **CLAUDE.md**(本ファイル) | 概要・技術スタック・コマンド・クイックスタート(Claude Code用) |
59
59
  | **AGENTS.md** | 同上(Codex用。セッション開始時の読み込み指示・編集後コマンドを明記) |
60
- | **contracts/components.json** | 全110コンポーネントの構造化定義(バリアント・アクセシビリティ要件) |
60
+ | **contracts/components.json** | 全112コンポーネントの構造化定義(バリアント・アクセシビリティ要件) |
61
61
  | **contracts/rules.json** | 禁止パターン32件・AIアンチパターン10件・アクセシビリティ要件 |
62
62
  | **tokens.json** | カラー・スペーシング・シャドウトークンの機械可読定義 |
63
- | **src/components/COMPONENT_LOOKUP.md** | 全110コンポーネントのバリアント・インポートパス一覧(自動生成) |
63
+ | **src/components/COMPONENT_LOOKUP.md** | 全112コンポーネントのバリアント・インポートパス一覧(自動生成) |
64
64
  | **DESIGN.md** | AI エージェント向け視覚言語サマリ(トークン+意図・voice・motion) |
65
65
 
66
66
  **セッション開始時 / コードを書く前に必ず読む:**
@@ -78,12 +78,12 @@ Brand色を差し替え(10行)→ Primitive Layer → Semantic Layer → Bri
78
78
  ```
79
79
  src/
80
80
  ├── components/
81
- │ ├── ui/ # 汎用UIコンポーネント 55
81
+ │ ├── ui/ # 汎用UIコンポーネント 56
82
82
  │ ├── patterns/
83
83
  │ │ ├── commerce/ # EC系 11個
84
84
  │ │ ├── admin/ # 管理画面系 8個
85
85
  │ │ ├── shells/ # レイアウトシェル 3個
86
- │ │ └── ... # 汎用パターン 33
86
+ │ │ └── ... # 汎用パターン 34
87
87
  │ └── icons/
88
88
  ├── styles/
89
89
  │ ├── primitive.css # Layer 1: 原色パレット
@@ -91,7 +91,7 @@ src/
91
91
  │ └── typography.css # typo-* ユーティリティ 17クラス
92
92
  ├── themes/ # default / orange / green / violet / blue
93
93
  ├── preset.css # 外部プロジェクト向けプリセット
94
- └── index.ts # Public API(110コンポーネント)
94
+ └── index.ts # Public API(112コンポーネント)
95
95
  ```
96
96
 
97
97
  ---
package/PUBLISHING.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  `ksk-design-system` のリリース・配布手順。
4
4
 
5
- > **配布方式**: このパッケージは npm レジストリには公開しない。
6
- > `npm pack` で生成した tgz を各消費リポジトリの `vendor/` に置き、
7
- > `package.json` から `file:vendor/ksk-design-system-X.Y.Z.tgz` で参照する **vendoring 方式**。
5
+ > **配布方式**: v1.36.0 以降は npm レジストリ経由で配布する。
6
+ > `npm publish --access public` で公開し、各消費リポジトリの
7
+ > `package.json` `ksk-design-system@X.Y.Z` を参照する。
8
8
  > 消費リポ: belle-todo / trip_todo / ninshin-todo / yokoku-app / pawly(いずれも `~/LocalDev/` 直下)。
9
9
 
10
10
  ## 前提
@@ -23,9 +23,10 @@ bash scripts/release.sh minor # patch / minor / major / x.y.z
23
23
  1. `git diff --quiet` & main ブランチチェック(曜日チェック)
24
24
  2. `npm run check`
25
25
  3. `npm version <level>`(tag 切り)
26
- 4. `npm pack`(新名 tgz 生成)
27
- 5. `git push origin main --tags`
28
- 6. `bash scripts/bump-consumers.sh <version>`(5 リポへ PR 自動作成)
26
+ 4. `npm pack`(prepack `dist/` を生成し、中身を検証)
27
+ 5. `npm publish --access public`
28
+ 6. `git push origin main --tags`
29
+ 7. `bash scripts/update-consumers.sh <version>`(5 リポへ PR 自動作成)
29
30
 
30
31
  > v1.35.0 で旧名 `@ksk/design-system` 互換 tgz の生成は廃止。
31
32
  > 消費5リポ + todo-shared が新名 `ksk-design-system` に移行済。
@@ -61,14 +62,15 @@ npm version major
61
62
  `npm version` が自動で `package.json` を更新し、`v1.16.0` タグを切る。
62
63
  `dist/` の再ビルド・コミットはこの version bump のタイミングでのみ行う。
63
64
 
64
- ### 3. tgz 生成
65
+ ### 3. pack / publish
65
66
 
66
67
  ```bash
67
- npm pack
68
+ npm pack --dry-run
69
+ npm publish --access public
68
70
  ```
69
71
 
70
- `prepack` フックで `npm run build:lib` が自動実行され、リポ直下に
71
- `ksk-design-system-X.Y.Z.tgz` が生成される。
72
+ `prepack` フックで `npm run build:lib` が自動実行され、公開パッケージに入る
73
+ `dist/` / `contracts/` / `tokens.json` / docs の中身が更新される。
72
74
 
73
75
  中身を確認したい場合:
74
76
 
@@ -98,18 +100,16 @@ git push origin main --tags
98
100
 
99
101
  ```bash
100
102
  # 全リポ一括
101
- bash scripts/bump-consumers.sh 1.16.0
103
+ bash scripts/update-consumers.sh 1.16.0
102
104
 
103
105
  # 特定リポのみ
104
- bash scripts/bump-consumers.sh 1.16.0 belle-todo pawly
106
+ bash scripts/update-consumers.sh 1.16.0 belle-todo pawly
105
107
  ```
106
108
 
107
- 各消費リポで `chore/bump-ds-<version>` ブランチを切り、tgz `vendor/` 配置・
108
- `package.json` の参照書換・`npm install`・commit・push・PR 作成まで自動で行う。
109
+ 各消費リポで `chore/bump-ds-<version>` ブランチを切り、`package.json`
110
+ `ksk-design-system` 参照書換・`npm install`・commit・push・PR 作成まで自動で行う。
109
111
  失敗したリポはスキップされ最後にまとめて報告されるので、個別にリトライする。
110
112
 
111
- 過去版の tgz は `vendor/` に残す運用(ロールバックを git revert だけで済ませるため)。
112
-
113
113
  ### 6. PR マージ
114
114
 
115
115
  各消費リポの PR で CI が green なことを確認してマージ。
@@ -125,9 +125,9 @@ bash scripts/bump-consumers.sh 1.16.0 belle-todo pawly
125
125
  git commit -m "fix: 重大なバグの説明"
126
126
 
127
127
  npm version patch
128
- npm pack
128
+ npm publish --access public
129
129
  git push origin main --tags
130
- bash scripts/bump-consumers.sh <version> <影響リポ...>
130
+ bash scripts/update-consumers.sh <version> <影響リポ...>
131
131
  ```
132
132
 
133
133
  修正コミットの背景・影響範囲を `RELEASE.md` の「ホットフィックス履歴」セクションに必ず追記。
@@ -148,13 +148,13 @@ bash scripts/bump-consumers.sh <version> <影響リポ...>
148
148
  ## 注意
149
149
 
150
150
  - 配布前に必ず `npm pack --dry-run` で中身確認
151
+ - npm registry 公開には `npm login` 済みであること
151
152
  - `package.json#exports` を変更したら必ず利用側プロジェクトでの import を試す
152
153
  - 金曜午後のリリースは厳禁(週末に障害対応できない)
153
154
  - メジャーリリースは月初の月曜が望ましい(フィードバック収集期間が取れる)
154
155
 
155
156
  ## npm 公開について
156
157
 
157
- 過去にタグ push npm publish する GitHub Actions(`publish.yml`)が存在したが、
158
- 実際の配布が vendoring 方式であり NPM_TOKEN も未設定で失敗し続けていたため削除した。
159
- 将来 npm レジストリ公開に切り替える場合は、NPM_TOKEN の Secrets 登録と
160
- workflow の再作成をセットで行うこと。
158
+ v1.36.0 以降は npm registry 経由配布。GitHub Actions による自動 publish はなく、
159
+ ローカルの `npm login` 済み環境から `scripts/release.sh` で公開する。
160
+ CI/CD に戻す場合は、NPM_TOKEN の Secrets 登録と workflow の再作成をセットで行うこと。
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **🔗 ライブ Storybook → https://ksk-design-system.vercel.app**
6
6
 
7
- 110 コンポーネントを実際に操作・確認できます。
7
+ 115 コンポーネントを実際に操作・確認できます。
8
8
 
9
9
  ---
10
10
 
@@ -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
- - **110 + 91 コンポーネント** — Web 110(UI 55 / EC 11 / 管理 8 / シェル 3 / パターン 33)+ React Native 91
17
+ - **115 + 91 コンポーネント** — Web 115(UI 56 / EC 11 / 管理 8 / シェル 3 / パターン 37)+ React Native 91
18
18
  - **iOS 26 Liquid Glass 対応** — RN 側 `GlassView` + `Button variant="glass"`、Web 側 `.glass` CSS マテリアル
19
19
 
20
20
  ## 🎨 テーマ
@@ -54,6 +54,44 @@ import { Button, Card, Input, FormField } from "ksk-design-system"
54
54
 
55
55
  新規クライアント案件では、テーマファイルで `--Primitive-Brand-500` などブランドカラーの 10 行を定義するだけで、全コンポーネントがそのブランドカラーで動作します。
56
56
 
57
+ ### Media overlay utilities
58
+
59
+ 動画・写真の上に文字や操作を置く場合は、`--Text-on-Media` と `.text-on-media` / `.text-on-media-secondary`、上下の `.media-scrim-top` / `.media-scrim-bottom` を使います。TikTok / Reels 型の操作群は `MediaActionCluster` が glass ボタン、ラベル、safe-area anchor、idle auto-hide をまとめて扱います。
60
+
61
+ ```tsx
62
+ import { MediaActionCluster } from "ksk-design-system"
63
+
64
+ <div className="relative">
65
+ <div className="absolute inset-x-0 top-0 h-32 media-scrim-top" />
66
+ <h1 className="text-on-media">メディア上のタイトル</h1>
67
+ <MediaActionCluster
68
+ anchor="bottom-right"
69
+ items={[
70
+ { label: "いいね", icon: <HeartIcon />, active: true },
71
+ { label: "シェア", icon: <ShareIcon /> },
72
+ ]}
73
+ />
74
+ </div>
75
+ ```
76
+
77
+ ### Fullscreen screen primitives
78
+
79
+ フルスクリーン画面は `Screen` で固定高 root、本文の内部スクロール、下部 CTA の safe-area 余白をまとめて扱います。写真背景の入口画面やオンボーディングスライドは `PhotoHero` と `typo-on-image` を組み合わせます。
80
+
81
+ ```tsx
82
+ import { Screen, PhotoHero, Button } from "ksk-design-system"
83
+
84
+ <Screen scroll={false} padding="none">
85
+ <PhotoHero src="/onboarding/slide-1.jpg" overlay="dark">
86
+ <PhotoHero.Eyebrow>さあ、始めよう</PhotoHero.Eyebrow>
87
+ <PhotoHero.Title>ふたりの準備、ここから。</PhotoHero.Title>
88
+ <PhotoHero.Actions>
89
+ <Button variant="glass-inverse" className="w-full">はじめる</Button>
90
+ </PhotoHero.Actions>
91
+ </PhotoHero>
92
+ </Screen>
93
+ ```
94
+
57
95
  ### React Native / Expo
58
96
 
59
97
  `ksk-design-system/native/ui` から直接 RN 用コンポーネント(91 個)を import できます。iOS 26 の **Liquid Glass** にも対応:
package/RELEASE.md CHANGED
@@ -19,9 +19,9 @@
19
19
  ```
20
20
  T-4w 破壊変更内容の確定 → MIGRATION.md 草案作成
21
21
  T-3w scripts/codemod/vX-to-vY.mjs を実装、利用側で dry-run 検証
22
- T-2w RC 版の tgz を 1〜2 の消費リポへ先行配布、動作確認
22
+ T-2w RC 版を 1〜2 の消費リポへ先行配布、動作確認
23
23
  T-1w feedback 反映、ESLint 旧 API ルールを "error" に昇格
24
- T-0 全消費リポへ配布 (bump-consumers.sh)、リリースノート公開、社内告知
24
+ T-0 全消費リポへ配布 (update-consumers.sh)、リリースノート公開、社内告知
25
25
  T+1w 次の patch で旧 API を完全削除
26
26
  ```
27
27
 
@@ -31,7 +31,7 @@ T+1w 次の patch で旧 API を完全削除
31
31
 
32
32
  1. main で直接修正(or hotfix ブランチ)
33
33
  2. `npm version patch`
34
- 3. `npm pack` → `bash scripts/bump-consumers.sh <version> <影響リポ...>`
34
+ 3. `npm publish --access public` → `bash scripts/update-consumers.sh <version> <影響リポ...>`
35
35
  4. 影響範囲・原因・修正内容を「ホットフィックス履歴」に記録
36
36
  5. ポストモーテムを Issue / wiki に書く
37
37
 
@@ -63,7 +63,7 @@ GitHub Releases にコピペできるテンプレ:
63
63
  - ...
64
64
 
65
65
  ### Migration
66
- - 破壊変更なし。vendor tgz の差し替え PR(bump-consumers.sh が自動作成)をマージするだけで OK。
66
+ - 破壊変更なし。npm package version の更新 PR(update-consumers.sh が自動作成)をマージするだけで OK。
67
67
  ```
68
68
 
69
69
  破壊変更がある場合は必ず:
@@ -5,18 +5,18 @@
5
5
  "description": "全コンポーネントの構造化定義。バリアント・アクセシビリティ要件・使用ルールを機械可読形式で管理。",
6
6
  "counts": {
7
7
  "ui": 56,
8
- "patterns": 33,
8
+ "patterns": 37,
9
9
  "commerce": 11,
10
10
  "admin": 8,
11
11
  "shells": 3,
12
- "total": 111
12
+ "total": 115
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。アイコン単独はiconサイズ群。",
19
+ "description": "アクションボタン。最重要CTAにはdefault、Liquid Glass背景にはglass、暗背景上のLiquid Glassにはglass-inverse。アイコン単独はiconサイズ群。",
20
20
  "variants": [
21
21
  "default",
22
22
  "secondary",
@@ -26,6 +26,7 @@
26
26
  "link",
27
27
  "destructive",
28
28
  "glass",
29
+ "glass-inverse",
29
30
  "accent",
30
31
  "inverse",
31
32
  "ghost-inverse"
@@ -50,6 +51,7 @@
50
51
  "Must use <Button> not <button>",
51
52
  "Icon-only buttons require aria-label",
52
53
  "variant=glass は背景がグラデーション/写真の場合のみ使用",
54
+ "variant=glass-inverse は暗い写真・動画・濃色面上の Liquid Glass CTA 専用",
53
55
  "variant=inverse / ghost-inverse は暗背景・ヒーローセクション専用",
54
56
  "size=hero は hero / final-CTA 専用(ピル型 56px)"
55
57
  ]
@@ -208,7 +210,7 @@
208
210
  {
209
211
  "name": "Dialog",
210
212
  "path": "src/components/ui/dialog.tsx",
211
- "description": "タスク面用の中央モーダル(role=dialog)。フォーム入力・絞り込み等の「作業する」面に使う。削除/送信等の割り込み確認は ConfirmDialog / AlertDialog(role=alertdialog) を使い分ける。モバイルは ResponsiveDialog 推奨。position=\"top\" でモバイル向け上部寄せ。",
213
+ "description": "タスク面用の中央モーダル(role=dialog)。フォーム入力・絞り込み等の「作業する」面に使う。削除/送信等の割り込み確認は ConfirmDialog / AlertDialog(role=alertdialog) を使い分ける。モバイルは ResponsiveDialog 推奨。position=\"top\" でモバイル向け上部寄せ。autoFocus / restoreFocusOnClose / closeOnEsc / bodyScrollLock でフォーカス・スクロール挙動を制御可能。",
212
214
  "subcomponents": [
213
215
  "DialogTrigger",
214
216
  "DialogContent",
@@ -221,13 +223,15 @@
221
223
  "rules": [
222
224
  "rounded-2xl (16px)",
223
225
  "shadow-[var(--shadow-dialog)]",
224
- "p-6 padding"
226
+ "p-6 padding",
227
+ "autoFocus は first-input / title / ref / false を指定可能",
228
+ "description prop は sr-only description を自動生成する"
225
229
  ]
226
230
  },
227
231
  {
228
232
  "name": "Sheet",
229
233
  "path": "src/components/ui/sheet.tsx",
230
- "description": "サイドパネル・ボトムシート。フィルター・メニュー・補助入力に使用。モーダルより軽いコンテキストに。snapPoints でスナップ式、swipeToClose で下スワイプ閉じを有効化。",
234
+ "description": "サイドパネル・ボトムシート。フィルター・メニュー・補助入力に使用。モーダルより軽いコンテキストに。snapPoints でスナップ式、swipeToClose で下スワイプ閉じを有効化。autoFocus / restoreFocusOnClose / closeOnEsc / bodyScrollLock でフォーカス・スクロール挙動を制御可能。",
231
235
  "subcomponents": [
232
236
  "SheetTrigger",
233
237
  "SheetContent",
@@ -240,7 +244,10 @@
240
244
  ],
241
245
  "rules": [
242
246
  "Side panel, not modal",
243
- "swipeToClose は side=bottom / bottom-glass のみ有効"
247
+ "swipeToClose は side=bottom / bottom-glass のみ有効",
248
+ "swipeToClose mode は max-h-[90dvh] を自動付与し、viewport 外にはみ出さない",
249
+ "autoFocus は first-input / title / ref / false を指定可能",
250
+ "description prop は sr-only description を自動生成する"
244
251
  ],
245
252
  "variants": {
246
253
  "side": [
@@ -539,11 +546,12 @@
539
546
  {
540
547
  "name": "SubNav",
541
548
  "path": "src/components/ui/sub-nav.tsx",
542
- "description": "横スクロール サブナビゲーション。underline / chip バリアント。アクティブ項目の自動スクロール対応。",
549
+ "description": "横スクロール サブナビゲーション。underline / chip バリアント。アクティブ項目の自動スクロール、item description/title の補足説明対応。",
543
550
  "variants": [],
544
551
  "accessibility": [
545
552
  "role=\"tablist\"",
546
- "aria-selected on active tab"
553
+ "aria-selected on active tab",
554
+ "description/title は title と aria-describedby に反映"
547
555
  ],
548
556
  "rules": []
549
557
  },
@@ -835,7 +843,12 @@
835
843
  {
836
844
  "name": "EmptyState",
837
845
  "path": "src/components/patterns/empty-state.tsx",
838
- "description": "空状態プレースホルダー。データゼロ時のUX向上に使用。アクションまたは説明文を必ず含める。",
846
+ "description": "空状態プレースホルダー。データゼロ時のUX向上に使用。アクションまたは説明文を必ず含める。size=default / compact / inline に対応。",
847
+ "sizes": [
848
+ "default",
849
+ "compact",
850
+ "inline"
851
+ ],
839
852
  "rules": [
840
853
  "Always include an action or explanation"
841
854
  ]
@@ -924,7 +937,8 @@
924
937
  "path": "src/components/patterns/form-field.tsx",
925
938
  "description": "フォームフィールドラッパー。Label+Input+エラーメッセージをセットで管理。バリデーション表示付き。",
926
939
  "rules": [
927
- "Label + Input + error message as unit"
940
+ "Label + Input + error message as unit",
941
+ "required asterisk は Brand 色。Caution 色は入力エラーとの混同を避ける"
928
942
  ]
929
943
  },
930
944
  {
@@ -992,6 +1006,26 @@
992
1006
  "Use ConfirmDialog not custom Dialog for confirmation flows"
993
1007
  ]
994
1008
  },
1009
+ {
1010
+ "name": "Celebration",
1011
+ "path": "src/components/patterns/celebration.tsx",
1012
+ "description": "マイルストーン達成・大目標達成などの祝い演出。confetti / emoji 表示、prefers-reduced-motion 対応。",
1013
+ "variants": [
1014
+ "confetti",
1015
+ "emoji",
1016
+ "both",
1017
+ "none"
1018
+ ],
1019
+ "accessibility": [
1020
+ "role=status",
1021
+ "aria-live=polite",
1022
+ "prefers-reduced-motion で confetti を抑制"
1023
+ ],
1024
+ "rules": [
1025
+ "一時的な達成演出に使用",
1026
+ "ローディングや常時表示の装飾用途には使わない"
1027
+ ]
1028
+ },
995
1029
  {
996
1030
  "name": "BottomSheetForm",
997
1031
  "path": "src/components/patterns/bottom-sheet-form.tsx",
@@ -1076,7 +1110,95 @@
1076
1110
  {
1077
1111
  "name": "ShareButtons",
1078
1112
  "path": "src/components/patterns/share-buttons.tsx",
1079
- "description": "シェアボタン群。LINE / Twitter / Facebook などのSNSシェアボタンをまとめて表示。"
1113
+ "description": "シェアボタン群。LINE / X / Facebook / Instagram / Email / WhatsApp / Telegram / Copy に対応し、region で既定 providers を切替可能。",
1114
+ "features": [
1115
+ "providers",
1116
+ "region defaults",
1117
+ "copy fallback",
1118
+ "circle / inline layout",
1119
+ "onShare tracking"
1120
+ ],
1121
+ "rules": [
1122
+ "providers を渡すと明示順で表示",
1123
+ "region=jp は line/x/copy、region=us は whatsapp/x/copy を既定にする",
1124
+ "provider 別の計測には onShare(provider) を使う。copy 完了時だけ必要なら onCopy も併用する"
1125
+ ]
1126
+ },
1127
+ {
1128
+ "name": "MediaActionCluster",
1129
+ "path": "src/components/patterns/media-action-cluster.tsx",
1130
+ "description": "動画・写真などのメディア上に重ねる icon + label のアクションクラスタ。TikTok/Reels 型の縦・横操作群、safe-area anchor、idle auto-hide に対応。",
1131
+ "features": [
1132
+ "media overlay",
1133
+ "icon + label actions",
1134
+ "vertical / horizontal / auto orientation",
1135
+ "safe-area anchor",
1136
+ "idle auto-hide",
1137
+ "glass buttons",
1138
+ "text-on-media"
1139
+ ],
1140
+ "accessibility": [
1141
+ "role=group",
1142
+ "aria-label",
1143
+ "aria-pressed for active button items",
1144
+ "44px touch target"
1145
+ ],
1146
+ "rules": [
1147
+ "メディア上の操作群に使用する。通常画面の下部 CTA には StickyActionBar を使う",
1148
+ "items[].label は必須。アイコン単独にしない",
1149
+ "暗い写真・動画・濃色面上では glass-inverse / text-on-media を維持する",
1150
+ "autoHideMs=null で idle fade を無効化できる"
1151
+ ]
1152
+ },
1153
+ {
1154
+ "name": "Screen",
1155
+ "path": "src/components/patterns/screen.tsx",
1156
+ "description": "固定高ビューポート、本文だけの内部スクロール、下部固定 CTA の safe-area 余白を内包するフルスクリーン画面骨組み。",
1157
+ "features": [
1158
+ "100dvh fixed viewport",
1159
+ "internal scroll body",
1160
+ "min-h-0 guard",
1161
+ "fixed header slot",
1162
+ "fixed footer slot",
1163
+ "safe-area bottom"
1164
+ ],
1165
+ "accessibility": [
1166
+ "main landmark",
1167
+ "footer landmark when footer is present"
1168
+ ],
1169
+ "rules": [
1170
+ "body スクロールを使わないアプリのフルスクリーン画面に使う",
1171
+ "本文が長い画面では scroll=true のまま使う",
1172
+ "写真ヒーローなど 1 画面固定では scroll=false と padding=none を組み合わせる",
1173
+ "footer には主要 CTA を置き、safe-area 余白を消費側で再実装しない"
1174
+ ]
1175
+ },
1176
+ {
1177
+ "name": "PhotoHero",
1178
+ "path": "src/components/patterns/photo-hero.tsx",
1179
+ "description": "写真背景、暗化オーバーレイ、下詰め/中央寄せコンテンツ、写真上の可読性 typography をまとめるフルスクリーンヒーロー。",
1180
+ "features": [
1181
+ "photo background",
1182
+ "medium / dark overlay",
1183
+ "bottom / center align",
1184
+ "on-image typography",
1185
+ "compound slots"
1186
+ ],
1187
+ "subcomponents": [
1188
+ "PhotoHero.Eyebrow",
1189
+ "PhotoHero.Title",
1190
+ "PhotoHero.Body",
1191
+ "PhotoHero.Actions"
1192
+ ],
1193
+ "accessibility": [
1194
+ "decorative image defaults to alt empty",
1195
+ "alt can be provided when the image is meaningful"
1196
+ ],
1197
+ "rules": [
1198
+ "オンボーディング入口・写真スライド・メディア上 CTA に使う",
1199
+ "写真上の CTA には Button variant=glass-inverse / ghost-inverse を使う",
1200
+ "本文が長い場合は Screen scroll=true 側で内部スクロールを確保する"
1201
+ ]
1080
1202
  },
1081
1203
  {
1082
1204
  "name": "FileUpload",
@@ -1332,24 +1454,29 @@
1332
1454
  {
1333
1455
  "name": "DataTable",
1334
1456
  "path": "src/components/patterns/admin/data-table.tsx",
1335
- "description": "管理画面データテーブル。ソート・チェックボックス・行アクション・インライン編集・ドラッグ並び替え対応。",
1457
+ "description": "管理画面データテーブル。rows/columns の高水準 API と、既存サブコンポーネントによる手組み API の両方に対応。ソート・チェックボックス・行アクション・インライン編集・ドラッグ並び替え・セクション行対応。",
1336
1458
  "features": [
1459
+ "rows-columns-api",
1337
1460
  "sort",
1338
1461
  "checkbox",
1339
1462
  "actions",
1340
1463
  "inline-edit",
1341
- "drag"
1464
+ "drag",
1465
+ "section-row"
1342
1466
  ],
1343
1467
  "rules": [
1344
- "20+ sub-components. Use DataTableHead, DataTableRow, DataTableCell."
1468
+ "rows/columns API は最短実装向け",
1469
+ "複雑なセル構成は DataTableHead, DataTableRow, DataTableCell などのサブコンポーネントを使う"
1345
1470
  ]
1346
1471
  },
1347
1472
  {
1348
1473
  "name": "KebabMenu",
1349
1474
  "path": "src/components/patterns/admin/kebab-menu.tsx",
1350
- "description": "テーブル行アクションメニュー(⋮ボタン)。編集・削除・複製等の行単位操作に使用。",
1475
+ "description": "テーブル行アクションメニュー(⋮ボタン)。description / shortcut / disabled / separator / destructive item に対応。",
1351
1476
  "rules": [
1352
- "For table row actions only"
1477
+ "For table row actions only",
1478
+ "description は補足説明、shortcut は右側表示",
1479
+ "{ type: \"separator\" } で区切り線を挿入"
1353
1480
  ]
1354
1481
  },
1355
1482
  {
@@ -1,4 +1,4 @@
1
- import { b as o } from "./server-variants-Dr_V3bDI.js";
1
+ import { b as o } from "./server-variants-qSBVrkGA.js";
2
2
  export {
3
3
  o as buttonVariants
4
4
  };