@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,569 +0,0 @@
1
- import type { Variable } from "@styleframe/core";
2
- import { styleframe } from "@styleframe/core";
3
- import { consume } from "@styleframe/transpiler";
4
- import { useBorderStyle, defaultBorderStyleValues } from "./useBorderStyle";
5
-
6
- describe("useBorderStyle", () => {
7
- it("should create all border style variables with correct names and values", () => {
8
- const s = styleframe();
9
- const {
10
- borderStyleNone,
11
- borderStyleSolid,
12
- borderStyleDashed,
13
- borderStyleDotted,
14
- borderStyleDouble,
15
- borderStyleGroove,
16
- borderStyleInset,
17
- borderStyleOutset,
18
- borderStyle,
19
- } = useBorderStyle(s);
20
-
21
- expect(borderStyleNone).toEqual({
22
- type: "variable",
23
- name: "border-style--none",
24
- value: "none",
25
- });
26
-
27
- expect(borderStyleSolid).toEqual({
28
- type: "variable",
29
- name: "border-style--solid",
30
- value: "solid",
31
- });
32
-
33
- expect(borderStyleDashed).toEqual({
34
- type: "variable",
35
- name: "border-style--dashed",
36
- value: "dashed",
37
- });
38
-
39
- expect(borderStyleDotted).toEqual({
40
- type: "variable",
41
- name: "border-style--dotted",
42
- value: "dotted",
43
- });
44
-
45
- expect(borderStyleDouble).toEqual({
46
- type: "variable",
47
- name: "border-style--double",
48
- value: "double",
49
- });
50
-
51
- expect(borderStyleGroove).toEqual({
52
- type: "variable",
53
- name: "border-style--groove",
54
- value: "groove",
55
- });
56
-
57
- expect(borderStyleInset).toEqual({
58
- type: "variable",
59
- name: "border-style--inset",
60
- value: "inset",
61
- });
62
-
63
- expect(borderStyleOutset).toEqual({
64
- type: "variable",
65
- name: "border-style--outset",
66
- value: "outset",
67
- });
68
-
69
- expect(borderStyle).toEqual({
70
- type: "variable",
71
- name: "border-style",
72
- value: {
73
- type: "reference",
74
- name: "border-style--solid",
75
- fallback: undefined,
76
- },
77
- });
78
- });
79
-
80
- it("should add all border style variables to root", () => {
81
- const s = styleframe();
82
- useBorderStyle(s);
83
-
84
- expect(s.root.variables).toHaveLength(9);
85
- expect(s.root.variables[0]?.name).toBe("border-style--none");
86
- expect(s.root.variables[1]?.name).toBe("border-style--solid");
87
- expect(s.root.variables[2]?.name).toBe("border-style--dashed");
88
- expect(s.root.variables[3]?.name).toBe("border-style--dotted");
89
- expect(s.root.variables[4]?.name).toBe("border-style--double");
90
- expect(s.root.variables[5]?.name).toBe("border-style--groove");
91
- expect(s.root.variables[6]?.name).toBe("border-style--inset");
92
- expect(s.root.variables[7]?.name).toBe("border-style--outset");
93
- expect(s.root.variables[8]?.name).toBe("border-style");
94
- });
95
-
96
- it("should return all border style variables in an object", () => {
97
- const s = styleframe();
98
- const borderStyles = useBorderStyle(s);
99
-
100
- expect(Object.keys(borderStyles)).toEqual([
101
- "borderStyleNone",
102
- "borderStyleSolid",
103
- "borderStyleDashed",
104
- "borderStyleDotted",
105
- "borderStyleDouble",
106
- "borderStyleGroove",
107
- "borderStyleInset",
108
- "borderStyleOutset",
109
- "borderStyle",
110
- ]);
111
- });
112
-
113
- it("should compile to correct CSS output using consume", () => {
114
- const s = styleframe();
115
- useBorderStyle(s);
116
-
117
- const css = consume(s.root, s.options);
118
-
119
- expect(css).toBe(`:root {
120
- --border-style--none: none;
121
- --border-style--solid: solid;
122
- --border-style--dashed: dashed;
123
- --border-style--dotted: dotted;
124
- --border-style--double: double;
125
- --border-style--groove: groove;
126
- --border-style--inset: inset;
127
- --border-style--outset: outset;
128
- --border-style: var(--border-style--solid);
129
- }`);
130
- });
131
-
132
- it("should compile individual border style variable to correct CSS", () => {
133
- const s = styleframe();
134
- const { borderStyleDashed } = useBorderStyle(s);
135
-
136
- const css = consume(borderStyleDashed, s.options);
137
-
138
- expect(css).toBe("--border-style--dashed: dashed;");
139
- });
140
-
141
- it("should not create duplicate variables when called multiple times", () => {
142
- const s = styleframe();
143
- const borderStyles1 = useBorderStyle(s);
144
- const borderStyles2 = useBorderStyle(s);
145
-
146
- // Should return the same variables (default: true behavior)
147
- expect(borderStyles1.borderStyleSolid).toBe(borderStyles2.borderStyleSolid);
148
- expect(borderStyles1.borderStyle).toBe(borderStyles2.borderStyle);
149
- expect(s.root.variables).toHaveLength(9);
150
- });
151
-
152
- it("should allow border style variables to be used as references", () => {
153
- const s = styleframe();
154
- const { borderStyleDotted } = useBorderStyle(s);
155
-
156
- const customBorderStyle = s.variable(
157
- "custom-border-style",
158
- s.ref(borderStyleDotted),
159
- );
160
-
161
- expect(customBorderStyle.value).toEqual({
162
- type: "reference",
163
- name: "border-style--dotted",
164
- fallback: undefined,
165
- });
166
-
167
- const css = consume(s.root, s.options);
168
- expect(css).toEqual(`:root {
169
- --border-style--none: none;
170
- --border-style--solid: solid;
171
- --border-style--dashed: dashed;
172
- --border-style--dotted: dotted;
173
- --border-style--double: double;
174
- --border-style--groove: groove;
175
- --border-style--inset: inset;
176
- --border-style--outset: outset;
177
- --border-style: var(--border-style--solid);
178
- --custom-border-style: var(--border-style--dotted);
179
- }`);
180
- });
181
-
182
- it("should work with selector overrides", () => {
183
- const s = styleframe();
184
- const { borderStyleSolid } = useBorderStyle(s);
185
-
186
- s.selector(".custom-border-style", ({ variable }) => {
187
- variable(borderStyleSolid, "dashed");
188
- });
189
-
190
- const css = consume(s.root, s.options);
191
-
192
- expect(css).toEqual(`:root {
193
- --border-style--none: none;
194
- --border-style--solid: solid;
195
- --border-style--dashed: dashed;
196
- --border-style--dotted: dotted;
197
- --border-style--double: double;
198
- --border-style--groove: groove;
199
- --border-style--inset: inset;
200
- --border-style--outset: outset;
201
- --border-style: var(--border-style--solid);
202
- }
203
-
204
- .custom-border-style {
205
- --border-style--solid: dashed;
206
- }`);
207
- });
208
-
209
- describe("type safety", () => {
210
- it("should preserve exact border style variable names in return type", () => {
211
- const s = styleframe();
212
- const borderStyles = useBorderStyle(s);
213
-
214
- // Type assertions to verify the generic types are preserved
215
- const none: Variable<"border-style--none"> = borderStyles.borderStyleNone;
216
- const solid: Variable<"border-style--solid"> =
217
- borderStyles.borderStyleSolid;
218
- const dashed: Variable<"border-style--dashed"> =
219
- borderStyles.borderStyleDashed;
220
- const dotted: Variable<"border-style--dotted"> =
221
- borderStyles.borderStyleDotted;
222
- const double: Variable<"border-style--double"> =
223
- borderStyles.borderStyleDouble;
224
- const groove: Variable<"border-style--groove"> =
225
- borderStyles.borderStyleGroove;
226
- const inset: Variable<"border-style--inset"> =
227
- borderStyles.borderStyleInset;
228
- const outset: Variable<"border-style--outset"> =
229
- borderStyles.borderStyleOutset;
230
- const borderStyle: Variable<"border-style"> = borderStyles.borderStyle;
231
-
232
- expect(none.name).toBe("border-style--none");
233
- expect(solid.name).toBe("border-style--solid");
234
- expect(dashed.name).toBe("border-style--dashed");
235
- expect(dotted.name).toBe("border-style--dotted");
236
- expect(double.name).toBe("border-style--double");
237
- expect(groove.name).toBe("border-style--groove");
238
- expect(inset.name).toBe("border-style--inset");
239
- expect(outset.name).toBe("border-style--outset");
240
- expect(borderStyle.name).toBe("border-style");
241
- });
242
-
243
- it("should have correct string value types", () => {
244
- const s = styleframe();
245
- const borderStyles = useBorderStyle(s);
246
-
247
- expect(typeof borderStyles.borderStyleNone.value).toBe("string");
248
- expect(typeof borderStyles.borderStyleSolid.value).toBe("string");
249
- expect(typeof borderStyles.borderStyleDashed.value).toBe("string");
250
- expect(typeof borderStyles.borderStyleDotted.value).toBe("string");
251
- expect(typeof borderStyles.borderStyleDouble.value).toBe("string");
252
- expect(typeof borderStyles.borderStyleGroove.value).toBe("string");
253
- expect(typeof borderStyles.borderStyleInset.value).toBe("string");
254
- expect(typeof borderStyles.borderStyleOutset.value).toBe("string");
255
- expect(typeof borderStyles.borderStyle.value).toBe("object");
256
- });
257
- });
258
-
259
- describe("default border style", () => {
260
- it("should create a default border style variable referencing solid by default", () => {
261
- const s = styleframe();
262
- const { borderStyle } = useBorderStyle(s);
263
-
264
- expect(borderStyle).toEqual({
265
- type: "variable",
266
- name: "border-style",
267
- value: {
268
- type: "reference",
269
- name: "border-style--solid",
270
- fallback: undefined,
271
- },
272
- });
273
- });
274
-
275
- it("should allow customizing the default border style", () => {
276
- const s = styleframe();
277
- const { borderStyle } = useBorderStyle(s, {
278
- ...defaultBorderStyleValues,
279
- default: "@dashed",
280
- });
281
-
282
- expect(borderStyle.value).toEqual({
283
- type: "reference",
284
- name: "border-style--dashed",
285
- fallback: undefined,
286
- });
287
- });
288
-
289
- it("should compile default border style to CSS correctly", () => {
290
- const s = styleframe();
291
- useBorderStyle(s, {
292
- ...defaultBorderStyleValues,
293
- default: "@dotted",
294
- });
295
-
296
- const css = consume(s.root, s.options);
297
-
298
- expect(css).toEqual(`:root {
299
- --border-style--none: none;
300
- --border-style--solid: solid;
301
- --border-style--dashed: dashed;
302
- --border-style--dotted: dotted;
303
- --border-style--double: double;
304
- --border-style--groove: groove;
305
- --border-style--inset: inset;
306
- --border-style--outset: outset;
307
- --border-style: var(--border-style--dotted);
308
- }`);
309
- });
310
-
311
- it("should work with different default border styles", () => {
312
- const borderStyleNames = [
313
- "none",
314
- "solid",
315
- "dashed",
316
- "dotted",
317
- "double",
318
- "groove",
319
- "inset",
320
- "outset",
321
- ];
322
-
323
- for (const borderStyleName of borderStyleNames) {
324
- const s = styleframe();
325
- const { borderStyle } = useBorderStyle(s, {
326
- ...defaultBorderStyleValues,
327
- default: `@${borderStyleName}`,
328
- });
329
-
330
- expect(borderStyle.value).toEqual({
331
- type: "reference",
332
- name: `border-style--${borderStyleName}`,
333
- fallback: undefined,
334
- });
335
- }
336
- });
337
- });
338
-
339
- describe("border style values", () => {
340
- it("should have correct CSS keyword values", () => {
341
- const s = styleframe();
342
- const {
343
- borderStyleNone,
344
- borderStyleSolid,
345
- borderStyleDashed,
346
- borderStyleDotted,
347
- borderStyleDouble,
348
- borderStyleGroove,
349
- borderStyleInset,
350
- borderStyleOutset,
351
- } = useBorderStyle(s);
352
-
353
- expect(borderStyleNone.value).toBe("none");
354
- expect(borderStyleSolid.value).toBe("solid");
355
- expect(borderStyleDashed.value).toBe("dashed");
356
- expect(borderStyleDotted.value).toBe("dotted");
357
- expect(borderStyleDouble.value).toBe("double");
358
- expect(borderStyleGroove.value).toBe("groove");
359
- expect(borderStyleInset.value).toBe("inset");
360
- expect(borderStyleOutset.value).toBe("outset");
361
- });
362
-
363
- it("should have all standard CSS border-style values", () => {
364
- const s = styleframe();
365
- const borderStyles = useBorderStyle(s);
366
- const values = [
367
- borderStyles.borderStyleNone.value,
368
- borderStyles.borderStyleSolid.value,
369
- borderStyles.borderStyleDashed.value,
370
- borderStyles.borderStyleDotted.value,
371
- borderStyles.borderStyleDouble.value,
372
- borderStyles.borderStyleGroove.value,
373
- borderStyles.borderStyleInset.value,
374
- borderStyles.borderStyleOutset.value,
375
- ];
376
-
377
- const expectedValues = [
378
- "none",
379
- "solid",
380
- "dashed",
381
- "dotted",
382
- "double",
383
- "groove",
384
- "inset",
385
- "outset",
386
- ];
387
-
388
- expect(values).toEqual(expectedValues);
389
- });
390
- });
391
-
392
- describe("practical usage", () => {
393
- it("should work for creating borders with different styles", () => {
394
- const s = styleframe();
395
- const { borderStyleSolid, borderStyleDashed } = useBorderStyle(s);
396
-
397
- s.selector(".card", ({ variable }) => {
398
- variable("border-style", s.ref(borderStyleSolid));
399
- });
400
-
401
- s.selector(".divider", ({ variable }) => {
402
- variable("border-style", s.ref(borderStyleDashed));
403
- });
404
-
405
- const css = consume(s.root, s.options);
406
- expect(css).toEqual(`:root {
407
- --border-style--none: none;
408
- --border-style--solid: solid;
409
- --border-style--dashed: dashed;
410
- --border-style--dotted: dotted;
411
- --border-style--double: double;
412
- --border-style--groove: groove;
413
- --border-style--inset: inset;
414
- --border-style--outset: outset;
415
- --border-style: var(--border-style--solid);
416
- }
417
-
418
- .card {
419
- --border-style: var(--border-style--solid);
420
- }
421
-
422
- .divider {
423
- --border-style: var(--border-style--dashed);
424
- }`);
425
- });
426
-
427
- it("should work for responsive border style adjustments", () => {
428
- const s = styleframe();
429
- const { borderStyleSolid, borderStyleDashed } = useBorderStyle(s);
430
-
431
- const buttonBorderStyle = s.variable(
432
- "button-border-style",
433
- s.ref(borderStyleSolid),
434
- );
435
-
436
- s.selector("@media (max-width: 768px)", ({ variable }) => {
437
- variable(buttonBorderStyle, s.ref(borderStyleDashed));
438
- });
439
-
440
- const css = consume(s.root, s.options);
441
- expect(css).toEqual(`:root {
442
- --border-style--none: none;
443
- --border-style--solid: solid;
444
- --border-style--dashed: dashed;
445
- --border-style--dotted: dotted;
446
- --border-style--double: double;
447
- --border-style--groove: groove;
448
- --border-style--inset: inset;
449
- --border-style--outset: outset;
450
- --border-style: var(--border-style--solid);
451
- --button-border-style: var(--border-style--solid);
452
- }
453
-
454
- @media (max-width: 768px) {
455
- --button-border-style: var(--border-style--dashed);
456
- }`);
457
- });
458
-
459
- it("should work for theme-specific border style overrides", () => {
460
- const s = styleframe();
461
- const { borderStyleSolid, borderStyleDotted } = useBorderStyle(s);
462
-
463
- s.selector(".theme-playful", ({ variable }) => {
464
- variable(borderStyleSolid, s.ref(borderStyleDotted));
465
- });
466
-
467
- const css = consume(s.root, s.options);
468
- expect(css).toEqual(`:root {
469
- --border-style--none: none;
470
- --border-style--solid: solid;
471
- --border-style--dashed: dashed;
472
- --border-style--dotted: dotted;
473
- --border-style--double: double;
474
- --border-style--groove: groove;
475
- --border-style--inset: inset;
476
- --border-style--outset: outset;
477
- --border-style: var(--border-style--solid);
478
- }
479
-
480
- .theme-playful {
481
- --border-style--solid: var(--border-style--dotted);
482
- }`);
483
- });
484
-
485
- it("should work for state-specific border styles", () => {
486
- const s = styleframe();
487
- const { borderStyleSolid, borderStyleDashed, borderStyleNone } =
488
- useBorderStyle(s);
489
-
490
- s.selector(".input", ({ variable }) => {
491
- variable("border-style", s.ref(borderStyleSolid));
492
- });
493
-
494
- s.selector(".input:hover", ({ variable }) => {
495
- variable("border-style", s.ref(borderStyleDashed));
496
- });
497
-
498
- s.selector(".input:disabled", ({ variable }) => {
499
- variable("border-style", s.ref(borderStyleNone));
500
- });
501
-
502
- const css = consume(s.root, s.options);
503
- expect(css).toEqual(`:root {
504
- --border-style--none: none;
505
- --border-style--solid: solid;
506
- --border-style--dashed: dashed;
507
- --border-style--dotted: dotted;
508
- --border-style--double: double;
509
- --border-style--groove: groove;
510
- --border-style--inset: inset;
511
- --border-style--outset: outset;
512
- --border-style: var(--border-style--solid);
513
- }
514
-
515
- .input {
516
- --border-style: var(--border-style--solid);
517
- }
518
-
519
- .input:hover {
520
- --border-style: var(--border-style--dashed);
521
- }
522
-
523
- .input:disabled {
524
- --border-style: var(--border-style--none);
525
- }`);
526
- });
527
-
528
- it("should work for combining border styles with other border properties", () => {
529
- const s = styleframe();
530
- const { borderStyleSolid, borderStyleDouble } = useBorderStyle(s);
531
-
532
- const borderWidth = s.variable("border-width", "1px");
533
- s.variable("border-color", "#000");
534
-
535
- s.selector(".box", ({ variable }) => {
536
- variable("border-style", s.ref(borderStyleSolid));
537
- });
538
-
539
- s.selector(".box-fancy", ({ variable }) => {
540
- variable("border-style", s.ref(borderStyleDouble));
541
- variable(borderWidth, "3px");
542
- });
543
-
544
- const css = consume(s.root, s.options);
545
- expect(css).toEqual(`:root {
546
- --border-style--none: none;
547
- --border-style--solid: solid;
548
- --border-style--dashed: dashed;
549
- --border-style--dotted: dotted;
550
- --border-style--double: double;
551
- --border-style--groove: groove;
552
- --border-style--inset: inset;
553
- --border-style--outset: outset;
554
- --border-style: var(--border-style--solid);
555
- --border-width: 1px;
556
- --border-color: #000;
557
- }
558
-
559
- .box {
560
- --border-style: var(--border-style--solid);
561
- }
562
-
563
- .box-fancy {
564
- --border-style: var(--border-style--double);
565
- --border-width: 3px;
566
- }`);
567
- });
568
- });
569
- });
@@ -1,49 +0,0 @@
1
- import { createUseVariable } from "../utils";
2
-
3
- export const defaultBorderStyleValues = {
4
- default: "@solid",
5
- none: "none",
6
- solid: "solid",
7
- dashed: "dashed",
8
- dotted: "dotted",
9
- double: "double",
10
- groove: "groove",
11
- inset: "inset",
12
- outset: "outset",
13
- } as const;
14
-
15
- /**
16
- * Create a set of border-style variables for use in a Styleframe instance.
17
- *
18
- * @usage
19
- * ```typescript
20
- * import { styleframe } from "styleframe";
21
- * import { useBorderStyle } from "styleframe/theme";
22
- *
23
- * const s = styleframe();
24
- *
25
- * const {
26
- * borderStyleNone,
27
- * borderStyleSolid,
28
- * borderStyleDashed,
29
- * borderStyleDotted,
30
- * borderStyleDouble,
31
- * borderStyleGroove,
32
- * borderStyleInset,
33
- * borderStyleOutset,
34
- * borderStyle,
35
- * } = useBorderStyle(s, {
36
- * default: "solid",
37
- * none: "none",
38
- * dashed: "dashed",
39
- * dotted: "dotted",
40
- * double: "double",
41
- * groove: "groove",
42
- * inset: "inset",
43
- * outset: "outset",
44
- * });
45
- * ```
46
- */
47
- export const useBorderStyle = createUseVariable("border-style", {
48
- defaults: defaultBorderStyleValues,
49
- });