ksk-design-system 2.6.3 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/preset.css CHANGED
@@ -7,6 +7,10 @@
7
7
  使い方:
8
8
  @import "ksk-design-system/preset";
9
9
 
10
+ 中身は preset-core.css(トークン・ブリッジ・base layer 等)と
11
+ DS 内部ユーティリティの safelist の 2 つ。DS 部品を 1 つも使わない
12
+ consumer は safelist を除いた `ksk-design-system/preset-core` を使える。
13
+
10
14
  ─── Tailwind CSS v4 の @source 設定(重要) ───────────────────
11
15
  Tailwind v4 はデフォルトで node_modules を走査しません。
12
16
  コンポーネントの Tailwind クラスを検出するため、CSS ファイルに
@@ -14,237 +18,8 @@
14
18
  詳細は CLAUDE.md / README を参照。
15
19
  ============================================================= */
16
20
 
17
- @import "./styles/primitive.css";
18
- /* 角丸の意味別トークン(issue #553)。定義元は styles/radius.css の1箇所で、
19
- product-theme.css からも読み込まれる(個別 subpath 構成の消費側対策)。 */
20
- @import "./styles/radius.css";
21
- /* ページセクション間の縦リズム(issue #560)。定義元は
22
- styles/section-spacing.css の1箇所で、product-theme.css からも読み込まれる
23
- (個別 subpath 構成の消費側対策)。 */
24
- @import "./styles/section-spacing.css";
25
- /* 重なり順(issue #563)。定義元は styles/z-index.css の1箇所で、
26
- product-theme.css からも読み込まれる(個別 subpath 構成の消費側対策)。 */
27
- @import "./styles/z-index.css";
28
- /* 影(issue #563)。定義元は styles/shadow.css の1箇所で、
29
- product-theme.css からも読み込まれる(個別 subpath 構成の消費側対策)。 */
30
- @import "./styles/shadow.css";
31
- @import "./styles/semantic.css";
32
- @import "./styles/categorical.css";
33
- @import "./styles/typography.css";
34
- @import "./styles/glass.css";
35
- @import "./styles/bottom-nav.css";
36
- @import "./styles/motion.css";
37
- @import "./styles/sheet-keyboard.css";
38
- /* プロダクト単位で上書きしてよい寸法・面の公開変数(issue #364)。
39
- 許可リストの正本は contracts/product-theme-overrides.json。 */
40
- @import "./styles/product-theme.css";
21
+ @import "./preset-core.css";
41
22
  /* DS 内部ユーティリティの safelist(自動生成 / issue #258)。
42
- 消費側の @source が無い・パスがずれていても DS のクラス CSS が生成される保険。 */
23
+ 消費側の @source が無い・パスがずれていても DS のクラス CSS が生成される保険。
24
+ 単体では `ksk-design-system/safelist` として読める。 */
43
25
  @import "./styles/source-safelist.css";
