@hanzogui/create-theme 8.3.1 → 8.3.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 (140) hide show
  1. package/dist/cjs/applyMask.js +48 -0
  2. package/dist/cjs/applyMask.js.map +1 -0
  3. package/dist/cjs/combineMasks.js +26 -0
  4. package/dist/cjs/combineMasks.js.map +1 -0
  5. package/dist/cjs/createTheme.js +73 -0
  6. package/dist/cjs/createTheme.js.map +1 -0
  7. package/dist/cjs/createThemeTypes.js +3 -0
  8. package/dist/cjs/createThemeTypes.js.map +1 -0
  9. package/dist/cjs/helpers.js +14 -0
  10. package/dist/cjs/helpers.js.map +1 -0
  11. package/dist/cjs/index.js +10 -0
  12. package/dist/cjs/index.js.map +1 -0
  13. package/dist/cjs/isMinusZero.js +7 -0
  14. package/dist/cjs/isMinusZero.js.map +1 -0
  15. package/dist/cjs/masks.js +114 -0
  16. package/dist/cjs/masks.js.map +1 -0
  17. package/dist/cjs/package.json +1 -0
  18. package/dist/cjs/tests.js +33 -0
  19. package/dist/cjs/tests.js.map +1 -0
  20. package/dist/cjs/themeInfo.js +18 -0
  21. package/dist/cjs/themeInfo.js.map +1 -0
  22. package/dist/esm/applyMask.js +44 -0
  23. package/dist/esm/applyMask.js.map +1 -0
  24. package/dist/esm/combineMasks.js +22 -0
  25. package/dist/esm/combineMasks.js.map +1 -0
  26. package/dist/esm/createTheme.js +68 -0
  27. package/dist/esm/createTheme.js.map +1 -0
  28. package/dist/esm/createThemeTypes.js +2 -0
  29. package/dist/esm/createThemeTypes.js.map +1 -0
  30. package/dist/esm/helpers.js +8 -0
  31. package/dist/esm/helpers.js.map +1 -0
  32. package/dist/esm/index.js +7 -7
  33. package/dist/esm/index.js.map +1 -1
  34. package/dist/esm/isMinusZero.js +4 -0
  35. package/dist/esm/isMinusZero.js.map +1 -0
  36. package/dist/esm/masks.js +105 -0
  37. package/dist/esm/masks.js.map +1 -0
  38. package/dist/esm/tests.js +31 -0
  39. package/dist/esm/tests.js.map +1 -0
  40. package/dist/esm/themeInfo.js +13 -0
  41. package/dist/esm/themeInfo.js.map +1 -0
  42. package/package.json +17 -12
  43. package/src/applyMask.tsx +9 -4
  44. package/src/combineMasks.tsx +3 -3
  45. package/src/createTheme.tsx +3 -3
  46. package/src/helpers.tsx +10 -3
  47. package/src/index.tsx +6 -6
  48. package/src/masks.tsx +3 -3
  49. package/src/tests.tsx +3 -3
  50. package/src/themeInfo.tsx +1 -1
  51. package/types/applyMask.d.ts +3 -4
  52. package/types/applyMask.d.ts.map +1 -11
  53. package/types/combineMasks.d.ts +1 -2
  54. package/types/combineMasks.d.ts.map +1 -11
  55. package/types/createTheme.d.ts +15 -25
  56. package/types/createTheme.d.ts.map +1 -11
  57. package/types/createThemeTypes.d.ts +31 -32
  58. package/types/createThemeTypes.d.ts.map +1 -11
  59. package/types/helpers.d.ts +15 -9
  60. package/types/helpers.d.ts.map +1 -11
  61. package/types/index.d.ts +6 -7
  62. package/types/index.d.ts.map +1 -11
  63. package/types/isMinusZero.d.ts +0 -1
  64. package/types/isMinusZero.d.ts.map +1 -11
  65. package/types/masks.d.ts +2 -3
  66. package/types/masks.d.ts.map +1 -11
  67. package/types/tests.d.ts +0 -1
  68. package/types/tests.d.ts.map +1 -11
  69. package/types/themeInfo.d.ts +7 -8
  70. package/types/themeInfo.d.ts.map +1 -11
  71. package/dist/cjs/applyMask.cjs +0 -67
  72. package/dist/cjs/applyMask.native.js +0 -76
  73. package/dist/cjs/applyMask.native.js.map +0 -1
  74. package/dist/cjs/combineMasks.cjs +0 -48
  75. package/dist/cjs/combineMasks.native.js +0 -73
  76. package/dist/cjs/combineMasks.native.js.map +0 -1
  77. package/dist/cjs/createTheme.cjs +0 -105
  78. package/dist/cjs/createTheme.native.js +0 -111
  79. package/dist/cjs/createTheme.native.js.map +0 -1
  80. package/dist/cjs/createThemeTypes.cjs +0 -18
  81. package/dist/cjs/createThemeTypes.native.js +0 -21
  82. package/dist/cjs/createThemeTypes.native.js.map +0 -1
  83. package/dist/cjs/helpers.cjs +0 -36
  84. package/dist/cjs/helpers.native.js +0 -41
  85. package/dist/cjs/helpers.native.js.map +0 -1
  86. package/dist/cjs/index.cjs +0 -25
  87. package/dist/cjs/index.native.js +0 -28
  88. package/dist/cjs/index.native.js.map +0 -1
  89. package/dist/cjs/isMinusZero.cjs +0 -30
  90. package/dist/cjs/isMinusZero.native.js +0 -33
  91. package/dist/cjs/isMinusZero.native.js.map +0 -1
  92. package/dist/cjs/masks.cjs +0 -146
  93. package/dist/cjs/masks.native.js +0 -192
  94. package/dist/cjs/masks.native.js.map +0 -1
  95. package/dist/cjs/tests.cjs +0 -26
  96. package/dist/cjs/tests.native.js +0 -29
  97. package/dist/cjs/tests.native.js.map +0 -1
  98. package/dist/cjs/themeInfo.cjs +0 -40
  99. package/dist/cjs/themeInfo.native.js +0 -43
  100. package/dist/cjs/themeInfo.native.js.map +0 -1
  101. package/dist/esm/applyMask.mjs +0 -41
  102. package/dist/esm/applyMask.mjs.map +0 -1
  103. package/dist/esm/applyMask.native.js +0 -47
  104. package/dist/esm/applyMask.native.js.map +0 -1
  105. package/dist/esm/combineMasks.mjs +0 -23
  106. package/dist/esm/combineMasks.mjs.map +0 -1
  107. package/dist/esm/combineMasks.native.js +0 -45
  108. package/dist/esm/combineMasks.native.js.map +0 -1
  109. package/dist/esm/createTheme.mjs +0 -78
  110. package/dist/esm/createTheme.mjs.map +0 -1
  111. package/dist/esm/createTheme.native.js +0 -81
  112. package/dist/esm/createTheme.native.js.map +0 -1
  113. package/dist/esm/createThemeTypes.mjs +0 -2
  114. package/dist/esm/createThemeTypes.mjs.map +0 -1
  115. package/dist/esm/createThemeTypes.native.js +0 -2
  116. package/dist/esm/createThemeTypes.native.js.map +0 -1
  117. package/dist/esm/helpers.mjs +0 -9
  118. package/dist/esm/helpers.mjs.map +0 -1
  119. package/dist/esm/helpers.native.js +0 -11
  120. package/dist/esm/helpers.native.js.map +0 -1
  121. package/dist/esm/index.mjs +0 -7
  122. package/dist/esm/index.mjs.map +0 -1
  123. package/dist/esm/index.native.js +0 -7
  124. package/dist/esm/index.native.js.map +0 -1
  125. package/dist/esm/isMinusZero.mjs +0 -5
  126. package/dist/esm/isMinusZero.mjs.map +0 -1
  127. package/dist/esm/isMinusZero.native.js +0 -5
  128. package/dist/esm/isMinusZero.native.js.map +0 -1
  129. package/dist/esm/masks.mjs +0 -114
  130. package/dist/esm/masks.mjs.map +0 -1
  131. package/dist/esm/masks.native.js +0 -157
  132. package/dist/esm/masks.native.js.map +0 -1
  133. package/dist/esm/tests.mjs +0 -27
  134. package/dist/esm/tests.mjs.map +0 -1
  135. package/dist/esm/tests.native.js +0 -27
  136. package/dist/esm/tests.native.js.map +0 -1
  137. package/dist/esm/themeInfo.mjs +0 -14
  138. package/dist/esm/themeInfo.mjs.map +0 -1
  139. package/dist/esm/themeInfo.native.js +0 -14
  140. package/dist/esm/themeInfo.native.js.map +0 -1
