@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.
Files changed (64) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/dist/theme.d.ts +772 -0
  4. package/dist/theme.js +2507 -0
  5. package/dist/theme.umd.cjs +4 -0
  6. package/package.json +14 -4
  7. package/.tsbuildinfo +0 -1
  8. package/src/constants/border.ts +0 -0
  9. package/src/constants/breakpoint.ts +0 -0
  10. package/src/constants/color.ts +0 -0
  11. package/src/constants/index.ts +0 -4
  12. package/src/constants/scale.ts +0 -3
  13. package/src/constants/typography.ts +0 -0
  14. package/src/index.ts +0 -4
  15. package/src/shims.d.ts +0 -8
  16. package/src/types.ts +0 -32
  17. package/src/utils/createUseVariable.test.ts +0 -928
  18. package/src/utils/createUseVariable.ts +0 -107
  19. package/src/utils/index.ts +0 -1
  20. package/src/variables/index.ts +0 -20
  21. package/src/variables/useBorderColor.ts +0 -27
  22. package/src/variables/useBorderRadius.test.ts +0 -335
  23. package/src/variables/useBorderRadius.ts +0 -26
  24. package/src/variables/useBorderStyle.test.ts +0 -569
  25. package/src/variables/useBorderStyle.ts +0 -49
  26. package/src/variables/useBorderWidth.test.ts +0 -535
  27. package/src/variables/useBorderWidth.ts +0 -38
  28. package/src/variables/useBoxShadow.test.ts +0 -336
  29. package/src/variables/useBoxShadow.ts +0 -54
  30. package/src/variables/useBreakpoint.test.ts +0 -447
  31. package/src/variables/useBreakpoint.ts +0 -38
  32. package/src/variables/useColor.test.ts +0 -360
  33. package/src/variables/useColor.ts +0 -35
  34. package/src/variables/useColorLightness.test.ts +0 -168
  35. package/src/variables/useColorLightness.ts +0 -59
  36. package/src/variables/useColorShade.test.ts +0 -166
  37. package/src/variables/useColorShade.ts +0 -52
  38. package/src/variables/useColorTint.test.ts +0 -164
  39. package/src/variables/useColorTint.ts +0 -52
  40. package/src/variables/useEasing.ts +0 -0
  41. package/src/variables/useFontFamily.test.ts +0 -228
  42. package/src/variables/useFontFamily.ts +0 -33
  43. package/src/variables/useFontSize.test.ts +0 -299
  44. package/src/variables/useFontSize.ts +0 -32
  45. package/src/variables/useFontStyle.test.ts +0 -555
  46. package/src/variables/useFontStyle.ts +0 -37
  47. package/src/variables/useFontWeight.test.ts +0 -650
  48. package/src/variables/useFontWeight.ts +0 -55
  49. package/src/variables/useLetterSpacing.test.ts +0 -455
  50. package/src/variables/useLetterSpacing.ts +0 -41
  51. package/src/variables/useLineHeight.test.ts +0 -410
  52. package/src/variables/useLineHeight.ts +0 -41
  53. package/src/variables/useMultiplier.test.ts +0 -722
  54. package/src/variables/useMultiplier.ts +0 -44
  55. package/src/variables/useScale.test.ts +0 -393
  56. package/src/variables/useScale.ts +0 -52
  57. package/src/variables/useScalePowers.test.ts +0 -412
  58. package/src/variables/useScalePowers.ts +0 -35
  59. package/src/variables/useSpacing.test.ts +0 -309
  60. package/src/variables/useSpacing.ts +0 -26
  61. package/src/vite-env.d.ts +0 -1
  62. package/test-scale.js +0 -22
  63. package/tsconfig.json +0 -7
  64. 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
- });