Skip to content

Commit c395d7d

Browse files
authored
fix: parseLetterSpacing. Increase rounding precision (#63)
1 parent 5ba8d85 commit c395d7d

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

src/compiler/declarations.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,17 @@ function parseLetterSpacing(
757757
if (value.type === "normal") {
758758
return;
759759
}
760-
return parseLength(value.value, builder);
760+
const descriptor = parseLength(value.value, builder);
761+
762+
if (
763+
Array.isArray(descriptor) &&
764+
descriptor[1] === "em" &&
765+
typeof descriptor[2] === "number"
766+
) {
767+
return descriptor[2];
768+
}
769+
770+
return descriptor;
761771
}
762772

763773
function parseTextDecoration(
@@ -1166,7 +1176,7 @@ export function parseLength(
11661176
const { inlineRem = 14 } = builder.getOptions();
11671177

11681178
if (typeof length === "number") {
1169-
return length;
1179+
return round(length);
11701180
}
11711181

11721182
if ("unit" in length) {
@@ -1177,19 +1187,19 @@ export function parseLength(
11771187
} else if (length.value === -Infinity) {
11781188
return -9999;
11791189
} else {
1180-
return length.value;
1190+
return round(length.value);
11811191
}
11821192
}
11831193
case "rem":
11841194
if (typeof inlineRem === "number") {
11851195
return length.value * inlineRem;
11861196
} else {
1187-
return [{}, "rem", length.value];
1197+
return [{}, "rem", round(length.value)];
11881198
}
11891199
case "vw":
11901200
case "vh":
11911201
case "em":
1192-
return [{}, length.unit, length.value, 1];
1202+
return [{}, length.unit, round(length.value), 1];
11931203
case "in":
11941204
case "cm":
11951205
case "mm":
@@ -2288,7 +2298,7 @@ export function parseSVGPaint(
22882298
}
22892299

22902300
export function round(number: number) {
2291-
return Math.round((number + Number.EPSILON) * 100) / 100;
2301+
return Math.round((number + Number.EPSILON) * 10000) / 10000;
22922302
}
22932303

22942304
export function parseDimensionPercentageFor_LengthValue(

src/runtime/native/conditions/media-query.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function testComparison(mediaQuery: MediaCondition, get: Getter): Boolean {
3939

4040
switch (mediaQuery[1]) {
4141
case "platform":
42-
return right === Platform.OS;
42+
return right === "native" || right === Platform.OS;
4343
case "prefers-color-scheme": {
4444
return right === get(colorScheme);
4545
}

src/runtime/native/styles/units.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@
22
import { rem as remObs, vh as vhObs, vw as vwObs } from "../reactivity";
33
import type { StyleFunctionResolver } from "./resolve";
44

5-
export const em: StyleFunctionResolver = (resolve, func) => {
5+
export const em: StyleFunctionResolver = (resolve, func, get) => {
66
let value = func[2];
77

88
if (!value) {
99
return;
1010
}
1111

12-
const emValue = resolve([{}, "var", ["__rn-css-em"]]);
12+
let emValue = resolve([{}, "var", ["__rn-css-em"]]);
1313

1414
if (typeof emValue !== "number") {
15-
return undefined;
15+
emValue = get(remObs);
16+
}
17+
18+
if (typeof emValue !== "number") {
19+
return;
1620
}
1721

1822
return round(Number(value) * emValue);

0 commit comments

Comments
 (0)