@@ -0,0 +1,105 @@
1
+ import { objectEntries, objectFromEntries } from './helpers.js';
2
+ import { isMinusZero } from './isMinusZero.js';
3
+ export const createMask = (createMask) => typeof createMask === 'function'
4
+ ? { name: createMask.name || 'unnamed', mask: createMask }
5
+ : createMask;
6
+ export const skipMask = {
7
+ name: 'skip-mask',
8
+ mask: (template, opts) => {
9
+ const { skip } = opts;
10
+ const result = Object.fromEntries(Object.entries(template)
11
+ .filter(([k]) => !skip || !(k in skip))
12
+ .map(([k, v]) => [k, applyOverrides(k, v, opts)]));
13
+ return result;
14
+ },
15
+ };
16
+ function applyOverrides(key, value, opts) {
17
+ let override;
18
+ let strategy = opts.overrideStrategy;
19
+ const overrideSwap = opts.overrideSwap?.[key];
20
+ if (typeof overrideSwap !== 'undefined') {
21
+ override = overrideSwap;
22
+ strategy = 'swap';
23
+ }
24
+ else {
25
+ const overrideShift = opts.overrideShift?.[key];
26
+ if (typeof overrideShift !== 'undefined') {
27
+ override = overrideShift;
28
+ strategy = 'shift';
29
+ }
30
+ else {
31
+ const overrideDefault = opts.override?.[key];
32
+ if (typeof overrideDefault !== 'undefined') {
33
+ override = overrideDefault;
34
+ strategy = opts.overrideStrategy;
35
+ }
36
+ }
37
+ }
38
+ if (typeof override === 'undefined')
39
+ return value;
40
+ if (typeof override === 'string')
41
+ return value;
42
+ if (strategy === 'swap') {
43
+ return override;
44
+ }
45
+ return value;
46
+ }
47
+ export const createIdentityMask = () => ({
48
+ name: 'identity-mask',
49
+ mask: (template, opts) => skipMask.mask(template, opts),
50
+ });
51
+ export const createInverseMask = () => {
52
+ const mask = {
53
+ name: 'inverse-mask',
54
+ mask: (template, opts) => {
55
+ const inversed = objectFromEntries(objectEntries(template).map(([k, v]) => [k, -v]));
56
+ return skipMask.mask(inversed, opts);
57
+ },
58
+ };
59
+ return mask;
60
+ };
61
+ export const createShiftMask = ({ inverse } = {}, defaultOptions) => {
62
+ const mask = {
63
+ name: 'shift-mask',
64
+ mask: (template, opts) => {
65
+ const { override, overrideStrategy = 'shift', max: maxIn, palette, min = 0, strength = 1, } = { ...defaultOptions, ...opts };
66
+ const values = Object.entries(template);
67
+ const max = maxIn ?? (palette ? Object.values(palette).length - 1 : Number.POSITIVE_INFINITY);
68
+ const out = {};
69
+ for (const [key, value] of values) {
70
+ if (typeof value === 'string')
71
+ continue;
72
+ if (typeof override?.[key] === 'number') {
73
+ const overrideVal = override[key];
74
+ out[key] = overrideStrategy === 'shift' ? value + overrideVal : overrideVal;
75
+ continue;
76
+ }
77
+ if (typeof override?.[key] === 'string') {
78
+ out[key] = override[key];
79
+ continue;
80
+ }
81
+ const isPositive = value === 0 ? !isMinusZero(value) : value >= 0;
82
+ const direction = isPositive ? 1 : -1;
83
+ const invert = inverse ? -1 : 1;
84
+ const next = value + strength * direction * invert;
85
+ const clamped = isPositive
86
+ ? Math.max(min, Math.min(max, next))
87
+ : Math.min(-min, Math.max(-max, next));
88
+ out[key] = clamped;
89
+ }
90
+ const skipped = skipMask.mask(out, opts);
91
+ return skipped;
92
+ },
93
+ };
94
+ return mask;
95
+ };
96
+ export const createWeakenMask = (defaultOptions) => ({
97
+ name: 'soften-mask',
98
+ mask: createShiftMask({}, defaultOptions).mask,
99
+ });
100
+ export const createSoftenMask = createWeakenMask;
101
+ export const createStrengthenMask = (defaultOptions) => ({
102
+ name: 'strengthen-mask',
103
+ mask: createShiftMask({ inverse: true }, defaultOptions).mask,
104
+ });
105
+ //# sourceMappingURL=masks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masks.js","sourceRoot":"","sources":["../../src/masks.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { applyMask } from './applyMask.js';
2
+ import { createTheme } from './createTheme.js';
3
+ import { createStrengthenMask, createWeakenMask } from './masks.js';
4
+ // --- tests ---
5
+ if (process.env.NODE_ENV === 'development') {
6
+ const palette = ['0', '1', '2', '3', '-3', '-2', '-1', '-0'];
7
+ const template = { bg: 1, fg: -1 };
8
+ const stongerMask = createStrengthenMask();
9
+ const weakerMask = createWeakenMask();
10
+ const theme = createTheme(palette, template);
11
+ if (theme.bg !== '1')
12
+ throw `❌`;
13
+ if (theme.fg !== '-1')
14
+ throw `❌`;
15
+ const str = applyMask(theme, stongerMask);
16
+ if (str.bg !== '0')
17
+ throw `❌`;
18
+ if (str.fg !== '-0')
19
+ throw `❌`;
20
+ const weak = applyMask(theme, weakerMask);
21
+ if (weak.bg !== '2')
22
+ throw `❌`;
23
+ if (weak.fg !== '-2')
24
+ throw `❌`;
25
+ const weak2 = applyMask(theme, weakerMask, { strength: 2 });
26
+ if (weak2.bg !== '3')
27
+ throw `❌`;
28
+ if (weak2.fg !== '-3')
29
+ throw `❌`;
30
+ }
31
+ //# sourceMappingURL=tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tests.js","sourceRoot":"","sources":["../../src/tests.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAC/C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAa,CAAA;AAEpE,gBAAgB;AAChB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5D,MAAM,QAAQ,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAA;IAElC,MAAM,WAAW,GAAG,oBAAoB,EAAE,CAAA;IAC1C,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAA;IAErC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC5C,IAAI,KAAK,CAAC,EAAE,KAAK,GAAG;QAAE,MAAM,GAAG,CAAA;IAC/B,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI;QAAE,MAAM,GAAG,CAAA;IAEhC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACzC,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG;QAAE,MAAM,GAAG,CAAA;IAC7B,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI;QAAE,MAAM,GAAG,CAAA;IAE9B,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IACzC,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG;QAAE,MAAM,GAAG,CAAA;IAC9B,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI;QAAE,MAAM,GAAG,CAAA;IAE/B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;IAC3D,IAAI,KAAK,CAAC,EAAE,KAAK,GAAG;QAAE,MAAM,GAAG,CAAA;IAC/B,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI;QAAE,MAAM,GAAG,CAAA;AAClC,CAAC"}
@@ -0,0 +1,13 @@
1
+ const THEME_INFO = new Map();
2
+ export const getThemeInfo = (theme, name) => {
3
+ return THEME_INFO.get(name || JSON.stringify(theme));
4
+ };
5
+ export const setThemeInfo = (theme, info) => {
6
+ const next = {
7
+ ...info,
8
+ cache: new Map(),
9
+ };
10
+ THEME_INFO.set(info.name || JSON.stringify(theme), next);
11
+ THEME_INFO.set(JSON.stringify(info.definition), next);
12
+ };
13
+ //# sourceMappingURL=themeInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeInfo.js","sourceRoot":"","sources":["../../src/themeInfo.tsx"],"names":[],"mappings":"AAcA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAA;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAA+B,EAC/B,IAAa,EACU,EAAE;IACzB,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAA+B,EAC/B,IAEC,EACK,EAAE;IACR,MAAM,IAAI,GAAG;QACX,GAAG,IAAI;QACP,KAAK,EAAE,IAAI,GAAG,EAAE;KACjB,CAAA;IACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;IACxD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAA;AACvD,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzogui/create-theme",
3
- "version": "8.3.1",
3
+ "version": "8.3.3",
4
4
  "files": [
5
5
  "src",
6
6
  "types",
@@ -9,34 +9,39 @@
9
9
  ],
