@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,336 +0,0 @@
1
- import type { Variable } from "@styleframe/core";
2
- import { styleframe } from "@styleframe/core";
3
- import { consume } from "@styleframe/transpiler";
4
- import { useBoxShadow } from "./useBoxShadow";
5
-
6
- describe("useBoxShadow", () => {
7
- it("should create a single box-shadow variable with 'default' key", () => {
8
- const s = styleframe();
9
- const { boxShadow } = useBoxShadow(s, {
10
- default: "0 2px 4px rgba(0, 0, 0, 0.1)",
11
- });
12
-
13
- expect(boxShadow).toEqual({
14
- type: "variable",
15
- name: "box-shadow",
16
- value: "0 2px 4px rgba(0, 0, 0, 0.1)",
17
- });
18
-
19
- const css = consume(boxShadow, s.options);
20
- expect(css).toBe(`--box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);`);
21
- });
22
-
23
- it("should create box-shadow variable with modifier for non-default keys", () => {
24
- const s = styleframe();
25
- const { boxShadowSm } = useBoxShadow(s, {
26
- sm: "0 1px 2px rgba(0, 0, 0, 0.05)",
27
- });
28
-
29
- expect(boxShadowSm).toEqual({
30
- type: "variable",
31
- name: "box-shadow--sm",
32
- value: "0 1px 2px rgba(0, 0, 0, 0.05)",
33
- });
34
-
35
- const css = consume(boxShadowSm, s.options);
36
- expect(css).toBe(`--box-shadow--sm: 0 1px 2px rgba(0, 0, 0, 0.05);`);
37
- });
38
-
39
- it("should create multiple box-shadow variables", () => {
40
- const s = styleframe();
41
- const { boxShadow, boxShadowSm, boxShadowMd, boxShadowLg } = useBoxShadow(
42
- s,
43
- {
44
- default: "0 2px 4px rgba(0, 0, 0, 0.1)",
45
- sm: "0 1px 2px rgba(0, 0, 0, 0.05)",
46
- md: "0 4px 8px rgba(0, 0, 0, 0.1)",
47
- lg: "0 8px 16px rgba(0, 0, 0, 0.15)",
48
- },
49
- );
50
-
51
- expect(boxShadow).toEqual({
52
- type: "variable",
53
- name: "box-shadow",
54
- value: "0 2px 4px rgba(0, 0, 0, 0.1)",
55
- });
56
-
57
- expect(boxShadowSm).toEqual({
58
- type: "variable",
59
- name: "box-shadow--sm",
60
- value: "0 1px 2px rgba(0, 0, 0, 0.05)",
61
- });
62
-
63
- expect(boxShadowMd).toEqual({
64
- type: "variable",
65
- name: "box-shadow--md",
66
- value: "0 4px 8px rgba(0, 0, 0, 0.1)",
67
- });
68
-
69
- expect(boxShadowLg).toEqual({
70
- type: "variable",
71
- name: "box-shadow--lg",
72
- value: "0 8px 16px rgba(0, 0, 0, 0.15)",
73
- });
74
- });
75
-
76
- it("should add variables to root", () => {
77
- const s = styleframe();
78
- useBoxShadow(s, {
79
- default: "0 2px 4px rgba(0, 0, 0, 0.1)",
80
- sm: "0 1px 2px rgba(0, 0, 0, 0.05)",
81
- });
82
-
83
- expect(s.root.variables).toHaveLength(2);
84
- expect(s.root.variables[0]?.name).toBe("box-shadow");
85
- expect(s.root.variables[1]?.name).toBe("box-shadow--sm");
86
- });
87
-
88
- it("should handle kebab-case box-shadow names", () => {
89
- const s = styleframe();
90
- const { boxShadowExtraLarge } = useBoxShadow(s, {
91
- "extra-large": "0 20px 40px rgba(0, 0, 0, 0.2)",
92
- });
93
-
94
- expect(boxShadowExtraLarge).toEqual({
95
- type: "variable",
96
- name: "box-shadow--extra-large",
97
- value: "0 20px 40px rgba(0, 0, 0, 0.2)",
98
- });
99
- });
100
-
101
- it("should handle snake_case box-shadow names", () => {
102
- const s = styleframe();
103
- const { boxShadowCardElevation } = useBoxShadow(s, {
104
- card_elevation: "0 4px 6px rgba(0, 0, 0, 0.1)",
105
- });
106
-
107
- expect(boxShadowCardElevation).toEqual({
108
- type: "variable",
109
- name: "box-shadow--card_elevation",
110
- value: "0 4px 6px rgba(0, 0, 0, 0.1)",
111
- });
112
- });
113
-
114
- it("should handle numeric box-shadow names", () => {
115
- const s = styleframe();
116
- const { boxShadow100 } = useBoxShadow(s, {
117
- "100": "0 1px 3px rgba(0, 0, 0, 0.12)",
118
- });
119
-
120
- expect(boxShadow100).toEqual({
121
- type: "variable",
122
- name: "box-shadow--100",
123
- value: "0 1px 3px rgba(0, 0, 0, 0.12)",
124
- });
125
- });
126
-
127
- it("should handle none value", () => {
128
- const s = styleframe();
129
- const { boxShadowNone } = useBoxShadow(s, {
130
- none: "none",
131
- });
132
-
133
- expect(boxShadowNone).toEqual({
134
- type: "variable",
135
- name: "box-shadow--none",
136
- value: "none",
137
- });
138
- });
139
-
140
- it("should handle inset shadows", () => {
141
- const s = styleframe();
142
- const { boxShadowInset } = useBoxShadow(s, {
143
- inset: "inset 0 2px 4px rgba(0, 0, 0, 0.1)",
144
- });
145
-
146
- expect(boxShadowInset).toEqual({
147
- type: "variable",
148
- name: "box-shadow--inset",
149
- value: "inset 0 2px 4px rgba(0, 0, 0, 0.1)",
150
- });
151
- });
152
-
153
- it("should handle multiple shadows", () => {
154
- const s = styleframe();
155
- const { boxShadowMultiple } = useBoxShadow(s, {
156
- multiple: "0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)",
157
- });
158
-
159
- expect(boxShadowMultiple.value).toBe(
160
- "0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)",
161
- );
162
- });
163
-
164
- it("should handle colored shadows", () => {
165
- const s = styleframe();
166
- const { boxShadowColored } = useBoxShadow(s, {
167
- colored: "0 4px 8px rgba(59, 130, 246, 0.3)",
168
- });
169
-
170
- expect(boxShadowColored.value).toBe("0 4px 8px rgba(59, 130, 246, 0.3)");
171
- });
172
-
173
- it("should handle spread radius", () => {
174
- const s = styleframe();
175
- const { boxShadowSpread } = useBoxShadow(s, {
176
- spread: "0 4px 8px 2px rgba(0, 0, 0, 0.1)",
177
- });
178
-
179
- expect(boxShadowSpread.value).toBe("0 4px 8px 2px rgba(0, 0, 0, 0.1)");
180
- });
181
-
182
- it("should handle hex color values", () => {
183
- const s = styleframe();
184
- const { boxShadowHex } = useBoxShadow(s, {
185
- hex: "0 2px 4px #00000019",
186
- });
187
-
188
- expect(boxShadowHex.value).toBe("0 2px 4px #00000019");
189
- });
190
-
191
- it("should handle hsl color values", () => {
192
- const s = styleframe();
193
- const { boxShadowHsl } = useBoxShadow(s, {
194
- hsl: "0 4px 8px hsl(0, 0%, 0%, 0.1)",
195
- });
196
-
197
- expect(boxShadowHsl.value).toBe("0 4px 8px hsl(0, 0%, 0%, 0.1)");
198
- });
199
-
200
- it("should handle CSS variables in shadow values", () => {
201
- const s = styleframe();
202
- const { boxShadowVar } = useBoxShadow(s, {
203
- var: "0 2px 4px var(--shadow-color)",
204
- });
205
-
206
- expect(boxShadowVar.value).toBe("0 2px 4px var(--shadow-color)");
207
- });
208
-
209
- it("should handle empty box-shadow object", () => {
210
- const s = styleframe();
211
- const result = useBoxShadow(s, {});
212
-
213
- expect(result).toEqual({});
214
- expect(s.root.variables).toHaveLength(0);
215
- });
216
-
217
- it("should handle box-shadow references", () => {
218
- const s = styleframe();
219
- const baseBoxShadow = s.variable(
220
- "base-box-shadow",
221
- "0 2px 4px rgba(0, 0, 0, 0.1)",
222
- );
223
- const { boxShadow } = useBoxShadow(s, {
224
- default: s.ref(baseBoxShadow),
225
- });
226
-
227
- expect(boxShadow.value).toEqual({
228
- type: "reference",
229
- name: "base-box-shadow",
230
- fallback: undefined,
231
- });
232
- });
233
-
234
- it("should compile to correct CSS output using consume", () => {
235
- const s = styleframe();
236
- useBoxShadow(s, {
237
- default: "0 2px 4px rgba(0, 0, 0, 0.1)",
238
- none: "none",
239
- sm: "0 1px 2px rgba(0, 0, 0, 0.05)",
240
- md: "0 4px 8px rgba(0, 0, 0, 0.1)",
241
- lg: "0 8px 16px rgba(0, 0, 0, 0.15)",
242
- });
243
-
244
- const css = consume(s.root, s.options);
245
-
246
- expect(css).toBe(`:root {
247
- --box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
248
- --box-shadow--none: none;
249
- --box-shadow--sm: 0 1px 2px rgba(0, 0, 0, 0.05);
250
- --box-shadow--md: 0 4px 8px rgba(0, 0, 0, 0.1);
251
- --box-shadow--lg: 0 8px 16px rgba(0, 0, 0, 0.15);
252
- }`);
253
- });
254
-
255
- it("should handle a complete box-shadow scale", () => {
256
- const s = styleframe();
257
- const shadows = useBoxShadow(s, {
258
- none: "none",
259
- xs: "0 1px 2px rgba(0, 0, 0, 0.05)",
260
- sm: "0 1px 3px rgba(0, 0, 0, 0.1)",
261
- default: "0 2px 4px rgba(0, 0, 0, 0.1)",
262
- md: "0 4px 8px rgba(0, 0, 0, 0.1)",
263
- lg: "0 8px 16px rgba(0, 0, 0, 0.15)",
264
- xl: "0 12px 24px rgba(0, 0, 0, 0.2)",
265
- "2xl": "0 16px 32px rgba(0, 0, 0, 0.25)",
266
- "3xl": "0 24px 48px rgba(0, 0, 0, 0.3)",
267
- });
268
-
269
- expect(shadows.boxShadowNone.value).toBe("none");
270
- expect(shadows.boxShadowXs.value).toBe("0 1px 2px rgba(0, 0, 0, 0.05)");
271
- expect(shadows.boxShadowSm.value).toBe("0 1px 3px rgba(0, 0, 0, 0.1)");
272
- expect(shadows.boxShadow.value).toBe("0 2px 4px rgba(0, 0, 0, 0.1)");
273
- expect(shadows.boxShadowMd.value).toBe("0 4px 8px rgba(0, 0, 0, 0.1)");
274
- expect(shadows.boxShadowLg.value).toBe("0 8px 16px rgba(0, 0, 0, 0.15)");
275
- expect(shadows.boxShadowXl.value).toBe("0 12px 24px rgba(0, 0, 0, 0.2)");
276
- expect(shadows.boxShadow2xl.value).toBe("0 16px 32px rgba(0, 0, 0, 0.25)");
277
- expect(shadows.boxShadow3xl.value).toBe("0 24px 48px rgba(0, 0, 0, 0.3)");
278
- });
279
-
280
- it("should handle elevation system", () => {
281
- const s = styleframe();
282
- const shadows = useBoxShadow(s, {
283
- "1": "0 1px 3px rgba(0, 0, 0, 0.12)",
284
- "2": "0 3px 6px rgba(0, 0, 0, 0.16)",
285
- "3": "0 10px 20px rgba(0, 0, 0, 0.19)",
286
- "4": "0 14px 28px rgba(0, 0, 0, 0.25)",
287
- "5": "0 19px 38px rgba(0, 0, 0, 0.30)",
288
- });
289
-
290
- expect(shadows.boxShadow1.value).toBe("0 1px 3px rgba(0, 0, 0, 0.12)");
291
- expect(shadows.boxShadow2.value).toBe("0 3px 6px rgba(0, 0, 0, 0.16)");
292
- expect(shadows.boxShadow3.value).toBe("0 10px 20px rgba(0, 0, 0, 0.19)");
293
- expect(shadows.boxShadow4.value).toBe("0 14px 28px rgba(0, 0, 0, 0.25)");
294
- expect(shadows.boxShadow5.value).toBe("0 19px 38px rgba(0, 0, 0, 0.30)");
295
- });
296
-
297
- describe("type safety", () => {
298
- it("should preserve exact box-shadow names in return type", () => {
299
- const s = styleframe();
300
- const shadows = useBoxShadow(s, {
301
- default: "0 2px 4px rgba(0, 0, 0, 0.1)",
302
- sm: "0 1px 2px rgba(0, 0, 0, 0.05)",
303
- });
304
-
305
- // Type assertions to verify the generic types are preserved
306
- const defaultBoxShadow: Variable<"box-shadow"> = shadows.boxShadow;
307
- const smBoxShadow: Variable<"box-shadow--sm"> = shadows.boxShadowSm;
308
-
309
- expect(defaultBoxShadow.name).toBe("box-shadow");
310
- expect(smBoxShadow.name).toBe("box-shadow--sm");
311
- });
312
-
313
- it("should maintain type information for kebab-case names", () => {
314
- const s = styleframe();
315
- const { boxShadowExtraLarge } = useBoxShadow(s, {
316
- "extra-large": "0 20px 40px rgba(0, 0, 0, 0.2)",
317
- });
318
-
319
- const typed: Variable<"box-shadow--extra-large"> = boxShadowExtraLarge;
320
- expect(typed.name).toBe("box-shadow--extra-large");
321
- });
322
-
323
- it("should work with const assertion", () => {
324
- const s = styleframe();
325
- const boxShadowConfig = {
326
- default: "0 2px 4px rgba(0, 0, 0, 0.1)",
327
- sm: "0 1px 2px rgba(0, 0, 0, 0.05)",
328
- } as const;
329
-
330
- const shadows = useBoxShadow(s, boxShadowConfig);
331
-
332
- expect(shadows.boxShadow.name).toBe("box-shadow");
333
- expect(shadows.boxShadowSm.name).toBe("box-shadow--sm");
334
- });
335
- });
336
- });
@@ -1,54 +0,0 @@
1
- import { createUseVariable } from "../utils";
2
-
3
- export const defaultBoxShadowValues = {
4
- default: "@md",
5
- none: "none",
6
- // subtle card / surfaces
7
- xs: "0 1px 1px oklch(var(--box-shadow-color, 0 0 0) / 0.12), 0 2px 2px -1px oklch(var(--box-shadow-color, 0 0 0) / 0.06)",
8
- // default
9
- sm: "0 1px 2px oklch(var(--box-shadow-color, 0 0 0) / 0.14), 0 3px 6px -1px oklch(var(--box-shadow-color, 0 0 0) / 0.10)",
10
- // popover / raised button
11
- md: "0 2px 4px oklch(var(--box-shadow-color, 0 0 0) / 0.16), 0 8px 16px -4px oklch(var(--box-shadow-color, 0 0 0) / 0.10)",
12
- // modal / floating panel
13
- lg: "0 4px 8px oklch(var(--box-shadow-color, 0 0 0) / 0.18), 0 16px 24px -8px oklch(var(--box-shadow-color, 0 0 0) / 0.12)",
14
- // drawer / high elevation
15
- xl: "0 8px 12px oklch(var(--box-shadow-color, 0 0 0) / 0.20), 0 24px 48px -12px oklch(var(--box-shadow-color, 0 0 0) / 0.14)",
16
- // highest elevation / toast over content
17
- "2xl":
18
- "0 12px 16px oklch(var(--box-shadow-color, 0 0 0) / 0.22), 0 32px 64px -16px oklch(var(--box-shadow-color, 0 0 0) / 0.16)",
19
- // borders-for-free on dark backgrounds and inset wells
20
- inner:
21
- "inset 0 1px 0 oklch(var(--box-shadow-color, 0 0 0) / 0.08), inset 0 0 0 1px oklch(var(--box-shadow-color, 0 0 0) / 0.06)",
22
- // focus rings that still read as elevation
23
- ring: "0 0 0 1px oklch(var(--box-shadow-color, 0 0 0) / 0.12), 0 1px 2px oklch(var(--box-shadow-color, 0 0 0) / 0.08)",
24
- };
25
-
26
- /**
27
- * Create a set of box-shadow variables for use in a Styleframe instance.
28
- *
29
- * @usage
30
- * ```typescript
31
- * import { styleframe } from "styleframe";
32
- * import { useBoxShadow } from "styleframe/theme";
33
- *
34
- * const s = styleframe();
35
- * const { variable } = s;
36
- *
37
- * const boxShadowColor = s.variable("box-shadow-color", "0 0 0");
38
- *
39
- * const {
40
- * boxShadow, // Variable<'box-shadow'>
41
- * boxShadowSm, // Variable<'box-shadow--sm'>
42
- * boxShadowMd, // Variable<'box-shadow--md'>
43
- * boxShadowLg, // Variable<'box-shadow--lg'>
44
- * } = useBoxShadow(s, {
45
- * default: '@md',
46
- * sm: css`0 1px 2px oklcha(${ref(boxShadowColor)} / 0.05)`,
47
- * md: css`0 4px 8px oklcha(${ref(boxShadowColor)} / 0.1)`,
48
- * lg: css`0 8px 16px oklcha(${ref(boxShadowColor)} / 0.15)`,
49
- * });
50
- * ```
51
- */
52
- export const useBoxShadow = createUseVariable("box-shadow", {
53
- defaults: defaultBoxShadowValues,
54
- });