@hanzogui/create-theme 2.0.0-rc.41-hanzoai.5

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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/applyMask.cjs +67 -0
  3. package/dist/cjs/applyMask.native.js +76 -0
  4. package/dist/cjs/applyMask.native.js.map +1 -0
  5. package/dist/cjs/combineMasks.cjs +48 -0
  6. package/dist/cjs/combineMasks.native.js +73 -0
  7. package/dist/cjs/combineMasks.native.js.map +1 -0
  8. package/dist/cjs/createTheme.cjs +105 -0
  9. package/dist/cjs/createTheme.native.js +111 -0
  10. package/dist/cjs/createTheme.native.js.map +1 -0
  11. package/dist/cjs/createThemeTypes.cjs +18 -0
  12. package/dist/cjs/createThemeTypes.native.js +21 -0
  13. package/dist/cjs/createThemeTypes.native.js.map +1 -0
  14. package/dist/cjs/helpers.cjs +36 -0
  15. package/dist/cjs/helpers.native.js +41 -0
  16. package/dist/cjs/helpers.native.js.map +1 -0
  17. package/dist/cjs/index.cjs +25 -0
  18. package/dist/cjs/index.native.js +28 -0
  19. package/dist/cjs/index.native.js.map +1 -0
  20. package/dist/cjs/isMinusZero.cjs +30 -0
  21. package/dist/cjs/isMinusZero.native.js +33 -0
  22. package/dist/cjs/isMinusZero.native.js.map +1 -0
  23. package/dist/cjs/masks.cjs +146 -0
  24. package/dist/cjs/masks.native.js +192 -0
  25. package/dist/cjs/masks.native.js.map +1 -0
  26. package/dist/cjs/tests.cjs +26 -0
  27. package/dist/cjs/tests.native.js +29 -0
  28. package/dist/cjs/tests.native.js.map +1 -0
  29. package/dist/cjs/themeInfo.cjs +40 -0
  30. package/dist/cjs/themeInfo.native.js +43 -0
  31. package/dist/cjs/themeInfo.native.js.map +1 -0
  32. package/dist/esm/applyMask.mjs +41 -0
  33. package/dist/esm/applyMask.mjs.map +1 -0
  34. package/dist/esm/applyMask.native.js +47 -0
  35. package/dist/esm/applyMask.native.js.map +1 -0
  36. package/dist/esm/combineMasks.mjs +23 -0
  37. package/dist/esm/combineMasks.mjs.map +1 -0
  38. package/dist/esm/combineMasks.native.js +45 -0
  39. package/dist/esm/combineMasks.native.js.map +1 -0
  40. package/dist/esm/createTheme.mjs +78 -0
  41. package/dist/esm/createTheme.mjs.map +1 -0
  42. package/dist/esm/createTheme.native.js +81 -0
  43. package/dist/esm/createTheme.native.js.map +1 -0
  44. package/dist/esm/createThemeTypes.mjs +2 -0
  45. package/dist/esm/createThemeTypes.mjs.map +1 -0
  46. package/dist/esm/createThemeTypes.native.js +2 -0
  47. package/dist/esm/createThemeTypes.native.js.map +1 -0
  48. package/dist/esm/helpers.mjs +9 -0
  49. package/dist/esm/helpers.mjs.map +1 -0
  50. package/dist/esm/helpers.native.js +11 -0
  51. package/dist/esm/helpers.native.js.map +1 -0
  52. package/dist/esm/index.js +7 -0
  53. package/dist/esm/index.js.map +1 -0
  54. package/dist/esm/index.mjs +7 -0
  55. package/dist/esm/index.mjs.map +1 -0
  56. package/dist/esm/index.native.js +7 -0
  57. package/dist/esm/index.native.js.map +1 -0
  58. package/dist/esm/isMinusZero.mjs +5 -0
  59. package/dist/esm/isMinusZero.mjs.map +1 -0
  60. package/dist/esm/isMinusZero.native.js +5 -0
  61. package/dist/esm/isMinusZero.native.js.map +1 -0
  62. package/dist/esm/masks.mjs +114 -0
  63. package/dist/esm/masks.mjs.map +1 -0
  64. package/dist/esm/masks.native.js +157 -0
  65. package/dist/esm/masks.native.js.map +1 -0
  66. package/dist/esm/tests.mjs +27 -0
  67. package/dist/esm/tests.mjs.map +1 -0
  68. package/dist/esm/tests.native.js +27 -0
  69. package/dist/esm/tests.native.js.map +1 -0
  70. package/dist/esm/themeInfo.mjs +14 -0
  71. package/dist/esm/themeInfo.mjs.map +1 -0
  72. package/dist/esm/themeInfo.native.js +14 -0
  73. package/dist/esm/themeInfo.native.js.map +1 -0
  74. package/package.json +42 -0
  75. package/src/applyMask.tsx +69 -0
  76. package/src/combineMasks.tsx +29 -0
  77. package/src/createTheme.tsx +127 -0
  78. package/src/createThemeTypes.tsx +85 -0
  79. package/src/helpers.tsx +44 -0
  80. package/src/index.tsx +6 -0
  81. package/src/isMinusZero.tsx +3 -0
  82. package/src/masks.tsx +137 -0
  83. package/src/tests.tsx +28 -0
  84. package/src/themeInfo.tsx +36 -0
  85. package/types/applyMask.d.ts +8 -0
  86. package/types/applyMask.d.ts.map +11 -0
  87. package/types/combineMasks.d.ts +4 -0
  88. package/types/combineMasks.d.ts.map +11 -0
  89. package/types/createTheme.d.ts +28 -0
  90. package/types/createTheme.d.ts.map +11 -0
  91. package/types/createThemeTypes.d.ts +67 -0
  92. package/types/createThemeTypes.d.ts.map +11 -0
  93. package/types/helpers.d.ts +18 -0
  94. package/types/helpers.d.ts.map +11 -0
  95. package/types/index.d.ts +8 -0
  96. package/types/index.d.ts.map +11 -0
  97. package/types/isMinusZero.d.ts +3 -0
  98. package/types/isMinusZero.d.ts.map +11 -0
  99. package/types/masks.d.ts +15 -0
  100. package/types/masks.d.ts.map +11 -0
  101. package/types/tests.d.ts +3 -0
  102. package/types/tests.d.ts.map +11 -0
  103. package/types/themeInfo.d.ts +13 -0
  104. package/types/themeInfo.d.ts.map +11 -0