10
10
  "type": "module",
11
11
  "sideEffects": false,
12
- "main": "dist/cjs",
13
- "module": "dist/esm",
12
+ "main": "./dist/cjs/index.js",
13
+ "module": "./dist/esm/index.js",
14
14
  "types": "./types/index.d.ts",
15
15
  "exports": {
16
16
  "./package.json": "./package.json",
17
17
  ".": {
18
18
  "types": "./types/index.d.ts",
19
- "react-native": "./dist/esm/index.native.js",
20
- "browser": "./dist/esm/index.mjs",
21
- "module": "./dist/esm/index.mjs",
22
- "import": "./dist/esm/index.mjs",
23
- "require": "./dist/cjs/index.cjs",
24
- "default": "./dist/esm/index.mjs"
19
+ "react-native": "./dist/esm/index.js",
20
+ "browser": "./dist/esm/index.js",
21
+ "module": "./dist/esm/index.js",
22
+ "import": "./dist/esm/index.js",
23
+ "require": "./dist/cjs/index.js",
24
+ "default": "./dist/esm/index.js"
25
25
  }
26
26
  },
27
27
  "publishConfig": {
28
28
  "access": "public"
29
29
  },
30
30
  "scripts": {
31
- "build": "hanzogui-build",
31
+ "build": "hanzogui-build --skip-native",
32
32
  "watch": "hanzogui-build --watch",
33
33
  "clean": "hanzogui-build clean",
34
34
  "clean:build": "hanzogui-build clean:build"
35
35
  },
36
36
  "dependencies": {
37
- "@hanzogui/web": "8.3.1"
37
+ "@hanzogui/web": "8.3.3"
38
38
  },
39
39
  "devDependencies": {
40
- "@hanzogui/build": "8.3.1"
40
+ "@hanzogui/build": "8.3.3"
41
+ },
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "git+https://github.com/hanzoai/gui.git",
45
+ "directory": "pkgs/core/create-theme"
41
46
  }
42
47
  }
package/src/applyMask.tsx CHANGED
@@ -1,7 +1,12 @@
1
- import { createTheme } from './createTheme'
2
- import type { CreateMask, GenericTheme, MaskOptions, ThemeMask } from './createThemeTypes'
3
- import type { ThemeInfo } from './themeInfo'
4
- import { getThemeInfo, setThemeInfo } from './themeInfo'
1
+ import { createTheme } from './createTheme.tsx'
2
+ import type {
3
+ CreateMask,
4
+ GenericTheme,
5
+ MaskOptions,
6
+ ThemeMask,
7
+ } from './createThemeTypes.tsx'
8
+ import type { ThemeInfo } from './themeInfo.tsx'
9
+ import { getThemeInfo, setThemeInfo } from './themeInfo.tsx'
5
10
 
