melta-app 0.7.0 → 0.8.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/README.md +12 -10
- package/docs/architecture.md +2 -2
- package/eslint-rules/melta.d.mts +2 -1
- package/eslint-rules/melta.mjs +32 -5
- package/lib/module/theme/line-height.js +9 -2
- package/lib/module/theme/line-height.js.map +1 -1
- package/lib/typescript/src/theme/line-height.d.ts +9 -2
- package/lib/typescript/src/theme/line-height.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/theme/line-height.ts +9 -2
package/README.md
CHANGED
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
同じ欠陥を固定した E2E テストまで。
|
|
24
24
|
|
|
25
25
|
- **ドキュメントは契約からの生成物** — 下の[コンポーネント表](#コンポーネント)・[llms.txt](https://app.melta.tsubotax.com/llms.txt)・showcase の統計は `melta-contracts` から生成し、手書きの表はこのリポに存在しない。腐りは drift 検査が落とす([scripts/check-drift.ts](./scripts/check-drift.ts) / [CI](./.github/workflows/check.yml))
|
|
26
|
-
- **消費者プロジェクトでの実導入検証(2026-08-04)** — 別リポジトリの自プロジェクト(非公開 RN アプリ)に npm 経由で導入し、AI が違反コードを書いた直後に検出 → 修正フィードバック → 自己修正、のループを実測で確認。導入時に見つかった hook の欠陥(実行失敗時に無言で素通りする)は同日中に本体へ還元し、故障系を含む E2E 14
|
|
27
|
-
- **「npm install すれば動く」の機械証明** — pack → tarball 実体検査 → [attw](https://github.com/arethetypeswrong/arethetypeswrong.github.io) で exports の型解決を resolution mode ごとに検査 → fixture へ install → 本体 / icons / safe-area / eslint-plugin の import + typecheck を **`moduleResolution` 3 種(bundler / node16 / nodenext)すべてで**実行 → lint plugin を実 import してルール
|
|
26
|
+
- **消費者プロジェクトでの実導入検証(2026-08-04)** — 別リポジトリの自プロジェクト(非公開 RN アプリ)に npm 経由で導入し、AI が違反コードを書いた直後に検出 → 修正フィードバック → 自己修正、のループを実測で確認。導入時に見つかった hook の欠陥(実行失敗時に無言で素通りする)は同日中に本体へ還元し、故障系を含む E2E 15 ケースで固定 — 0.5.3 で 14、0.8.0 の no-raw-lineheight 追加で 15([scripts/lib/hook-lint.test.ts](./scripts/lib/hook-lint.test.ts) / [CHANGELOG 0.5.3](./CHANGELOG.md#053--2026-08-04))
|
|
27
|
+
- **「npm install すれば動く」の機械証明** — pack → tarball 実体検査 → [attw](https://github.com/arethetypeswrong/arethetypeswrong.github.io) で exports の型解決を resolution mode ごとに検査 → fixture へ install → 本体 / icons / safe-area / eslint-plugin の import + typecheck を **`moduleResolution` 3 種(bundler / node16 / nodenext)すべてで**実行 → lint plugin を実 import してルール 5 本と推奨 severity を照合、までを公開ゲートにしている([scripts/check-installability.sh](./scripts/check-installability.sh)。`npm run release` の必須ステップ)
|
|
28
28
|
|
|
29
29
|
## Quickstart
|
|
30
30
|
|
|
@@ -118,7 +118,7 @@ production ビルドでは `__DEV__` を偽(または未定義)のままに
|
|
|
118
118
|
|
|
119
119
|
## 利用側コードの lint 強制層(`melta-app/eslint-plugin`)
|
|
120
120
|
|
|
121
|
-
melta 契約からの逸脱を機械検知する eslint カスタムルール
|
|
121
|
+
melta 契約からの逸脱を機械検知する eslint カスタムルール 5 本を同梱している。
|
|
122
122
|
消費者プロジェクトの flat config に組み込むと、生値の直書きが**使う側のコードで**止まる。
|
|
123
123
|
|
|
124
124
|
### 動く完全例
|
|
@@ -147,7 +147,7 @@ export default [
|
|
|
147
147
|
];
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
**成功判定**: 生値を書いたファイルで `npx eslint .`
|
|
150
|
+
**成功判定**: 生値を書いたファイルで `npx eslint .` を実行すると、違反したルールが名前付きで出る(この fixture は 5 本中 4 本を踏む)。
|
|
151
151
|
|
|
152
152
|
```
|
|
153
153
|
src/Bad.tsx
|
|
@@ -162,12 +162,12 @@ src/Bad.tsx
|
|
|
162
162
|
`theme.*` 経由で書き直すと 0 件になる。ここまでが「利用側に強制層が入った」状態。
|
|
163
163
|
|
|
164
164
|
> この例は eslint 9.39 / `@react-native/eslint-config` 0.85.3 / melta-app 0.5.3 の
|
|
165
|
-
> 使い捨て fixture(tarball install
|
|
165
|
+
> 使い捨て fixture(tarball install)で実行して確認したもの(no-raw-lineheight 追加前の 0.5.3 時点)。ルール 5 本の実在と severity は
|
|
166
166
|
> `check:installability` が毎リリース照合する。
|
|
167
167
|
|
|
168
168
|
### `configs.recommended` の中身
|
|
169
169
|
|
|
170
|
-
`configs.recommended`(flat config 形式)は plugin の登録とルール
|
|
170
|
+
`configs.recommended`(flat config 形式)は plugin の登録とルール 5 本の severity を含む。
|
|
171
171
|
**severity の正本は plugin 側**なので、消費者がドキュメントから写して持つ必要はない。
|
|
172
172
|
|
|
173
173
|
| ルール | 既定 severity | 内容 |
|
|
@@ -176,6 +176,7 @@ src/Bad.tsx
|
|
|
176
176
|
| `melta/no-raw-radius` | error | `borderRadius` の数値直書き → `theme.radius.*` |
|
|
177
177
|
| `melta/no-raw-spacing` | warn | `padding`/`margin`/`gap` の数値直書き(false positive あり) |
|
|
178
178
|
| `melta/no-raw-fontsize` | warn | `fontSize` の数値直書き |
|
|
179
|
+
| `melta/no-raw-lineheight` | warn | `lineHeight` の数値直書き(生値はフォントの必要行間を素通りし、Android で濁点が欠ける。詰める場合は theme の `minLineHeightRatio` 宣言とセットで — 機序は `src/theme/line-height.ts`) |
|
|
179
180
|
|
|
180
181
|
⚠️ **base config は省略できない。** `meltaPlugin.configs.recommended` は parser も `files` も
|
|
181
182
|
持たない(適用範囲を消費者側に委ねる設計)。実測される挙動は 2 つ:
|
|
@@ -217,10 +218,11 @@ export default [
|
|
|
217
218
|
{
|
|
218
219
|
plugins: { melta: meltaPlugin },
|
|
219
220
|
rules: {
|
|
220
|
-
"melta/no-raw-color": "error",
|
|
221
|
-
"melta/no-raw-radius": "error",
|
|
222
|
-
"melta/no-raw-spacing": "warn",
|
|
223
|
-
"melta/no-raw-fontsize": "warn",
|
|
221
|
+
"melta/no-raw-color": "error", // 生 hex/rgb/hsl → theme.color.*
|
|
222
|
+
"melta/no-raw-radius": "error", // borderRadius 数値直書き → theme.radius.*
|
|
223
|
+
"melta/no-raw-spacing": "warn", // padding/margin/gap 数値直書き(false positive あり)
|
|
224
|
+
"melta/no-raw-fontsize": "warn", // fontSize 数値直書き
|
|
225
|
+
"melta/no-raw-lineheight": "warn", // lineHeight 数値直書き(Android の字形欠け防止)
|
|
224
226
|
},
|
|
225
227
|
},
|
|
226
228
|
];
|
package/docs/architecture.md
CHANGED
|
@@ -74,14 +74,14 @@ npm run ios # または android / web
|
|
|
74
74
|
- ✅ ライブラリ化(root=ライブラリ / example=カタログアプリ、peerDeps react + react-native、runtime deps ゼロ)
|
|
75
75
|
- ✅ `melta-contracts` を npm 依存として購読(recipes/app の styleRefs 同梱)
|
|
76
76
|
- ✅ conformance: 契約源 ↔ 生成メタ ↔ `__contract` 宣言の照合 + consumer テスト(契約 subset / token 実在 / contractVersion 同期)+ styleRefs conformance(全実装コンポーネント展開済み)+ RN mount smoke(light/dark × 全公開コンポーネント)
|
|
77
|
-
- ✅ ハーネス: design lint(CI `--max-warnings 0` + PostToolUse hook)/ drift 検査(README・docs・catalog・allowlist 突合)/ installability ゲート(pack → tarball 実体検査 → attw で exports の型解決を resolution mode ごとに検査 → fixture へ install → 本体 / icons / safe-area / eslint-plugin の import + typecheck を moduleResolution 3 種(bundler / node16 / nodenext)で実行 → eslint plugin を実 import してルール
|
|
77
|
+
- ✅ ハーネス: design lint(CI `--max-warnings 0` + PostToolUse hook)/ drift 検査(README・docs・catalog・allowlist 突合)/ installability ゲート(pack → tarball 実体検査 → attw で exports の型解決を resolution mode ごとに検査 → fixture へ install → 本体 / icons / safe-area / eslint-plugin の import + typecheck を moduleResolution 3 種(bundler / node16 / nodenext)で実行 → eslint plugin を実 import してルール 5 本の実在を照合 → exports の解決先確認。`npm run release` チェーンの必須ステップ)
|
|
78
78
|
- ✅ layout 6 個(Stack / Row / Screen / Header / Icon / Avatar)— dogfood 不足 1〜4 を解消、ProjectFeedScreen は公開 primitive だけで構成
|
|
79
79
|
- Screen の SafeArea は adapter registry 化済み: default は RN core SafeAreaView(依存ゼロ維持)、`melta-app/safe-area` の `enableSafeAreaContext()` で react-native-safe-area-context に差し替え可(optional peer)
|
|
80
80
|
- ✅ form / feedback 10 個(TextField / Toggle / Checkbox / Radio / Alert / Toast / Progress / Modal / ActionSheet / BottomSheet)— checkbox / radio は Pressable + 描画(svg 非依存)、ActionSheet / BottomSheet は select / dropdown の adapted 変換先の受け皿
|
|
81
81
|
- ✅ showcase(https://app.melta.tsubotax.com — melta-ui 様式シェル + 実 RN カタログの Live 埋め込み。表・統計は契約からビルド時生成)
|
|
82
82
|
- ✅ AI 入口: [llms.txt](https://app.melta.tsubotax.com/llms.txt)(契約から生成・drift 検査対象)+ [patterns.md](./patterns.md)(フォームの組み方規範。スニペットは実コードと機械同期)
|
|
83
83
|
- ✅ lint 強制層の npm 配布(0.5.2): `melta-app/eslint-plugin` を公開 subpath 化。消費者プロジェクトの flat config に組めば、生値の直書きが消費者側でも lint で止まる。推奨 severity は `configs.recommended` で配布(0.5.3。消費者が手書きで写さない)
|
|
84
|
-
- ✅ 消費者プロジェクトでの実導入検証(2026-08-04): 別リポジトリの自プロジェクト(非公開 RN アプリ)に npm 経由で導入し、AI が違反コードを書いた直後に検出 → 修正フィードバック → 自己修正、のループを実測で確認。導入時に見つかった hook の欠陥(実行失敗時に無言で素通りする)は同日中に本体へ還元し、故障系を含む E2E
|
|
84
|
+
- ✅ 消費者プロジェクトでの実導入検証(2026-08-04): 別リポジトリの自プロジェクト(非公開 RN アプリ)に npm 経由で導入し、AI が違反コードを書いた直後に検出 → 修正フィードバック → 自己修正、のループを実測で確認。導入時に見つかった hook の欠陥(実行失敗時に無言で素通りする)は同日中に本体へ還元し、故障系を含む E2E 15 ケースで固定(0.5.3 で 14、0.8.0 の no-raw-lineheight 追加で 15)
|
|
85
85
|
- ✅ [npm publish(0.5.3)](https://www.npmjs.com/package/melta-app)
|
|
86
86
|
- ⬜ React Native Directory 登録([PR #2606](https://github.com/react-native-community/directory/pull/2606) レビュー待ち)
|
|
87
87
|
|
package/eslint-rules/melta.d.mts
CHANGED
package/eslint-rules/melta.mjs
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* melta design lint ルール(設計書 §5、D-1)。
|
|
3
3
|
*
|
|
4
|
-
* RN で機械検知できる raw 値の
|
|
4
|
+
* RN で機械検知できる raw 値の 5 類型のみを対象とする補助線(AST 検知は変数経由/spread で漏れるので
|
|
5
5
|
* 純度の本丸は A-3 conformance)。token 経由(theme.* の MemberExpression)は許可、生値を弾く。
|
|
6
6
|
*
|
|
7
|
-
* - no-raw-color
|
|
8
|
-
* - no-raw-radius
|
|
9
|
-
* - no-raw-spacing
|
|
10
|
-
* - no-raw-fontsize: fontSize に数値リテラル直書き → warn
|
|
7
|
+
* - no-raw-color : hex/rgb/hsl の文字列リテラル → error
|
|
8
|
+
* - no-raw-radius : borderRadius 系プロパティに数値リテラル直書き → error
|
|
9
|
+
* - no-raw-spacing : padding/margin/gap 系に数値リテラル直書き → warn(false positive 多)
|
|
10
|
+
* - no-raw-fontsize : fontSize に数値リテラル直書き → warn
|
|
11
|
+
* - no-raw-lineheight: lineHeight に数値リテラル直書き → warn(W8。生の lineHeight は
|
|
12
|
+
* フォントの必要行間(Android の CustomLineHeightSpan が字形を削る下限)を素通りする。
|
|
13
|
+
* theme.typography.fontSize.* の対を使うか、詰めるなら minLineHeightRatio 宣言とセットで)
|
|
11
14
|
*
|
|
12
15
|
* この severity は `meltaPlugin.configs.recommended`(flat config)として機械可読な形で配布する。
|
|
13
16
|
* 消費者が手で書き写すとドリフト源になるため(rally-nav の外部導入 T6、2026-08-04)、
|
|
@@ -98,6 +101,29 @@ export const meltaPlugin = {
|
|
|
98
101
|
};
|
|
99
102
|
},
|
|
100
103
|
},
|
|
104
|
+
"no-raw-lineheight": {
|
|
105
|
+
meta: {
|
|
106
|
+
type: "suggestion",
|
|
107
|
+
docs: {
|
|
108
|
+
description:
|
|
109
|
+
"lineHeight は theme.typography.fontSize.* の対を使う(生数値はフォントの必要行間を素通りし、Android で字形が欠ける)",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
create(context) {
|
|
113
|
+
return {
|
|
114
|
+
Property(node) {
|
|
115
|
+
if (keyName(node) === "lineHeight" && isRawNumber(node.value)) {
|
|
116
|
+
context.report({
|
|
117
|
+
node,
|
|
118
|
+
message:
|
|
119
|
+
"lineHeight の生数値は theme.typography.fontSize.* の対を推奨。" +
|
|
120
|
+
"詰める場合も theme の minLineHeightRatio 宣言とセットで(Android は下限を割ると濁点が欠ける)。",
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
},
|
|
126
|
+
},
|
|
101
127
|
},
|
|
102
128
|
};
|
|
103
129
|
|
|
@@ -110,6 +136,7 @@ const RECOMMENDED_RULES = {
|
|
|
110
136
|
"melta/no-raw-radius": "error",
|
|
111
137
|
"melta/no-raw-spacing": "warn",
|
|
112
138
|
"melta/no-raw-fontsize": "warn",
|
|
139
|
+
"melta/no-raw-lineheight": "warn",
|
|
113
140
|
};
|
|
114
141
|
|
|
115
142
|
// flat config 慣行に従い、plugin 自身を参照する config は定義後に後付けする(自己参照の循環を避ける)。
|
|
@@ -11,8 +11,15 @@
|
|
|
11
11
|
*
|
|
12
12
|
* 下限は使用フォントのメトリクス(ascent + descent)に依存するが、melta はフォントを同梱しない
|
|
13
13
|
* (system フォント運用)ので、既定は **Android の日本語 system フォント Noto Sans CJK JP の
|
|
14
|
-
* 実測 1.448
|
|
15
|
-
*
|
|
14
|
+
* 実測 1.448** を切り上げた 1.45 とする。iOS(Hiragino 1.50 相当)にはこの clip 機序が無いので
|
|
15
|
+
* 基準にしない。
|
|
16
|
+
*
|
|
17
|
+
* この 1.448 は手実測メモではなく**CI が毎回機械検算する**(W8):
|
|
18
|
+
* scripts/lib/line-height-floor.test.ts が、実フォントから抽出した生メトリクス fixture
|
|
19
|
+
* (scripts/lib/fixtures/reference-font-metrics.json、sha256 + 取得元 URL 付き)に
|
|
20
|
+
* RN CustomLineHeightSpan の式 `max(A+D, 2·winAsc−A+D, 2·winDesc−D+A)/unitsPerEm` を適用し、
|
|
21
|
+
* DEFAULT_MIN_LINE_HEIGHT_RATIO = ceil(実測×100)/100 の完全一致を強制する。
|
|
22
|
+
* 参照フォントを差し替えるときは scripts/extract-font-metrics.ts で再抽出する(手順はそこに記載)。
|
|
16
23
|
*
|
|
17
24
|
* フォントを同梱する消費者は、そのフォントの実測比率を theme の
|
|
18
25
|
* `typography.minLineHeightRatio` で宣言する(例: LINE Seed JP = 1.61)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_MIN_LINE_HEIGHT_RATIO","minRatioOf","theme","typography","minLineHeightRatio","minLineHeightFor","fontSize","minRatio","Math","ceil","clampLineHeight","declaredLineHeight","max"],"sourceRoot":"../../../src","sources":["theme/line-height.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,MAAMA,6BAA6B,GAAG,IAAI;;AAEjD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAACC,KAAsD,EAAU;EACzF,OAAOA,KAAK,CAACC,UAAU,CAACC,kBAAkB,IAAIJ,6BAA6B;AAC7E;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASK,gBAAgBA,CAACC,QAAgB,EAAEC,QAAgB,EAAU;EAC3E,OAAOC,IAAI,CAACC,IAAI,CAACH,QAAQ,GAAGC,QAAQ,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASG,eAAeA,CAC7BJ,QAAgB,EAChBK,kBAA0B,EAC1BJ,QAAgB,EACR;EACR,OAAOC,IAAI,CAACI,GAAG,CAACD,kBAAkB,EAAEN,gBAAgB,CAACC,QAAQ,EAAEC,QAAQ,CAAC,CAAC;AAC3E","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["DEFAULT_MIN_LINE_HEIGHT_RATIO","minRatioOf","theme","typography","minLineHeightRatio","minLineHeightFor","fontSize","minRatio","Math","ceil","clampLineHeight","declaredLineHeight","max"],"sourceRoot":"../../../src","sources":["theme/line-height.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,MAAMA,6BAA6B,GAAG,IAAI;;AAEjD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAACC,KAAsD,EAAU;EACzF,OAAOA,KAAK,CAACC,UAAU,CAACC,kBAAkB,IAAIJ,6BAA6B;AAC7E;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASK,gBAAgBA,CAACC,QAAgB,EAAEC,QAAgB,EAAU;EAC3E,OAAOC,IAAI,CAACC,IAAI,CAACH,QAAQ,GAAGC,QAAQ,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASG,eAAeA,CAC7BJ,QAAgB,EAChBK,kBAA0B,EAC1BJ,QAAgB,EACR;EACR,OAAOC,IAAI,CAACI,GAAG,CAACD,kBAAkB,EAAEN,gBAAgB,CAACC,QAAQ,EAAEC,QAAQ,CAAC,CAAC;AAC3E","ignoreList":[]}
|
|
@@ -9,8 +9,15 @@
|
|
|
9
9
|
*
|
|
10
10
|
* 下限は使用フォントのメトリクス(ascent + descent)に依存するが、melta はフォントを同梱しない
|
|
11
11
|
* (system フォント運用)ので、既定は **Android の日本語 system フォント Noto Sans CJK JP の
|
|
12
|
-
* 実測 1.448
|
|
13
|
-
*
|
|
12
|
+
* 実測 1.448** を切り上げた 1.45 とする。iOS(Hiragino 1.50 相当)にはこの clip 機序が無いので
|
|
13
|
+
* 基準にしない。
|
|
14
|
+
*
|
|
15
|
+
* この 1.448 は手実測メモではなく**CI が毎回機械検算する**(W8):
|
|
16
|
+
* scripts/lib/line-height-floor.test.ts が、実フォントから抽出した生メトリクス fixture
|
|
17
|
+
* (scripts/lib/fixtures/reference-font-metrics.json、sha256 + 取得元 URL 付き)に
|
|
18
|
+
* RN CustomLineHeightSpan の式 `max(A+D, 2·winAsc−A+D, 2·winDesc−D+A)/unitsPerEm` を適用し、
|
|
19
|
+
* DEFAULT_MIN_LINE_HEIGHT_RATIO = ceil(実測×100)/100 の完全一致を強制する。
|
|
20
|
+
* 参照フォントを差し替えるときは scripts/extract-font-metrics.ts で再抽出する(手順はそこに記載)。
|
|
14
21
|
*
|
|
15
22
|
* フォントを同梱する消費者は、そのフォントの実測比率を theme の
|
|
16
23
|
* `typography.minLineHeightRatio` で宣言する(例: LINE Seed JP = 1.61)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line-height.d.ts","sourceRoot":"","sources":["../../../../src/theme/line-height.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"line-height.d.ts","sourceRoot":"","sources":["../../../../src/theme/line-height.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;GAGG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAEzF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,EAC1B,QAAQ,EAAE,MAAM,GACf,MAAM,CAER"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "melta-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "melta for APP — melta デザインシステムの React Native UI kit。melta-contracts(デザイン契約)を single source of truth に RN 実装でその契約を満たす。アプリ本体ではなくライブラリ。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://app.melta.tsubotax.com",
|
package/src/theme/line-height.ts
CHANGED
|
@@ -9,8 +9,15 @@
|
|
|
9
9
|
*
|
|
10
10
|
* 下限は使用フォントのメトリクス(ascent + descent)に依存するが、melta はフォントを同梱しない
|
|
11
11
|
* (system フォント運用)ので、既定は **Android の日本語 system フォント Noto Sans CJK JP の
|
|
12
|
-
* 実測 1.448
|
|
13
|
-
*
|
|
12
|
+
* 実測 1.448** を切り上げた 1.45 とする。iOS(Hiragino 1.50 相当)にはこの clip 機序が無いので
|
|
13
|
+
* 基準にしない。
|
|
14
|
+
*
|
|
15
|
+
* この 1.448 は手実測メモではなく**CI が毎回機械検算する**(W8):
|
|
16
|
+
* scripts/lib/line-height-floor.test.ts が、実フォントから抽出した生メトリクス fixture
|
|
17
|
+
* (scripts/lib/fixtures/reference-font-metrics.json、sha256 + 取得元 URL 付き)に
|
|
18
|
+
* RN CustomLineHeightSpan の式 `max(A+D, 2·winAsc−A+D, 2·winDesc−D+A)/unitsPerEm` を適用し、
|
|
19
|
+
* DEFAULT_MIN_LINE_HEIGHT_RATIO = ceil(実測×100)/100 の完全一致を強制する。
|
|
20
|
+
* 参照フォントを差し替えるときは scripts/extract-font-metrics.ts で再抽出する(手順はそこに記載)。
|
|
14
21
|
*
|
|
15
22
|
* フォントを同梱する消費者は、そのフォントの実測比率を theme の
|
|
16
23
|
* `typography.minLineHeightRatio` で宣言する(例: LINE Seed JP = 1.61)。
|