Skip to content

Commit 5df8f1a

Browse files
fix(website): update calculations for percentages (#4175)
* fix(website): update calculations for percentages * fix(vs-plugin): resolve issue with tests not runnnig --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
1 parent 077d397 commit 5df8f1a

File tree

10 files changed

+140
-28
lines changed

10 files changed

+140
-28
lines changed

.changeset/lemon-clouds-hug.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@twilio-paste/core": patch
3+
"@twilio-paste/design-tokens": patch
4+
"@twilio-paste/theme": patch
5+
---
6+
7+
[Tokens,Theme] fixed an issue when converting percentages to pixel values as alternatives text descriptions

apps/vs-code-intellisense/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@
9898
"@types/vscode": "^1.68.0",
9999
"@typescript-eslint/eslint-plugin": "^5.46.0",
100100
"@typescript-eslint/parser": "^5.46.0",
101-
"@vscode/test-electron": "^2.1.5",
101+
"@vscode/test-electron": "^2.4.1",
102102
"esbuild": "^0.15.18",
103103
"eslint": "^8.29.0",
104104
"glob": "^10.0.0",

apps/vs-code-intellisense/src/test/suite/extension.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ suite("Extension Test Suite", () => {
9090
test("paste token items by attribute name", () => {
9191
const borderRadiusToken = myExtension.getAttributeTokens("borderRadius");
9292

93-
assert.strictEqual(borderRadiusToken.length, 6);
93+
assert.strictEqual(borderRadiusToken.length, 12);
9494

9595
const zIndexToken = myExtension.getAttributeTokens("zIndex");
9696

apps/vs-code-intellisense/src/test/suite/index.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as path from "path";
2-
import glob from "glob";
2+
import { glob } from "glob";
33
import Mocha from "mocha";
44

55
export function run(): Promise<void> {
@@ -11,13 +11,8 @@ export function run(): Promise<void> {
1111

1212
const testsRoot = path.resolve(__dirname, "..");
1313

14-
return new Promise((c, e) => {
15-
glob("**/**.test.js", { cwd: testsRoot }, (err: any, files: string[]) => {
16-
if (err) {
17-
return e(err);
18-
}
19-
20-
// Add files to the test suite
14+
return new Promise((c, e) =>
15+
glob("**/**.test.js", { cwd: testsRoot }).then((files) => {
2116
files.forEach((f: string) => mocha.addFile(path.resolve(testsRoot, f)));
2217

2318
try {
@@ -33,6 +28,6 @@ export function run(): Promise<void> {
3328
console.error(err);
3429
e(err);
3530
}
36-
});
37-
});
31+
}),
32+
);
3833
}

apps/vs-code-intellisense/src/test/suite/utils/rem-to-px.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ suite("remToPx", () => {
1919
assert.strictEqual(result, "0.5rem (8px)");
2020
});
2121

22+
test("converts 100% to 16px", () => {
23+
const value = "100%";
24+
25+
const result = remToPx(value);
26+
27+
assert.strictEqual(result, "100% (16px)");
28+
});
29+
2230
test("converts 1rem to 16px", () => {
2331
const value = "1rem";
2432

apps/vs-code-intellisense/src/utils/rem-to-px.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,25 @@
33
* If the value is not a rem unit, it returns the original value.
44
*/
55
export const remToPx = (value: string): string => {
6-
if (!value.includes("rem")) {
6+
if (!value.includes("rem") && !value.includes("%")) {
77
return value;
88
}
99

10-
const remValue = Number(value.replace("rem", "").trim());
10+
let remValue;
11+
12+
if (value.includes("%")) {
13+
const percentage = Number.parseFloat(value.replace("%", ""));
14+
// get decimal value which fixes multiplication issue.
15+
remValue = percentage / 100;
16+
} else {
17+
remValue = Number(value.replace("rem", "").trim());
18+
}
19+
1120
if (isNaN(remValue)) {
1221
return value;
1322
}
1423

1524
const pxValue = remValue * 16;
1625

17-
return `${remValue}rem (${pxValue}px)`;
26+
return value.includes("%") ? `${value} (${pxValue}px)` : `${remValue}rem (${pxValue}px)`;
1827
};

packages/paste-design-tokens/utils/remToPx.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,15 @@ type UnitValue = string | number;
55
type UnitType = "string" | "number";
66

77
export const remToPx = (rem: UnitValue, type: UnitType = "number"): UnitValue => {
8-
const remValue = typeof rem === "string" ? Number.parseFloat(rem.replace("rem", "")) : rem;
8+
let remValue;
9+
10+
if (typeof rem === "string" && rem.includes("%")) {
11+
const percentage = Number.parseFloat(rem.replace("%", ""));
12+
// get decimal value which fixes multiplication issue.
13+
remValue = percentage / 100;
14+
} else {
15+
remValue = typeof rem === "string" ? Number.parseFloat(rem.replace("rem", "")) : rem;
16+
}
917
// We round because decimal px values can cause issues.
1018
const pxValue = Math.round(remValue * PX_PER_REM);
1119

packages/paste-theme/__tests__/remToPx.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ describe("remToPx", () => {
55
expect(remToPx("1.5rem")).toBe(24);
66
expect(remToPx("1.5rem", "number")).toBe(24);
77
expect(remToPx("1.5rem", "string")).toBe("24px");
8+
expect(remToPx("100%")).toBe(16);
89
});
910

1011
it("handles input numbers", (): void => {

packages/paste-theme/src/utils/remToPx.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,15 @@ type UnitValue = string | number;
55
type UnitType = "string" | "number";
66

77
export const remToPx = (rem: UnitValue, type: UnitType = "number"): UnitValue => {
8-
const remValue = typeof rem === "string" ? Number.parseFloat(rem.replace("rem", "")) : rem;
8+
let remValue;
9+
10+
if (typeof rem === "string" && rem.includes("%")) {
11+
const percentage = Number.parseFloat(rem.replace("%", ""));
12+
// get decimal value which fixes multiplication issue.
13+
remValue = percentage / 100;
14+
} else {
15+
remValue = typeof rem === "string" ? Number.parseFloat(rem.replace("rem", "")) : rem;
16+
}
917
// We round because decimal px values can cause issues.
1018
const pxValue = Math.round(remValue * PX_PER_REM);
1119

yarn.lock

Lines changed: 87 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18044,15 +18044,16 @@ __metadata:
1804418044
languageName: node
1804518045
linkType: hard
1804618046

18047-
"@vscode/test-electron@npm:^2.1.5":
18048-
version: 2.3.0
18049-
resolution: "@vscode/test-electron@npm:2.3.0"
18047+
"@vscode/test-electron@npm:^2.4.1":
18048+
version: 2.4.1
18049+
resolution: "@vscode/test-electron@npm:2.4.1"
1805018050
dependencies:
18051-
http-proxy-agent: ^4.0.1
18052-
https-proxy-agent: ^5.0.0
18051+
http-proxy-agent: ^7.0.2
18052+
https-proxy-agent: ^7.0.5
1805318053
jszip: ^3.10.1
18054-
semver: ^7.3.8
18055-
checksum: 745679a14ca651a901dff301fae20d0636ce16357dbde511cece726179d27e4fa4c42acf5abcb64c1768f8afe141b2a5884375d1fc35a086d770a19c0260b21b
18054+
ora: ^7.0.1
18055+
semver: ^7.6.2
18056+
checksum: e4dbf2f3c14b2e9347b7c67bf53ef72281c2186f771101a750eaeb6c2981ce5e8047032a81920dc659fcb1dc968b9ebfb5e3b4a130199a4578a62147f3c7cf38
1805618057
languageName: node
1805718058
linkType: hard
1805818059

@@ -18570,6 +18571,15 @@ __metadata:
1857018571
languageName: node
1857118572
linkType: hard
1857218573

18574+
"agent-base@npm:^7.1.0":
18575+
version: 7.1.1
18576+
resolution: "agent-base@npm:7.1.1"
18577+
dependencies:
18578+
debug: ^4.3.4
18579+
checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037
18580+
languageName: node
18581+
linkType: hard
18582+
1857318583
"agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.2.1":
1857418584
version: 4.3.0
1857518585
resolution: "agentkeepalive@npm:4.3.0"
@@ -21137,7 +21147,7 @@ __metadata:
2113721147
languageName: node
2113821148
linkType: hard
2113921149

21140-
"chalk@npm:^5.0.0, chalk@npm:^5.0.1":
21150+
"chalk@npm:^5.0.0, chalk@npm:^5.0.1, chalk@npm:^5.3.0":
2114121151
version: 5.3.0
2114221152
resolution: "chalk@npm:5.3.0"
2114321153
checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80
@@ -21491,7 +21501,7 @@ __metadata:
2149121501
languageName: node
2149221502
linkType: hard
2149321503

21494-
"cli-spinners@npm:^2.6.1":
21504+
"cli-spinners@npm:^2.6.1, cli-spinners@npm:^2.9.0":
2149521505
version: 2.9.2
2149621506
resolution: "cli-spinners@npm:2.9.2"
2149721507
checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c
@@ -28756,6 +28766,16 @@ fsevents@^1.2.7:
2875628766
languageName: node
2875728767
linkType: hard
2875828768

28769+
"http-proxy-agent@npm:^7.0.2":
28770+
version: 7.0.2
28771+
resolution: "http-proxy-agent@npm:7.0.2"
28772+
dependencies:
28773+
agent-base: ^7.1.0
28774+
debug: ^4.3.4
28775+
checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3
28776+
languageName: node
28777+
linkType: hard
28778+
2875928779
"http-proxy-middleware@npm:^2.0.0":
2876028780
version: 2.0.4
2876128781
resolution: "http-proxy-middleware@npm:2.0.4"
@@ -28846,6 +28866,16 @@ fsevents@^1.2.7:
2884628866
languageName: node
2884728867
linkType: hard
2884828868

28869+
"https-proxy-agent@npm:^7.0.5":
28870+
version: 7.0.5
28871+
resolution: "https-proxy-agent@npm:7.0.5"
28872+
dependencies:
28873+
agent-base: ^7.0.2
28874+
debug: 4
28875+
checksum: 2e1a28960f13b041a50702ee74f240add8e75146a5c37fc98f1960f0496710f6918b3a9fe1e5aba41e50f58e6df48d107edd9c405c5f0d73ac260dabf2210857
28876+
languageName: node
28877+
linkType: hard
28878+
2884928879
"human-id@npm:^1.0.2":
2885028880
version: 1.0.2
2885128881
resolution: "human-id@npm:1.0.2"
@@ -30194,7 +30224,7 @@ fsevents@^1.2.7:
3019430224
languageName: node
3019530225
linkType: hard
3019630226

30197-
"is-unicode-supported@npm:^1.1.0":
30227+
"is-unicode-supported@npm:^1.1.0, is-unicode-supported@npm:^1.3.0":
3019830228
version: 1.3.0
3019930229
resolution: "is-unicode-supported@npm:1.3.0"
3020030230
checksum: 20a1fc161afafaf49243551a5ac33b6c4cf0bbcce369fcd8f2951fbdd000c30698ce320de3ee6830497310a8f41880f8066d440aa3eb0a853e2aa4836dd89abc
@@ -36579,6 +36609,23 @@ fsevents@^1.2.7:
3657936609
languageName: node
3658036610
linkType: hard
3658136611

36612+
"ora@npm:^7.0.1":
36613+
version: 7.0.1
36614+
resolution: "ora@npm:7.0.1"
36615+
dependencies:
36616+
chalk: ^5.3.0
36617+
cli-cursor: ^4.0.0
36618+
cli-spinners: ^2.9.0
36619+
is-interactive: ^2.0.0
36620+
is-unicode-supported: ^1.3.0
36621+
log-symbols: ^5.1.0
36622+
stdin-discarder: ^0.1.0
36623+
string-width: ^6.1.0
36624+
strip-ansi: ^7.1.0
36625+
checksum: 0842b8b9a96a8586085cafdc25077c76fed8ade072c52c53e748cf40a214731d2215a4d6081d8fbd6203d2b897e834332bda53eb64afd1a5968da17daf020bff
36626+
languageName: node
36627+
linkType: hard
36628+
3658236629
"ordered-read-streams@npm:^1.0.0":
3658336630
version: 1.0.1
3658436631
resolution: "ordered-read-streams@npm:1.0.1"
@@ -41344,6 +41391,15 @@ resolve@^2.0.0-next.3:
4134441391
languageName: node
4134541392
linkType: hard
4134641393

41394+
"semver@npm:^7.6.2":
41395+
version: 7.6.3
41396+
resolution: "semver@npm:7.6.3"
41397+
bin:
41398+
semver: bin/semver.js
41399+
checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8
41400+
languageName: node
41401+
linkType: hard
41402+
4134741403
"send@npm:0.16.2":
4134841404
version: 0.16.2
4134941405
resolution: "send@npm:0.16.2"
@@ -42673,6 +42729,17 @@ resolve@^2.0.0-next.3:
4267342729
languageName: node
4267442730
linkType: hard
4267542731

42732+
"string-width@npm:^6.1.0":
42733+
version: 6.1.0
42734+
resolution: "string-width@npm:6.1.0"
42735+
dependencies:
42736+
eastasianwidth: ^0.2.0
42737+
emoji-regex: ^10.2.1
42738+
strip-ansi: ^7.0.1
42739+
checksum: 8aefb456a230c8d7fe254049b1b2d62603da1a3b6c7fc9f3332f6779583cc1c72653f9b6e4cd0c1c92befee1565d4a0a7542d09ba4ceb6d96af02fbd8425bb03
42740+
languageName: node
42741+
linkType: hard
42742+
4267642743
"string.prototype.codepointat@npm:^0.2.1":
4267742744
version: 0.2.1
4267842745
resolution: "string.prototype.codepointat@npm:0.2.1"
@@ -42800,6 +42867,15 @@ resolve@^2.0.0-next.3:
4280042867
languageName: node
4280142868
linkType: hard
4280242869

42870+
"strip-ansi@npm:^7.1.0":
42871+
version: 7.1.0
42872+
resolution: "strip-ansi@npm:7.1.0"
42873+
dependencies:
42874+
ansi-regex: ^6.0.1
42875+
checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d
42876+
languageName: node
42877+
linkType: hard
42878+
4280342879
"strip-bom@npm:^2.0.0":
4280442880
version: 2.0.0
4280542881
resolution: "strip-bom@npm:2.0.0"
@@ -45417,7 +45493,7 @@ resolve@^2.0.0-next.3:
4541745493
"@types/vscode": ^1.68.0
4541845494
"@typescript-eslint/eslint-plugin": ^5.46.0
4541945495
"@typescript-eslint/parser": ^5.46.0
45420-
"@vscode/test-electron": ^2.1.5
45496+
"@vscode/test-electron": ^2.4.1
4542145497
base-64: 1.0.0
4542245498
esbuild: ^0.15.18
4542345499
eslint: ^8.29.0

0 commit comments

Comments
 (0)