6
11
  export function applyMask<Theme extends GenericTheme | ThemeMask>(
7
12
  theme: Theme,
@@ -1,6 +1,6 @@
1
- import { applyMaskStateless } from './applyMask'
2
- import type { CreateMask } from './createThemeTypes'
3
- import { getThemeInfo } from './themeInfo'
1
+ import { applyMaskStateless } from './applyMask.tsx'
2
+ import type { CreateMask } from './createThemeTypes.tsx'
3
+ import { getThemeInfo } from './themeInfo.tsx'
4
4
 
5
5
  export const combineMasks = (...masks: CreateMask[]): CreateMask => {
6
6
  const mask: CreateMask = {
@@ -3,9 +3,9 @@ import type {
3
3
  CreateThemePalette,
4
4
  GenericTheme,
5
5
  ThemeMask,
6
- } from './createThemeTypes'
7
- import { isMinusZero } from './isMinusZero'
8
- import { setThemeInfo } from './themeInfo'
6
+ } from './createThemeTypes.tsx'
7
+ import { isMinusZero } from './isMinusZero.tsx'
8
+ import { setThemeInfo } from './themeInfo.tsx'
9
9
 
10
10
  const identityCache = new Map()
11
11
 
package/src/helpers.tsx CHANGED
@@ -1,9 +1,14 @@
1
1
  type ObjectType = Record<PropertyKey, unknown>
2
2
 
3
- type PickByValue<OBJ_T, VALUE_T> = // From https://stackoverflow.com/a/55153000
3
+ type PickByValue<
4
+ OBJ_T,
5
+ VALUE_T,
6
+ > = // From https://stackoverflow.com/a/55153000
4
7
  Pick<OBJ_T, { [K in keyof OBJ_T]: OBJ_T[K] extends VALUE_T ? K : never }[keyof OBJ_T]>
5
8
 
6
- type ObjectEntries<OBJ_T> = // From https://stackoverflow.com/a/60142095
9
+ type ObjectEntries<
10
+ OBJ_T,
11
+ > = // From https://stackoverflow.com/a/60142095
7
12
  { [K in keyof OBJ_T]: [keyof PickByValue<OBJ_T, OBJ_T[K]>, OBJ_T[K]] }[keyof OBJ_T][]
8
13
 
9
14
  export const objectKeys = <O extends object>(obj: O) => Object.keys(obj) as Array<keyof O>
@@ -20,7 +25,9 @@ type EntriesType =
20
25
 
21
26
  // Existing Utils
22
27
  type DeepWritable<OBJ_T> = { -readonly [P in keyof OBJ_T]: DeepWritable<OBJ_T[P]> }
23
- type UnionToIntersection<UNION_T> = // From https://stackoverflow.com/a/50375286
28
+ type UnionToIntersection<
29
+ UNION_T,
30
+ > = // From https://stackoverflow.com/a/50375286
24
31
  (UNION_T extends any ? (k: UNION_T) => void : never) extends (k: infer I) => void
25
32
  ? I
26
33
  : never
package/src/index.tsx CHANGED
@@ -1,6 +1,6 @@
1
- export * from './createTheme'
2
- export * from './masks'
3
- export * from './combineMasks'
4
- export * from './applyMask'
5
- export * from './createThemeTypes'
6
- export * from './helpers'
1
+ export * from './createTheme.tsx'
2
+ export * from './masks.tsx'
3
+ export * from './combineMasks.tsx'
4
+ export * from './applyMask.tsx'
5
+ export * from './createThemeTypes.tsx'
6
+ export * from './helpers.tsx'
package/src/masks.tsx CHANGED
@@ -1,6 +1,6 @@
1
- import type { CreateMask, MaskFunction, MaskOptions } from './createThemeTypes'
2
- import { objectEntries, objectFromEntries } from './helpers'
3
- import { isMinusZero } from './isMinusZero'
1
+ import type { CreateMask, MaskFunction, MaskOptions } from './createThemeTypes.tsx'
2
+ import { objectEntries, objectFromEntries } from './helpers.tsx'
3
+ import { isMinusZero } from './isMinusZero.tsx'
4
4
 
5
5
  export const createMask = <C extends CreateMask | MaskFunction>(
6
6
  createMask: C
package/src/tests.tsx CHANGED
@@ -1,6 +1,6 @@
1
- import { applyMask } from './applyMask'
2
- import { createTheme } from './createTheme'
3
- import { createStrengthenMask, createWeakenMask } from './masks'
1
+ import { applyMask } from './applyMask.tsx'
2
+ import { createTheme } from './createTheme.tsx'
3
+ import { createStrengthenMask, createWeakenMask } from './masks.tsx'
4
4
 
5
5
  // --- tests ---
6
6
  if (process.env.NODE_ENV === 'development') {
package/src/themeInfo.tsx CHANGED
@@ -3,7 +3,7 @@ import type {
3
3
  CreateThemePalette,
4
4
  GenericTheme,
5
5
  ThemeMask,
6
- } from './createThemeTypes'
6
+ } from './createThemeTypes.tsx'
7
7
 
8
8
  export type ThemeInfo = {
9
9
  palette: CreateThemePalette
@@ -1,8 +1,7 @@
1
- import type { CreateMask, GenericTheme, MaskOptions, ThemeMask } from "./createThemeTypes";
2
- import type { ThemeInfo } from "./themeInfo";
1
+ import type { CreateMask, GenericTheme, MaskOptions, ThemeMask } from './createThemeTypes.tsx';
2
+ import type { ThemeInfo } from './themeInfo.tsx';
3
3
  export declare function applyMask<Theme extends GenericTheme | ThemeMask>(theme: Theme, mask: CreateMask, options?: MaskOptions, parentName?: string, nextName?: string): Theme;
4
4
  export declare function applyMaskStateless<Theme extends GenericTheme | ThemeMask>(info: ThemeInfo, mask: CreateMask, options?: MaskOptions, parentName?: string): ThemeInfo & {
5
- theme: Theme;
5
+ theme: Theme;
6
6
  };
7
-
8
7
  //# sourceMappingURL=applyMask.d.ts.map
@@ -1,11 +1 @@
1
- {
2
- "mappings": "AACA,cAAc,YAAY,cAAc,aAAa,iBAAiB;AACtE,cAAc,iBAAiB;AAG/B,OAAO,iBAAS,UAAU,cAAc,eAAe,WACrD,OAAO,OACP,MAAM,YACN,UAAS,aACT,qBACA,oBACC;AAqBH,OAAO,iBAAS,mBAAmB,cAAc,eAAe,WAC9D,MAAM,WACN,MAAM,YACN,UAAS,aACT,sBACC,YAAY;CACb,OAAO",
3
- "names": [],
4
- "sources": [
5
- "src/applyMask.tsx"
6
- ],
7
- "version": 3,
8
- "sourcesContent": [
9
- "import { createTheme } from './createTheme'\nimport type { CreateMask, GenericTheme, MaskOptions, ThemeMask } from './createThemeTypes'\nimport type { ThemeInfo } from './themeInfo'\nimport { getThemeInfo, setThemeInfo } from './themeInfo'\n\nexport function applyMask<Theme extends GenericTheme | ThemeMask>(\n theme: Theme,\n mask: CreateMask,\n options: MaskOptions = {},\n parentName?: string,\n nextName?: string\n): Theme {\n const info = getThemeInfo(theme, parentName)\n if (!info) {\n throw new Error(\n process.env.NODE_ENV !== 'production'\n ? `No info found for theme, you must pass the theme created by createThemeFromPalette directly to extendTheme`\n : `❌ Err2`\n )\n }\n\n const next = applyMaskStateless(info, mask, options, parentName)\n\n setThemeInfo(next.theme, {\n definition: next.definition,\n palette: info.palette,\n name: nextName,\n })\n\n return next.theme as Theme\n}\n\nexport function applyMaskStateless<Theme extends GenericTheme | ThemeMask>(\n info: ThemeInfo,\n mask: CreateMask,\n options: MaskOptions = {},\n parentName?: string\n): ThemeInfo & {\n theme: Theme\n} {\n const skip = {\n ...options.skip,\n }\n\n // skip nonInheritedValues from parent theme\n if (info.options?.nonInheritedValues) {\n for (const key in info.options.nonInheritedValues) {\n skip[key] = 1\n }\n }\n\n // convert theme back to template first\n const maskOptions = {\n parentName,\n palette: info.palette,\n ...options,\n skip,\n }\n\n const template = mask.mask(info.definition, maskOptions)\n const theme = createTheme(info.palette, template) as Theme\n\n return {\n ...info,\n cache: new Map(),\n definition: template,\n theme,\n }\n}\n"
10
- ]
11
- }
1
+ {"version":3,"file":"applyMask.d.ts","sourceRoot":"","sources":["../src/applyMask.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACV,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD,wBAAgB,SAAS,CAAC,KAAK,SAAS,YAAY,GAAG,SAAS,EAC9D,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,WAAgB,EACzB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,KAAK,CAmBP;AAED,wBAAgB,kBAAkB,CAAC,KAAK,SAAS,YAAY,GAAG,SAAS,EACvE,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,WAAgB,EACzB,UAAU,CAAC,EAAE,MAAM,GAClB,SAAS,GAAG;IACb,KAAK,EAAE,KAAK,CAAA;CACb,CA6BA"}
@@ -1,4 +1,3 @@
1
- import type { CreateMask } from "./createThemeTypes";
1
+ import type { CreateMask } from './createThemeTypes.tsx';
2
2
  export declare const combineMasks: (...masks: CreateMask[]) => CreateMask;
3
-
4
3
  //# sourceMappingURL=combineMasks.d.ts.map
@@ -1,11 +1 @@
1
- {
2
- "mappings": "AACA,cAAc,kBAAkB;AAGhC,OAAO,cAAM,eAAgB,GAAG,OAAO,iBAAe",
3
- "names": [],
4
- "sources": [
5
- "src/combineMasks.tsx"
6
- ],
7
- "version": 3,
8
- "sourcesContent": [
9
- "import { applyMaskStateless } from './applyMask'\nimport type { CreateMask } from './createThemeTypes'\nimport { getThemeInfo } from './themeInfo'\n\nexport const combineMasks = (...masks: CreateMask[]): CreateMask => {\n const mask: CreateMask = {\n name: 'combine-mask',\n mask: (template, opts) => {\n let current = getThemeInfo(template, opts.parentName)\n let theme: any\n for (const mask of masks) {\n if (!current) {\n throw new Error(\n `Nothing returned from mask: ${current}, for template: ${template} and mask: ${mask.toString()}, given opts ${JSON.stringify(\n opts,\n null,\n 2\n )}`\n )\n }\n const next = applyMaskStateless(current, mask, opts)\n current = next\n theme = next.theme\n }\n return theme\n },\n }\n return mask\n}\n"
10
- ]
11
- }
1
+ {"version":3,"file":"combineMasks.d.ts","sourceRoot":"","sources":["../src/combineMasks.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAGxD,eAAO,MAAM,YAAY,aAAc,UAAU,EAAE,KAAG,UAwBrD,CAAA"}
@@ -1,28 +1,18 @@
1
- import type { CreateThemeOptions, CreateThemePalette, GenericTheme, ThemeMask } from "./createThemeTypes";
2
- export declare function createThemeWithPalettes<
3
- Definition extends ThemeMask,
4
- Extras extends GenericTheme = {}
5
- >(palettes: Record<string, CreateThemePalette>, defaultPalette: string, definition: Definition, options?: CreateThemeOptions, name?: string, skipCache?: boolean): { [key in keyof Definition | keyof Extras] : string };
6
- export declare function createTheme<
7
- Definition extends ThemeMask,
8
- Extras extends GenericTheme = {}
9
- >(palette: CreateThemePalette, definition: Definition, options?: CreateThemeOptions, name?: string, skipCache?: boolean): { [key in keyof Definition | keyof Extras] : string };
10
- type SubThemeKeys<
11
- ParentKeys,
12
- ChildKeys
13
- > = `${ParentKeys extends string ? ParentKeys : never}_${ChildKeys extends string ? ChildKeys : never}`;
14
- type ChildGetter<
15
- Name extends string | number | symbol,
16
- Theme extends GenericTheme
17
- > = (name: Name, theme: Theme) => {
18
- [key: string]: Theme;
1
+ import type { CreateThemeOptions, CreateThemePalette, GenericTheme, ThemeMask } from './createThemeTypes.tsx';
2
+ export declare function createThemeWithPalettes<Definition extends ThemeMask, Extras extends GenericTheme = {}>(palettes: Record<string, CreateThemePalette>, defaultPalette: string, definition: Definition, options?: CreateThemeOptions, name?: string, skipCache?: boolean): {
3
+ [key in keyof Definition | keyof Extras]: string;
4
+ };
5
+ export declare function createTheme<Definition extends ThemeMask, Extras extends GenericTheme = {}>(palette: CreateThemePalette, definition: Definition, options?: CreateThemeOptions, name?: string, skipCache?: boolean): {
6
+ [key in keyof Definition | keyof Extras]: string;
7
+ };
8
+ type SubThemeKeys<ParentKeys, ChildKeys> = `${ParentKeys extends string ? ParentKeys : never}_${ChildKeys extends string ? ChildKeys : never}`;
9
+ type ChildGetter<Name extends string | number | symbol, Theme extends GenericTheme> = (name: Name, theme: Theme) => {
10
+ [key: string]: Theme;
11
+ };
12
+ export declare function addChildren<Themes extends {
13
+ [key: string]: GenericTheme;
14
+ }, GetChildren extends ChildGetter<keyof Themes, Themes[keyof Themes]>>(themes: Themes, getChildren: GetChildren): Themes & {
15
+ [key in SubThemeKeys<keyof Themes, keyof ReturnType<GetChildren>>]: Themes[keyof Themes];
19
16
  };
20
- export declare function addChildren<
21
- Themes extends {
22
- [key: string]: GenericTheme;
23
- },
24
- GetChildren extends ChildGetter<keyof Themes, Themes[keyof Themes]>
25
- >(themes: Themes, getChildren: GetChildren): Themes & { [key in SubThemeKeys<keyof Themes, keyof ReturnType<GetChildren>>] : Themes[keyof Themes] };
26
17
  export {};
27
-
28
18
  //# sourceMappingURL=createTheme.d.ts.map
@@ -1,11 +1 @@
1
- {
2
- "mappings": "AAAA,cACE,oBACA,oBACA,cACA,iBACK;AAMP,OAAO,iBAAS;CACd,mBAAmB;CACnB,eAAe,eAAe;EAE9B,UAAU,eAAe,qBACzB,wBACA,YAAY,YACZ,UAAU,oBACV,eACA,yBAEC,aAAa,mBAAmB;AA2BnC,OAAO,iBAAS;CACd,mBAAmB;CACnB,eAAe,eAAe;EAE9B,SAAS,oBACT,YAAY,YACZ,UAAU,oBACV,eACA,yBAEC,aAAa,mBAAmB;KAyC9B;CAAa;CAAY;OAAgB,4BAC1C,sBACS,2BAA2B;KAEnC;CAAY;CAAuC,cAAc;KACpE,MAAM,MACN,OAAO,UACJ;gBAAiB;;AAEtB,OAAO,iBAAS;CACd,eAAe;iBAAiB;;CAChC,oBAAoB,kBAAkB,QAAQ,aAAa;EAE3D,QAAQ,QACR,aAAa,cACZ,YACA,OAAO,mBAAmB,cAAc,WAAW,iBAAgB,aAAa",
3
- "names": [],
4
- "sources": [
5
- "src/createTheme.tsx"
6
- ],
7
- "version": 3,
8
- "sourcesContent": [
9
- "import type {\n CreateThemeOptions,\n CreateThemePalette,\n GenericTheme,\n ThemeMask,\n} from './createThemeTypes'\nimport { isMinusZero } from './isMinusZero'\nimport { setThemeInfo } from './themeInfo'\n\nconst identityCache = new Map()\n\nexport function createThemeWithPalettes<\n Definition extends ThemeMask,\n Extras extends GenericTheme = {},\n>(\n palettes: Record<string, CreateThemePalette>,\n defaultPalette: string,\n definition: Definition,\n options?: CreateThemeOptions,\n name?: string,\n skipCache = false\n): {\n [key in keyof Definition | keyof Extras]: string\n} {\n if (!palettes[defaultPalette]) {\n throw new Error(`No palette: ${defaultPalette}`)\n }\n const newDef = { ...definition }\n for (const key in definition) {\n let val = definition[key]\n if (typeof val === 'string' && val[0] === '$') {\n const [altPaletteName$, altPaletteIndex] = val.split('.')\n const altPaletteName = altPaletteName$.slice(1)\n const parentName = defaultPalette.split('_')[0]\n const altPalette =\n palettes[altPaletteName] || palettes[`${parentName}_${altPaletteName}`]\n\n if (altPalette) {\n const next = getValue(altPalette, +altPaletteIndex)\n if (typeof next !== 'undefined') {\n newDef[key] = next as any\n }\n }\n }\n }\n\n return createTheme(palettes[defaultPalette], newDef, options, name, skipCache)\n}\n\nexport function createTheme<\n Definition extends ThemeMask,\n Extras extends GenericTheme = {},\n>(\n palette: CreateThemePalette,\n definition: Definition,\n options?: CreateThemeOptions,\n name?: string,\n skipCache = false\n): {\n [key in keyof Definition | keyof Extras]: string\n} {\n const cacheKey = skipCache ? '' : JSON.stringify([name, palette, definition, options])\n if (!skipCache) {\n if (identityCache.has(cacheKey)) {\n return identityCache.get(cacheKey)\n }\n }\n\n const theme = {\n ...(Object.fromEntries(\n Object.entries(definition).map(([key, offset]) => {\n return [key, getValue(palette, offset)]\n })\n ) as any),\n ...options?.nonInheritedValues,\n }\n\n setThemeInfo(theme, { palette, definition, options, name })\n\n if (cacheKey) {\n identityCache.set(cacheKey, theme)\n }\n\n return theme\n}\n\nconst getValue = (palette: CreateThemePalette, value: string | number) => {\n if (!palette) {\n throw new Error(`No palette!`)\n }\n if (typeof value === 'string') {\n return value\n }\n const max = palette.length - 1\n const isPositive = value === 0 ? !isMinusZero(value) : value >= 0\n const next = isPositive ? value : max + value\n const index = Math.min(Math.max(0, next), max)\n return palette[index]\n}\n\ntype SubThemeKeys<ParentKeys, ChildKeys> = `${ParentKeys extends string\n ? ParentKeys\n : never}_${ChildKeys extends string ? ChildKeys : never}`\n\ntype ChildGetter<Name extends string | number | symbol, Theme extends GenericTheme> = (\n name: Name,\n theme: Theme\n) => { [key: string]: Theme }\n\nexport function addChildren<\n Themes extends { [key: string]: GenericTheme },\n GetChildren extends ChildGetter<keyof Themes, Themes[keyof Themes]>,\n>(\n themes: Themes,\n getChildren: GetChildren\n): Themes & {\n [key in SubThemeKeys<keyof Themes, keyof ReturnType<GetChildren>>]: Themes[keyof Themes]\n} {\n const out = { ...themes }\n for (const key in themes) {\n const subThemes = getChildren(key, themes[key])\n for (const sKey in subThemes) {\n out[`${key}_${sKey}`] = subThemes[sKey] as any\n }\n }\n return out as any\n}\n"
10
- ]
11
- }
1
+ {"version":3,"file":"createTheme.d.ts","sourceRoot":"","sources":["../src/createTheme.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACV,MAAM,wBAAwB,CAAA;AAM/B,wBAAgB,uBAAuB,CACrC,UAAU,SAAS,SAAS,EAC5B,MAAM,SAAS,YAAY,GAAG,EAAE,EAEhC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC5C,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,kBAAkB,EAC5B,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,UAAQ,GAChB;KACA,GAAG,IAAI,MAAM,UAAU,GAAG,MAAM,MAAM,GAAG,MAAM;CACjD,CAwBA;AAED,wBAAgB,WAAW,CACzB,UAAU,SAAS,SAAS,EAC5B,MAAM,SAAS,YAAY,GAAG,EAAE,EAEhC,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,kBAAkB,EAC5B,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,UAAQ,GAChB;KACA,GAAG,IAAI,MAAM,UAAU,GAAG,MAAM,MAAM,GAAG,MAAM;CACjD,CAwBA;AAgBD,KAAK,YAAY,CAAC,UAAU,EAAE,SAAS,IAAI,GAAG,UAAU,SAAS,MAAM,GACnE,UAAU,GACV,KAAK,IAAI,SAAS,SAAS,MAAM,GAAG,SAAS,GAAG,KAAK,EAAE,CAAA;AAE3D,KAAK,WAAW,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,SAAS,YAAY,IAAI,CACpF,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,KACT;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,CAAA;AAE7B,wBAAgB,WAAW,CACzB,MAAM,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,EAC9C,WAAW,SAAS,WAAW,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,MAAM,CAAC,CAAC,EAEnE,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,GACvB,MAAM,GAAG;KACT,GAAG,IAAI,YAAY,CAAC,MAAM,MAAM,EAAE,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC;CACzF,CASA"}
@@ -1,67 +1,66 @@
1
- import type { Variable } from "@hanzogui/web";
1
+ import type { Variable } from '@hanzogui/web';
2
2
  export type CreateThemePalette = (string | Variable)[];
3
3
  export type ThemeMask = Record<string, string | number>;
4
4
  export type MaskOptions = {
5
- palette?: CreateThemePalette;
6
- override?: Partial<ThemeMask>;
7
- overrideStrategy?: "shift" | "swap";
8
- overrideSwap?: Partial<ThemeMask>;
9
- overrideShift?: Partial<ThemeMask>;
10
- skip?: Partial<ThemeMask>;
11
- strength?: number;
12
- max?: number;
13
- min?: number;
14
- parentName?: string;
5
+ palette?: CreateThemePalette;
6
+ override?: Partial<ThemeMask>;
7
+ overrideStrategy?: 'shift' | 'swap';
8
+ overrideSwap?: Partial<ThemeMask>;
9
+ overrideShift?: Partial<ThemeMask>;
10
+ skip?: Partial<ThemeMask>;
11
+ strength?: number;
12
+ max?: number;
13
+ min?: number;
14
+ parentName?: string;
15
15
  };
16
16
  export type GenericTheme = {
17
- [key: string]: string | Variable;
17
+ [key: string]: string | Variable;
18
18
  };
19
19
  export type MaskFunction = <A extends ThemeMask>(template: A, options: MaskOptions) => A;
20
20
  export type CreateMask = {
21
- name: string;
22
- mask: MaskFunction;
21
+ name: string;
22
+ mask: MaskFunction;
23
23
  };
24
24
  export type CreateThemeOptions = {
25
- nonInheritedValues?: GenericTheme;
25
+ nonInheritedValues?: GenericTheme;
26
26
  };
27
27
  export type Palette = string[];
28
28
  export type Template = {
29
- [key: string]: number | string;
29
+ [key: string]: number | string;
30
30
  };
31
31
  export type ThemeUsingMask<Masks = string> = MaskOptions & {
32
- mask: Masks;
33
- avoidNestingWithin?: string[];
34
- childOptions?: MaskOptions & {
35
- mask?: Masks;
36
- };
32
+ mask: Masks;
33
+ avoidNestingWithin?: string[];
34
+ childOptions?: MaskOptions & {
35
+ mask?: Masks;
36
+ };
37
37
  };
38
38
  export type ThemeUsingTemplate = CreateThemeOptions & {
39
- palette?: string;
40
- template: string;
39
+ palette?: string;
40
+ template: string;
41
41
  };
42
42
  type ThemePreDefined = {
43
- theme: {
44
- [key: string]: string;
45
- };
43
+ theme: {
44
+ [key: string]: string;
45
+ };
46
46
  };
47
47
  export type Theme<Masks = string> = ThemePreDefined | ThemeUsingTemplate | ThemeUsingMask<Masks>;
48
48
  export type ThemeWithParent<Masks = string> = Theme<Masks> & {
49
- parent: string;
49
+ parent: string;
50
50
  };
51
51
  export type PaletteDefinitions = {
52
- [key: string]: Palette;
52
+ [key: string]: Palette;
53
53
  };
54
54
  export type ThemeDefinition<Masks extends string = string> = Theme<Masks> | ThemeWithParent<Masks>[];
55
55
  type UnionableString = string & {};
56
56
  export type ThemeDefinitions<Masks extends string = string> = {
57
- [key: string]: ThemeDefinition<Masks | UnionableString>;
57
+ [key: string]: ThemeDefinition<Masks | UnionableString>;
58
58
  };
59
59
  export type TemplateDefinitions = {
60
- [key: string]: Template;
60
+ [key: string]: Template;
61
61
  };
62
62
  export type MaskDefinitions = {
63
- [key: string]: CreateMask | CreateMask["mask"];
63
+ [key: string]: CreateMask | CreateMask['mask'];
64
64
  };
65
65
  export {};
66
-
67
66
  //# sourceMappingURL=createThemeTypes.d.ts.map
@@ -1,11 +1 @@
1
- {
2
- "mappings": "AAAA,cAAc,gBAAgB;AAE9B,YAAY,+BAA+B;AAE3C,YAAY,YAAY;AAExB,YAAY,cAAc;CACxB,UAAU;CACV,WAAW,QAAQ;CACnB,mBAAmB,UAAU;CAC7B,eAAe,QAAQ;CACvB,gBAAgB,QAAQ;CACxB,OAAO,QAAQ;CACf;CACA;CACA;CACA;;AAGF,YAAY,eAAe;yBAA0B;;AAErD,YAAY,gBAAgB,UAAU,WAAW,UAAU,GAAG,SAAS,gBAAgB;AAEvF,YAAY,aAAa;CACvB;CACA,MAAM;;AAGR,YAAY,qBAAqB;CAC/B,qBAAqB;;AAGvB,YAAY;AAEZ,YAAY,WAAW;;;AAIvB,YAAY,eAAe,kBAAkB,cAAc;CACzD,MAAM;CACN;CACA,eAAe,cAAc;EAC3B,OAAO;;;AAIX,YAAY,qBAAqB,qBAAqB;CACpD;CACA;;KAGG,kBAAkB;CACrB,OAAO;;;;AAGT,YAAY,MAAM,kBACd,kBACA,qBACA,eAAe;AAEnB,YAAY,gBAAgB,kBAAkB,MAAM,SAAS;CAC3D;;AAGF,YAAY,qBAAqB;gBAChB;;AAGjB,YAAY,gBAAgB,iCACxB,MAAM,SACN,gBAAgB;KAEf,2BAA2B;AAEhC,YAAY,iBAAiB,iCAAiC;gBAC7C,gBAAgB,QAAQ;;AAGzC,YAAY,sBAAsB;gBACjB;;AAGjB,YAAY,kBAAkB;gBACb,aAAa,WAAW",
3
- "names": [],
4
- "sources": [
5
- "src/createThemeTypes.tsx"
6
- ],
7
- "version": 3,
8
- "sourcesContent": [
9
- "import type { Variable } from '@hanzogui/web'\n\nexport type CreateThemePalette = (string | Variable)[]\n\nexport type ThemeMask = Record<string, string | number>\n\nexport type MaskOptions = {\n palette?: CreateThemePalette\n override?: Partial<ThemeMask>\n overrideStrategy?: 'shift' | 'swap'\n overrideSwap?: Partial<ThemeMask>\n overrideShift?: Partial<ThemeMask>\n skip?: Partial<ThemeMask>\n strength?: number\n max?: number\n min?: number\n parentName?: string\n}\n\nexport type GenericTheme = { [key: string]: string | Variable }\n\nexport type MaskFunction = <A extends ThemeMask>(template: A, options: MaskOptions) => A\n\nexport type CreateMask = {\n name: string\n mask: MaskFunction\n}\n\nexport type CreateThemeOptions = {\n nonInheritedValues?: GenericTheme\n}\n\nexport type Palette = string[]\n\nexport type Template = {\n [key: string]: number | string\n}\n\nexport type ThemeUsingMask<Masks = string> = MaskOptions & {\n mask: Masks\n avoidNestingWithin?: string[]\n childOptions?: MaskOptions & {\n mask?: Masks\n }\n}\n\nexport type ThemeUsingTemplate = CreateThemeOptions & {\n palette?: string\n template: string\n}\n\ntype ThemePreDefined = {\n theme: { [key: string]: string }\n}\n\nexport type Theme<Masks = string> =\n | ThemePreDefined\n | ThemeUsingTemplate\n | ThemeUsingMask<Masks>\n\nexport type ThemeWithParent<Masks = string> = Theme<Masks> & {\n parent: string\n}\n\nexport type PaletteDefinitions = {\n [key: string]: Palette\n}\n\nexport type ThemeDefinition<Masks extends string = string> =\n | Theme<Masks>\n | ThemeWithParent<Masks>[]\n\ntype UnionableString = string & {}\n\nexport type ThemeDefinitions<Masks extends string = string> = {\n [key: string]: ThemeDefinition<Masks | UnionableString>\n}\n\nexport type TemplateDefinitions = {\n [key: string]: Template\n}\n\nexport type MaskDefinitions = {\n [key: string]: CreateMask | CreateMask['mask']\n}\n"
10
- ]
11
- }
1
+ {"version":3,"file":"createThemeTypes.d.ts","sourceRoot":"","sources":["../src/createThemeTypes.tsx"],"names":[],"mappings":"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"}
@@ -1,18 +1,24 @@
1
1
  type ObjectType = Record<PropertyKey, unknown>;
2
- type PickByValue<
3
- OBJ_T,
4
- VALUE_T
5
- > = Pick<OBJ_T, { [K in keyof OBJ_T] : OBJ_T[K] extends VALUE_T ? K : never }[keyof OBJ_T]>;
6
- type ObjectEntries<OBJ_T> = { [K in keyof OBJ_T] : [keyof PickByValue<OBJ_T, OBJ_T[K]>, OBJ_T[K]] }[keyof OBJ_T][];
2
+ type PickByValue<OBJ_T, VALUE_T> = Pick<OBJ_T, {
3
+ [K in keyof OBJ_T]: OBJ_T[K] extends VALUE_T ? K : never;
4
+ }[keyof OBJ_T]>;
5
+ type ObjectEntries<OBJ_T> = {
6
+ [K in keyof OBJ_T]: [keyof PickByValue<OBJ_T, OBJ_T[K]>, OBJ_T[K]];
7
+ }[keyof OBJ_T][];
7
8
  export declare const objectKeys: <O extends object>(obj: O) => Array<keyof O>;
8
9
  export declare function objectEntries<OBJ_T extends ObjectType>(obj: OBJ_T): ObjectEntries<OBJ_T>;
9
10
  type EntriesType = [PropertyKey, unknown][] | ReadonlyArray<readonly [PropertyKey, unknown]>;
10
- type DeepWritable<OBJ_T> = { -readonly [P in keyof OBJ_T] : DeepWritable<OBJ_T[P]> };
11
+ type DeepWritable<OBJ_T> = {
12
+ -readonly [P in keyof OBJ_T]: DeepWritable<OBJ_T[P]>;
13
+ };
11
14
  type UnionToIntersection<UNION_T> = (UNION_T extends any ? (k: UNION_T) => void : never) extends (k: infer I) => void ? I : never;
12
- type UnionObjectFromArrayOfPairs<ARR_T extends EntriesType> = DeepWritable<ARR_T> extends (infer R)[] ? R extends [infer key, infer val] ? { [prop in key & PropertyKey] : val } : never : never;
13
- type MergeIntersectingObjects<ObjT> = { [key in keyof ObjT] : ObjT[key] };
15
+ type UnionObjectFromArrayOfPairs<ARR_T extends EntriesType> = DeepWritable<ARR_T> extends (infer R)[] ? R extends [infer key, infer val] ? {
16
+ [prop in key & PropertyKey]: val;
17
+ } : never : never;
18
+ type MergeIntersectingObjects<ObjT> = {
19
+ [key in keyof ObjT]: ObjT[key];
20
+ };
14
21
  type EntriesToObject<ARR_T extends EntriesType> = MergeIntersectingObjects<UnionToIntersection<UnionObjectFromArrayOfPairs<ARR_T>>>;
15
22
  export declare function objectFromEntries<ARR_T extends EntriesType>(arr: ARR_T): EntriesToObject<ARR_T>;
16
23
  export {};
17
-
18
24
  //# sourceMappingURL=helpers.d.ts.map