ksk-design-system 2.6.2 → 2.6.4

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.
@@ -0,0 +1,73 @@
1
+ {
2
+ "description": "迷いやすい部品の使い分け。基本用途とルールはcomponents.jsonを参照する。",
3
+ "groups": [
4
+ {
5
+ "names": [
6
+ "Sheet",
7
+ "ResponsiveOverlayFrame",
8
+ "ResponsiveDialog"
9
+ ],
10
+ "difference": "Sheetは幅に追従するシート。ResponsiveDialogとResponsiveOverlayFrameの組み合わせはモバイルのシートをPCでは中央ダイアログに切り替える。シートのままでよい場合はSheetを選ぶ。",
11
+ "avoid": "削除など取り消せない操作の確認にはAlertDialogを使う。"
12
+ },
13
+ {
14
+ "names": [
15
+ "ChipSelector",
16
+ "PillToggle",
17
+ "Select",
18
+ "FilterPill",
19
+ "FilterChip"
20
+ ],
21
+ "difference": "ChipSelectorは複数または単一の選択肢を並べる。PillToggleは少数の値を単一選択する。Selectは候補を開いて選ぶ。FilterPillは条件設定パネルを開く操作と解除、FilterChipは適用中の条件の表示に使う。",
22
+ "avoid": "選択と画面遷移を混ぜない。画面の切り替えにはTabs、ページ移動にはナビゲーションを使う。"
23
+ },
24
+ {
25
+ "names": [
26
+ "FormField",
27
+ "RhfFormField"
28
+ ],
29
+ "difference": "patterns/form-fieldのFormFieldはラベル・説明・エラーを入力に関連付ける。RhfFormFieldはreact-hook-formのController連携用。単純なフォームでは前者を使う。",
30
+ "avoid": "react-hook-formを使わないフォームにRhfFormFieldを導入しない。"
31
+ },
32
+ {
33
+ "names": [
34
+ "Button",
35
+ "IconButton",
36
+ "ActionTile",
37
+ "QuickActionGrid"
38
+ ],
39
+ "difference": "Buttonは文言で操作を示す。IconButtonは意味が明確な短い操作に使いアクセシブルな名前を付ける。ActionTileは説明や選択状態を持つタイル、QuickActionGridはその配置に使う。",
40
+ "avoid": "単なる説明を押せるボタンにしない。複数の値選択は専用の選択コンポーネントを使う。"
41
+ },
42
+ {
43
+ "names": [
44
+ "EmptyState",
45
+ "ErrorState",
46
+ "Skeleton",
47
+ "Spinner"
48
+ ],
49
+ "difference": "取得成功で0件ならEmptyState、取得失敗ならErrorStateと再試行。Skeletonは内容の形が分かる読み込み、Spinnerは処理の進行中を示す。",
50
+ "avoid": "取得に失敗した状態を「0件」と表示しない。"
51
+ },
52
+ {
53
+ "names": [
54
+ "Input",
55
+ "Textarea",
56
+ "AutoGrowTextarea",
57
+ "NumberInput",
58
+ "DateField"
59
+ ],
60
+ "difference": "Inputは短い自由入力、Textareaは複数行、AutoGrowTextareaは内容に応じて高さが伸びる複数行入力です。数値の増減にはNumberInput、日付にはDateFieldを使います。ラベル・説明・エラーはFormFieldで関連付けます。",
61
+ "avoid": "決まった候補から選ぶ場合はSelectやRadioGroupを使います。長い文章の入力を1行のInputに押し込めず、複数行の入力欄を使います。"
62
+ },
63
+ {
64
+ "names": [
65
+ "SubNav",
66
+ "SectionNav",
67
+ "Tabs"
68
+ ],
69
+ "difference": "TabsとSubNavは同じ画面内の表示内容を切り替えるための部品です。SubNavは横スクロールする項目列、Tabsは項目と対応する表示領域を組み合わせます。SectionNavは同じページ内の見出しへ移動する目次です。",
70
+ "avoid": "ページ内の見出しへスクロールするだけの操作をタブ切り替えとして実装しないでください。別ページへ移動する場合はリンクを使います。"
71
+ }
72
+ ]
73
+ }
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "meta": {
3
3
  "name": "KSK Design System — Component Contracts",
4
- "version": "2.6.2",
4
+ "version": "2.6.4",
5
5
  "description": "全コンポーネントの構造化定義。バリアント・アクセシビリティ要件・使用ルールを機械可読形式で管理。",
6
6
  "counts": {
7
- "ui": 68,
7
+ "ui": 69,
8
8
  "patterns": 61,
9
9
  "commerce": 12,
10
10
  "admin": 8,
11
11
  "shells": 3,
12
- "total": 152
12
+ "total": 153
13
13
  },
14
14
  "exportNaming": {
15
15
  "_doc": "contracts の name が `import { name } from \"ksk-design-system\"` で解決できるかを示す。__tests__/contracts-export-integrity.test.ts が src/index.ts の実 export と突き合わせて固定する。",
@@ -288,6 +288,9 @@
288
288
  "accessibility": [
289
289
  "Must pair with <Label> for each item",
290
290
  "RadioGroupItem は見た目 20px の円のまま ::before で 44x44px の当たり判定を内蔵する。消費側で [role=\"radio\"] のグローバル寸法上書きを追加しない(issue #470)"
291
+ ],
292
+ "rules": [
293
+ "Native は単体 Radio(ksk-design-system/native/ui)を共用。selected/onChange/size/disabled/decorative を持つ。decorative は親 radio の操作と読み上げに委ねる。単体使用では accessibilityLabel を指定し、onChange は常に true(排他制御は親)。"
291
294
  ]
292
295
  },
293
296
  {
@@ -1217,6 +1220,29 @@
1217
1220
  "最大幅・中央寄せ・左右 gutter は内側の Container に委ねる",
1218
1221
  "footer の全幅背景帯には as=\"footer\" を使える"
1219
1222
  ]
1223
+ },
1224
+ {
1225
+ "name": "SemanticIcon",
1226
+ "description": "用途から選ぶ装飾アイコン。情報i・警告!・枠なし選択tickを区別。NativeはSVG依存なしのView描画で同じ意味を提供。",
1227
+ "variants": [
1228
+ "selected",
1229
+ "selectedSquare",
1230
+ "success",
1231
+ "close",
1232
+ "info",
1233
+ "warning"
1234
+ ],
1235
+ "rules": [
1236
+ "装飾は既定で読み上げない。単独の情報画像にはaria-labelを指定する。",
1237
+ "アイコンのみの操作はButton / native IconButtonに操作名を付ける。",
1238
+ "Nativeの警告は円形の感嘆符、Webはiconsax Danger。意味は同一だが描画素材に合わせて器の形が異なる。"
1239
+ ],
1240
+ "path": "src/components/ui/semantic-icon.tsx",
1241
+ "props": {
1242
+ "name": "selected | selectedSquare | success | close | info | warning — 意味を必ず指定",
1243
+ "size": "number | string (Web), number (Native) — 既定24",
1244
+ "accessibilityLabel": "string — 単独の情報画像に付ける名前。Webはaria-labelを優先"
1245
+ }
1220
1246
  }
