@styleframe/theme 1.0.1 → 1.0.3
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/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/dist/theme.d.ts +772 -0
- package/dist/theme.js +2507 -0
- package/dist/theme.umd.cjs +4 -0
- package/package.json +14 -4
- package/.tsbuildinfo +0 -1
- package/src/constants/border.ts +0 -0
- package/src/constants/breakpoint.ts +0 -0
- package/src/constants/color.ts +0 -0
- package/src/constants/index.ts +0 -4
- package/src/constants/scale.ts +0 -3
- package/src/constants/typography.ts +0 -0
- package/src/index.ts +0 -4
- package/src/shims.d.ts +0 -8
- package/src/types.ts +0 -32
- package/src/utils/createUseVariable.test.ts +0 -928
- package/src/utils/createUseVariable.ts +0 -107
- package/src/utils/index.ts +0 -1
- package/src/variables/index.ts +0 -20
- package/src/variables/useBorderColor.ts +0 -27
- package/src/variables/useBorderRadius.test.ts +0 -335
- package/src/variables/useBorderRadius.ts +0 -26
- package/src/variables/useBorderStyle.test.ts +0 -569
- package/src/variables/useBorderStyle.ts +0 -49
- package/src/variables/useBorderWidth.test.ts +0 -535
- package/src/variables/useBorderWidth.ts +0 -38
- package/src/variables/useBoxShadow.test.ts +0 -336
- package/src/variables/useBoxShadow.ts +0 -54
- package/src/variables/useBreakpoint.test.ts +0 -447
- package/src/variables/useBreakpoint.ts +0 -38
- package/src/variables/useColor.test.ts +0 -360
- package/src/variables/useColor.ts +0 -35
- package/src/variables/useColorLightness.test.ts +0 -168
- package/src/variables/useColorLightness.ts +0 -59
- package/src/variables/useColorShade.test.ts +0 -166
- package/src/variables/useColorShade.ts +0 -52
- package/src/variables/useColorTint.test.ts +0 -164
- package/src/variables/useColorTint.ts +0 -52
- package/src/variables/useEasing.ts +0 -0
- package/src/variables/useFontFamily.test.ts +0 -228
- package/src/variables/useFontFamily.ts +0 -33
- package/src/variables/useFontSize.test.ts +0 -299
- package/src/variables/useFontSize.ts +0 -32
- package/src/variables/useFontStyle.test.ts +0 -555
- package/src/variables/useFontStyle.ts +0 -37
- package/src/variables/useFontWeight.test.ts +0 -650
- package/src/variables/useFontWeight.ts +0 -55
- package/src/variables/useLetterSpacing.test.ts +0 -455
- package/src/variables/useLetterSpacing.ts +0 -41
- package/src/variables/useLineHeight.test.ts +0 -410
- package/src/variables/useLineHeight.ts +0 -41
- package/src/variables/useMultiplier.test.ts +0 -722
- package/src/variables/useMultiplier.ts +0 -44
- package/src/variables/useScale.test.ts +0 -393
- package/src/variables/useScale.ts +0 -52
- package/src/variables/useScalePowers.test.ts +0 -412
- package/src/variables/useScalePowers.ts +0 -35
- package/src/variables/useSpacing.test.ts +0 -309
- package/src/variables/useSpacing.ts +0 -26
- package/src/vite-env.d.ts +0 -1
- package/test-scale.js +0 -22
- package/tsconfig.json +0 -7
- package/vite.config.ts +0 -5
|
@@ -1,455 +0,0 @@
|
|
|
1
|
-
import type { Variable } from "@styleframe/core";
|
|
2
|
-
import { styleframe } from "@styleframe/core";
|
|
3
|
-
import { consume } from "@styleframe/transpiler";
|
|
4
|
-
import {
|
|
5
|
-
defaultLetterSpacingValues,
|
|
6
|
-
useLetterSpacing,
|
|
7
|
-
} from "./useLetterSpacing";
|
|
8
|
-
|
|
9
|
-
describe("useLetterSpacing", () => {
|
|
10
|
-
it("should create all letter spacing variables with correct names and values", () => {
|
|
11
|
-
const s = styleframe();
|
|
12
|
-
const {
|
|
13
|
-
letterSpacingTighter,
|
|
14
|
-
letterSpacingTight,
|
|
15
|
-
letterSpacingNormal,
|
|
16
|
-
letterSpacingWide,
|
|
17
|
-
letterSpacingWider,
|
|
18
|
-
letterSpacing,
|
|
19
|
-
} = useLetterSpacing(s);
|
|
20
|
-
|
|
21
|
-
expect(letterSpacingTighter).toEqual({
|
|
22
|
-
type: "variable",
|
|
23
|
-
name: "letter-spacing--tighter",
|
|
24
|
-
value: "-0.05em",
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
expect(letterSpacingTight).toEqual({
|
|
28
|
-
type: "variable",
|
|
29
|
-
name: "letter-spacing--tight",
|
|
30
|
-
value: "-0.025em",
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
expect(letterSpacingNormal).toEqual({
|
|
34
|
-
type: "variable",
|
|
35
|
-
name: "letter-spacing--normal",
|
|
36
|
-
value: "normal",
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
expect(letterSpacingWide).toEqual({
|
|
40
|
-
type: "variable",
|
|
41
|
-
name: "letter-spacing--wide",
|
|
42
|
-
value: "0.05em",
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
expect(letterSpacingWider).toEqual({
|
|
46
|
-
type: "variable",
|
|
47
|
-
name: "letter-spacing--wider",
|
|
48
|
-
value: "0.1em",
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
expect(letterSpacing).toEqual({
|
|
52
|
-
type: "variable",
|
|
53
|
-
name: "letter-spacing",
|
|
54
|
-
value: {
|
|
55
|
-
type: "reference",
|
|
56
|
-
name: "letter-spacing--normal",
|
|
57
|
-
fallback: undefined,
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it("should add all letter spacing variables to root", () => {
|
|
63
|
-
const s = styleframe();
|
|
64
|
-
useLetterSpacing(s);
|
|
65
|
-
|
|
66
|
-
expect(s.root.variables).toHaveLength(6);
|
|
67
|
-
expect(s.root.variables[0]?.name).toBe("letter-spacing--tighter");
|
|
68
|
-
expect(s.root.variables[1]?.name).toBe("letter-spacing--tight");
|
|
69
|
-
expect(s.root.variables[2]?.name).toBe("letter-spacing--normal");
|
|
70
|
-
expect(s.root.variables[3]?.name).toBe("letter-spacing--wide");
|
|
71
|
-
expect(s.root.variables[4]?.name).toBe("letter-spacing--wider");
|
|
72
|
-
expect(s.root.variables[5]?.name).toBe("letter-spacing");
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it("should return all letter spacing variables in an object", () => {
|
|
76
|
-
const s = styleframe();
|
|
77
|
-
const letterSpacings = useLetterSpacing(s);
|
|
78
|
-
|
|
79
|
-
expect(Object.keys(letterSpacings)).toEqual([
|
|
80
|
-
"letterSpacingTighter",
|
|
81
|
-
"letterSpacingTight",
|
|
82
|
-
"letterSpacingNormal",
|
|
83
|
-
"letterSpacingWide",
|
|
84
|
-
"letterSpacingWider",
|
|
85
|
-
"letterSpacing",
|
|
86
|
-
]);
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it("should compile to correct CSS output using consume", () => {
|
|
90
|
-
const s = styleframe();
|
|
91
|
-
useLetterSpacing(s);
|
|
92
|
-
|
|
93
|
-
const css = consume(s.root, s.options);
|
|
94
|
-
|
|
95
|
-
expect(css).toBe(`:root {
|
|
96
|
-
--letter-spacing--tighter: -0.05em;
|
|
97
|
-
--letter-spacing--tight: -0.025em;
|
|
98
|
-
--letter-spacing--normal: normal;
|
|
99
|
-
--letter-spacing--wide: 0.05em;
|
|
100
|
-
--letter-spacing--wider: 0.1em;
|
|
101
|
-
--letter-spacing: var(--letter-spacing--normal);
|
|
102
|
-
}`);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it("should compile individual letter spacing variable to correct CSS", () => {
|
|
106
|
-
const s = styleframe();
|
|
107
|
-
const { letterSpacingWide } = useLetterSpacing(s);
|
|
108
|
-
|
|
109
|
-
const css = consume(letterSpacingWide, s.options);
|
|
110
|
-
|
|
111
|
-
expect(css).toBe("--letter-spacing--wide: 0.05em;");
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it("should not create duplicate variables when called multiple times", () => {
|
|
115
|
-
const s = styleframe();
|
|
116
|
-
const letterSpacings1 = useLetterSpacing(s);
|
|
117
|
-
const letterSpacings2 = useLetterSpacing(s);
|
|
118
|
-
|
|
119
|
-
// Should return the same variables (default: true behavior)
|
|
120
|
-
expect(letterSpacings1.letterSpacingTighter).toBe(
|
|
121
|
-
letterSpacings2.letterSpacingTighter,
|
|
122
|
-
);
|
|
123
|
-
expect(letterSpacings1.letterSpacing).toBe(letterSpacings2.letterSpacing);
|
|
124
|
-
expect(s.root.variables).toHaveLength(6);
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
it("should allow letter spacing variables to be used as references", () => {
|
|
128
|
-
const s = styleframe();
|
|
129
|
-
const { letterSpacingWider } = useLetterSpacing(s);
|
|
130
|
-
|
|
131
|
-
const customLetterSpacing = s.variable(
|
|
132
|
-
"custom-letter-spacing",
|
|
133
|
-
s.ref(letterSpacingWider),
|
|
134
|
-
);
|
|
135
|
-
|
|
136
|
-
expect(customLetterSpacing.value).toEqual({
|
|
137
|
-
type: "reference",
|
|
138
|
-
name: "letter-spacing--wider",
|
|
139
|
-
fallback: undefined,
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
const css = consume(s.root, s.options);
|
|
143
|
-
expect(css).toEqual(`:root {
|
|
144
|
-
--letter-spacing--tighter: -0.05em;
|
|
145
|
-
--letter-spacing--tight: -0.025em;
|
|
146
|
-
--letter-spacing--normal: normal;
|
|
147
|
-
--letter-spacing--wide: 0.05em;
|
|
148
|
-
--letter-spacing--wider: 0.1em;
|
|
149
|
-
--letter-spacing: var(--letter-spacing--normal);
|
|
150
|
-
--custom-letter-spacing: var(--letter-spacing--wider);
|
|
151
|
-
}`);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it("should work with selector overrides", () => {
|
|
155
|
-
const s = styleframe();
|
|
156
|
-
const { letterSpacingNormal } = useLetterSpacing(s);
|
|
157
|
-
|
|
158
|
-
s.selector(".custom-letter-spacing", ({ variable }) => {
|
|
159
|
-
variable(letterSpacingNormal, "0.01em");
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
const css = consume(s.root, s.options);
|
|
163
|
-
|
|
164
|
-
expect(css).toEqual(`:root {
|
|
165
|
-
--letter-spacing--tighter: -0.05em;
|
|
166
|
-
--letter-spacing--tight: -0.025em;
|
|
167
|
-
--letter-spacing--normal: normal;
|
|
168
|
-
--letter-spacing--wide: 0.05em;
|
|
169
|
-
--letter-spacing--wider: 0.1em;
|
|
170
|
-
--letter-spacing: var(--letter-spacing--normal);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
.custom-letter-spacing {
|
|
174
|
-
--letter-spacing--normal: 0.01em;
|
|
175
|
-
}`);
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
describe("type safety", () => {
|
|
179
|
-
it("should preserve exact letter spacing variable names in return type", () => {
|
|
180
|
-
const s = styleframe();
|
|
181
|
-
const letterSpacings = useLetterSpacing(s);
|
|
182
|
-
|
|
183
|
-
// Type assertions to verify the generic types are preserved
|
|
184
|
-
const tighter: Variable<"letter-spacing--tighter"> =
|
|
185
|
-
letterSpacings.letterSpacingTighter;
|
|
186
|
-
const tight: Variable<"letter-spacing--tight"> =
|
|
187
|
-
letterSpacings.letterSpacingTight;
|
|
188
|
-
const normal: Variable<"letter-spacing--normal"> =
|
|
189
|
-
letterSpacings.letterSpacingNormal;
|
|
190
|
-
const wide: Variable<"letter-spacing--wide"> =
|
|
191
|
-
letterSpacings.letterSpacingWide;
|
|
192
|
-
const wider: Variable<"letter-spacing--wider"> =
|
|
193
|
-
letterSpacings.letterSpacingWider;
|
|
194
|
-
const letterSpacing: Variable<"letter-spacing"> =
|
|
195
|
-
letterSpacings.letterSpacing;
|
|
196
|
-
|
|
197
|
-
expect(tighter.name).toBe("letter-spacing--tighter");
|
|
198
|
-
expect(tight.name).toBe("letter-spacing--tight");
|
|
199
|
-
expect(normal.name).toBe("letter-spacing--normal");
|
|
200
|
-
expect(wide.name).toBe("letter-spacing--wide");
|
|
201
|
-
expect(wider.name).toBe("letter-spacing--wider");
|
|
202
|
-
expect(letterSpacing.name).toBe("letter-spacing");
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
it("should have correct string value types", () => {
|
|
206
|
-
const s = styleframe();
|
|
207
|
-
const letterSpacings = useLetterSpacing(s);
|
|
208
|
-
|
|
209
|
-
expect(typeof letterSpacings.letterSpacingTighter.value).toBe("string");
|
|
210
|
-
expect(typeof letterSpacings.letterSpacingTight.value).toBe("string");
|
|
211
|
-
expect(typeof letterSpacings.letterSpacingNormal.value).toBe("string");
|
|
212
|
-
expect(typeof letterSpacings.letterSpacingWide.value).toBe("string");
|
|
213
|
-
expect(typeof letterSpacings.letterSpacingWider.value).toBe("string");
|
|
214
|
-
expect(typeof letterSpacings.letterSpacing.value).toBe("object");
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
describe("default letter spacing", () => {
|
|
219
|
-
it("should create a default letter spacing variable referencing normal by default", () => {
|
|
220
|
-
const s = styleframe();
|
|
221
|
-
const { letterSpacing } = useLetterSpacing(s);
|
|
222
|
-
|
|
223
|
-
expect(letterSpacing).toEqual({
|
|
224
|
-
type: "variable",
|
|
225
|
-
name: "letter-spacing",
|
|
226
|
-
value: {
|
|
227
|
-
type: "reference",
|
|
228
|
-
name: "letter-spacing--normal",
|
|
229
|
-
fallback: undefined,
|
|
230
|
-
},
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
it("should allow customizing the default letter spacing", () => {
|
|
235
|
-
const s = styleframe();
|
|
236
|
-
const { letterSpacing } = useLetterSpacing(s, {
|
|
237
|
-
...defaultLetterSpacingValues,
|
|
238
|
-
default: "@wide",
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
expect(letterSpacing.value).toEqual({
|
|
242
|
-
type: "reference",
|
|
243
|
-
name: "letter-spacing--wide",
|
|
244
|
-
fallback: undefined,
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
it("should compile default letter spacing to CSS correctly", () => {
|
|
249
|
-
const s = styleframe();
|
|
250
|
-
useLetterSpacing(s, {
|
|
251
|
-
...defaultLetterSpacingValues,
|
|
252
|
-
default: "@wider",
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
const css = consume(s.root, s.options);
|
|
256
|
-
|
|
257
|
-
expect(css).toEqual(`:root {
|
|
258
|
-
--letter-spacing--tighter: -0.05em;
|
|
259
|
-
--letter-spacing--tight: -0.025em;
|
|
260
|
-
--letter-spacing--normal: normal;
|
|
261
|
-
--letter-spacing--wide: 0.05em;
|
|
262
|
-
--letter-spacing--wider: 0.1em;
|
|
263
|
-
--letter-spacing: var(--letter-spacing--wider);
|
|
264
|
-
}`);
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
it("should work with different default letter spacings", () => {
|
|
268
|
-
const letterSpacings = ["tighter", "tight", "normal", "wide", "wider"];
|
|
269
|
-
|
|
270
|
-
for (const letterSpacingName of letterSpacings) {
|
|
271
|
-
const s = styleframe();
|
|
272
|
-
const { letterSpacing } = useLetterSpacing(s, {
|
|
273
|
-
...defaultLetterSpacingValues,
|
|
274
|
-
default: `@${letterSpacingName}`,
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
expect(letterSpacing.value).toEqual({
|
|
278
|
-
type: "reference",
|
|
279
|
-
name: `letter-spacing--${letterSpacingName}`,
|
|
280
|
-
fallback: undefined,
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
});
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
describe("letter spacing value relationships", () => {
|
|
287
|
-
it("should have negative values for tighter and tight", () => {
|
|
288
|
-
const s = styleframe();
|
|
289
|
-
const { letterSpacingTighter, letterSpacingTight } = useLetterSpacing(s);
|
|
290
|
-
|
|
291
|
-
expect(letterSpacingTighter.value).toBe("-0.05em");
|
|
292
|
-
expect(letterSpacingTight.value).toBe("-0.025em");
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
it("should have positive values for wide and wider", () => {
|
|
296
|
-
const s = styleframe();
|
|
297
|
-
const { letterSpacingWide, letterSpacingWider } = useLetterSpacing(s);
|
|
298
|
-
|
|
299
|
-
expect(letterSpacingWide.value).toBe("0.05em");
|
|
300
|
-
expect(letterSpacingWider.value).toBe("0.1em");
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
it("should have normal as the neutral value", () => {
|
|
304
|
-
const s = styleframe();
|
|
305
|
-
const { letterSpacingNormal } = useLetterSpacing(s);
|
|
306
|
-
|
|
307
|
-
expect(letterSpacingNormal.value).toBe("normal");
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
it("should have wider as the largest letter spacing", () => {
|
|
311
|
-
const s = styleframe();
|
|
312
|
-
const letterSpacings = useLetterSpacing(s);
|
|
313
|
-
|
|
314
|
-
expect(letterSpacings.letterSpacingWider.value).toBe("0.1em");
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
it("should have tighter as the smallest letter spacing", () => {
|
|
318
|
-
const s = styleframe();
|
|
319
|
-
const letterSpacings = useLetterSpacing(s);
|
|
320
|
-
|
|
321
|
-
expect(letterSpacings.letterSpacingTighter.value).toBe("-0.05em");
|
|
322
|
-
});
|
|
323
|
-
});
|
|
324
|
-
|
|
325
|
-
describe("practical usage", () => {
|
|
326
|
-
it("should work for creating typography with different letter spacings", () => {
|
|
327
|
-
const s = styleframe();
|
|
328
|
-
const { letterSpacingTight, letterSpacingWide } = useLetterSpacing(s);
|
|
329
|
-
|
|
330
|
-
s.selector("h1, h2, h3", ({ variable }) => {
|
|
331
|
-
variable("letter-spacing", s.ref(letterSpacingTight));
|
|
332
|
-
});
|
|
333
|
-
|
|
334
|
-
s.selector("p, li", ({ variable }) => {
|
|
335
|
-
variable("letter-spacing", s.ref(letterSpacingWide));
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
const css = consume(s.root, s.options);
|
|
339
|
-
expect(css).toEqual(`:root {
|
|
340
|
-
--letter-spacing--tighter: -0.05em;
|
|
341
|
-
--letter-spacing--tight: -0.025em;
|
|
342
|
-
--letter-spacing--normal: normal;
|
|
343
|
-
--letter-spacing--wide: 0.05em;
|
|
344
|
-
--letter-spacing--wider: 0.1em;
|
|
345
|
-
--letter-spacing: var(--letter-spacing--normal);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
h1, h2, h3 {
|
|
349
|
-
--letter-spacing: var(--letter-spacing--tight);
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
p, li {
|
|
353
|
-
--letter-spacing: var(--letter-spacing--wide);
|
|
354
|
-
}`);
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
it("should work for responsive letter spacing adjustments", () => {
|
|
358
|
-
const s = styleframe();
|
|
359
|
-
const { letterSpacingNormal, letterSpacingWide } = useLetterSpacing(s);
|
|
360
|
-
|
|
361
|
-
const bodyLetterSpacing = s.variable(
|
|
362
|
-
"body-letter-spacing",
|
|
363
|
-
s.ref(letterSpacingNormal),
|
|
364
|
-
);
|
|
365
|
-
|
|
366
|
-
s.selector("@media (min-width: 768px)", ({ variable }) => {
|
|
367
|
-
variable(bodyLetterSpacing, s.ref(letterSpacingWide));
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
const css = consume(s.root, s.options);
|
|
371
|
-
expect(css).toEqual(`:root {
|
|
372
|
-
--letter-spacing--tighter: -0.05em;
|
|
373
|
-
--letter-spacing--tight: -0.025em;
|
|
374
|
-
--letter-spacing--normal: normal;
|
|
375
|
-
--letter-spacing--wide: 0.05em;
|
|
376
|
-
--letter-spacing--wider: 0.1em;
|
|
377
|
-
--letter-spacing: var(--letter-spacing--normal);
|
|
378
|
-
--body-letter-spacing: var(--letter-spacing--normal);
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
@media (min-width: 768px) {
|
|
382
|
-
--body-letter-spacing: var(--letter-spacing--wide);
|
|
383
|
-
}`);
|
|
384
|
-
});
|
|
385
|
-
|
|
386
|
-
it("should work for theme-specific letter spacing overrides", () => {
|
|
387
|
-
const s = styleframe();
|
|
388
|
-
const { letterSpacingNormal, letterSpacingWider } = useLetterSpacing(s);
|
|
389
|
-
|
|
390
|
-
s.selector(".theme-spacious", ({ variable }) => {
|
|
391
|
-
variable(letterSpacingNormal, s.ref(letterSpacingWider));
|
|
392
|
-
});
|
|
393
|
-
|
|
394
|
-
const css = consume(s.root, s.options);
|
|
395
|
-
expect(css).toEqual(`:root {
|
|
396
|
-
--letter-spacing--tighter: -0.05em;
|
|
397
|
-
--letter-spacing--tight: -0.025em;
|
|
398
|
-
--letter-spacing--normal: normal;
|
|
399
|
-
--letter-spacing--wide: 0.05em;
|
|
400
|
-
--letter-spacing--wider: 0.1em;
|
|
401
|
-
--letter-spacing: var(--letter-spacing--normal);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
.theme-spacious {
|
|
405
|
-
--letter-spacing--normal: var(--letter-spacing--wider);
|
|
406
|
-
}`);
|
|
407
|
-
});
|
|
408
|
-
|
|
409
|
-
it("should work for uppercase text with wider spacing", () => {
|
|
410
|
-
const s = styleframe();
|
|
411
|
-
const { letterSpacingWider } = useLetterSpacing(s);
|
|
412
|
-
|
|
413
|
-
s.selector(".uppercase", ({ variable }) => {
|
|
414
|
-
variable("letter-spacing", s.ref(letterSpacingWider));
|
|
415
|
-
});
|
|
416
|
-
|
|
417
|
-
const css = consume(s.root, s.options);
|
|
418
|
-
expect(css).toEqual(`:root {
|
|
419
|
-
--letter-spacing--tighter: -0.05em;
|
|
420
|
-
--letter-spacing--tight: -0.025em;
|
|
421
|
-
--letter-spacing--normal: normal;
|
|
422
|
-
--letter-spacing--wide: 0.05em;
|
|
423
|
-
--letter-spacing--wider: 0.1em;
|
|
424
|
-
--letter-spacing: var(--letter-spacing--normal);
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
.uppercase {
|
|
428
|
-
--letter-spacing: var(--letter-spacing--wider);
|
|
429
|
-
}`);
|
|
430
|
-
});
|
|
431
|
-
|
|
432
|
-
it("should work for compact headings with tighter spacing", () => {
|
|
433
|
-
const s = styleframe();
|
|
434
|
-
const { letterSpacingTighter } = useLetterSpacing(s);
|
|
435
|
-
|
|
436
|
-
s.selector(".display-heading", ({ variable }) => {
|
|
437
|
-
variable("letter-spacing", s.ref(letterSpacingTighter));
|
|
438
|
-
});
|
|
439
|
-
|
|
440
|
-
const css = consume(s.root, s.options);
|
|
441
|
-
expect(css).toEqual(`:root {
|
|
442
|
-
--letter-spacing--tighter: -0.05em;
|
|
443
|
-
--letter-spacing--tight: -0.025em;
|
|
444
|
-
--letter-spacing--normal: normal;
|
|
445
|
-
--letter-spacing--wide: 0.05em;
|
|
446
|
-
--letter-spacing--wider: 0.1em;
|
|
447
|
-
--letter-spacing: var(--letter-spacing--normal);
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
.display-heading {
|
|
451
|
-
--letter-spacing: var(--letter-spacing--tighter);
|
|
452
|
-
}`);
|
|
453
|
-
});
|
|
454
|
-
});
|
|
455
|
-
});
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { createUseVariable } from "../utils";
|
|
2
|
-
|
|
3
|
-
export const defaultLetterSpacingValues = {
|
|
4
|
-
default: "@normal",
|
|
5
|
-
tighter: "-0.05em",
|
|
6
|
-
tight: "-0.025em",
|
|
7
|
-
normal: "normal",
|
|
8
|
-
wide: "0.05em",
|
|
9
|
-
wider: "0.1em",
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Create a set of letter-spacing variables for use in a Styleframe instance.
|
|
14
|
-
*
|
|
15
|
-
* @usage
|
|
16
|
-
* ```typescript
|
|
17
|
-
* import { styleframe } from "styleframe";
|
|
18
|
-
* import { useLetterSpacing } from "styleframe/theme";
|
|
19
|
-
*
|
|
20
|
-
* const s = styleframe();
|
|
21
|
-
*
|
|
22
|
-
* const {
|
|
23
|
-
* letterSpacingTighter,
|
|
24
|
-
* letterSpacingTight,
|
|
25
|
-
* letterSpacingNormal,
|
|
26
|
-
* letterSpacingWide,
|
|
27
|
-
* letterSpacingWider,
|
|
28
|
-
* letterSpacing,
|
|
29
|
-
* } = useLetterSpacing(s, {
|
|
30
|
-
* default: "normal",
|
|
31
|
-
* tighter: "-0.05em",
|
|
32
|
-
* tight: "-0.025em",
|
|
33
|
-
* normal: "normal",
|
|
34
|
-
* wide: "0.05em",
|
|
35
|
-
* wider: "0.1em",
|
|
36
|
-
* });
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
export const useLetterSpacing = createUseVariable("letter-spacing", {
|
|
40
|
-
defaults: defaultLetterSpacingValues,
|
|
41
|
-
});
|