@@ -0,0 +1,157 @@
1
+ import { objectEntries, objectFromEntries } from "./helpers.native.js";
2
+ import { isMinusZero } from "./isMinusZero.native.js";
3
+ var createMask = function (createMask2) {
4
+ return typeof createMask2 === "function" ? {
5
+ name: createMask2.name || "unnamed",
6
+ mask: createMask2
7
+ } : createMask2;
8
+ };
9
+ var skipMask = {
10
+ name: "skip-mask",
11
+ mask: function (template, opts) {
12
+ var {
13
+ skip
14
+ } = opts;
15
+ var result = Object.fromEntries(Object.entries(template).filter(function (param) {
16
+ var [k] = param;
17
+ return !skip || !(k in skip);
18
+ }).map(function (param) {
19
+ var [k, v] = param;
20
+ return [k, applyOverrides(k, v, opts)];
21
+ }));
22
+ return result;
23
+ }
24
+ };
25
+ function applyOverrides(key, value, opts) {
26
+ var _opts_overrideSwap;
27
+ var override;
28
+ var strategy = opts.overrideStrategy;
29
+ var overrideSwap = (_opts_overrideSwap = opts.overrideSwap) === null || _opts_overrideSwap === void 0 ? void 0 : _opts_overrideSwap[key];
30
+ if (typeof overrideSwap !== "undefined") {
31
+ override = overrideSwap;
32
+ strategy = "swap";
33
+ } else {
34
+ var _opts_overrideShift;
35
+ var overrideShift = (_opts_overrideShift = opts.overrideShift) === null || _opts_overrideShift === void 0 ? void 0 : _opts_overrideShift[key];
36
+ if (typeof overrideShift !== "undefined") {
37
+ override = overrideShift;
38
+ strategy = "shift";
39
+ } else {
40
+ var _opts_override;
41
+ var overrideDefault = (_opts_override = opts.override) === null || _opts_override === void 0 ? void 0 : _opts_override[key];
42
+ if (typeof overrideDefault !== "undefined") {
43
+ override = overrideDefault;
44
+ strategy = opts.overrideStrategy;
45
+ }
46
+ }
47
+ }
48
+ if (typeof override === "undefined") return value;
49
+ if (typeof override === "string") return value;
50
+ if (strategy === "swap") {
51
+ return override;
52
+ }
53
+ return value;
54
+ }
55
+ var createIdentityMask = function () {
56
+ return {
57
+ name: "identity-mask",
58
+ mask: function (template, opts) {
59
+ return skipMask.mask(template, opts);
60
+ }
61
+ };
62
+ };
63
+ var createInverseMask = function () {
64
+ var mask = {
65
+ name: "inverse-mask",
66
+ mask: function (template, opts) {
67
+ var inversed = objectFromEntries(objectEntries(template).map(function (param) {
68
+ var [k, v] = param;
69
+ return [k, -v];
70
+ }));
71
+ return skipMask.mask(inversed, opts);
72
+ }
73
+ };
74
+ return mask;
75
+ };
76
+ var createShiftMask = function () {
77
+ var {
78
+ inverse
79
+ } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {},
80
+ defaultOptions = arguments.length > 1 ? arguments[1] : void 0;
81
+ var mask = {
82
+ name: "shift-mask",
83
+ mask: function (template, opts) {
84
+ var {
85
+ override,
86
+ overrideStrategy = "shift",
87
+ max: maxIn,
88
+ palette,
89
+ min = 0,
90
+ strength = 1
91
+ } = {
92
+ ...defaultOptions,
93
+ ...opts
94
+ };
95
+ var values = Object.entries(template);
96
+ var max = maxIn !== null && maxIn !== void 0 ? maxIn : palette ? Object.values(palette).length - 1 : Number.POSITIVE_INFINITY;
97
+ var out = {};
98
+ var _iteratorNormalCompletion = true,
99
+ _didIteratorError = false,
100
+ _iteratorError = void 0;
101
+ try {
102
+ for (var _iterator = values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
103
+ var [key, value] = _step.value;
104
+ if (typeof value === "string") continue;
105
+ if (typeof (override === null || override === void 0 ? void 0 : override[key]) === "number") {
106
+ var overrideVal = override[key];
107
+ out[key] = overrideStrategy === "shift" ? value + overrideVal : overrideVal;
108
+ continue;
109
+ }
110
+ if (typeof (override === null || override === void 0 ? void 0 : override[key]) === "string") {
111
+ out[key] = override[key];
112
+ continue;
113
+ }
114
+ var isPositive = value === 0 ? !isMinusZero(value) : value >= 0;
115
+ var direction = isPositive ? 1 : -1;
116
+ var invert = inverse ? -1 : 1;
117
+ var next = value + strength * direction * invert;
118
+ var clamped = isPositive ? Math.max(min, Math.min(max, next)) : Math.min(-min, Math.max(-max, next));
119
+ out[key] = clamped;
120
+ }
121
+ } catch (err) {
122
+ _didIteratorError = true;
123
+ _iteratorError = err;
124
+ } finally {
125
+ try {
126
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
127
+ _iterator.return();
128
+ }
129
+ } finally {
130
+ if (_didIteratorError) {
131
+ throw _iteratorError;
132
+ }
133
+ }
134
+ }
135
+ var skipped = skipMask.mask(out, opts);
136
+ return skipped;
137
+ }
138
+ };
139
+ return mask;
140
+ };
141
+ var createWeakenMask = function (defaultOptions) {
142
+ return {
143
+ name: "soften-mask",
144
+ mask: createShiftMask({}, defaultOptions).mask
145
+ };
146
+ };
147
+ var createSoftenMask = createWeakenMask;
148
+ var createStrengthenMask = function (defaultOptions) {
149
+ return {
150
+ name: "strengthen-mask",
151
+ mask: createShiftMask({
152
+ inverse: true
153
+ }, defaultOptions).mask
154
+ };
155
+ };
156
+ export { createIdentityMask, createInverseMask, createMask, createShiftMask, createSoftenMask, createStrengthenMask, createWeakenMask, skipMask };
157
+ //# sourceMappingURL=masks.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["objectEntries","objectFromEntries","isMinusZero","createMask","createMask2","name","mask","skipMask","template","opts","skip","result","Object","fromEntries","entries","filter","param","k","map","v","applyOverrides","key","value","_opts_overrideSwap","override","strategy","overrideStrategy","overrideSwap","_opts_overrideShift","overrideShift","_opts_override","overrideDefault","createIdentityMask","createInverseMask","inversed","createShiftMask","inverse","arguments","length","defaultOptions","max","maxIn","palette","min","strength","values","Number","POSITIVE_INFINITY","out","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","overrideVal"],"sources":["../../src/masks.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ import { applyMask } from "./applyMask.mjs";
2
+ import { createTheme } from "./createTheme.mjs";
3
+ import { createStrengthenMask, createWeakenMask } from "./masks.mjs";
4
+ if (process.env.NODE_ENV === "development") {
5
+ const palette = ["0", "1", "2", "3", "-3", "-2", "-1", "-0"];
6
+ const template = {
7
+ bg: 1,
8
+ fg: -1
9
+ };
10
+ const stongerMask = createStrengthenMask();
11
+ const weakerMask = createWeakenMask();
12
+ const theme = createTheme(palette, template);
13
+ if (theme.bg !== "1") throw `\u274C`;
14
+ if (theme.fg !== "-1") throw `\u274C`;
15
+ const str = applyMask(theme, stongerMask);
16
+ if (str.bg !== "0") throw `\u274C`;
17
+ if (str.fg !== "-0") throw `\u274C`;
18
+ const weak = applyMask(theme, weakerMask);
19
+ if (weak.bg !== "2") throw `\u274C`;
20
+ if (weak.fg !== "-2") throw `\u274C`;
21
+ const weak2 = applyMask(theme, weakerMask, {
22
+ strength: 2
23
+ });
24
+ if (weak2.bg !== "3") throw `\u274C`;
25
+ if (weak2.fg !== "-3") throw `\u274C`;
26
+ }
27
+ //# sourceMappingURL=tests.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["applyMask","createTheme","createStrengthenMask","createWeakenMask","process","env","NODE_ENV","palette","template","bg","fg","stongerMask","weakerMask","theme","str","weak","weak2","strength"],"sources":["../../src/tests.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAC1B,SAASC,WAAA,QAAmB;AAC5B,SAASC,oBAAA,EAAsBC,gBAAA,QAAwB;AAGvD,IAAIC,OAAA,CAAQC,GAAA,CAAIC,QAAA,KAAa,eAAe;EAC1C,MAAMC,OAAA,GAAU,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,IAAI;EAC3D,MAAMC,QAAA,GAAW;IAAEC,EAAA,EAAI;IAAGC,EAAA,EAAI;EAAG;EAEjC,MAAMC,WAAA,GAAcT,oBAAA,CAAqB;EACzC,MAAMU,UAAA,GAAaT,gBAAA,CAAiB;EAEpC,MAAMU,KAAA,GAAQZ,WAAA,CAAYM,OAAA,EAASC,QAAQ;EAC3C,IAAIK,KAAA,CAAMJ,EAAA,KAAO,KAAK,MAAM;EAC5B,IAAII,KAAA,CAAMH,EAAA,KAAO,MAAM,MAAM;EAE7B,MAAMI,GAAA,GAAMd,SAAA,CAAUa,KAAA,EAAOF,WAAW;EACxC,IAAIG,GAAA,CAAIL,EAAA,KAAO,KAAK,MAAM;EAC1B,IAAIK,GAAA,CAAIJ,EAAA,KAAO,MAAM,MAAM;EAE3B,MAAMK,IAAA,GAAOf,SAAA,CAAUa,KAAA,EAAOD,UAAU;EACxC,IAAIG,IAAA,CAAKN,EAAA,KAAO,KAAK,MAAM;EAC3B,IAAIM,IAAA,CAAKL,EAAA,KAAO,MAAM,MAAM;EAE5B,MAAMM,KAAA,GAAQhB,SAAA,CAAUa,KAAA,EAAOD,UAAA,EAAY;IAAEK,QAAA,EAAU;EAAE,CAAC;EAC1D,IAAID,KAAA,CAAMP,EAAA,KAAO,KAAK,MAAM;EAC5B,IAAIO,KAAA,CAAMN,EAAA,KAAO,MAAM,MAAM;AAC/B","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ import { applyMask } from "./applyMask.native.js";
2
+ import { createTheme } from "./createTheme.native.js";
3
+ import { createStrengthenMask, createWeakenMask } from "./masks.native.js";
4
+ if (process.env.NODE_ENV === "development") {
5
+ var palette = ["0", "1", "2", "3", "-3", "-2", "-1", "-0"];
6
+ var template = {
7
+ bg: 1,
8
+ fg: -1
9
+ };
10
+ var stongerMask = createStrengthenMask();
11
+ var weakerMask = createWeakenMask();
12
+ var theme = createTheme(palette, template);
13
+ if (theme.bg !== "1") throw `\u274C`;
14
+ if (theme.fg !== "-1") throw `\u274C`;
15
+ var str = applyMask(theme, stongerMask);
16
+ if (str.bg !== "0") throw `\u274C`;
17
+ if (str.fg !== "-0") throw `\u274C`;
18
+ var weak = applyMask(theme, weakerMask);
19
+ if (weak.bg !== "2") throw `\u274C`;
20
+ if (weak.fg !== "-2") throw `\u274C`;
21
+ var weak2 = applyMask(theme, weakerMask, {
22
+ strength: 2
23
+ });
24
+ if (weak2.bg !== "3") throw `\u274C`;
25
+ if (weak2.fg !== "-3") throw `\u274C`;
26
+ }
27
+ //# sourceMappingURL=tests.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["applyMask","createTheme","createStrengthenMask","createWeakenMask","process","env","NODE_ENV","palette","template","bg","fg","stongerMask","weakerMask","theme"],"sources":["../../src/tests.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAC1B,SAASC,WAAA,QAAmB;AAC5B,SAASC,oBAAA,EAAsBC,gBAAA,QAAwB;AAGvD,IAAIC,OAAA,CAAQC,GAAA,CAAIC,QAAA,KAAa,eAAe;EAC1C,IAAAC,OAAM,IACN,KAEA,KACA,KAEA,KACA,IAAI,EACJ,IAAI,EAEJ,IAAM,EACN,IAAI,CACJ;EAEA,IAAAC,QAAM,GAAO;IACbC,EAAI;IACJC,EAAI;EAEJ;EACA,IAAIC,WAAM,GAAOT,oBAAW;EAC5B,IAAIU,UAAM,GAAOT,gBAAY;EAC/B,IAAAU,KAAA,GAAAZ,WAAA,CAAAM,OAAA,EAAAC,QAAA","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ const THEME_INFO = /* @__PURE__ */new Map();
2
+ const getThemeInfo = (theme, name) => {
3
+ return THEME_INFO.get(name || JSON.stringify(theme));
4
+ };
5
+ const setThemeInfo = (theme, info) => {
6
+ const next = {
7
+ ...info,
8
+ cache: /* @__PURE__ */new Map()
9
+ };
10
+ THEME_INFO.set(info.name || JSON.stringify(theme), next);
11
+ THEME_INFO.set(JSON.stringify(info.definition), next);
12
+ };
13
+ export { getThemeInfo, setThemeInfo };
14
+ //# sourceMappingURL=themeInfo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["THEME_INFO","Map","getThemeInfo","theme","name","get","JSON","stringify","setThemeInfo","info","next","cache","set","definition"],"sources":["../../src/themeInfo.tsx"],"sourcesContent":[null],"mappings":"AAcA,MAAMA,UAAA,GAAa,mBAAIC,GAAA,CAAuB;AAEvC,MAAMC,YAAA,GAAeA,CAC1BC,KAAA,EACAC,IAAA,KAC0B;EAC1B,OAAOJ,UAAA,CAAWK,GAAA,CAAID,IAAA,IAAQE,IAAA,CAAKC,SAAA,CAAUJ,KAAK,CAAC;AACrD;AAEO,MAAMK,YAAA,GAAeA,CAC1BL,KAAA,EACAM,IAAA,KAGS;EACT,MAAMC,IAAA,GAAO;IACX,GAAGD,IAAA;IACHE,KAAA,EAAO,mBAAIV,GAAA,CAAI;EACjB;EACAD,UAAA,CAAWY,GAAA,CAAIH,IAAA,CAAKL,IAAA,IAAQE,IAAA,CAAKC,SAAA,CAAUJ,KAAK,GAAGO,IAAI;EACvDV,UAAA,CAAWY,GAAA,CAAIN,IAAA,CAAKC,SAAA,CAAUE,IAAA,CAAKI,UAAU,GAAGH,IAAI;AACtD","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ var THEME_INFO = /* @__PURE__ */new Map();
2
+ var getThemeInfo = function (theme, name) {
3
+ return THEME_INFO.get(name || JSON.stringify(theme));
4
+ };
5
+ var setThemeInfo = function (theme, info) {
6
+ var next = {
7
+ ...info,
8
+ cache: /* @__PURE__ */new Map()
9
+ };
10
+ THEME_INFO.set(info.name || JSON.stringify(theme), next);
11
+ THEME_INFO.set(JSON.stringify(info.definition), next);
12
+ };
13
+ export { getThemeInfo, setThemeInfo };
14
+ //# sourceMappingURL=themeInfo.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["THEME_INFO","Map","getThemeInfo","theme","name","get","JSON","stringify","setThemeInfo","info","next","cache","set","definition"],"sources":["../../src/themeInfo.tsx"],"sourcesContent":[null],"mappings":"AAcA,IAAAA,UAAM,kBAAa,IAAAC,GAAI;AAEhB,IAAAC,YAAM,YAAAA,CACXC,KACA,EAAAC,IAC0B;EAC1B,OAAOJ,UAAA,CAAWK,GAAA,CAAID,IAAA,IAAQE,IAAA,CAAKC,SAAA,CAAUJ,KAAK,CAAC;AACrD;AAEO,IAAAK,YAAM,YAAAA,CACXL,KACA,EAAAM,IAGS;EACT,IAAAC,IAAM;IACJ,GAAGD,IAAA;IACHE,KAAA,EAAO,mBAAIV,GAAA,CAAI;EACjB;EACAD,UAAA,CAAWY,GAAA,CAAIH,IAAA,CAAKL,IAAA,IAAQE,IAAA,CAAKC,SAAA,CAAUJ,KAAK,GAAGO,IAAI;EACvDV,UAAA,CAAWY,GAAA,CAAIN,IAAA,CAAKC,SAAA,CAAUE,IAAA,CAAKI,UAAU,GAAGH,IAAI;AACtD","ignoreList":[]}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@hanzogui/create-theme",
3
+ "version": "2.0.0-rc.41-hanzoai.5",
4
+ "files": [
5
+ "src",
6
+ "types",
7
+ "dist",
8
+ "theme-builder"
9
+ ],
10
+ "type": "module",
11
+ "sideEffects": false,
12
+ "main": "dist/cjs",
13
+ "module": "dist/esm",
14
+ "types": "./types/index.d.ts",
15
+ "exports": {
16
+ "./package.json": "./package.json",
17
+ ".": {
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"
25
+ }
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "scripts": {
31
+ "build": "hanzogui-build",
32
+ "watch": "hanzogui-build --watch",
33
+ "clean": "hanzogui-build clean",
34
+ "clean:build": "hanzogui-build clean:build"
35
+ },
36
+ "dependencies": {
37
+ "@hanzogui/web": "2.0.0-rc.41-hanzoai.5"
38
+ },
39
+ "devDependencies": {
40
+ "@hanzogui/build": "2.0.0-rc.41-hanzoai.5"
41
+ }
42
+ }
@@ -0,0 +1,69 @@
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'
5
+
6
+ export function applyMask<Theme extends GenericTheme | ThemeMask>(
7
+ theme: Theme,
8
+ mask: CreateMask,
9
+ options: MaskOptions = {},
10
+ parentName?: string,
11
+ nextName?: string
12
+ ): Theme {
13
+ const info = getThemeInfo(theme, parentName)
14
+ if (!info) {
15
+ throw new Error(
16
+ process.env.NODE_ENV !== 'production'
17
+ ? `No info found for theme, you must pass the theme created by createThemeFromPalette directly to extendTheme`
18
+ : `❌ Err2`
19
+ )
20
+ }
21
+
22
+ const next = applyMaskStateless(info, mask, options, parentName)
23
+
24
+ setThemeInfo(next.theme, {
25
+ definition: next.definition,
26
+ palette: info.palette,
27
+ name: nextName,
28
+ })
29
+
30
+ return next.theme as Theme
31
+ }
32
+
33
+ export function applyMaskStateless<Theme extends GenericTheme | ThemeMask>(
34
+ info: ThemeInfo,
35
+ mask: CreateMask,
36
+ options: MaskOptions = {},
37
+ parentName?: string
38
+ ): ThemeInfo & {
39
+ theme: Theme
40
+ } {
41
+ const skip = {
42
+ ...options.skip,
43
+ }
44
+
45
+ // skip nonInheritedValues from parent theme
46
+ if (info.options?.nonInheritedValues) {
47
+ for (const key in info.options.nonInheritedValues) {
48
+ skip[key] = 1
49
+ }
50
+ }
51
+
52
+ // convert theme back to template first
53
+ const maskOptions = {
54
+ parentName,
55
+ palette: info.palette,
56
+ ...options,
57
+ skip,
58
+ }
59
+
60
+ const template = mask.mask(info.definition, maskOptions)
61
+ const theme = createTheme(info.palette, template) as Theme
62
+
63
+ return {
64
+ ...info,
65
+ cache: new Map(),
66
+ definition: template,
67
+ theme,
68
+ }
69
+ }
@@ -0,0 +1,29 @@
1
+ import { applyMaskStateless } from './applyMask'
2
+ import type { CreateMask } from './createThemeTypes'
3
+ import { getThemeInfo } from './themeInfo'
4
+
5
+ export const combineMasks = (...masks: CreateMask[]): CreateMask => {
6
+ const mask: CreateMask = {
7
+ name: 'combine-mask',
8
+ mask: (template, opts) => {
9
+ let current = getThemeInfo(template, opts.parentName)
10
+ let theme: any
11
+ for (const mask of masks) {
12
+ if (!current) {
13
+ throw new Error(
14
+ `Nothing returned from mask: ${current}, for template: ${template} and mask: ${mask.toString()}, given opts ${JSON.stringify(
15
+ opts,
16
+ null,
17
+ 2
18
+ )}`
19
+ )
20
+ }
21
+ const next = applyMaskStateless(current, mask, opts)
22
+ current = next
23
+ theme = next.theme
24
+ }
25
+ return theme
26
+ },
27
+ }
28
+ return mask
29
+ }
@@ -0,0 +1,127 @@
1
+ import type {
2
+ CreateThemeOptions,
3
+ CreateThemePalette,
4
+ GenericTheme,
5
+ ThemeMask,
6
+ } from './createThemeTypes'
7
+ import { isMinusZero } from './isMinusZero'
8
+ import { setThemeInfo } from './themeInfo'
9
+
10
+ const identityCache = new Map()
11
+
12
+ export function createThemeWithPalettes<
13
+ Definition extends ThemeMask,
14
+ Extras extends GenericTheme = {},
15
+ >(
16
+ palettes: Record<string, CreateThemePalette>,
17
+ defaultPalette: string,
18
+ definition: Definition,
19
+ options?: CreateThemeOptions,
20
+ name?: string,
21
+ skipCache = false
22
+ ): {
23
+ [key in keyof Definition | keyof Extras]: string
24
+ } {
25
+ if (!palettes[defaultPalette]) {
26
+ throw new Error(`No palette: ${defaultPalette}`)
27
+ }
28
+ const newDef = { ...definition }
29
+ for (const key in definition) {
30
+ let val = definition[key]
31
+ if (typeof val === 'string' && val[0] === '$') {
32
+ const [altPaletteName$, altPaletteIndex] = val.split('.')
33
+ const altPaletteName = altPaletteName$.slice(1)
34
+ const parentName = defaultPalette.split('_')[0]
35
+ const altPalette =
36
+ palettes[altPaletteName] || palettes[`${parentName}_${altPaletteName}`]
37
+
38
+ if (altPalette) {
39
+ const next = getValue(altPalette, +altPaletteIndex)
40
+ if (typeof next !== 'undefined') {
41
+ newDef[key] = next as any
42
+ }
43
+ }
44
+ }
45
+ }
46
+
47
+ return createTheme(palettes[defaultPalette], newDef, options, name, skipCache)
48
+ }
49
+
50
+ export function createTheme<
51
+ Definition extends ThemeMask,
52
+ Extras extends GenericTheme = {},
53
+ >(
54
+ palette: CreateThemePalette,
55
+ definition: Definition,
56
+ options?: CreateThemeOptions,
57
+ name?: string,
58
+ skipCache = false
59
+ ): {
60
+ [key in keyof Definition | keyof Extras]: string
61
+ } {
62
+ const cacheKey = skipCache ? '' : JSON.stringify([name, palette, definition, options])
63
+ if (!skipCache) {
64
+ if (identityCache.has(cacheKey)) {
65
+ return identityCache.get(cacheKey)
66
+ }
67
+ }
68
+
69
+ const theme = {
70
+ ...(Object.fromEntries(
71
+ Object.entries(definition).map(([key, offset]) => {
72
+ return [key, getValue(palette, offset)]
73
+ })
74
+ ) as any),
75
+ ...options?.nonInheritedValues,
76
+ }
77
+
78
+ setThemeInfo(theme, { palette, definition, options, name })
79
+
80
+ if (cacheKey) {
81
+ identityCache.set(cacheKey, theme)
82
+ }
83
+
84
+ return theme
85
+ }
86
+
87
+ const getValue = (palette: CreateThemePalette, value: string | number) => {
88
+ if (!palette) {
89
+ throw new Error(`No palette!`)
90
+ }
91
+ if (typeof value === 'string') {
92
+ return value
93
+ }
94
+ const max = palette.length - 1
95
+ const isPositive = value === 0 ? !isMinusZero(value) : value >= 0
96
+ const next = isPositive ? value : max + value
97
+ const index = Math.min(Math.max(0, next), max)
98
+ return palette[index]
99
+ }
100
+
101
+ type SubThemeKeys<ParentKeys, ChildKeys> = `${ParentKeys extends string
102
+ ? ParentKeys
103
+ : never}_${ChildKeys extends string ? ChildKeys : never}`
104
+
105
+ type ChildGetter<Name extends string | number | symbol, Theme extends GenericTheme> = (
106
+ name: Name,
107
+ theme: Theme
108
+ ) => { [key: string]: Theme }
109
+
110
+ export function addChildren<
111
+ Themes extends { [key: string]: GenericTheme },
112
+ GetChildren extends ChildGetter<keyof Themes, Themes[keyof Themes]>,
113
+ >(
114
+ themes: Themes,
115
+ getChildren: GetChildren
116
+ ): Themes & {
117
+ [key in SubThemeKeys<keyof Themes, keyof ReturnType<GetChildren>>]: Themes[keyof Themes]
118
+ } {
119
+ const out = { ...themes }
120
+ for (const key in themes) {
121
+ const subThemes = getChildren(key, themes[key])
122
+ for (const sKey in subThemes) {
123
+ out[`${key}_${sKey}`] = subThemes[sKey] as any
124
+ }
125
+ }
126
+ return out as any
127
+ }
@@ -0,0 +1,85 @@
1
+ import type { Variable } from '@hanzogui/web'
2
+
3
+ export type CreateThemePalette = (string | Variable)[]
4
+
5
+ export type ThemeMask = Record<string, string | number>
6
+
7
+ export type MaskOptions = {
8
+ palette?: CreateThemePalette
9
+ override?: Partial<ThemeMask>
10
+ overrideStrategy?: 'shift' | 'swap'
11
+ overrideSwap?: Partial<ThemeMask>
12
+ overrideShift?: Partial<ThemeMask>
13
+ skip?: Partial<ThemeMask>
14
+ strength?: number
15
+ max?: number
16
+ min?: number
17
+ parentName?: string
18
+ }
19
+
20
+ export type GenericTheme = { [key: string]: string | Variable }
21
+
22
+ export type MaskFunction = <A extends ThemeMask>(template: A, options: MaskOptions) => A
23
+
24
+ export type CreateMask = {
25
+ name: string
26
+ mask: MaskFunction
27
+ }
28
+
29
+ export type CreateThemeOptions = {
30
+ nonInheritedValues?: GenericTheme
31
+ }
32
+
33
+ export type Palette = string[]
34
+
35
+ export type Template = {
36
+ [key: string]: number | string
37
+ }
38
+
39
+ export type ThemeUsingMask<Masks = string> = MaskOptions & {
40
+ mask: Masks
41
+ avoidNestingWithin?: string[]
42
+ childOptions?: MaskOptions & {
43
+ mask?: Masks
44
+ }
45
+ }
46
+
47
+ export type ThemeUsingTemplate = CreateThemeOptions & {
48
+ palette?: string
49
+ template: string
50
+ }
51
+
52
+ type ThemePreDefined = {
53
+ theme: { [key: string]: string }
54
+ }
55
+
56
+ export type Theme<Masks = string> =
57
+ | ThemePreDefined
58
+ | ThemeUsingTemplate
59
+ | ThemeUsingMask<Masks>
60
+
61
+ export type ThemeWithParent<Masks = string> = Theme<Masks> & {
62
+ parent: string
63
+ }
64
+
65
+ export type PaletteDefinitions = {
66
+ [key: string]: Palette
67
+ }
68
+
69
+ export type ThemeDefinition<Masks extends string = string> =
70
+ | Theme<Masks>
71
+ | ThemeWithParent<Masks>[]
72
+
73
+ type UnionableString = string & {}
74
+
75
+ export type ThemeDefinitions<Masks extends string = string> = {
76
+ [key: string]: ThemeDefinition<Masks | UnionableString>
77
+ }
78
+
79
+ export type TemplateDefinitions = {
80
+ [key: string]: Template
81
+ }
82
+
83
+ export type MaskDefinitions = {
84
+ [key: string]: CreateMask | CreateMask['mask']
85
+ }
@@ -0,0 +1,44 @@
1
+ type ObjectType = Record<PropertyKey, unknown>
2
+
3
+ type PickByValue<OBJ_T, VALUE_T> = // From https://stackoverflow.com/a/55153000
4
+ Pick<OBJ_T, { [K in keyof OBJ_T]: OBJ_T[K] extends VALUE_T ? K : never }[keyof OBJ_T]>
5
+
6
+ type ObjectEntries<OBJ_T> = // From https://stackoverflow.com/a/60142095
7
+ { [K in keyof OBJ_T]: [keyof PickByValue<OBJ_T, OBJ_T[K]>, OBJ_T[K]] }[keyof OBJ_T][]
8
+
9
+ export const objectKeys = <O extends object>(obj: O) => Object.keys(obj) as Array<keyof O>
10
+
11
+ export function objectEntries<OBJ_T extends ObjectType>(
12
+ obj: OBJ_T
13
+ ): ObjectEntries<OBJ_T> {
14
+ return Object.entries(obj) as ObjectEntries<OBJ_T>
15
+ }
16
+
17
+ type EntriesType =
18
+ | [PropertyKey, unknown][]
19
+ | ReadonlyArray<readonly [PropertyKey, unknown]>
20
+
21
+ // Existing Utils
22
+ 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
24
+ (UNION_T extends any ? (k: UNION_T) => void : never) extends (k: infer I) => void
25
+ ? I
26
+ : never
27
+
28
+ // New Utils
29
+ type UnionObjectFromArrayOfPairs<ARR_T extends EntriesType> =
30
+ DeepWritable<ARR_T> extends (infer R)[]
31
+ ? R extends [infer key, infer val]
32
+ ? { [prop in key & PropertyKey]: val }
33
+ : never
34
+ : never
35
+ type MergeIntersectingObjects<ObjT> = { [key in keyof ObjT]: ObjT[key] }
36
+ type EntriesToObject<ARR_T extends EntriesType> = MergeIntersectingObjects<
37
+ UnionToIntersection<UnionObjectFromArrayOfPairs<ARR_T>>
38
+ >
39
+
40
+ export function objectFromEntries<ARR_T extends EntriesType>(
41
+ arr: ARR_T
42
+ ): EntriesToObject<ARR_T> {
43
+ return Object.fromEntries(arr) as EntriesToObject<ARR_T>
44
+ }
package/src/index.tsx ADDED
@@ -0,0 +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'