sparkle-design-cli 2.5.0-beta.4 → 2.5.0-beta.5
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/CONTRIBUTING.md +28 -2
- package/README.md +4 -1
- package/bin/sparkle-design.js +45 -4
- package/docs/anti-patterns.md +77 -2
- package/docs/config.md +2 -0
- package/lib/anti-pattern-rules.js +8 -5
- package/lib/check-config.js +358 -0
- package/lib/check.js +228 -18
- package/lib/migrate.js +36 -50
- package/lib/path-utils.js +40 -0
- package/lib/rules-report.js +5 -1
- package/lib/stop-hook.js +16 -0
- package/package.json +1 -1
package/CONTRIBUTING.md
CHANGED
|
@@ -39,11 +39,37 @@ npm run sync:anti-pattern-docs # ルールの解説を隣接リポジトリの
|
|
|
39
39
|
|
|
40
40
|
## リリース手順(メンテナ向け)
|
|
41
41
|
|
|
42
|
-
publish は GitHub Actions
|
|
42
|
+
publish は GitHub Actions 経由。ローカル `npm publish` は禁止。npm は 2027 年 1 月に granular access token での直接 publish を廃止するため、**trusted publishing(OIDC)で stage → メンテナーが 2FA で承認**する形にしている。
|
|
43
43
|
|
|
44
44
|
1. `package.json` の `version` を更新(安定版: `X.Y.Z` / RC: `X.Y.Z-rc.N` / Beta: `X.Y.Z-beta.N`)
|
|
45
45
|
2. `CHANGELOG.md` に該当セクションを追加
|
|
46
|
-
3. PR をマージ後、**Publish to npm** workflow を `
|
|
46
|
+
3. PR をマージ後、**Publish to npm** workflow を main から実行する(`gh workflow run --ref` はブランチ名かタグ名のみで SHA は渡せない。main 以外からの実行は拒否される)。CI は `npm stage publish` するだけで、まだ公開されない。Summary に stage ID と commit が出る
|
|
47
|
+
```bash
|
|
48
|
+
gh workflow run "Publish to npm" --repo goodpatch/sparkle-design-cli --ref main -f channel=auto
|
|
49
|
+
```
|
|
50
|
+
4. メンテナーが 2FA 付きで承認する(不要なら `stage reject`)。手元で `npm login --registry=https://registry.npmjs.org` 済みであること(社内 proxy が既定 registry の環境があるので `--registry` を必ず付ける)
|
|
51
|
+
```bash
|
|
52
|
+
npx -y npm@11.21.0 stage download <stage-id> --registry=https://registry.npmjs.org # 任意: 中身を確認
|
|
53
|
+
npx -y npm@11.21.0 stage approve <stage-id> --otp=<code> --registry=https://registry.npmjs.org
|
|
54
|
+
```
|
|
55
|
+
5. 公開を確認したら、Summary に出た commit で tag と GitHub Release を作る(npm で公開済みか・`gitHead` が一致するかを確かめてから動く)
|
|
56
|
+
```bash
|
|
57
|
+
gh workflow run "Publish GitHub Release" --repo goodpatch/sparkle-design-cli -f ref=<Summary の commit>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
dist-tag は stage 時に決まり、承認時には変えられない。
|
|
61
|
+
|
|
62
|
+
### trusted publisher(OIDC)の設定
|
|
63
|
+
|
|
64
|
+
トークンの発行・更新は不要。npm 側でパッケージとワークフローを一度だけ結び付ける(npm の 2FA が要るのでメンテナーが実行する):
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx -y npm@11.21.0 trust github sparkle-design-cli \
|
|
68
|
+
--repository goodpatch/sparkle-design-cli --file publish.yml --allow-stage-publish --registry=https://registry.npmjs.org
|
|
69
|
+
npx -y npm@11.21.0 trust list sparkle-design-cli --registry=https://registry.npmjs.org
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`--allow-publish` は付けない(CI から直接公開できないようにし、公開の確定を人の 2FA に限る)。OIDC で stage できることを確認したら `NPM_TOKEN` secret は削除する。private リポジトリなので provenance は付かない。
|
|
47
73
|
|
|
48
74
|
`channel: auto` は `package.json` の version 形式から dist-tag を自動判定します(`-beta.N` → `beta` / `-rc.N` → `next` / それ以外 → `latest`)。既存 RC / Beta を latest に昇格させる場合は、新しい `X.Y.Z` として改めて publish します(`npm dist-tag add` での手動付け替えも可能ですが、version 管理が明確になる前者を推奨)。
|
|
49
75
|
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ Sparkle Design のプロジェクト初期セットアップ、CSS 生成、導
|
|
|
6
6
|
|
|
7
7
|
| ドキュメント | 内容 |
|
|
8
8
|
| ---------------------------------------------- | --------------------------------------------------------------------------- |
|
|
9
|
-
| [docs/anti-patterns.md](docs/anti-patterns.md) | `check`
|
|
9
|
+
| [docs/anti-patterns.md](docs/anti-patterns.md) | `check` の抑制・除外方法、新セマンティックトークンへの移行、余白スケール |
|
|
10
10
|
| [docs/config.md](docs/config.md) | `sparkle.config.json` の `extend`(フォント追加・カスタムカラー・任意 CSS) |
|
|
11
11
|
| [docs/theming.md](docs/theming.md) | 複数のテーマ配色を 1 デプロイでサポートする(`generate --scope`) |
|
|
12
12
|
| [docs/manual-setup.md](docs/manual-setup.md) | Next.js / Vite 以外への手動セットアップ |
|
|
@@ -163,6 +163,9 @@ sparkle-design-cli check --help
|
|
|
163
163
|
- `-h, --help`: ヘルプメッセージを表示
|
|
164
164
|
- `--strict`: **`error` の違反があるか、実行に失敗して未検査のルールがある**場合に exit code 1 で終了(`warning` / `info` は exit code に影響しません)
|
|
165
165
|
- `--format <text|json>`: 出力形式。AI 連携では `json` を推奨
|
|
166
|
+
- `-c, --config <path>`: 除外設定(`check.ignore` / `check.allowTokens`)を読む設定ファイル(既定: `./sparkle.config.json`。無ければ除外なし)
|
|
167
|
+
|
|
168
|
+
意図的な箇所を検査から外すには、行単位(`sparkle-disable-line` / `sparkle-disable-next-line`)、ファイル単位(`sparkle-disable-file`)、パス単位(`sparkle.config.json` の `check.ignore`)の 3 つの方法があります。自前の CSS で定義して意図して使う shadcn/ui のトークンは、`check.allowTokens` でクラス単位に宣言できます(`shadcn-token` の指摘にだけ効きます)。詳しくは [docs/anti-patterns.md の「抑制する」](docs/anti-patterns.md#抑制する) を参照してください。
|
|
166
169
|
|
|
167
170
|
#### ルールの強さ(severity)
|
|
168
171
|
|
package/bin/sparkle-design.js
CHANGED
|
@@ -71,6 +71,7 @@ function parseCheckOptions(args) {
|
|
|
71
71
|
targets: [],
|
|
72
72
|
strict: false,
|
|
73
73
|
format: 'text',
|
|
74
|
+
configPath: null,
|
|
74
75
|
help: false,
|
|
75
76
|
};
|
|
76
77
|
|
|
@@ -81,6 +82,9 @@ function parseCheckOptions(args) {
|
|
|
81
82
|
options.help = true;
|
|
82
83
|
} else if (arg === '--strict') {
|
|
83
84
|
options.strict = true;
|
|
85
|
+
} else if (arg === '-c' || arg === '--config') {
|
|
86
|
+
options.configPath = requireOptionValue(args, i, '-c/--config');
|
|
87
|
+
i += 1;
|
|
84
88
|
} else if (arg === '--format') {
|
|
85
89
|
const value = requireOptionValue(args, i, '--format');
|
|
86
90
|
if (value !== 'text' && value !== 'json') {
|
|
@@ -191,7 +195,14 @@ function parseRulesOptions(args) {
|
|
|
191
195
|
* with `--write` is contradictory and fails fast.
|
|
192
196
|
*/
|
|
193
197
|
function parseMigrateOptions(args) {
|
|
194
|
-
const options = {
|
|
198
|
+
const options = {
|
|
199
|
+
targets: [],
|
|
200
|
+
includes: [],
|
|
201
|
+
write: false,
|
|
202
|
+
dryRun: false,
|
|
203
|
+
configPath: null,
|
|
204
|
+
help: false,
|
|
205
|
+
};
|
|
195
206
|
|
|
196
207
|
for (let i = 0; i < args.length; i += 1) {
|
|
197
208
|
const arg = args[i];
|
|
@@ -204,6 +215,9 @@ function parseMigrateOptions(args) {
|
|
|
204
215
|
} else if (arg === '--include') {
|
|
205
216
|
options.includes.push(requireOptionValue(args, i, '--include'));
|
|
206
217
|
i += 1;
|
|
218
|
+
} else if (arg === '-c' || arg === '--config') {
|
|
219
|
+
options.configPath = requireOptionValue(args, i, '-c/--config');
|
|
220
|
+
i += 1;
|
|
207
221
|
} else if (arg.startsWith('-')) {
|
|
208
222
|
throw new Error(`Unknown option for migrate: ${arg}`);
|
|
209
223
|
} else {
|
|
@@ -358,6 +372,24 @@ Check options:
|
|
|
358
372
|
--strict severity=error の違反があれば exit code 1 で終了
|
|
359
373
|
(warning / info は報告のみで exit code に影響しない)
|
|
360
374
|
--format <text|json> 出力形式 (default: text)
|
|
375
|
+
-c, --config <path> 除外設定(check.ignore / check.allowTokens)を読む設定ファイル
|
|
376
|
+
(default: ./sparkle.config.json。無ければ除外なし)
|
|
377
|
+
|
|
378
|
+
Check の除外:
|
|
379
|
+
同じ行に置く // sparkle-disable-line <rule-id>
|
|
380
|
+
直前の行に置く // sparkle-disable-next-line <rule-id>
|
|
381
|
+
ファイル内に置く /* sparkle-disable-file <rule-id> */(ファイル全体に効く。場所は問わない)
|
|
382
|
+
パス単位 sparkle.config.json の check.ignore に glob とルール ID を書く
|
|
383
|
+
{ "check": { "ignore": [{ "files": ["src/app/(marketing)/**"], "rules": ["tailwind-typography"] }] } }
|
|
384
|
+
(rules を省略すると全ルール。glob は cwd からの相対パスで、cwd の外には効かない)
|
|
385
|
+
トークン単位 自前の CSS で定義して意図して使う shadcn/ui のトークンを check.allowTokens で宣言する
|
|
386
|
+
{ "check": { "allowTokens": ["text-muted-foreground",
|
|
387
|
+
{ "tokens": ["bg-background"], "files": ["src/app/docs/**"] }] } }
|
|
388
|
+
(shadcn-token の指摘にだけ効く。指摘されたクラス名(variant・/50・! を除いた部分)が
|
|
389
|
+
宣言と完全一致するものだけを許可。cwd の外には効かない)
|
|
390
|
+
行コメントは font-import-in-css / csp-font-block には効かない(ファイル単位かパス単位で外す)。
|
|
391
|
+
除外した件数は出力と JSON の summary.ignoredFindingCount に出る。
|
|
392
|
+
詳細は docs/anti-patterns.md
|
|
361
393
|
|
|
362
394
|
Migrate options:
|
|
363
395
|
-h, --help このヘルプメッセージを表示
|
|
@@ -367,14 +399,17 @@ Migrate options:
|
|
|
367
399
|
--write [自動変換可] の箇所だけを書き換える
|
|
368
400
|
--include <glob> 対象を cwd からの相対パス(cwd の外は絶対パス)が glob に
|
|
369
401
|
マッチするファイルに絞る(複数指定可。** / * / ? / {a,b} に対応)
|
|
402
|
+
-c, --config <path> check.ignore を読む設定ファイル(check と同じ。
|
|
403
|
+
default: ./sparkle.config.json。無ければ除外なし)
|
|
370
404
|
|
|
371
405
|
Migrate の分類:
|
|
372
406
|
自動変換可 bg- / text- / border- などの用途と variant 接頭辞(hover: 等)から移行先が
|
|
373
407
|
一意に決まり、値も変わらないもの。--write のときだけ置換する
|
|
374
408
|
要判断 移行先候補が複数ある / 対応する新トークンが無いもの。候補を表示するだけで置換しない
|
|
375
409
|
構造変更あり トークンの差し替えでは済まない(マークアップ変更を伴う)もの。指摘するだけで置換しない
|
|
376
|
-
対応表は check の移行ルールと共通(lib/token-migration.js)。check
|
|
377
|
-
|
|
410
|
+
対応表は check の移行ルールと共通(lib/token-migration.js)。check の除外
|
|
411
|
+
(抑制コメント・sparkle-disable-file・sparkle.config.json の check.ignore)にかかる
|
|
412
|
+
箇所は migrate でも書き換えない
|
|
378
413
|
|
|
379
414
|
Auth options:
|
|
380
415
|
-h, --help このヘルプメッセージを表示
|
|
@@ -505,6 +540,7 @@ async function main() {
|
|
|
505
540
|
const hasBlockingIssues = await checkProject(options.targets, {
|
|
506
541
|
strict: options.strict,
|
|
507
542
|
format: options.format,
|
|
543
|
+
configPath: options.configPath,
|
|
508
544
|
});
|
|
509
545
|
if (hasBlockingIssues && options.strict) {
|
|
510
546
|
process.exit(1);
|
|
@@ -570,7 +606,12 @@ async function main() {
|
|
|
570
606
|
showHelp();
|
|
571
607
|
process.exit(0);
|
|
572
608
|
}
|
|
573
|
-
runMigrate({
|
|
609
|
+
runMigrate({
|
|
610
|
+
targets: options.targets,
|
|
611
|
+
includes: options.includes,
|
|
612
|
+
write: options.write,
|
|
613
|
+
configPath: options.configPath,
|
|
614
|
+
});
|
|
574
615
|
return;
|
|
575
616
|
}
|
|
576
617
|
|
package/docs/anti-patterns.md
CHANGED
|
@@ -6,7 +6,18 @@
|
|
|
6
6
|
|
|
7
7
|
## 抑制する
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
検査から外す方法は、範囲の狭い順に 3 つあります。どれもルール ID を指定でき、ID は `rules` コマンドの出力と `check` の指摘に出ているものです。複数指定するときは、コメントではカンマ区切り(`tailwind-typography, use-figma-spacing-scale`)、設定ファイルでは配列の要素を分けます(`["tailwind-typography", "use-figma-spacing-scale"]`。1 つの文字列にカンマで並べると 1 つの未知 ID として扱われ、何も外れません)。
|
|
10
|
+
|
|
11
|
+
このほか、自前の CSS で定義した shadcn/ui のトークンを意図して使う場合は、ルールごとではなくクラス単位で宣言する [`check.allowTokens`](#トークン単位checkallowtokens) があります。
|
|
12
|
+
|
|
13
|
+
### 行単位
|
|
14
|
+
|
|
15
|
+
ESLint と同じ形のコメントです。**コメントの種類で置く場所が決まっています**。直前の行に `sparkle-disable-line` を置いても抑制されません。
|
|
16
|
+
|
|
17
|
+
| コメント | 置く場所 |
|
|
18
|
+
| ------------------------------------- | ---------------------- |
|
|
19
|
+
| `sparkle-disable-line <rule-id>` | 指摘される行と同じ行 |
|
|
20
|
+
| `sparkle-disable-next-line <rule-id>` | 指摘される行の直前の行 |
|
|
10
21
|
|
|
11
22
|
```tsx
|
|
12
23
|
{/* sparkle-disable-next-line legacy-color-token */}
|
|
@@ -15,7 +26,71 @@
|
|
|
15
26
|
<div className="bg-primary-600" /> {/* sparkle-disable-line legacy-color-token */}
|
|
16
27
|
```
|
|
17
28
|
|
|
18
|
-
|
|
29
|
+
行コメントはルール定義から出る指摘に効きます。`check` 本体が直接行う `font-import-in-css` と `csp-font-block` には効かないので、下のファイル単位かパス単位で外してください。
|
|
30
|
+
|
|
31
|
+
### ファイル単位
|
|
32
|
+
|
|
33
|
+
`sparkle-disable-file` をファイル内のどこかに書くと、そのファイル全体で指定ルールを外します。行コメントと同じく**ルール ID は必須**です(ID を省略したコメントは何も外しません)。
|
|
34
|
+
|
|
35
|
+
```tsx
|
|
36
|
+
/* sparkle-disable-file tailwind-typography, use-figma-spacing-scale */
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
効くのは `check` が走査したファイルと、`csp-font-block` の指摘元になった `next.config.*` です。
|
|
40
|
+
|
|
41
|
+
### パス単位(`sparkle.config.json`)
|
|
42
|
+
|
|
43
|
+
デザイナーとの調整待ちの公開ページのように、意図して残す箇所がディレクトリ単位でまとまっているときは、`sparkle.config.json` の `check.ignore` に書きます。コメントを足して回らずに済み、何を外しているかが 1 か所で分かります。
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"primary": "blue",
|
|
48
|
+
"check": {
|
|
49
|
+
"ignore": [
|
|
50
|
+
{ "files": ["src/app/(marketing)/**", "src/app/blog"], "rules": ["tailwind-typography"] },
|
|
51
|
+
{ "files": ["**/*.stories.tsx"] }
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- `files` は **cwd(`check` を実行するディレクトリ)からの相対パス**の glob です。`check` の出力に出るパスと同じ基準で照合します。`**` / `*` / `?` / `{a,b}` が使えます。`-c` で別の場所の設定ファイルを指定しても、基準は cwd のままです
|
|
58
|
+
- glob 記号を含まないパス(上の `src/app/blog`)はディレクトリ指定とみなし、配下のファイルすべてに効きます
|
|
59
|
+
- cwd の外のファイル(出力が `../` で始まるもの)には効きません
|
|
60
|
+
- `rules` を省略すると、そのパスの**全ルール**を外します。関係ないルールまで外れないよう、できるだけ `rules` を指定してください
|
|
61
|
+
- 別の設定ファイルを使うときは `check -c <path>`(`migrate -c <path>` も同じ)で指定します。既定の `./sparkle.config.json` が無ければ除外なしで動きます
|
|
62
|
+
- 形が不正な設定(`check` / `ignore` / `allowTokens` が想定の型でない、`files` が空、未知のキー、空・絶対パス・`..` を含むパスなど)は exit 1 で止まります(`migrate` も同じ。ただし `migrate` は `allowTokens` を使わないので、その形は検証しません)。除外の typo に気付かないまま検査が素通りするのを防ぐためです。stop-hook では exit 2 で応答終了を 1 度ブロックし、設定を直すよう伝えます
|
|
63
|
+
|
|
64
|
+
除外するのは「Sparkle のトークンに置き換えられない・置き換えない理由がある」箇所だけにしてください。検出されたからといって外すのではなく、まず Sparkle のトークンへ置き換えられないかを確認します(例: `shadcn-token` の指摘は、多くの場合 `text-text-neutral-low` などへ置き換えるのが正解です)。
|
|
65
|
+
|
|
66
|
+
### トークン単位(`check.allowTokens`)
|
|
67
|
+
|
|
68
|
+
プロジェクトが shadcn/ui のトークン(`text-muted-foreground` など)を自前の CSS で定義し、Sparkle 以外の UI で意図して使っている場合は、`check.allowTokens` で宣言します。**まず Sparkle のトークンへ置き換えられないかを確認し、置き換えない理由がある場合だけ**使ってください。
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"primary": "blue",
|
|
73
|
+
"check": {
|
|
74
|
+
"allowTokens": [
|
|
75
|
+
"text-muted-foreground",
|
|
76
|
+
{ "tokens": ["bg-background", "border-border"], "files": ["src/app/docs/**"] }
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
- **`shadcn-token` の指摘にだけ効きます**。他のルールの指摘は外れません(他ルールを外したいときは、上のファイル単位・パス単位を使います)
|
|
83
|
+
- 指摘されたクラスが宣言と**完全一致する**ときだけ、その指摘を出しません。宣言していないクラスは引き続き検出されるので、意図しない持ち込みは見逃しません。`hover:bg-background` / `bg-background/50` / `!bg-background` のような variant・opacity・important 付きも、指摘されるクラス名(`bg-background`)で照合します。宣言にも variant などを付けずにクラス名だけを書いてください
|
|
84
|
+
- 文字列で書いたクラスは全体(cwd の外のファイルを除く)で許可します。`{ "tokens": [...], "files": [glob] }` で書くと、そのパスでだけ許可します(glob の書き方はパス単位と同じ)
|
|
85
|
+
- `shadcn-token` の検出対象ではないクラスを書くと、stderr に警告が出て JSON の `ignoreWarnings` にも載ります(`{ "source": "allowTokens", "ruleId": "shadcn-token", "token": "..." }`。typo に気付けるように)
|
|
86
|
+
|
|
87
|
+
### 除外しすぎに気付くために
|
|
88
|
+
|
|
89
|
+
- 除外した件数は出力に `N 件を除外しました(行コメント a / sparkle-disable-file b / check.ignore c / check.allowTokens d)` の形で出ます(0 件の内訳は省略)。1 件の指摘が複数の方法にかかる場合は、行コメント → ファイル単位 → パス単位 → トークン単位の順で最初に当たったものとして数えます
|
|
90
|
+
- JSON 出力では `summary.ignoredFindingCount` に合計、トップレベルの `ignored` に仕組みごとの内訳が入ります
|
|
91
|
+
- `check.ignore` や `sparkle-disable-file` に**有効なルールに無い ID**を書くと、stderr に警告が出て JSON の `ignoreWarnings` にも載ります(typo や、プラグインを入れていない環境での指定に気付けるように)
|
|
92
|
+
- 除外したファイル × ルールでルールの実行が失敗しても、「未検査」(`skippedRules`)には数えません
|
|
93
|
+
- 除外した箇所は `migrate` でも書き換えません
|
|
19
94
|
|
|
20
95
|
## 新セマンティックトークンへの移行(beta 期間中)
|
|
21
96
|
|
package/docs/config.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 設定ファイルの拡張(`extend`)
|
|
2
2
|
|
|
3
|
+
> `check` の除外設定(`check.ignore` / `check.allowTokens`)も `sparkle.config.json` に書きます。書き方は [anti-patterns.md の「抑制する」](anti-patterns.md#パス単位sparkleconfigjson) を参照してください。
|
|
4
|
+
|
|
3
5
|
Figma プラグインが出力する基本4項目に加えて、プロジェクト固有の拡張を `extend` セクションにまとめます。`extend` はオブジェクト直書き(推奨)またはファイルパスを指定できます。
|
|
4
6
|
|
|
5
7
|
```json
|
|
@@ -465,9 +465,12 @@ const COMPONENT_ANTI_PATTERN_GROUPS = [
|
|
|
465
465
|
{
|
|
466
466
|
id: 'shadcn-token',
|
|
467
467
|
check: {
|
|
468
|
-
|
|
468
|
+
// 検出はファイル全体のクラス名に対して行う(Sparkle コンポーネント内かどうかは
|
|
469
|
+
// 見ない)ので、説明文もその範囲に合わせる(#104)。
|
|
470
|
+
// en: Detection is file-wide, not limited to Sparkle components (#104).
|
|
471
|
+
description: 'shadcn/ui 既定 token を使わず、Sparkle Design の token を使う',
|
|
469
472
|
recommendation:
|
|
470
|
-
'text-muted-foreground / bg-background / border-border などは Sparkle Design token
|
|
473
|
+
'text-muted-foreground / bg-background / border-border などは Sparkle Design token に置き換えてください。まず置き換えを検討し、置き換えられない理由がある場合(プロジェクトが自前の CSS でこれらを定義し、Sparkle 以外の UI で意図して使っている等)に限り、sparkle.config.json の `check.allowTokens` で宣言できます。',
|
|
471
474
|
// 新セマンティックトークン(border-border-neutral-* 等)へ前方一致しないよう、
|
|
472
475
|
// 直後にハイフン/単語構成文字が続くケースを除外する
|
|
473
476
|
// en: exclude prefix matches against new semantic tokens (e.g. border-border-neutral-*)
|
|
@@ -491,7 +494,7 @@ const COMPONENT_ANTI_PATTERN_GROUPS = [
|
|
|
491
494
|
'</CardDescription>',
|
|
492
495
|
'```',
|
|
493
496
|
'',
|
|
494
|
-
'shadcn/ui
|
|
497
|
+
'shadcn/ui と混在するプロジェクトでも、`character-*` / `text-text-*` / Sparkle の color token を優先する(`sparkle-design-cli check` はファイル全体のクラス名を検査する)。',
|
|
495
498
|
]),
|
|
496
499
|
jsdocTargets: [],
|
|
497
500
|
},
|
|
@@ -1106,7 +1109,7 @@ const COMPONENT_ANTI_PATTERN_GROUPS = [
|
|
|
1106
1109
|
check: {
|
|
1107
1110
|
description: 'Tailwind デフォルト typography を Sparkle Design コンポーネント内で使わない',
|
|
1108
1111
|
recommendation:
|
|
1109
|
-
'text-xs 〜 text-9xl / font-medium / font-semibold / font-bold は character-* utility に置き換えてください。ただし character-* に対応する token が無いサイズ(text-[10px] 等の arbitrary value、あるいは意図的に token
|
|
1112
|
+
'text-xs 〜 text-9xl / font-medium / font-semibold / font-bold は character-* utility に置き換えてください。ただし character-* に対応する token が無いサイズ(text-[10px] 等の arbitrary value、あるいは意図的に token 外のサイズを使う場合)は、同じ行に `// sparkle-disable-line tailwind-typography`、または直前の行に `// sparkle-disable-next-line tailwind-typography` を付けて例外扱いとして残すこともできます。font-medium(500) / font-semibold(600) は character-* に対応する token が無いため、`extend.custom-css` で独自クラスを定義してください(詳細は README の「character-* に無いウェイトを使いたい場合」参照)。',
|
|
1110
1113
|
// text-base は旧カラートークンの text-base-50 〜 text-base-900 へ前方一致するため、
|
|
1111
1114
|
// shadcn-token と同様に直後のハイフン/単語構成文字を除外する
|
|
1112
1115
|
// en: exclude prefix matches such as text-base-900 (legacy color token)
|
|
@@ -1135,7 +1138,7 @@ const COMPONENT_ANTI_PATTERN_GROUPS = [
|
|
|
1135
1138
|
'<span className="text-xs">どうしても text-xs で残したいケース</span>',
|
|
1136
1139
|
'```',
|
|
1137
1140
|
'',
|
|
1138
|
-
'Sparkle Design コンポーネント内では `character-*-pro` / `character-*-mono` を使用する。character-1(12px)より小さい指定や、対応 token が無いサイズは Tailwind の arbitrary value (`text-[10px]` 等)
|
|
1141
|
+
'Sparkle Design コンポーネント内では `character-*-pro` / `character-*-mono` を使用する。character-1(12px)より小さい指定や、対応 token が無いサイズは Tailwind の arbitrary value (`text-[10px]` 等) で表現するか、同じ行の `// sparkle-disable-line tailwind-typography` / 直前の行の `// sparkle-disable-next-line tailwind-typography` で個別に例外指定する。',
|
|
1139
1142
|
'',
|
|
1140
1143
|
'`font-medium` / `font-semibold`(500 / 600)は character-* に対応する token が存在しない。`character-N-regular-pro font-semibold` のように Tailwind の font-weight ユーティリティを併用しても、character-* が意図的に Tailwind の後に読み込まれる cascade 設計のため上書きされず効かない。これらのウェイトが必要な場合は `extend.custom-css` で `character-N-semibold-pro` のような独自クラスを定義し、font-family / font-size / letter-spacing / line-height は character-* と同じプリミティブトークンを流用する(詳細は README の「character-* に無いウェイトを使いたい場合」)。',
|
|
1141
1144
|
]),
|