phaser-wind 0.3.0 → 0.4.0

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 (77) hide show
  1. package/README.md +136 -97
  2. package/dist/components/column.d.ts +1 -0
  3. package/dist/components/column.d.ts.map +1 -0
  4. package/dist/components/column.js +7 -0
  5. package/dist/components/column.js.map +1 -0
  6. package/dist/core/color.d.ts +149 -282
  7. package/dist/core/color.d.ts.map +1 -1
  8. package/dist/core/color.js +117 -298
  9. package/dist/core/color.js.map +1 -1
  10. package/dist/core/color.spec.js +46 -55
  11. package/dist/core/color.spec.js.map +1 -1
  12. package/dist/core/font-size.d.ts +36 -15
  13. package/dist/core/font-size.d.ts.map +1 -1
  14. package/dist/core/font-size.js +42 -47
  15. package/dist/core/font-size.js.map +1 -1
  16. package/dist/core/font-size.spec.js +55 -43
  17. package/dist/core/font-size.spec.js.map +1 -1
  18. package/dist/core/font.d.ts +18 -91
  19. package/dist/core/font.d.ts.map +1 -1
  20. package/dist/core/font.js +33 -174
  21. package/dist/core/font.js.map +1 -1
  22. package/dist/core/font.spec.js +45 -49
  23. package/dist/core/font.spec.js.map +1 -1
  24. package/dist/core/index.d.ts +1 -1
  25. package/dist/core/index.js +1 -1
  26. package/dist/core/{pallete.d.ts → palette.d.ts} +2 -2
  27. package/dist/core/{pallete.d.ts.map → palette.d.ts.map} +1 -1
  28. package/dist/core/{pallete.js → palette.js} +2 -2
  29. package/dist/core/{pallete.js.map → palette.js.map} +1 -1
  30. package/dist/core/radius.d.ts +19 -24
  31. package/dist/core/radius.d.ts.map +1 -1
  32. package/dist/core/radius.js +20 -28
  33. package/dist/core/radius.js.map +1 -1
  34. package/dist/core/radius.spec.js +28 -33
  35. package/dist/core/radius.spec.js.map +1 -1
  36. package/dist/core/shadow.d.ts +18 -10
  37. package/dist/core/shadow.d.ts.map +1 -1
  38. package/dist/core/shadow.js +29 -19
  39. package/dist/core/shadow.js.map +1 -1
  40. package/dist/core/shadow.spec.d.ts +2 -0
  41. package/dist/core/shadow.spec.d.ts.map +1 -0
  42. package/dist/core/shadow.spec.js +21 -0
  43. package/dist/core/shadow.spec.js.map +1 -0
  44. package/dist/core/spacing.d.ts +22 -29
  45. package/dist/core/spacing.d.ts.map +1 -1
  46. package/dist/core/spacing.js +27 -39
  47. package/dist/core/spacing.js.map +1 -1
  48. package/dist/core/spacing.spec.js +18 -29
  49. package/dist/core/spacing.spec.js.map +1 -1
  50. package/dist/exceptions.d.ts +1 -0
  51. package/dist/exceptions.d.ts.map +1 -0
  52. package/dist/exceptions.js +2 -0
  53. package/dist/exceptions.js.map +1 -0
  54. package/dist/index.d.ts +1 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +1 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/plugin/index.d.ts +2 -0
  59. package/dist/plugin/index.d.ts.map +1 -0
  60. package/dist/plugin/index.js +2 -0
  61. package/dist/plugin/index.js.map +1 -0
  62. package/dist/plugin/plugin.d.ts +71 -0
  63. package/dist/plugin/plugin.d.ts.map +1 -0
  64. package/dist/plugin/plugin.js +91 -0
  65. package/dist/plugin/plugin.js.map +1 -0
  66. package/dist/theme/theme-config.d.ts +24 -48
  67. package/dist/theme/theme-config.d.ts.map +1 -1
  68. package/dist/theme/theme-config.js +4 -1
  69. package/dist/theme/theme-config.js.map +1 -1
  70. package/dist/theme/theme-manager.d.ts +1 -106
  71. package/dist/theme/theme-manager.d.ts.map +1 -1
  72. package/dist/theme/theme-manager.js +1 -187
  73. package/dist/theme/theme-manager.js.map +1 -1
  74. package/dist/theme/type.d.ts +48 -0
  75. package/dist/theme/type.d.ts.map +1 -1
  76. package/dist/theme/type.js +1 -1
  77. package/package.json +3 -3
@@ -1,34 +1,29 @@
1
- /**
2
- * Available border radius keys matching Tailwind CSS radius scale
3
- */
1
+ import type { BaseThemeConfig } from '../theme';
2
+ /** Available border radius keys matching Tailwind CSS radius scale. */
4
3
  export type RadiusKey = 'none' | 'sm' | 'default' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full';