1221
1247
  ],
1222
1248
  "patterns": [
@@ -1338,7 +1364,8 @@
1338
1364
  "leftSlot 幅にインデントされない全幅の下段要素(進捗バー等)は footerSlot、title 列の内側に置くものは bottomSlot",
1339
1365
  "押せる行(href / onClick)の中に削除ボタン等の別操作を置く場合は secondaryAction を使う。rightSlot に button を入れると button の入れ子で不正な HTML になる",
1340
1366
  "secondaryAction 指定時はルートが div になり、行全体を覆う不可視の a/button(stretched link)+ 副アクションの兄弟配置に切り替わる",
1341
- "バッジ・日時・シェブロンなど押せない表示は secondaryAction ではなく rightSlot"
1367
+ "バッジ・日時・シェブロンなど押せない表示は secondaryAction ではなく rightSlot",
1368
+ "Native: titleTone / descriptionTone は default | accent | caution(既定 default)。文字列にのみ DS typography と semantic text 色を適用し、ReactNode は従来通り無加工。divider は none(既定)| inset | full。inset は density の左右 padding に追随し、leading 幅は含めない。footerSlot がある場合も行全体の下端。外置き Separator の full-bleed 既定は変更しない。"
1342
1369
  ]
1343
1370
  },
1344
1371
  {
@@ -5,6 +5,21 @@
5
5
  "dsIssue": 531,
6
6
  "consumerIssue": "https://github.com/ekusiek716/trip-todo/issues/168",
7
7
  "fixPr": 532
8
+ },
9
+ {
10
+ "dsIssue": 571,
11
+ "consumerIssue": "https://github.com/ekusiek716/exam-kit/issues/1094",
12
+ "fixPr": 574
13
+ },
14
+ {
15
+ "dsIssue": 572,
16
+ "consumerIssue": "https://github.com/ekusiek716/exam-kit/issues/1088",
17
+ "fixPr": 574
18
+ },
19
+ {
20
+ "dsIssue": 573,
21
+ "consumerIssue": "https://github.com/ekusiek716/exam-kit/issues/1089",
22
+ "fixPr": 574
8
23
  }
