Skip to content

Commit 245e593

Browse files
committed
#152 - Add var (css variable usage) wherever cascading is possible
1 parent e6eff6b commit 245e593

File tree

5 files changed

+299
-80
lines changed

5 files changed

+299
-80
lines changed

bs-css/__tests__/Css_test.re

+25-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,30 @@ open CssForTest;
1818
let toBeJson = x => Expect.toBe(x->Js.Json.stringifyAny);
1919
let r = x => toJson([x]); /* simple rule for more readable tests */
2020

21+
describe("Var", () => {
22+
test("test usage (limited)", () =>
23+
expect(
24+
(r(color(var("foo"))), r(marginTop(var("--bar"))))
25+
->Js.Json.stringifyAny,
26+
)
27+
|> toBeJson(({"color": "var(--foo)"}, {"marginTop": "var(--bar)"}))
28+
);
29+
30+
test("test usage with default (limited)", () =>
31+
expect(
32+
(
33+
r(textDecoration(varDefault("foo", "default"))),
34+
r(alignItems(varDefault("--bar", "default"))),
35+
)
36+
->Js.Json.stringifyAny,
37+
)
38+
|> toBeJson((
39+
{"textDecoration": "var(--foo,default)"},
40+
{"alignItems": "var(--bar,default)"},
41+
))
42+
);
43+
});
44+
2145
describe("Color style", () =>
2246
test("test values", () =>
2347
expect(
@@ -841,4 +865,4 @@ describe("cursor", () =>
841865
{"cursor": "zoom-out"},
842866
))
843867
)
844-
);
868+
);

bs-css/src/Css_AtomicTypes.re

+14
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@ module Cascading = {
2222
| `unset => "unset";
2323
};
2424

25+
module Var = {
26+
type t = [ | `var(string) | `varDefault(string, string)];
27+
28+
let var = x => `var(x);
29+
let varDefault = (x, default) => `varDefault((x, default));
30+
31+
let prefix = x => Js.String.startsWith("--", x) ? x : "--" ++ x;
32+
33+
let toString =
34+
fun
35+
| `var(x) => "var(" ++ prefix(x) ++ ")"
36+
| `varDefault(x, v) => "var(" ++ prefix(x) ++ "," ++ v ++ ")";
37+
};
38+
2539
module Time = {
2640
type t = [ | `s(float) | `ms(float)];
2741

bs-css/src/Css_AtomicTypes.rei

+9
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ module Cascading: {
1010
let toString: t => string;
1111
};
1212

13+
module Var: {
14+
type t = [ | `var(string) | `varDefault(string, string)];
15+
16+
let var: string => [> t];
17+
let varDefault: (string, string) => [> t];
18+
19+
let toString: t => string;
20+
};
21+
1322
module Time: {
1423
/**
1524
The <time> CSS data type represents a time value expressed in seconds or milliseconds.

0 commit comments

Comments
 (0)