phaser-wind 0.5.1 → 0.5.2

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 (59) hide show
  1. package/dist/components/column.js +2 -0
  2. package/dist/components/column.js.map +1 -0
  3. package/dist/core/color.js +205 -0
  4. package/dist/core/color.js.map +1 -0
  5. package/dist/core/color.spec.js +243 -0
  6. package/dist/core/color.spec.js.map +1 -0
  7. package/dist/core/font-size.js +63 -0
  8. package/dist/core/font-size.js.map +1 -0
  9. package/dist/core/font-size.spec.js +85 -0
  10. package/dist/core/font-size.spec.js.map +1 -0
  11. package/dist/core/font.js +37 -0
  12. package/dist/core/font.js.map +1 -0
  13. package/dist/core/font.spec.js +80 -0
  14. package/dist/core/font.spec.js.map +1 -0
  15. package/dist/core/index.js +8 -0
  16. package/dist/core/index.js.map +1 -0
  17. package/dist/core/palette.js +292 -0
  18. package/dist/core/palette.js.map +1 -0
  19. package/dist/core/radius.js +38 -0
  20. package/dist/core/radius.js.map +1 -0
  21. package/dist/core/radius.spec.js +56 -0
  22. package/dist/core/radius.spec.js.map +1 -0
  23. package/dist/core/shadow.js +33 -0
  24. package/dist/core/shadow.js.map +1 -0
  25. package/dist/core/shadow.spec.js +21 -0
  26. package/dist/core/shadow.spec.js.map +1 -0
  27. package/dist/core/spacing.js +70 -0
  28. package/dist/core/spacing.js.map +1 -0
  29. package/dist/core/spacing.spec.js +38 -0
  30. package/dist/core/spacing.spec.js.map +1 -0
  31. package/dist/exceptions.js +2 -0
  32. package/dist/exceptions.js.map +1 -0
  33. package/dist/font/index.js +3 -0
  34. package/dist/font/index.js.map +1 -0
  35. package/dist/index.js +7 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/plugin/index.js +2 -0
  38. package/dist/plugin/index.js.map +1 -0
  39. package/dist/plugin/plugin.js +91 -0
  40. package/dist/plugin/plugin.js.map +1 -0
  41. package/dist/scene/index.js +2 -0
  42. package/dist/scene/index.js.map +1 -0
  43. package/dist/scene/scene-with-phaser-wind.js +11 -0
  44. package/dist/scene/scene-with-phaser-wind.js.map +1 -0
  45. package/dist/theme/index.js +3 -0
  46. package/dist/theme/index.js.map +1 -0
  47. package/dist/theme/theme-config.js +159 -0
  48. package/dist/theme/theme-config.js.map +1 -0
  49. package/dist/theme/theme-manager.js +4 -0
  50. package/dist/theme/theme-manager.js.map +1 -0
  51. package/dist/theme/type.js +2 -0
  52. package/dist/theme/type.js.map +1 -0
  53. package/dist/utils/index.js +2 -0
  54. package/dist/utils/index.js.map +1 -0
  55. package/dist/utils/is-valid-color.js +32 -0
  56. package/dist/utils/is-valid-color.js.map +1 -0
  57. package/dist/utils/is-valid-color.spec.js +82 -0
  58. package/dist/utils/is-valid-color.spec.js.map +1 -0
  59. package/package.json +7 -7
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=column.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column.js","sourceRoot":"","sources":["../../src/components/column.ts"],"names":[],"mappings":""}
@@ -0,0 +1,205 @@
1
+ import { isValidColor } from '../utils';
2
+ import { palette } from './palette';
3
+ /** Regular expression to match RGB color format */
4
+ const RGB_REGEX = /rgb\((\d+),\s*(\d+),\s*(\d+)\)/;
5
+ /**
6
+ * Convert hex color value to number
7
+ * @param hexValue - Hex color value (e.g., '#ff0000')
8
+ * @returns Number representation of hex color
9
+ */
10
+ const convertHexToNumber = (hexValue) => {
11
+ const hex = hexValue.slice(1);
12
+ if (hex.length === 3) {
13
+ const r = parseInt(hex[0] + hex[0], 16);
14
+ const g = parseInt(hex[1] + hex[1], 16);
15
+ const b = parseInt(hex[2] + hex[2], 16);
16
+ return (r << 16) + (g << 8) + b;
17
+ }
18
+ return parseInt(hex, 16);
19
+ };
20
+ /**
21
+ * Convert RGB color value to number
22
+ * @param rgbValue - RGB color value (e.g., 'rgb(255, 0, 0)')
23
+ * @returns Number representation of RGB color
24
+ * @throws {Error} If RGB format is invalid
25
+ */
26
+ const convertRgbToNumber = (rgbValue) => {
27
+ const matches = rgbValue.match(RGB_REGEX);
28
+ if (!matches) {
29
+ throw new Error(`Invalid RGB format: ${rgbValue}`);
30
+ }
31
+ const r = parseInt(matches[1]);
32
+ const g = parseInt(matches[2]);
33
+ const b = parseInt(matches[3]);
34
+ return (r << 16) + (g << 8) + b;
35
+ };
36
+ /**
37
+ * Convert color value to number
38
+ * @param colorValue - Color value (e.g., '#ff0000' or 'rgb(255, 0, 0)')
39
+ * @returns Number representation of color
40
+ */
41
+ const convertColorValueToNumber = (colorValue) => {
42
+ if (colorValue.startsWith('#')) {
43
+ return convertHexToNumber(colorValue);
44
+ }
45
+ return convertRgbToNumber(colorValue);
46
+ };
47
+ /**
48
+ * Factory that creates a color utility API based on the provided theme colors
49
+ * @param themeColors - Theme colors configuration
50
+ * @returns Color utility API instance
51
+ */
52
+ /**
53
+ * Create a color API bound to an optional theme colors map.
54
+ * If a key exists in `themeColors`, it will be resolved to a palette token and then to RGB/Hex.
55
+ *
56
+ * @typeParam T - Theme colors map
57
+ * @param themeColors - Optional map of theme color tokens
58
+ * @example
59
+ * const c = createColor({ primary: 'blue-500' });
60
+ * c.rgb('primary'); // rgb(59, 130, 246)
61
+ */
62
+ export const createColor = (themeColors) => {
63
+ /**
64
+ * Get color value from theme configuration
65
+ * @param key - Color token or theme color key
66
+ * @returns Color value from theme or null if not found
67
+ */
68
+ const getValueFromTheme = (key) => {
69
+ if (themeColors && key in themeColors) {
70
+ return themeColors[key];
71
+ }
72
+ return null;
73
+ };
74
+ /**
75
+ * Get RGB string representation of a color
76
+ * @param color - Color token, theme color key or valid color string
77
+ * @returns RGB color string
78
+ * @throws {Error} If color token is not found
79
+ */
80
+ const rgb = (color) => {
81
+ // Runtime supports direct CSS strings for flexibility, but
82
+ // the public type restricts to palette tokens or theme keys.
83
+ if (typeof color === 'string' && isValidColor(color)) {
84
+ return color;
85
+ }
86
+ const colorFromTheme = getValueFromTheme(color);
87
+ if (colorFromTheme) {
88
+ return rgb(colorFromTheme);
89
+ }
90
+ const parts = color.split('-');
91
+ if (parts.length === 2) {
92
+ const colorKey = parts[0];
93
+ const shade = parts[1];
94
+ const colorValue = palette[colorKey]?.[shade];
95
+ if (!colorValue) {
96
+ if (isValidColor(color)) {
97
+ return color;
98
+ }
99
+ throw new Error(`Color token "${colorKey}-${shade}" not found`);
100
+ }
101
+ return colorValue;
102
+ }
103
+ const colorValue = palette[color];
104
+ if (!colorValue) {
105
+ if (isValidColor(color)) {
106
+ return color;
107
+ }
108
+ throw new Error(`Color token "${color}" not found`);
109
+ }
110
+ return colorValue;
111
+ };
112
+ /**
113
+ * Get hex number representation of a color
114
+ * @param color - Color token, theme color key or valid color string
115
+ * @returns Hex color number
116
+ * @throws {Error} If color token is not found
117
+ */
118
+ const hex = (color) => {
119
+ // See note in rgb()
120
+ if (typeof color === 'string' && isValidColor(color)) {
121
+ return convertColorValueToNumber(color);
122
+ }
123
+ const colorFromTheme = getValueFromTheme(color);
124
+ if (colorFromTheme) {
125
+ return hex(colorFromTheme);
126
+ }
127
+ const parts = color.split('-');
128
+ if (parts.length === 2) {
129
+ const colorKey = parts[0];
130
+ const shade = parts[1];
131
+ const colorValue = palette[colorKey]?.[shade];
132
+ if (!colorValue) {
133
+ if (isValidColor(color)) {
134
+ return convertColorValueToNumber(color);
135
+ }
136
+ throw new Error(`Color token "${colorKey}-${shade}" not found`);
137
+ }
138
+ return convertColorValueToNumber(colorValue);
139
+ }
140
+ const colorToConvert = palette[color];
141
+ if (isValidColor(colorToConvert)) {
142
+ return convertColorValueToNumber(colorToConvert);
143
+ }
144
+ throw new Error(`Color token "${color}" not found`);
145
+ };
146
+ const api = {
147
+ rgb,
148
+ hex,
149
+ slate: (shade) => rgb(`slate-${shade}`),
150
+ gray: (shade) => rgb(`gray-${shade}`),
151
+ zinc: (shade) => rgb(`zinc-${shade}`),
152
+ neutral: (shade) => rgb(`neutral-${shade}`),
153
+ stone: (shade) => rgb(`stone-${shade}`),
154
+ red: (shade) => rgb(`red-${shade}`),
155
+ orange: (shade) => rgb(`orange-${shade}`),
156
+ amber: (shade) => rgb(`amber-${shade}`),
157
+ yellow: (shade) => rgb(`yellow-${shade}`),
158
+ lime: (shade) => rgb(`lime-${shade}`),
159
+ green: (shade) => rgb(`green-${shade}`),
160
+ emerald: (shade) => rgb(`emerald-${shade}`),
161
+ teal: (shade) => rgb(`teal-${shade}`),
162
+ cyan: (shade) => rgb(`cyan-${shade}`),
163
+ sky: (shade) => rgb(`sky-${shade}`),
164
+ blue: (shade) => rgb(`blue-${shade}`),
165
+ indigo: (shade) => rgb(`indigo-${shade}`),
166
+ violet: (shade) => rgb(`violet-${shade}`),
167
+ purple: (shade) => rgb(`purple-${shade}`),
168
+ fuchsia: (shade) => rgb(`fuchsia-${shade}`),
169
+ pink: (shade) => rgb(`pink-${shade}`),
170
+ rose: (shade) => rgb(`rose-${shade}`),
171
+ slateHex: (shade) => hex(`slate-${shade}`),
172
+ grayHex: (shade) => hex(`gray-${shade}`),
173
+ zincHex: (shade) => hex(`zinc-${shade}`),
174
+ neutralHex: (shade) => hex(`neutral-${shade}`),
175
+ stoneHex: (shade) => hex(`stone-${shade}`),
176
+ redHex: (shade) => hex(`red-${shade}`),
177
+ orangeHex: (shade) => hex(`orange-${shade}`),
178
+ amberHex: (shade) => hex(`amber-${shade}`),
179
+ yellowHex: (shade) => hex(`yellow-${shade}`),
180
+ limeHex: (shade) => hex(`lime-${shade}`),
181
+ greenHex: (shade) => hex(`green-${shade}`),
182
+ emeraldHex: (shade) => hex(`emerald-${shade}`),
183
+ tealHex: (shade) => hex(`teal-${shade}`),
184
+ cyanHex: (shade) => hex(`cyan-${shade}`),
185
+ skyHex: (shade) => hex(`sky-${shade}`),
186
+ blueHex: (shade) => hex(`blue-${shade}`),
187
+ indigoHex: (shade) => hex(`indigo-${shade}`),
188
+ violetHex: (shade) => hex(`violet-${shade}`),
189
+ purpleHex: (shade) => hex(`purple-${shade}`),
190
+ fuchsiaHex: (shade) => hex(`fuchsia-${shade}`),
191
+ pinkHex: (shade) => hex(`pink-${shade}`),
192
+ roseHex: (shade) => hex(`rose-${shade}`),
193
+ };
194
+ return api;
195
+ };
196
+ /**
197
+ * Convenience instance using only the default palette tokens (no theme).
198
+ *
199
+ * @example
200
+ * Color.rgb('emerald-400')
201
+ * Color.hex('black')
202
+ */
203
+ // eslint-disable-next-line no-redeclare
204
+ export const Color = createColor({});
205
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/core/color.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,243 @@
1
+ /* eslint-disable no-magic-numbers */
2
+ /* eslint-disable max-lines-per-function */
3
+ import { beforeEach, describe, expect, it } from 'vitest';
4
+ import { createTheme } from '../theme';
5
+ import { createColor, Color as ColorDefault, } from './color';
6
+ const RED_500_RGB = 'rgb(239, 68, 68)';
7
+ const SLATE_50_RGB = 'rgb(248, 250, 252)';
8
+ const RED_500_TOKEN = 'red-500';
9
+ const SLATE_50_TOKEN = '50';
10
+ const BLUE_500_TOKEN = '500';
11
+ describe('ColorPicker', () => {
12
+ let color;
13
+ beforeEach(() => {
14
+ const fakeTheme = createTheme({
15
+ colors: {
16
+ primary: 'red-500',
17
+ secondary: 'slate-50',
18
+ another: '#ff9887',
19
+ },
20
+ });
21
+ color = createColor(fakeTheme);
22
+ });
23
+ describe('rgb method', () => {
24
+ it.each([
25
+ // slate
26
+ ['slate-50', SLATE_50_RGB],
27
+ ['slate-100', 'rgb(241, 245, 249)'],
28
+ ['slate-200', 'rgb(226, 232, 240)'],
29
+ ['slate-300', 'rgb(203, 213, 225)'],
30
+ ['slate-400', 'rgb(148, 163, 184)'],
31
+ ['slate-500', 'rgb(100, 116, 139)'],
32
+ ['slate-600', 'rgb(71, 85, 105)'],
33
+ ['slate-700', 'rgb(51, 65, 85)'],
34
+ ['slate-800', 'rgb(30, 41, 59)'],
35
+ ['slate-900', 'rgb(15, 23, 42)'],
36
+ ['slate-950', 'rgb(2, 6, 23)'],
37
+ // gray
38
+ ['gray-50', 'rgb(249, 250, 251)'],
39
+ ['gray-100', 'rgb(243, 244, 246)'],
40
+ ['gray-200', 'rgb(229, 231, 235)'],
41
+ ['gray-300', 'rgb(209, 213, 219)'],
42
+ ['gray-400', 'rgb(156, 163, 175)'],
43
+ ['gray-500', 'rgb(107, 114, 128)'],
44
+ ['gray-600', 'rgb(75, 85, 99)'],
45
+ ['gray-700', 'rgb(55, 65, 81)'],
46
+ ['gray-800', 'rgb(31, 41, 55)'],
47
+ ['gray-900', 'rgb(17, 24, 39)'],
48
+ ['gray-950', 'rgb(3, 7, 18)'],
49
+ // zinc
50
+ ['zinc-50', 'rgb(250, 250, 250)'],
51
+ ['zinc-100', 'rgb(244, 244, 245)'],
52
+ ['zinc-200', 'rgb(228, 228, 231)'],
53
+ ['zinc-300', 'rgb(212, 212, 216)'],
54
+ ['zinc-400', 'rgb(161, 161, 170)'],
55
+ ['zinc-500', 'rgb(113, 113, 122)'],
56
+ ['zinc-600', 'rgb(82, 82, 91)'],
57
+ ['zinc-700', 'rgb(63, 63, 70)'],
58
+ ['zinc-800', 'rgb(39, 39, 42)'],
59
+ ['zinc-900', 'rgb(24, 24, 27)'],
60
+ ['zinc-950', 'rgb(9, 9, 11)'],
61
+ // red
62
+ ['red-50', 'rgb(254, 242, 242)'],
63
+ ['red-100', 'rgb(254, 226, 226)'],
64
+ ['red-200', 'rgb(254, 202, 202)'],
65
+ ['red-300', 'rgb(252, 165, 165)'],
66
+ ['red-400', 'rgb(248, 113, 113)'],
67
+ ['red-500', RED_500_RGB],
68
+ ['red-600', 'rgb(220, 38, 38)'],
69
+ ['red-700', 'rgb(185, 28, 28)'],
70
+ ['red-800', 'rgb(153, 27, 27)'],
71
+ ['red-900', 'rgb(127, 29, 29)'],
72
+ ['red-950', 'rgb(69, 10, 10)'],
73
+ // blue
74
+ ['blue-50', 'rgb(239, 246, 255)'],
75
+ ['blue-100', 'rgb(219, 234, 254)'],
76
+ ['blue-200', 'rgb(191, 219, 254)'],
77
+ ['blue-300', 'rgb(147, 197, 253)'],
78
+ ['blue-400', 'rgb(96, 165, 250)'],
79
+ ['blue-500', 'rgb(59, 130, 246)'],
80
+ ['blue-600', 'rgb(37, 99, 235)'],
81
+ ['blue-700', 'rgb(29, 78, 216)'],
82
+ ['blue-800', 'rgb(30, 64, 175)'],
83
+ ['blue-900', 'rgb(30, 58, 138)'],
84
+ ['blue-950', 'rgb(23, 37, 84)'],
85
+ // green
86
+ ['green-50', 'rgb(240, 253, 244)'],
87
+ ['green-100', 'rgb(220, 252, 231)'],
88
+ ['green-200', 'rgb(187, 247, 208)'],
89
+ ['green-300', 'rgb(134, 239, 172)'],
90
+ ['green-400', 'rgb(74, 222, 128)'],
91
+ ['green-500', 'rgb(34, 197, 94)'],
92
+ ['green-600', 'rgb(22, 163, 74)'],
93
+ ['green-700', 'rgb(21, 128, 61)'],
94
+ ['green-800', 'rgb(22, 101, 52)'],
95
+ ['green-900', 'rgb(20, 83, 45)'],
96
+ ['green-950', 'rgb(5, 46, 22)'],
97
+ // special colors
98
+ ['black', '#000'],
99
+ ['white', '#fff'],
100
+ ])('should convert %s to rgb %s', (colorToken, expected) => {
101
+ expect(color.rgb(colorToken)).toBe(expected);
102
+ });
103
+ // With stronger typing, direct CSS strings are not allowed by the type system.
104
+ // Runtime still supports them when needed, but they are intentionally not tested here.
105
+ it('should return the theme color when pass a token', () => {
106
+ const color = createColor({
107
+ primary: 'red-500',
108
+ secondary: 'slate-50',
109
+ });
110
+ expect(color.rgb('primary')).toBe('rgb(239, 68, 68)');
111
+ expect(color.rgb('secondary')).toBe('rgb(248, 250, 252)');
112
+ });
113
+ });
114
+ describe('default Color constant (no theme)', () => {
115
+ it('should resolve palette tokens via Color constant', () => {
116
+ expect(ColorDefault.rgb(RED_500_TOKEN)).toBe(RED_500_RGB);
117
+ expect(ColorDefault.slate(SLATE_50_TOKEN)).toBe(SLATE_50_RGB);
118
+ expect(ColorDefault.blueHex(BLUE_500_TOKEN)).toBe(0x3b82f6);
119
+ });
120
+ it('should throw for unknown tokens', () => {
121
+ expect(() => ColorDefault.rgb('unknown-123')).toThrow();
122
+ });
123
+ });
124
+ describe('hex method', () => {
125
+ it.each([
126
+ // slate
127
+ ['slate-50', 0xf8fafc],
128
+ ['slate-100', 0xf1f5f9],
129
+ ['slate-200', 0xe2e8f0],
130
+ ['slate-300', 0xcbd5e1],
131
+ ['slate-400', 0x94a3b8],
132
+ ['slate-500', 0x64748b],
133
+ ['slate-600', 0x475569],
134
+ ['slate-700', 0x334155],
135
+ ['slate-800', 0x1e293b],
136
+ ['slate-900', 0x0f172a],
137
+ ['slate-950', 0x020617],
138
+ // gray
139
+ ['gray-50', 0xf9fafb],
140
+ ['gray-100', 0xf3f4f6],
141
+ ['gray-200', 0xe5e7eb],
142
+ ['gray-300', 0xd1d5db],
143
+ ['gray-400', 0x9ca3af],
144
+ ['gray-500', 0x6b7280],
145
+ ['gray-600', 0x4b5563],
146
+ ['gray-700', 0x374151],
147
+ ['gray-800', 0x1f2937],
148
+ ['gray-900', 0x111827],
149
+ ['gray-950', 0x030712],
150
+ // zinc
151
+ ['zinc-50', 0xfafafa],
152
+ ['zinc-100', 0xf4f4f5],
153
+ ['zinc-200', 0xe4e4e7],
154
+ ['zinc-300', 0xd4d4d8],
155
+ ['zinc-400', 0xa1a1aa],
156
+ ['zinc-500', 0x71717a],
157
+ ['zinc-600', 0x52525b],
158
+ ['zinc-700', 0x3f3f46],
159
+ ['zinc-800', 0x27272a],
160
+ ['zinc-900', 0x18181b],
161
+ ['zinc-950', 0x09090b],
162
+ // red
163
+ ['red-50', 0xfef2f2],
164
+ ['red-100', 0xfee2e2],
165
+ ['red-200', 0xfecaca],
166
+ ['red-300', 0xfca5a5],
167
+ ['red-400', 0xf87171],
168
+ ['red-500', 0xef4444],
169
+ ['red-600', 0xdc2626],
170
+ ['red-700', 0xb91c1c],
171
+ ['red-800', 0x991b1b],
172
+ ['red-900', 0x7f1d1d],
173
+ ['red-950', 0x450a0a],
174
+ // blue
175
+ ['blue-50', 0xeff6ff],
176
+ ['blue-100', 0xdbeafe],
177
+ ['blue-200', 0xbfdbfe],
178
+ ['blue-300', 0x93c5fd],
179
+ ['blue-400', 0x60a5fa],
180
+ ['blue-500', 0x3b82f6],
181
+ ['blue-600', 0x2563eb],
182
+ ['blue-700', 0x1d4ed8],
183
+ ['blue-800', 0x1e40af],
184
+ ['blue-900', 0x1e3a8a],
185
+ ['blue-950', 0x172554],
186
+ // green
187
+ ['green-50', 0xf0fdf4],
188
+ ['green-100', 0xdcfce7],
189
+ ['green-200', 0xbbf7d0],
190
+ ['green-300', 0x86efac],
191
+ ['green-400', 0x4ade80],
192
+ ['green-500', 0x22c55e],
193
+ ['green-600', 0x16a34a],
194
+ ['green-700', 0x15803d],
195
+ ['green-800', 0x166534],
196
+ ['green-900', 0x14532d],
197
+ ['green-950', 0x052e16],
198
+ // special colors
199
+ ['black', 0x000000],
200
+ ['white', 0xffffff],
201
+ ])('should convert %s to hex 0x%s', (colorToken, expected) => {
202
+ expect(color.hex(colorToken)).toBe(expected);
203
+ });
204
+ });
205
+ describe('error handling', () => {
206
+ it('should throw an error for invalid color token', () => {
207
+ expect(() => color.rgb('invalid-color')).toThrow('Color token "invalid-color" not found');
208
+ });
209
+ it('should throw an error for invalid shade', () => {
210
+ expect(() => color.rgb('red-999')).toThrow('Color token "red-999" not found');
211
+ });
212
+ it('should throw an error for invalid color key', () => {
213
+ expect(() => color.hex('purples-500')).toThrow('Color token "purples-500" not found');
214
+ });
215
+ });
216
+ describe('theme integration', () => {
217
+ const fakeTheme = createTheme({
218
+ colors: {
219
+ primary: 'red-500',
220
+ secondary: 'slate-50',
221
+ another: '#ff9887',
222
+ },
223
+ });
224
+ const color = createColor(fakeTheme.colors);
225
+ it('should resolve theme token with colors. prefix', () => {
226
+ expect(color.rgb('primary')).toBe(RED_500_RGB);
227
+ expect(color.rgb('secondary')).toBe(SLATE_50_RGB);
228
+ expect(color.rgb('another')).toBe('#ff9887');
229
+ });
230
+ it('should resolve theme token without colors. prefix', () => {
231
+ expect(color.rgb('primary')).toBe(RED_500_RGB);
232
+ expect(color.rgb('secondary')).toBe(SLATE_50_RGB);
233
+ });
234
+ it('should convert theme tokens to hex', () => {
235
+ expect(color.hex('primary')).toBe(0xef4444);
236
+ expect(color.hex('secondary')).toBe(0xf8fafc);
237
+ });
238
+ it('should throw an error if theme token is not found', () => {
239
+ expect(() => color.rgb('colors.not-found')).toThrow('Color token "colors.not-found" not found');
240
+ });
241
+ });
242
+ });
243
+ //# sourceMappingURL=color.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.spec.js","sourceRoot":"","sources":["../../src/core/color.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Default mapping of font size keys to their pixel values in pixels
3
+ */
4
+ /** Default font-size scale mapping (in pixels). */
5
+ export const fontSizeMap = {
6
+ xs: 12,
7
+ sm: 14,
8
+ base: 16,
9
+ lg: 18,
10
+ xl: 20,
11
+ '2xl': 24,
12
+ '3xl': 30,
13
+ '4xl': 36,
14
+ '5xl': 48,
15
+ '6xl': 60,
16
+ '7xl': 72,
17
+ '8xl': 96,
18
+ '9xl': 128,
19
+ };
20
+ /**
21
+ * Creates a font size conversion API with optional custom font sizes
22
+ * @template T - Optional custom font size map type
23
+ * @param themeFontSizes - Optional custom font size mappings to extend defaults
24
+ * @returns Font size conversion API
25
+ */
26
+ /**
27
+ * Create a font-size API bound to an optional custom map.
28
+ * @example
29
+ * const f = createFontSize({ xxl: 28 });
30
+ * f.css('xxl'); // '28px'
31
+ */
32
+ export const createFontSize = (themeFontSizes) => {
33
+ const fontmap = {
34
+ ...fontSizeMap,
35
+ ...themeFontSizes,
36
+ };
37
+ return {
38
+ px: (key) => {
39
+ const value = fontmap[key];
40
+ if (typeof value === 'number') {
41
+ return value;
42
+ }
43
+ return 0;
44
+ },
45
+ rem: (key) => {
46
+ const value = fontmap[key];
47
+ if (typeof value === 'number') {
48
+ return value / 16;
49
+ }
50
+ return 0;
51
+ },
52
+ css: (key) => {
53
+ const value = fontmap[key];
54
+ if (typeof value === 'number') {
55
+ return `${value}px`;
56
+ }
57
+ return '0px';
58
+ },
59
+ };
60
+ };
61
+ // Convenience instance using default font sizes (no theme)
62
+ export const FontSize = createFontSize(undefined);
63
+ //# sourceMappingURL=font-size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-size.js","sourceRoot":"","sources":["../../src/core/font-size.ts"],"names":[],"mappings":"AA0BA;;GAEG;AACH,mDAAmD;AACnD,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,IAAI,EAAE,EAAE;IACR,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,GAAG;CACX,CAAC;AA8BF;;;;;GAKG;AACH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAG5B,cAAkB,EACF,EAAE;IAClB,MAAM,OAAO,GAAgB;QAC3B,GAAG,WAAW;QACd,GAAI,cAA0C;KAChC,CAAC;IAEjB,OAAO;QACL,EAAE,EAAE,CACF,GAA4D,EACpD,EAAE;YACV,MAAM,KAAK,GAAG,OAAO,CAAC,GAAkB,CAAC,CAAC;YAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,CAAC,CAAC;QACX,CAAC;QACD,GAAG,EAAE,CACH,GAA4D,EACpD,EAAE;YACV,MAAM,KAAK,GAAG,OAAO,CAAC,GAAkB,CAAC,CAAC;YAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,KAAK,GAAG,EAAE,CAAC;YACpB,CAAC;YAED,OAAO,CAAC,CAAC;QACX,CAAC;QACD,GAAG,EAAE,CACH,GAA4D,EACpD,EAAE;YACV,MAAM,KAAK,GAAG,OAAO,CAAC,GAAkB,CAAC,CAAC;YAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,GAAG,KAAK,IAAI,CAAC;YACtB,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,QAAQ,GACnB,cAAc,CAAY,SAAS,CAAC,CAAC"}
@@ -0,0 +1,85 @@
1
+ /* eslint-disable no-magic-numbers */
2
+ /* eslint-disable max-lines */
3
+ /* eslint-disable max-lines-per-function */
4
+ /* eslint-disable sonarjs/no-duplicate-string */
5
+ import { describe, expect, it } from 'vitest';
6
+ import { createFontSize, fontSizeMap } from './font-size';
7
+ describe('FontSize', () => {
8
+ describe('factory', () => {
9
+ it('should return correct font size in pixels', () => {
10
+ const fontSize = createFontSize();
11
+ expect(fontSize.px('sm')).toBe(14);
12
+ expect(fontSize.px('lg')).toBe(18);
13
+ expect(fontSize.px('2xl')).toBe(24);
14
+ });
15
+ it('should return correct font size with extra theme param', () => {
16
+ const fontSize = createFontSize({
17
+ tooMuchLarge: 300,
18
+ });
19
+ expect(fontSize.px('sm')).toBe(14);
20
+ expect(fontSize.px('lg')).toBe(18);
21
+ expect(fontSize.px('2xl')).toBe(24);
22
+ expect(fontSize.px('tooMuchLarge')).toBe(300);
23
+ });
24
+ });
25
+ describe('px', () => {
26
+ it('should return pixel value for font size key', () => {
27
+ const fontSize = createFontSize();
28
+ expect(fontSize.px('sm')).toBe(14);
29
+ expect(fontSize.px('lg')).toBe(18);
30
+ expect(fontSize.px('2xl')).toBe(24);
31
+ });
32
+ });
33
+ describe('rem', () => {
34
+ it('should convert pixel value to rem', () => {
35
+ const fontSize = createFontSize();
36
+ expect(fontSize.rem('sm')).toBe(14 / 16);
37
+ expect(fontSize.rem('lg')).toBe(18 / 16);
38
+ expect(fontSize.rem('2xl')).toBe(24 / 16);
39
+ });
40
+ it('should handle theme values', () => {
41
+ const fontSize = createFontSize({
42
+ sm: 16,
43
+ lg: 24,
44
+ '2xl': 32,
45
+ });
46
+ expect(fontSize.rem('sm')).toBe(1); // 16/16
47
+ expect(fontSize.rem('lg')).toBe(1.5); // 24/16
48
+ expect(fontSize.rem('2xl')).toBe(2); // 32/16
49
+ });
50
+ it('should return 0 for invalid keys', () => {
51
+ const fontSize = createFontSize();
52
+ // @ts-ignore
53
+ expect(fontSize.rem('invalid')).toBe(0);
54
+ });
55
+ });
56
+ describe('css', () => {
57
+ it('should return CSS string with px unit', () => {
58
+ const fontSize = createFontSize();
59
+ expect(fontSize.css('sm')).toBe('14px');
60
+ expect(fontSize.css('lg')).toBe('18px');
61
+ expect(fontSize.css('2xl')).toBe('24px');
62
+ });
63
+ });
64
+ describe('with theme', () => {
65
+ it('should return value from theme', () => {
66
+ const fontSize = createFontSize();
67
+ expect(fontSize.px('sm')).toBe(fontSizeMap['sm']);
68
+ expect(fontSize.px('lg')).toBe(fontSizeMap['lg']);
69
+ expect(fontSize.px('2xl')).toBe(fontSizeMap['2xl']);
70
+ const fontSize2 = createFontSize({
71
+ sm: 16,
72
+ lg: 24,
73
+ '2xl': 32,
74
+ custom: 42,
75
+ '11': 100,
76
+ });
77
+ expect(fontSize2.px('sm')).toBe(16);
78
+ expect(fontSize2.px('lg')).toBe(24);
79
+ expect(fontSize2.px('2xl')).toBe(32);
80
+ expect(fontSize2.px('custom')).toBe(42);
81
+ expect(fontSize2.px('11')).toBe(100);
82
+ });
83
+ });
84
+ });
85
+ //# sourceMappingURL=font-size.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-size.spec.js","sourceRoot":"","sources":["../../src/core/font-size.spec.ts"],"names":[],"mappings":"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"}