44
-
45
- /* ─── Bridge Layer: shadcn/ui 互換マッピング ───
46
-
47
- 命名が 2 系統あるのは意図的な設計。統一しない。
48
-
49
- - `--Surface-Primary` のような **PascalCase-ケバブ** は KSK の semantic 層。
50
- UI を書くときに参照するのは常にこちら(CLAUDE.md のセルフチェック参照)。
51
- - `--primary` / `--muted-foreground` のような **小文字ケバブ** は shadcn/ui
52
- (および Radix ベースの外部コンポーネント)が決め打ちで参照する名前。
53
- shadcn の CLI で追加したコンポーネントや、consumer が別途入れた
54
- shadcn 資産をそのまま動かすための互換レイヤーであり、名前は
55
- shadcn 側の仕様なので KSK 側では変えられない。
56
-
57
- つまり小文字ケバブ側は「外部規約への適合」であって命名の揺れではない。
58
- 新しいトークンを増やすときは PascalCase 側(semantic.css)に足し、
59
- shadcn 互換名が必要な場合だけここで var() でエイリアスすること。 */
60
- :root {
61
- --radius: 0.5rem;
62
-
63
- --background: var(--Surface-Primary);
64
- --foreground: var(--Text-High-Emphasis);
65
-
66
- --card: var(--Surface-Primary);
67
- --card-foreground: var(--Text-High-Emphasis);
68
-
69
- --popover: var(--Surface-Primary);
70
- --popover-foreground: var(--Text-High-Emphasis);
71
-
72
- --primary: var(--Brand-Primary);
73
- --primary-foreground: var(--Text-on-Inverse);
74
-
75
- --secondary: var(--Surface-Secondary);
76
- --secondary-foreground: var(--Text-High-Emphasis);
77
-
78
- --muted: var(--Surface-Tertiary);
79
- --muted-foreground: var(--Text-Low-Emphasis);
80
-
81
- --accent: var(--Surface-Secondary);
82
- --accent-foreground: var(--Text-High-Emphasis);
83
-
84
- --destructive: var(--Caution-Base);
85
- --destructive-foreground: var(--Text-on-Inverse);
86
-
87
- --border: var(--Border-Medium-Emphasis);
88
- --input: var(--Border-Medium-Emphasis);
89
- --ring: var(--Focus-High-Emphasis);
90
-
91
- --sidebar-background: var(--Surface-Primary);
92
- --sidebar-foreground: var(--Text-High-Emphasis);
93
- --sidebar-primary: var(--Brand-Primary);
94
- --sidebar-primary-foreground: var(--Text-on-Inverse);
95
- --sidebar-accent: var(--Surface-Accent-Primary-Light);
96
- --sidebar-accent-foreground: var(--Text-Accent-Primary);
97
- --sidebar-border: var(--Border-Low-Emphasis);
98
- --sidebar-ring: var(--Focus-High-Emphasis);
99
- }
100
-
101
- .dark {
102
- --background: var(--Surface-Primary);
103
- --foreground: var(--Text-High-Emphasis);
104
- --card: var(--Surface-Secondary);
105
- --card-foreground: var(--Text-High-Emphasis);
106
- --popover: var(--Surface-Secondary);
107
- --popover-foreground: var(--Text-High-Emphasis);
108
- --primary: var(--Brand-Primary);
109
- --primary-foreground: var(--Text-on-Inverse);
110
- --secondary: var(--Surface-Tertiary);
111
- --secondary-foreground: var(--Text-High-Emphasis);
112
- --muted: var(--Surface-Tertiary);
113
- --muted-foreground: var(--Text-Low-Emphasis);
114
- --accent: var(--Surface-Tertiary);
115
- --accent-foreground: var(--Text-High-Emphasis);
116
- --destructive: var(--Caution-Base);
117
- --destructive-foreground: var(--Text-on-Inverse);
118
- --border: var(--Border-Medium-Emphasis);
119
- --input: var(--Border-Medium-Emphasis);
120
- --ring: var(--Focus-High-Emphasis);
121
- }
122
-
123
- /* ─── Radius Tokens ───
124
- 定義はこのファイルから styles/radius.css へ切り出した(issue #553)。
125
- ファイル先頭の @import 群で読み込んでいる。 */
126
-
127
- /* ─── Section Spacing Tokens ───
128
- 定義はこのファイルから styles/section-spacing.css へ切り出した(issue #560)。
129
- ファイル先頭の @import 群で読み込んでいる。 */
130
-
131
- /* ─── Z-Index Scale ───
132
- 定義はこのファイルから styles/z-index.css へ切り出した(issue #563)。
133
- ファイル先頭の @import 群で読み込んでいる。 */
134
-
135
- /* ─── Shadow Tokens ───
136
- 定義はこのファイルから styles/shadow.css へ切り出した(issue #563)。
137
- ファイル先頭の @import 群で読み込んでいる。 */
138
-
139
- /* ─── Animation ─── */
140
- @keyframes slide-in-right {
141
- from { transform: translateX(100%); opacity: 0; }
142
- to { transform: translateX(0); opacity: 1; }
143
- }
144
- @keyframes slide-in-left {
145
- from { transform: translateX(-100%); opacity: 0; }
146
- to { transform: translateX(0); opacity: 1; }
147
- }
148
- @keyframes fade-in {
149
- from { opacity: 0; }
150
- to { opacity: 1; }
151
- }
152
- @keyframes fade-in-up {
153
- from { opacity: 0; transform: translateY(8px); }
154
- to { opacity: 1; transform: translateY(0); }
155
- }
156
- @keyframes scale-in {
157
- from { opacity: 0; transform: scale(0.95); }
158
- to { opacity: 1; transform: scale(1); }
159
- }
160
- @keyframes celebration-confetti-fall {
161
- from {
162
- opacity: 1;
163
- transform: translate3d(0, -16px, 0) rotate(0deg);
164
- }
165
- to {
166
- opacity: 0;
167
- transform: translate3d(var(--celebration-drift, 0), 110vh, 0) rotate(var(--celebration-rotate, 360deg));
168
- }
169
- }
170
- @keyframes celebration-confetti-burst {
171
- 0% {
172
- opacity: 1;
173
- transform: translate3d(0, 0, 0) rotate(0deg) scale(0.7);
174
- }
175
- 60% {
176
- opacity: 1;
177
- transform: translate3d(var(--celebration-burst-mid-x, 0), var(--celebration-burst-mid-y, 0), 0)
178
- rotate(calc(var(--celebration-rotate, 360deg) * 0.75)) scale(1);
179
- }
180
- 80% {
181
- opacity: 0.9;
182
- }
183
- 100% {
184
- opacity: 0;
185
- transform: translate3d(var(--celebration-burst-x, 0), var(--celebration-burst-y, 0), 0)
186
- rotate(var(--celebration-rotate, 360deg)) scale(1);
187
- }
188
- }
189
- @keyframes celebration-pop {
190
- from { opacity: 0; transform: translateY(8px) scale(0.94); }
191
- to { opacity: 1; transform: translateY(0) scale(1); }
192
- }
193
- @keyframes celebration-emoji-pop {
194
- 0% { transform: scale(0); }
195
- 50% { transform: scale(1.4); }
196
- 70% { transform: scale(0.9); }
197
- 100% { transform: scale(1); }
198
- }
199
-
200
- @theme inline {
201
- /* duration / easing は src/styles/motion.css のトークンを参照する
202
- (値は従来どおり slide/fade-up=200ms・fade/scale=150ms の ease-out)。 */
203
- --animate-slide-in-right: slide-in-right var(--Motion-Duration-Base) var(--Motion-Easing-Standard);
204
- --animate-slide-in-left: slide-in-left var(--Motion-Duration-Base) var(--Motion-Easing-Standard);
205
- --animate-fade-in: fade-in var(--Motion-Duration-Fast) var(--Motion-Easing-Standard);
206
- --animate-fade-in-up: fade-in-up var(--Motion-Duration-Base) var(--Motion-Easing-Standard);
207
- --animate-scale-in: scale-in var(--Motion-Duration-Fast) var(--Motion-Easing-Standard);
208
- }
209
-
210
- /* ─── Container Query Breakpoints ───
211
- @sm: / @md: などは viewport の sm: / md: と別スケール。
212
- tokens.json の breakpoints.container と同じ値を publish 側にも固定し、
213
- Tailwind の既定値変更や consumer 側設定に依存させない。 */
214
- @theme {
215
- --container-sm: 24rem; /* 384px */
216
- --container-md: 28rem; /* 448px */
217
- --container-xl: 36rem; /* 576px */
218
- --container-2xl: 42rem; /* 672px */
219
- --container-3xl: 48rem; /* 768px */
220
- --container-4xl: 56rem; /* 896px */
221
- }
222
-
223
- /* ─── Scrollbar Hide Utility ─── */
224
- @utility scrollbar-hide {
225
- -ms-overflow-style: none;
226
- scrollbar-width: none;
227
- &::-webkit-scrollbar {
228
- display: none;
229
- }
230
- }
231
-
232
- /* ─── Base Layer: ボーダー / アウトライン色のセーフティネット ───
233
- Tailwind CSS v4 の破壊的変更で、border / outline の既定色は
234
- gray-200 ではなく `currentColor`(=要素の文字色)になった。
235
- そのため `border` `border-b` のように「幅だけで色を指定しない」
236
- クラスは、消費側が親に濃い文字色(例: --Text-High-Emphasis = #1C1A1A)
237
- を敷くと枠線が黒ずむ。これを防ぐため、shadcn / 多くの DS と同じく
238
- 全要素のフォールバック色をテーマ追従の --border / --ring に固定する。
239
-
240
- ※ これは「保険」。コンポーネント側は引き続き
241
- border-[var(--Border-Low-Emphasis)] のように明示色を指定すること
242
- (明示色を持つ要素は utilities レイヤが base を上書きするため不変)。 */
243
- @layer base {
244
- *,
245
- ::after,
246
- ::before {
247
- border-color: var(--border);
248
- outline-color: var(--ring);
249
- }
250
- }
@@ -61,6 +61,14 @@
61
61
  @import "./shadow.css";