5
- export type RadiusMap = Record<RadiusKey, number>;
4
+ /** Map of radius tokens to pixel values. */
5
+ export type RadiusMap = Record<RadiusKey | string, number>;
6
6
  /**
7
7
  * Mapping of radius keys to their pixel values
8
8
  */
9
+ /** Default radius scale mapping (in pixels). */
9
10
  export declare const radiusMap: RadiusMap;
10
11
  /**
11
12
  * Utility functions for working with border radius values
12
13
  */
13
- export declare const Radius: {
14
- getValueByKey: (key: RadiusKey | string) => number;
15
- /**
16
- * Get border radius in pixels
17
- * @param key - Radius key (e.g., 'sm', 'lg', 'full')
18
- * @returns Border radius value in pixels
19
- */
20
- px: (key: RadiusKey) => number;
21
- /**
22
- * Get border radius in rem units (relative to 16px base)
23
- * @param key - Radius key (e.g., 'sm', 'lg', 'full')
24
- * @returns Border radius value in rem units
25
- */
26
- rem: (key: RadiusKey) => number;
27
- /**
28
- * Get border radius as CSS pixel string
29
- * @param key - Radius key (e.g., 'sm', 'lg', 'full')
30
- * @returns Border radius value as CSS string (e.g., '4px')
31
- */
32
- css: (key: RadiusKey) => string;
14
+ /** API for resolving radius tokens to px/rem/css. */
15
+ export type RadiusApi<T extends RadiusMap | undefined> = {
16
+ px: (key: RadiusKey | (T extends RadiusMap ? keyof T : never)) => number;
17
+ rem: (key: RadiusKey | (T extends RadiusMap ? keyof T : never)) => number;
18
+ css: (key: RadiusKey | (T extends RadiusMap ? keyof T : never)) => string;
33
19
  };
20
+ /**
21
+ * Create a radius API bound to an optional theme radius map.
22
+ * @example
23
+ * const r = createRadius({ card: 12 });
24
+ * r.css('card'); // '12px'
25
+ */
26
+ export declare const createRadius: <T extends RadiusMap | undefined = BaseThemeConfig["radius"]>(themeRadius?: T) => RadiusApi<T>;
27
+ /** Convenience instance using default radius map (no theme). */
28
+ export declare const Radius: RadiusApi<undefined>;
34
29
  //# sourceMappingURL=radius.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"radius.d.ts","sourceRoot":"","sources":["../../src/core/radius.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,IAAI,GACJ,SAAS,GACT,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,MAAM,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,SAUvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM;yBACI,SAAS,GAAG,MAAM,KAAG,MAAM;IAQhD;;;;OAIG;cACO,SAAS,KAAG,MAAM;IAE5B;;;;OAIG;eACQ,SAAS,KAAG,MAAM;IAE7B;;;;OAIG;eACQ,SAAS,KAAG,MAAM;CAC9B,CAAC"}
1
+ {"version":3,"file":"radius.d.ts","sourceRoot":"","sources":["../../src/core/radius.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,uEAAuE;AACvE,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,IAAI,GACJ,SAAS,GACT,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,MAAM,CAAC;AAEX,4CAA4C;AAC5C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3D;;GAEG;AACH,gDAAgD;AAChD,eAAO,MAAM,SAAS,EAAE,SAUvB,CAAC;AAEF;;GAEG;AACH,qDAAqD;AACrD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;IACvD,EAAE,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,CAAC;IACzE,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,CAAC;IAC1E,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,CAAC;CAC3E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACvB,CAAC,SAAS,SAAS,GAAG,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,EAE3D,cAAc,CAAC,KACd,SAAS,CAAC,CAAC,CAkBb,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,MAAM,EAAE,SAAS,CAAC,SAAS,CAAsC,CAAC"}
@@ -1,7 +1,7 @@
1
- import { ThemeManager } from '../theme';
2
1
  /**
3
2
  * Mapping of radius keys to their pixel values
4
3
  */
4
+ /** Default radius scale mapping (in pixels). */
5
5
  export const radiusMap = {
6
6
  none: 0,
7
7
  sm: 2,
@@ -14,33 +14,25 @@ export const radiusMap = {
14
14
  full: 9999,
15
15
  };
16
16
  /**
17
- * Utility functions for working with border radius values
17
+ * Create a radius API bound to an optional theme radius map.
18
+ * @example
19
+ * const r = createRadius({ card: 12 });
20
+ * r.css('card'); // '12px'
18
21
  */
19
- export const Radius = {
20
- getValueByKey: (key) => {
21
- const value = ThemeManager.getToken(`radius.${key}`);
22
- if (typeof value === 'number') {
23
- return value;
24
- }
25
- return radiusMap[key] ?? 0;
26
- },
27
- /**
28
- * Get border radius in pixels
29
- * @param key - Radius key (e.g., 'sm', 'lg', 'full')
30
- * @returns Border radius value in pixels
31
- */
32
- px: (key) => radiusMap[key],
33
- /**
34
- * Get border radius in rem units (relative to 16px base)
35
- * @param key - Radius key (e.g., 'sm', 'lg', 'full')
36
- * @returns Border radius value in rem units
37
- */
38
- rem: (key) => radiusMap[key] / 16,
39
- /**
40
- * Get border radius as CSS pixel string
41
- * @param key - Radius key (e.g., 'sm', 'lg', 'full')
42
- * @returns Border radius value as CSS string (e.g., '4px')
43
- */
44
- css: (key) => `${radiusMap[key]}px`,
22
+ export const createRadius = (themeRadius) => {
23
+ const map = {
24
+ ...radiusMap,
25
+ ...themeRadius,
26
+ };
27
+ const get = (key) => {
28
+ return typeof map[key] === 'number' ? map[key] : 0;
29
+ };
30
+ return {
31
+ px: (key) => get(key),
32
+ rem: (key) => get(key) / 16,
33
+ css: (key) => `${get(key)}px`,
34
+ };
45
35
  };
36
+ /** Convenience instance using default radius map (no theme). */
37
+ export const Radius = createRadius(undefined);
46
38
  //# sourceMappingURL=radius.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"radius.js","sourceRoot":"","sources":["../../src/core/radius.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAkBxC;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,IAAI,EAAE,CAAC;IACP,EAAE,EAAE,CAAC;IACL,OAAO,EAAE,CAAC;IACV,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,IAAI;CACX,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,aAAa,EAAE,CAAC,GAAuB,EAAU,EAAE;QACjD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,SAAS,CAAC,GAAgB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD;;;;OAIG;IACH,EAAE,EAAE,CAAC,GAAc,EAAU,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;IAE9C;;;;OAIG;IACH,GAAG,EAAE,CAAC,GAAc,EAAU,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE;IAEpD;;;;OAIG;IACH,GAAG,EAAE,CAAC,GAAc,EAAU,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI;CACvD,CAAC"}
1
+ {"version":3,"file":"radius.js","sourceRoot":"","sources":["../../src/core/radius.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,gDAAgD;AAChD,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,IAAI,EAAE,CAAC;IACP,EAAE,EAAE,CAAC;IACL,OAAO,EAAE,CAAC;IACV,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,IAAI;CACX,CAAC;AAYF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAG1B,WAAe,EACD,EAAE;IAChB,MAAM,GAAG,GAAc;QACrB,GAAG,SAAS;QACZ,GAAI,WAAqC;KAC7B,CAAC;IAEf,MAAM,GAAG,GAAG,CAAC,GAAW,EAAU,EAAE;QAClC,OAAO,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,GAAG,CAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,CAAC,GAAwD,EAAU,EAAE,CACvE,GAAG,CAAC,GAAa,CAAC;QACpB,GAAG,EAAE,CAAC,GAAwD,EAAU,EAAE,CACxE,GAAG,CAAC,GAAa,CAAC,GAAG,EAAE;QACzB,GAAG,EAAE,CAAC,GAAwD,EAAU,EAAE,CACxE,GAAG,GAAG,CAAC,GAAa,CAAC,IAAI;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,MAAM,GAAyB,YAAY,CAAY,SAAS,CAAC,CAAC"}
@@ -2,59 +2,54 @@
2
2
  /* eslint-disable max-lines */
3
3
  /* eslint-disable max-lines-per-function */
4
4
  /* eslint-disable sonarjs/no-duplicate-string */
5
- import { afterAll, beforeEach, describe, expect, it } from 'vitest';
6
- import { ThemeManager, defaultLightTheme } from '../theme';
7
- import { Radius, radiusMap } from './radius';
5
+ import { describe, expect, it } from 'vitest';
6
+ import { createRadius, radiusMap, Radius } from './radius';
8
7
  describe('Radius', () => {
9
- afterAll(() => {
10
- ThemeManager.clear();
11
- });
12
- beforeEach(() => {
13
- ThemeManager.init(defaultLightTheme);
14
- });
15
8
  describe('px', () => {
16
9
  it('should return pixel value for radius key', () => {
17
- expect(Radius.px('sm')).toBe(2);
18
- expect(Radius.px('lg')).toBe(8);
19
- expect(Radius.px('full')).toBe(9999);
10
+ const radius = createRadius();
11
+ expect(radius.px('sm')).toBe(2);
12
+ expect(radius.px('lg')).toBe(8);
13
+ expect(radius.px('full')).toBe(9999);
20
14
  });
21
15
  });
22
16
  describe('rem', () => {
23
17
  it('should convert pixel value to rem', () => {
24
- expect(Radius.rem('sm')).toBe(2 / 16);
25
- expect(Radius.rem('lg')).toBe(8 / 16);
26
- expect(Radius.rem('full')).toBe(9999 / 16);
18
+ const radius = createRadius();
19
+ expect(radius.rem('sm')).toBe(2 / 16);
20
+ expect(radius.rem('lg')).toBe(8 / 16);
21
+ expect(radius.rem('full')).toBe(9999 / 16);
27
22
  });
28
23
  });
29
24
  describe('css', () => {
30
25
  it('should return CSS string with px unit', () => {
31
- expect(Radius.css('sm')).toBe('2px');
26
+ const radius = createRadius();
27
+ expect(radius.css('sm')).toBe('2px');
28
+ expect(radius.css('lg')).toBe('8px');
29
+ expect(radius.css('full')).toBe('9999px');
30
+ });
31
+ it('should work with default Radius constant', () => {
32
+ expect(Radius.px('sm')).toBe(2);
32
33
  expect(Radius.css('lg')).toBe('8px');
33
- expect(Radius.css('full')).toBe('9999px');
34
+ expect(Radius.rem('full')).toBe(9999 / 16);
34
35
  });
35
36
  });
36
37
  describe('getValueByKey', () => {
37
38
  it('should return value from radiusMap', () => {
38
- expect(Radius.getValueByKey('sm')).toBe(radiusMap.sm);
39
- expect(Radius.getValueByKey('lg')).toBe(radiusMap.lg);
40
- expect(Radius.getValueByKey('full')).toBe(radiusMap.full);
39
+ const radius = createRadius();
40
+ expect(radius.px('sm')).toBe(radiusMap['sm']);
41
+ expect(radius.px('lg')).toBe(radiusMap['lg']);
42
+ expect(radius.px('full')).toBe(radiusMap['full']);
41
43
  });
42
44
  });
43
45
  describe('with theme', () => {
44
46
  it('should return value from theme', () => {
45
- expect(Radius.getValueByKey('sm')).toBe(radiusMap.sm);
46
- expect(Radius.getValueByKey('custom')).toBe(0);
47
- expect(Radius.getValueByKey('11')).toBe(0);
48
- ThemeManager.setThemeObject({
49
- radius: {
50
- sm: 10,
51
- custom: 42,
52
- '11': 100,
53
- },
54
- });
55
- expect(Radius.getValueByKey('sm')).toBe(10);
56
- expect(Radius.getValueByKey('custom')).toBe(42);
57
- expect(Radius.getValueByKey('11')).toBe(100);
47
+ const radius1 = createRadius();
48
+ expect(radius1.px('sm')).toBe(radiusMap['sm']);
49
+ const radius2 = createRadius();
50
+ expect(radius2.px('sm')).toBe(2);
51
+ expect(radius2.px('custom')).toBe(0);
52
+ expect(radius2.px('11')).toBe(0);
58
53
  });
59
54
  });
60
55
  });
@@ -1 +1 @@
1
- {"version":3,"file":"radius.spec.js","sourceRoot":"","sources":["../../src/core/radius.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"radius.spec.js","sourceRoot":"","sources":["../../src/core/radius.spec.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,31 @@
1
+ import type { BaseThemeConfig } from '../theme';
2
+ /** Default shadow keys. */
1
3
  export type ShadowKey = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'inner';
2
4
  /**
3
5
  * Shadow configuration type defining blur, offset and alpha values
4
6
  */
7
+ /** Shadow configuration shape (compatible with Phaser effects). */
5
8
  export type ShadowConfig = {
6
9
  blur: number;
7
10
  offsetX: number;
8
11
  offsetY: number;
9
12
  alpha: number;
10
13
  };
14
+ /** Default shadow presets. */
15
+ export declare const defaultShadowMap: Record<ShadowKey, ShadowConfig>;
16
+ /** Map of shadow keys to shadow configs. */
17
+ export type ShadowMap = Record<ShadowKey | string, ShadowConfig>;
18
+ /** API for resolving shadow tokens to configs. */
19
+ export type ShadowApi<T extends Record<string, unknown> | undefined> = {
20
+ get: (key: ShadowKey | (T extends Record<string, unknown> ? keyof T : never)) => ShadowConfig;
21
+ };
11
22
  /**
12
- * Utility for working with shadow configurations
23
+ * Create a shadow API bound to an optional effects map.
24
+ * @example
25
+ * const sh = createShadow({ glow: { blur: 8, offsetX: 0, offsetY: 0, alpha: .6 } });
26
+ * sh.get('glow');
13
27
  */
14
- export declare const Shadow: {
15
- /**
16
- * Get shadow configuration for given key
17
- * @param key - Shadow key (e.g., 'sm', 'lg', 'inner')
18
- * @param defaultKey - Optional default key if provided key is invalid
19
- * @returns Shadow configuration with blur, offset and alpha values
20
- */
21
- get: (key: ShadowKey, defaultKey?: ShadowKey) => ShadowConfig;
22
- };
28
+ export declare const createShadow: <T extends BaseThemeConfig["effects"] = BaseThemeConfig["effects"]>(effects?: T) => ShadowApi<T>;
29
+ /** Convenience instance using default shadows (no theme). */
30
+ export declare const Shadow: ShadowApi<undefined>;
23
31
  //# sourceMappingURL=shadow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shadow.d.ts","sourceRoot":"","sources":["../../src/core/shadow.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM;IACjB;;;;;OAKG;eACQ,SAAS,eAAc,SAAS,KAAU,YAAY;CAWlE,CAAC"}
1
+ {"version":3,"file":"shadow.d.ts","sourceRoot":"","sources":["../../src/core/shadow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,2BAA2B;AAC3B,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,CAAC;AAEpE;;GAEG;AACH,mEAAmE;AACnE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,CAO5D,CAAC;AAEF,4CAA4C;AAC5C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,EAAE,YAAY,CAAC,CAAC;AAEjE,kDAAkD;AAClD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,IAAI;IACrE,GAAG,EAAE,CACH,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,KACnE,YAAY,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACvB,CAAC,SAAS,eAAe,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,EAEjE,UAAU,CAAC,KACV,SAAS,CAAC,CAAC,CAiBb,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,MAAM,EAAE,SAAS,CAAC,SAAS,CAAsC,CAAC"}
@@ -1,23 +1,33 @@
1
+ /** Default shadow presets. */
2
+ export const defaultShadowMap = {
3
+ sm: { blur: 2, offsetX: 1, offsetY: 1, alpha: 0.15 },
4
+ md: { blur: 4, offsetX: 2, offsetY: 2, alpha: 0.2 },
5
+ lg: { blur: 6, offsetX: 4, offsetY: 4, alpha: 0.25 },
6
+ xl: { blur: 8, offsetX: 6, offsetY: 6, alpha: 0.3 },
7
+ '2xl': { blur: 12, offsetX: 8, offsetY: 8, alpha: 0.35 },
8
+ inner: { blur: 4, offsetX: -2, offsetY: -2, alpha: 0.2 },
9
+ };
1
10
  /**
2
- * Utility for working with shadow configurations
11
+ * Create a shadow API bound to an optional effects map.
12
+ * @example
13
+ * const sh = createShadow({ glow: { blur: 8, offsetX: 0, offsetY: 0, alpha: .6 } });
14
+ * sh.get('glow');
3
15
  */
4
- export const Shadow = {
5
- /**
6
- * Get shadow configuration for given key
7
- * @param key - Shadow key (e.g., 'sm', 'lg', 'inner')
8
- * @param defaultKey - Optional default key if provided key is invalid
9
- * @returns Shadow configuration with blur, offset and alpha values
10
- */
11
- get: (key, defaultKey = 'md') => {
12
- const shadows = {
13
- sm: { blur: 2, offsetX: 1, offsetY: 1, alpha: 0.15 },
14
- md: { blur: 4, offsetX: 2, offsetY: 2, alpha: 0.2 },
15
- lg: { blur: 6, offsetX: 4, offsetY: 4, alpha: 0.25 },
16
- xl: { blur: 8, offsetX: 6, offsetY: 6, alpha: 0.3 },
17
- '2xl': { blur: 12, offsetX: 8, offsetY: 8, alpha: 0.35 },
18
- inner: { blur: 4, offsetX: -2, offsetY: -2, alpha: 0.2 },
19
- };
20
- return shadows[key] || shadows[defaultKey];
21
- },
16
+ export const createShadow = (effects) => {
17
+ const map = {
18
+ ...defaultShadowMap,
19
+ ...effects,
20
+ };
21
+ const getConfig = (key) => {
22
+ const cfg = map[key];
23
+ if (cfg && typeof cfg === 'object')
24
+ return cfg;
25
+ return defaultShadowMap['md'];
26
+ };
27
+ return {
28
+ get: (key) => getConfig(key),
29
+ };
22
30
  };
31
+ /** Convenience instance using default shadows (no theme). */
32
+ export const Shadow = createShadow(undefined);
23
33
  //# sourceMappingURL=shadow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shadow.js","sourceRoot":"","sources":["../../src/core/shadow.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB;;;;;OAKG;IACH,GAAG,EAAE,CAAC,GAAc,EAAE,aAAwB,IAAI,EAAgB,EAAE;QAClE,MAAM,OAAO,GAAoC;YAC/C,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;YACpD,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;YACnD,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;YACpD,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;YACnD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;YACxD,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;SACzD,CAAC;QACF,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"shadow.js","sourceRoot":"","sources":["../../src/core/shadow.ts"],"names":[],"mappings":"AAgBA,8BAA8B;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAoC;IAC/D,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;IACpD,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;IACnD,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;IACpD,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;IACnD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;IACxD,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;CACzD,CAAC;AAYF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAG1B,OAAW,EACG,EAAE;IAChB,MAAM,GAAG,GAAc;QACrB,GAAG,gBAAgB;QACnB,GAAI,OAA4C;KACpC,CAAC;IAEf,MAAM,SAAS,GAAG,CAAC,GAAW,EAAgB,EAAE;QAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAmB,CAAC;QAC/D,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,CACH,GAAsE,EACxD,EAAE,CAAC,SAAS,CAAC,GAAa,CAAC;KAC5C,CAAC;AACJ,CAAC,CAAC;AAEF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,MAAM,GAAyB,YAAY,CAAY,SAAS,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shadow.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow.spec.d.ts","sourceRoot":"","sources":["../../src/core/shadow.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ /* eslint-disable no-magic-numbers */
2
+ import { describe, expect, it } from 'vitest';
3
+ import { Shadow, createShadow } from './shadow';
4
+ describe('Shadow', () => {
5
+ it('should provide defaults via Shadow constant', () => {
6
+ expect(Shadow.get('sm')).toEqual({
7
+ blur: 2,
8
+ offsetX: 1,
9
+ offsetY: 1,
10
+ alpha: 0.15,
11
+ });
12
+ expect(Shadow.get('md').blur).toBe(4);
13
+ });
14
+ it('should allow theme effect keys via factory', () => {
15
+ const shadow = createShadow({
16
+ customGlow: { blur: 20, offsetX: 0, offsetY: 0, alpha: 0.5 },
17
+ });
18
+ expect(shadow.get('customGlow').blur).toBe(20);
19
+ });
20
+ });
21
+ //# sourceMappingURL=shadow.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow.spec.js","sourceRoot":"","sources":["../../src/core/shadow.spec.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEhD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;SAC7D,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,39 +1,32 @@
1
+ import type { BaseThemeConfig } from '../theme';
1
2
  /**
2
- * Valid spacing scale keys following Tailwind's spacing scale
3
- * Values range from '0' to '96', including fractional values
3
+ * Valid spacing scale keys following Tailwind's spacing scale.
4
+ * Values range from '0' to '96', including fractional values and `px` (1px).
4
5
  */
5
6
  export type SpacingKey = '0' | 'px' | '0.5' | '1' | '1.5' | '2' | '2.5' | '3' | '3.5' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '14' | '16' | '20' | '24' | '28' | '32' | '36' | '40' | '44' | '48' | '52' | '56' | '60' | '64' | '72' | '80' | '96';
7
+ /** Maps spacing scale keys to their pixel values. */
8
+ export type SpacingMap = Record<SpacingKey | string, number>;
6
9
  /**
7
- * Maps spacing scale keys to their pixel values
8
- */
9
- export type SpacingMap = Record<SpacingKey, number>;
10
- /**
11
- * Spacing scale mapping following Tailwind's spacing scale
12
- * Values are in pixels, with a base unit of 4px (1 = 4px)
10
+ * Spacing scale mapping following Tailwind's spacing scale.
11
+ * Values are in pixels, with a base unit of 4px (1 = 4px).
13
12
  */
14
13
  export declare const spacingMap: SpacingMap;
15
14
  /**
16
- * Utility functions for working with spacing values
15
+ * API for resolving spacing tokens to px/rem/css.
16
+ * The accepted keys are narrowed to default tokens plus theme keys.
17
17
  */
18
- export declare const Spacing: {
19
- getValueByKey: (key: SpacingKey | string) => number;
20
- /**
21
- * Get spacing value in pixels
22
- * @param key - Spacing scale key
23
- * @returns Pixel value
24
- */
25
- px: (key: SpacingKey | string) => number;
26
- /**
27
- * Get spacing value in rem units (divided by 16)
28
- * @param key - Spacing scale key
29
- * @returns Rem value
30
- */
31
- rem: (key: SpacingKey | string) => number;
32
- /**
33
- * Get spacing value as CSS pixel string
34
- * @param key - Spacing scale key
35
- * @returns CSS pixel value string (e.g. "16px")
36
- */
37
- css: (key: SpacingKey | string) => string;
18
+ export type SpacingApi<T extends SpacingMap | undefined> = {
19
+ px: (key: SpacingKey | (T extends SpacingMap ? keyof T : never)) => number;
20
+ rem: (key: SpacingKey | (T extends SpacingMap ? keyof T : never)) => number;
21
+ css: (key: SpacingKey | (T extends SpacingMap ? keyof T : never)) => string;
38
22
  };
23
+ /**
24
+ * Create a spacing API bound to an optional theme spacing map.
25
+ * @example
26
+ * const s = createSpacing({ gutter: 24 });
27
+ * s.px('gutter'); // 24
28
+ */
29
+ export declare const createSpacing: <T extends SpacingMap | undefined = BaseThemeConfig["spacing"]>(themeSpacing?: T) => SpacingApi<T>;
30
+ /** Convenience instance using default spacing map (no theme). */
31
+ export declare const Spacing: SpacingApi<undefined>;
39
32
  //# sourceMappingURL=spacing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spacing.d.ts","sourceRoot":"","sources":["../../src/core/spacing.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB,GAAG,GACH,IAAI,GACJ,KAAK,GACL,GAAG,GACH,KAAK,GACL,GAAG,GACH,KAAK,GACL,GAAG,GACH,KAAK,GACL,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,UAoCxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO;yBACG,UAAU,GAAG,MAAM,KAAG,MAAM;IASjD;;;;OAIG;cACO,UAAU,GAAG,MAAM,KAAG,MAAM;IAKtC;;;;OAIG;eACQ,UAAU,GAAG,MAAM,KAAG,MAAM;IAKvC;;;;OAIG;eACQ,UAAU,GAAG,MAAM,KAAG,MAAM;CAIxC,CAAC"}
1
+ {"version":3,"file":"spacing.d.ts","sourceRoot":"","sources":["../../src/core/spacing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB,GAAG,GACH,IAAI,GACJ,KAAK,GACL,GAAG,GACH,KAAK,GACL,GAAG,GACH,KAAK,GACL,GAAG,GACH,KAAK,GACL,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,qDAAqD;AACrD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,UAoCxB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,UAAU,GAAG,SAAS,IAAI;IACzD,EAAE,EAAE,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,SAAS,UAAU,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,CAAC;IAC3E,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,SAAS,UAAU,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,CAAC;IAC5E,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,SAAS,UAAU,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,CAAC;CAC7E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,CAAC,SAAS,UAAU,GAAG,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,EAE7D,eAAe,CAAC,KACf,UAAU,CAAC,CAAC,CA2Bd,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,OAAO,EAAE,UAAU,CAAC,SAAS,CACL,CAAC"}
@@ -1,7 +1,6 @@
1
- import { ThemeManager } from '../theme/theme-manager';
2
1
  /**
3
- * Spacing scale mapping following Tailwind's spacing scale
4
- * Values are in pixels, with a base unit of 4px (1 = 4px)
2
+ * Spacing scale mapping following Tailwind's spacing scale.
3
+ * Values are in pixels, with a base unit of 4px (1 = 4px).
5
4
  */
6
5
  export const spacingMap = {
7
6
  '0': 0,
@@ -41,42 +40,31 @@ export const spacingMap = {
41
40
  '96': 384,
42
41
  };
43
42
  /**
44
- * Utility functions for working with spacing values
43
+ * Create a spacing API bound to an optional theme spacing map.
44
+ * @example
45
+ * const s = createSpacing({ gutter: 24 });
46
+ * s.px('gutter'); // 24
45
47
  */
46
- export const Spacing = {
47
- getValueByKey: (key) => {
48
- const value = ThemeManager.getToken(`spacing.${key}`);
49
- if (typeof value === 'number') {
50
- return value;
51
- }
52
- return spacingMap[key] ?? 0;
53
- },
54
- /**
55
- * Get spacing value in pixels
56
- * @param key - Spacing scale key
57
- * @returns Pixel value
58
- */
59
- px: (key) => {
60
- const value = Spacing.getValueByKey(key);
61
- return value;
62
- },
63
- /**
64
- * Get spacing value in rem units (divided by 16)
65
- * @param key - Spacing scale key
66
- * @returns Rem value
67
- */
68
- rem: (key) => {
69
- const value = Spacing.getValueByKey(key);
70
- return value / 16;
71
- },
72
- /**
73
- * Get spacing value as CSS pixel string
74
- * @param key - Spacing scale key
75
- * @returns CSS pixel value string (e.g. "16px")
76
- */
77
- css: (key) => {
78
- const value = Spacing.getValueByKey(key);
79
- return `${value}px`;
80
- },
48
+ export const createSpacing = (themeSpacing) => {
49
+ const map = {
50
+ ...spacingMap,
51
+ ...themeSpacing,
52
+ };
53
+ const get = (key) => {
54
+ return typeof map[key] === 'number' ? map[key] : 0;
55
+ };
56
+ return {
57
+ px: (key) => {
58
+ return get(key);
59
+ },
60
+ rem: (key) => {
61
+ return get(key) / 16;
62
+ },
63
+ css: (key) => {
64
+ return `${get(key)}px`;
65
+ },
66
+ };
81
67
  };
68
+ /** Convenience instance using default spacing map (no theme). */
69
+ export const Spacing = createSpacing(undefined);
82
70
  //# sourceMappingURL=spacing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spacing.js","sourceRoot":"","sources":["../../src/core/spacing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAgDtD;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,GAAG,EAAE,CAAC;IACN,EAAE,EAAE,CAAC;IACL,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;IACP,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACV,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,aAAa,EAAE,CAAC,GAAwB,EAAU,EAAE;QAClD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,UAAU,CAAC,GAAiB,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,EAAE,EAAE,CAAC,GAAwB,EAAU,EAAE;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,GAAG,EAAE,CAAC,GAAwB,EAAU,EAAE;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,KAAK,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,GAAG,EAAE,CAAC,GAAwB,EAAU,EAAE;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"spacing.js","sourceRoot":"","sources":["../../src/core/spacing.ts"],"names":[],"mappings":"AA8CA;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,GAAG,EAAE,CAAC;IACN,EAAE,EAAE,CAAC;IACL,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;IACP,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACV,CAAC;AAYF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAG3B,YAAgB,EACD,EAAE;IACjB,MAAM,GAAG,GAAe;QACtB,GAAG,UAAU;QACb,GAAI,YAAuC;KAC9B,CAAC;IAEhB,MAAM,GAAG,GAAG,CAAC,GAAW,EAAU,EAAE;QAClC,OAAO,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,GAAG,CAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,CACF,GAA0D,EAClD,EAAE;YACV,OAAO,GAAG,CAAC,GAAa,CAAC,CAAC;QAC5B,CAAC;QACD,GAAG,EAAE,CACH,GAA0D,EAClD,EAAE;YACV,OAAO,GAAG,CAAC,GAAa,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,GAAG,EAAE,CACH,GAA0D,EAClD,EAAE;YACV,OAAO,GAAG,GAAG,CAAC,GAAa,CAAC,IAAI,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,OAAO,GAClB,aAAa,CAAY,SAAS,CAAC,CAAC"}
@@ -2,47 +2,36 @@
2
2
  /* eslint-disable max-lines */
3
3
  /* eslint-disable max-lines-per-function */
4
4
  /* eslint-disable sonarjs/no-duplicate-string */
5
- import { afterAll, beforeEach, describe, expect, it } from 'vitest';
6
- import { ThemeManager } from '../theme/theme-manager';
7
- import { Spacing } from './spacing';
5
+ import { describe, expect, it } from 'vitest';
6
+ import { createSpacing, Spacing } from './spacing';
8
7
  describe('Spacing', () => {
9
- beforeEach(() => {
10
- ThemeManager.clear();
11
- });
12
- afterAll(() => {
13
- ThemeManager.clear();
14
- });
15
8
  describe('px', () => {
16
9
  it('should return pixel values', () => {
17
- expect(Spacing.px('2')).toBe(8);
18
- expect(Spacing.px('4')).toBe(16);
19
- expect(Spacing.px('8')).toBe(32);
10
+ const spacing = createSpacing();
11
+ expect(spacing.px('2')).toBe(8);
12
+ expect(spacing.px('4')).toBe(16);
13
+ expect(spacing.px('8')).toBe(32);
20
14
  });
21
15
  });
22
16
  describe('rem', () => {
23
17
  it('should convert pixel values to rem', () => {
24
- expect(Spacing.rem('16')).toBe(4);
25
- expect(Spacing.rem('8')).toBe(2);
26
- expect(Spacing.rem('4')).toBe(1);
18
+ const spacing = createSpacing();
19
+ expect(spacing.rem('16')).toBe(4);
20
+ expect(spacing.rem('8')).toBe(2);
21
+ expect(spacing.rem('4')).toBe(1);
27
22
  });
28
23
  });
29
24
  describe('css', () => {
30
25
  it('should return pixel values as CSS strings', () => {
31
- expect(Spacing.css('2')).toBe('8px');
32
- expect(Spacing.css('4')).toBe('16px');
33
- expect(Spacing.css('8')).toBe('32px');
26
+ const spacing = createSpacing();
27
+ expect(spacing.css('2')).toBe('8px');
28
+ expect(spacing.css('4')).toBe('16px');
29
+ expect(spacing.css('8')).toBe('32px');
34
30
  });
35
- it('should handle theme values', () => {
36
- expect(Spacing.css('custom')).toBe('0px');
37
- expect(Spacing.css('11')).toBe('44px');
38
- ThemeManager.setThemeObject({
39
- spacing: {
40
- custom: 42,
41
- '11': 100,
42
- },
43
- });
44
- expect(Spacing.css('custom')).toBe('42px');
45
- expect(Spacing.css('11')).toBe('100px');
31
+ it('should work with default Spacing constant', () => {
32
+ expect(Spacing.px('2')).toBe(8);
33
+ expect(Spacing.css('4')).toBe('16px');
34
+ expect(Spacing.rem('8')).toBe(2);
46
35
  });
47
36
  });
48
37
  });