9
24
  ]
10
25
  }
@@ -0,0 +1,29 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "policy": "Record only observations actually performed on the exact revision and stated OS, including failed checks. Bundling, typechecks and React Native Web are not device verification.",
4
+ "checks": [
5
+ { "id": "safe-area", "components": ["Sheet", "Screen"], "procedure": "Open sheet at both snap points; rotate; confirm title and footer avoid notch and home indicator." },
6
+ { "id": "keyboard", "components": ["Input", "KeyboardAwareSheetFooter", "Sheet"], "procedure": "Focus first/last input, enter Japanese, scroll and dismiss keyboard; verify focused field and submit remain reachable, no double inset." },
7
+ { "id": "font-scale", "components": ["Text", "Button", "Input", "Sheet"], "procedure": "Set OS accessibility text size to largest, reopen app; verify full labels wrap and controls remain reachable." },
8
+ { "id": "sheet-gesture", "components": ["Sheet"], "procedure": "Drag handle between 0.5 and 0.9, scroll inner content, dismiss and reopen five times; ensure no invisible input-blocking modal." },
9
+ { "id": "screen-reader", "components": ["Button", "Input", "Sheet"], "procedure": "Enable VoiceOver/TalkBack; verify names, modal focus, field labels and close action." }
10
+ ],
11
+ "observations": [
12
+ {
13
+ "checkId": "keyboard",
14
+ "components": [
15
+ "Input",
16
+ "KeyboardAwareSheetFooter",
17
+ "Sheet"
18
+ ],
19
+ "platform": "ios",
20
+ "os": "26.5",
21
+ "device": "iPhone 17 Pro Simulator",
22
+ "revision": "906f830c278bcef8703bcc2f4179139eec9b58bb",
23
+ "checkedAt": "2026-09-25T05:12:00Z",
24
+ "status": "failed",
25
+ "evidence": "docs/native-review-2026-09-25.md",
26
+ "notes": "項目1への日本語入力後、ソフトキーボードで保存フッターが隠れた。"
27
+ }
28
+ ]
29
+ }
@@ -149,7 +149,8 @@
149
149
  "--Space-Section-2xl"
150
150
  ],
151
151
  "chip": [
152
- "--Chip-Radius"
152
+ "--Chip-Radius",
153
+ "--Chip-Remove-Width"
153
154
  ],
154
155
  "productTypography": [
155
156
  "--Product-Type-Scale"
@@ -185,6 +186,12 @@
185
186
  ],
186
187
  "toast": [
187
188
  "--Toast-Viewport-Offset-Bottom"
189
+ ],
190
+ "settingsRow": [
191
+ "--Settings-Row-Min-Height",
192
+ "--Settings-Row-Gap",
193
+ "--Settings-Row-Padding-X",
194
+ "--Settings-Row-Padding-Y"
188
195
  ]
189
196
  },
190
197
  "dsVariableNamespaces": [
@@ -212,6 +219,7 @@
212
219
  "--Field-",
213
220
  "--Product-",
214
221
  "--Chip-",
222
+ "--Settings-",
215
223
  "--glass-",
216
224
  "--card-surface",
217
225
  "--Nav-",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "meta": {
3
3
  "name": "KSK Design System — Semantic Token Hex Cache",
4
- "version": "2.6.2",
4
+ "version": "2.6.4",
5
5
  "description": "semantic / semanticDark トークン(var(--Primitive-*) 参照)を実 hex に解決したサイドカー生成物。hex はデフォルト(Blue)テーマでの解決値であり、Brand 系(meta.themeDependentKeys に列挙)はテーマ差し替え(orange/green/violet 等)で実色が変わる。テーマ別の完全解決値は `ksk-design-system/native` エクスポート(バンドル済み native トークンモジュール)の themes を参照。tokens.json 本体のスキーマは変更せず、AI がこのファイルだけで実色を把握できるようにし、primitive 値の変更による semantic 実色のドリフトを --check で機械検出する。",
6
6
  "generatedBy": "scripts/generate-token-hex-cache.mjs",
7
7
  "theme": "default",