62
62
 
63
63
  :root {
64
+ /* Settings rows: independent of button dimensions; 44px floor in the component. */
65
+ --Settings-Row-Min-Height: 3.5rem;
66
+ --Settings-Row-Gap: 0.75rem;
67
+ --Settings-Row-Padding-X: 1rem;
68
+ --Settings-Row-Padding-Y: 0.75rem;
69
+ /* Pointer-only chip removal. Coarse pointers retain a 44px target. */
70
+ --Chip-Remove-Width: 2rem;
71
+
64
72
  /* ─── Control: Button 系の内寸 ───
65
73
  5段スケール。Button の size バリアント xs / sm / default(=Md) / lg / xl と
66
74
  1対1で対応する。既定値は h-6/h-8/h-10/h-12/h-14・px-2/px-3/px-4/px-6/px-8。 */
@@ -75,7 +75,7 @@
75
75
  @source inline("[-webkit-tap-highlight-color:transparent]");
76
76
  @source inline("[@media(any-pointer:coarse)]:min-w-11");
77
77
  @source inline("[@media(hover:hover)]:transition-colors");
78
- @source inline("[@media(hover:hover)_and_(pointer:fine)]:w-8");
78
+ @source inline("[@media(hover:hover)_and_(pointer:fine)]:w-[max(2rem,var(--Chip-Remove-Width))]");
79
79
  @source inline("[scrollbar-width:none]");
80
80
  @source inline("absolute");
81
81
  @source inline("active:bg-[var(--Active-Destructive-Button)]");
@@ -431,6 +431,7 @@
431
431
  @source inline("gap-[var(--Nav-Item-Gap)]");
432
432
  @source inline("gap-[var(--Nav-Pill-Gap)]");
433
433
  @source inline("gap-[var(--Product-Card-Gap)]");
434
+ @source inline("gap-[var(--Settings-Row-Gap)]");
434
435
  @source inline("gap-x-2");
435
436
  @source inline("gap-x-4");
436
437
  @source inline("gap-y-1");
@@ -670,6 +671,7 @@
670
671
  @source inline("min-h-[80px]");
671
672
  @source inline("min-h-[inherit]");
672
673
  @source inline("min-h-[max(2.75rem,var(--Nav-Item-Min-Height))]");
674
+ @source inline("min-h-[max(2.75rem,var(--Settings-Row-Min-Height))]");
673
675
  @source inline("min-h-[var(--Control-Height-Xl)]");
674
676
  @source inline("min-h-[var(--Field-Min-Height)]");
675
677
  @source inline("min-h-[var(--Nav-Pill-Min-Height)]");
@@ -828,6 +830,7 @@
828
830
  @source inline("px-[var(--Field-Padding-X-Md)]");
829
831
  @source inline("px-[var(--Field-Padding-X-Sm)]");
830
832
  @source inline("px-[var(--Nav-Pill-Padding-X)]");
833
+ @source inline("px-[var(--Settings-Row-Padding-X)]");
831
834
  @source inline("py-0.5");
832
835
  @source inline("py-1");
833
836
  @source inline("py-1.5");
@@ -846,6 +849,7 @@
846
849
  @source inline("py-[var(--Field-Padding-Y)]");
847
850
  @source inline("py-[var(--Nav-Pill-Padding-Y)]");
848
851
  @source inline("py-[var(--Product-Page-Padding-Y)]");
852
+ @source inline("py-[var(--Settings-Row-Padding-Y)]");
849
853
  @source inline("py-[var(--Space-Section-2xl)]");
850
854
  @source inline("py-[var(--Space-Section-md)]");
851
855
  @source inline("py-[var(--Space-Section-xl)]");