@hanzogui/theme-builder 3.0.6 → 4.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 (69) hide show
  1. package/dist/cjs/ThemeBuilder.cjs +132 -68
  2. package/dist/cjs/ThemeBuilder.native.js +208 -132
  3. package/dist/cjs/ThemeBuilder.native.js.map +1 -1
  4. package/dist/cjs/createStudioThemes.cjs +19 -17
  5. package/dist/cjs/createStudioThemes.native.js +19 -17
  6. package/dist/cjs/createStudioThemes.native.js.map +1 -1
  7. package/dist/cjs/createThemes.cjs +173 -123
  8. package/dist/cjs/createThemes.native.js +287 -248
  9. package/dist/cjs/createThemes.native.js.map +1 -1
  10. package/dist/cjs/defaultComponentThemes.cjs +12 -10
  11. package/dist/cjs/defaultComponentThemes.native.js +12 -10
  12. package/dist/cjs/defaultComponentThemes.native.js.map +1 -1
  13. package/dist/cjs/defaultTemplates.cjs +137 -132
  14. package/dist/cjs/defaultTemplates.native.js +144 -142
  15. package/dist/cjs/defaultTemplates.native.js.map +1 -1
  16. package/dist/cjs/defaultTemplatesStronger.cjs +135 -130
  17. package/dist/cjs/defaultTemplatesStronger.native.js +142 -140
  18. package/dist/cjs/defaultTemplatesStronger.native.js.map +1 -1
  19. package/dist/cjs/defaultTemplatesStrongest.cjs +135 -130
  20. package/dist/cjs/defaultTemplatesStrongest.native.js +142 -140
  21. package/dist/cjs/defaultTemplatesStrongest.native.js.map +1 -1
  22. package/dist/cjs/getThemeSuitePalettes.cjs +61 -50
  23. package/dist/cjs/getThemeSuitePalettes.native.js +79 -55
  24. package/dist/cjs/getThemeSuitePalettes.native.js.map +1 -1
  25. package/dist/cjs/helpers.cjs +12 -10
  26. package/dist/cjs/helpers.native.js +12 -10
  27. package/dist/cjs/helpers.native.js.map +1 -1
  28. package/dist/cjs/index.cjs +19 -17
  29. package/dist/cjs/index.native.js +19 -17
  30. package/dist/cjs/index.native.js.map +1 -1
  31. package/dist/cjs/masks.cjs +29 -26
  32. package/dist/cjs/masks.native.js +98 -96
  33. package/dist/cjs/masks.native.js.map +1 -1
  34. package/dist/cjs/types.cjs +7 -5
  35. package/dist/cjs/types.native.js +7 -5
  36. package/dist/cjs/types.native.js.map +1 -1
  37. package/dist/esm/ThemeBuilder.mjs +120 -58
  38. package/dist/esm/ThemeBuilder.mjs.map +1 -1
  39. package/dist/esm/ThemeBuilder.native.js +196 -122
  40. package/dist/esm/ThemeBuilder.native.js.map +1 -1
  41. package/dist/esm/createStudioThemes.mjs +2 -2
  42. package/dist/esm/createStudioThemes.mjs.map +1 -1
  43. package/dist/esm/createStudioThemes.native.js +2 -2
  44. package/dist/esm/createStudioThemes.native.js.map +1 -1
  45. package/dist/esm/createThemes.mjs +156 -108
  46. package/dist/esm/createThemes.mjs.map +1 -1
  47. package/dist/esm/createThemes.native.js +270 -233
  48. package/dist/esm/createThemes.native.js.map +1 -1
  49. package/dist/esm/defaultTemplates.mjs +125 -122
  50. package/dist/esm/defaultTemplates.mjs.map +1 -1
  51. package/dist/esm/defaultTemplates.native.js +130 -130
  52. package/dist/esm/defaultTemplates.native.js.map +1 -1
  53. package/dist/esm/defaultTemplatesStronger.mjs +123 -120
  54. package/dist/esm/defaultTemplatesStronger.mjs.map +1 -1
  55. package/dist/esm/defaultTemplatesStronger.native.js +128 -128
  56. package/dist/esm/defaultTemplatesStronger.native.js.map +1 -1
  57. package/dist/esm/defaultTemplatesStrongest.mjs +123 -120
  58. package/dist/esm/defaultTemplatesStrongest.mjs.map +1 -1
  59. package/dist/esm/defaultTemplatesStrongest.native.js +128 -128
  60. package/dist/esm/defaultTemplatesStrongest.native.js.map +1 -1
  61. package/dist/esm/getThemeSuitePalettes.mjs +49 -40
  62. package/dist/esm/getThemeSuitePalettes.mjs.map +1 -1
  63. package/dist/esm/getThemeSuitePalettes.native.js +66 -44
  64. package/dist/esm/getThemeSuitePalettes.native.js.map +1 -1
  65. package/dist/esm/masks.mjs +17 -16
  66. package/dist/esm/masks.mjs.map +1 -1
  67. package/dist/esm/masks.native.js +18 -18
  68. package/dist/esm/masks.native.js.map +1 -1
  69. package/package.json +4 -4
@@ -3,20 +3,22 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
5
  var __export = (target, all) => {
6
- for (var name in all) __defProp(target, name, {
7
- get: all[name],
8
- enumerable: !0
9
- });
10
- },
11
- __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
14
  get: () => from[key],
14
15
  enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
16
  });
16
- return to;
17
- };
17
+ }
18
+ return to;
19
+ };
18
20
  var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
19
- value: !0
21
+ value: true
20
22
  }), mod);
21
23
  var ThemeBuilder_exports = {};
22
24
  __export(ThemeBuilder_exports, {
@@ -29,115 +31,170 @@ class ThemeBuilder {
29
31
  constructor(state) {
30
32
  this.state = state;
31
33
  }
34
+ state;
32
35
  _getThemeFn;
33
36
  addPalettes(palettes) {
34
- return this.state.palettes = {
37
+ this.state.palettes = {
35
38
  // as {} prevents generic string key merge messing up types
36
39
  ...this.state.palettes,
37
40
  ...palettes
38
- }, this;
41
+ };
42
+ return this;
39
43
  }
40
44
  addTemplates(templates) {
41
- return this.state.templates = {
45
+ this.state.templates = {
42
46
  // as {} prevents generic string key merge messing up types
43
47
  ...this.state.templates,
44
48
  ...templates
45
- }, this;
49
+ };
50
+ return this;
46
51
  }
47
52
  addMasks(masks) {
48
- return this.state.masks = {
53
+ this.state.masks = {
49
54
  // as {} prevents generic string key merge messing up types
50
55
  ...this.state.masks,
51
56
  ...(0, import_create_theme.objectFromEntries)((0, import_create_theme.objectEntries)(masks).map(([key, val]) => [key, (0, import_create_theme.createMask)(val)]))
52
- }, this;
57
+ };
58
+ return this;
53
59
  }
54
60
  // for dev mode only really
55
61
  _addedThemes = [];
56
62
  addThemes(themes) {
57
- return this._addedThemes.push({
63
+ this._addedThemes.push({
58
64
  type: "themes",
59
65
  args: [themes]
60
- }), this.state.themes = {
66
+ });
67
+ this.state.themes = {
61
68
  // as {} prevents generic string key merge messing up types
62
69
  ...this.state.themes,
63
70
  ...themes
64
- }, this;
71
+ };
72
+ return this;
65
73
  }
66
74
  // these wont be typed to save some complexity and because they don't need to be typed!
67
75
  addComponentThemes(childThemeDefinition, options) {
68
- return this.addChildThemes(childThemeDefinition, options), this;
76
+ void this.addChildThemes(childThemeDefinition, options);
77
+ return this;
69
78
  }
70
79
  addChildThemes(childThemeDefinition, options) {
71
80
  const currentThemes = this.state.themes;
72
- if (!currentThemes) throw new Error("No themes defined yet, use addThemes first to set your base themes");
81
+ if (!currentThemes) {
82
+ throw new Error(`No themes defined yet, use addThemes first to set your base themes`);
83
+ }
73
84
  this._addedThemes.push({
74
85
  type: "childThemes",
75
86
  args: [childThemeDefinition, options]
76
87
  });
77
- const currentThemeNames = Object.keys(currentThemes),
78
- incomingThemeNames = Object.keys(childThemeDefinition),
79
- namesWithDefinitions = currentThemeNames.flatMap(prefix => {
80
- const avoidNestingWithin = options?.avoidNestingWithin;
81
- return avoidNestingWithin && avoidNestingWithin.some(avoidName => prefix.startsWith(avoidName) || prefix.endsWith(avoidName)) ? [] : incomingThemeNames.map(subName => {
82
- const fullName = `${prefix}_${subName}`,
83
- definition = childThemeDefinition[subName];
84
- return "avoidNestingWithin" in definition && definition.avoidNestingWithin.some(name => (name === "light" || name === "dark") && prefix.includes("_") ? !1 : prefix.startsWith(name) || prefix.endsWith(name)) || prefix.endsWith(`_${subName}`) || fullName in currentThemes ? null : [fullName, definition];
85
- }).filter(Boolean);
86
- }),
87
- childThemes = Object.fromEntries(namesWithDefinitions),
88
- next = {
89
- // as {} prevents generic string key merge messing up types
90
- ...this.state.themes,
91
- ...childThemes
92
- };
93
- return this.state.themes = next, this;
88
+ const currentThemeNames = Object.keys(currentThemes);
89
+ const incomingThemeNames = Object.keys(childThemeDefinition);
90
+ const namesWithDefinitions = currentThemeNames.flatMap(prefix => {
91
+ const avoidNestingWithin = options?.avoidNestingWithin;
92
+ if (avoidNestingWithin) {
93
+ if (avoidNestingWithin.some(avoidName => prefix.startsWith(avoidName) || prefix.endsWith(avoidName))) {
94
+ return [];
95
+ }
96
+ }
97
+ return incomingThemeNames.map(subName => {
98
+ const fullName = `${prefix}_${subName}`;
99
+ const definition = childThemeDefinition[subName];
100
+ if ("avoidNestingWithin" in definition) {
101
+ const avoidNest = definition.avoidNestingWithin;
102
+ if (avoidNest.some(name => {
103
+ if ((name === "light" || name === "dark") && prefix.includes("_")) {
104
+ return false;
105
+ }
106
+ return prefix.startsWith(name) || prefix.endsWith(name);
107
+ })) {
108
+ return null;
109
+ }
110
+ }
111
+ if (prefix.endsWith(`_${subName}`)) {
112
+ return null;
113
+ }
114
+ if (fullName in currentThemes) {
115
+ return null;
116
+ }
117
+ return [fullName, definition];
118
+ }).filter(Boolean);
119
+ });
120
+ const childThemes = Object.fromEntries(namesWithDefinitions);
121
+ const next = {
122
+ // as {} prevents generic string key merge messing up types
123
+ ...this.state.themes,
124
+ ...childThemes
125
+ };
126
+ this.state.themes = next;
127
+ return this;
94
128
  }
95
129
  getTheme(fn) {
96
- return this._getThemeFn = fn, this;
130
+ this._getThemeFn = fn;
131
+ return this;
97
132
  }
98
133
  build() {
99
- if (!this.state.themes) return {};
100
- const out = {},
101
- maskedThemes = [];
134
+ if (!this.state.themes) {
135
+ return {};
136
+ }
137
+ const out = {};
138
+ const maskedThemes = [];
102
139
  for (const themeName in this.state.themes) {
103
- const nameParts = themeName.split("_"),
104
- parentName = nameParts.slice(0, nameParts.length - 1).join("_"),
105
- definitions = this.state.themes[themeName],
106
- themeDefinition = Array.isArray(definitions) ? (() => {
107
- const found = definitions.find(
108
- // endWith match stronger than startsWith
109
- d => d.parent ? parentName.endsWith(d.parent) || parentName.startsWith(d.parent) : !0);
110
- return found || null;
111
- })() : definitions;
112
- if (themeDefinition) if ("theme" in themeDefinition) out[themeName] = themeDefinition.theme;else if ("mask" in themeDefinition) maskedThemes.push({
113
- parentName,
114
- themeName,
115
- mask: themeDefinition
116
- });else {
140
+ const nameParts = themeName.split("_");
141
+ const parentName = nameParts.slice(0, nameParts.length - 1).join("_");
142
+ const definitions = this.state.themes[themeName];
143
+ const themeDefinition = Array.isArray(definitions) ? (() => {
144
+ const found = definitions.find(
145
+ // endWith match stronger than startsWith
146
+ d => d.parent ? parentName.endsWith(d.parent) || parentName.startsWith(d.parent) : true);
147
+ if (!found) {
148
+ return null;
149
+ }
150
+ return found;
151
+ })() : definitions;
152
+ if (!themeDefinition) {
153
+ continue;
154
+ }
155
+ if ("theme" in themeDefinition) {
156
+ out[themeName] = themeDefinition.theme;
157
+ } else if ("mask" in themeDefinition) {
158
+ maskedThemes.push({
159
+ parentName,
160
+ themeName,
161
+ mask: themeDefinition
162
+ });
163
+ } else {
117
164
  let {
118
165
  palette: paletteName = "",
119
166
  template: templateName,
120
167
  ...options
121
168
  } = themeDefinition;
122
169
  const parentDefinition = this.state.themes[parentName];
123
- if (!this.state.palettes) throw new Error(`No palettes defined for theme with palette expected: ${themeName}`);
124
- let palette = this.state.palettes[paletteName || ""],
125
- attemptParentName = `${parentName}_${paletteName}`;
126
- for (; !palette && attemptParentName;) attemptParentName in this.state.palettes ? (palette = this.state.palettes[attemptParentName], paletteName = attemptParentName) : attemptParentName = attemptParentName.split("_").slice(0, -1).join("_");
170
+ if (!this.state.palettes) {
171
+ throw new Error(`No palettes defined for theme with palette expected: ${themeName}`);
172
+ }
173
+ let palette = this.state.palettes[paletteName || ""];
174
+ let attemptParentName = `${parentName}_${paletteName}`;
175
+ while (!palette && attemptParentName) {
176
+ if (attemptParentName in this.state.palettes) {
177
+ palette = this.state.palettes[attemptParentName];
178
+ paletteName = attemptParentName;
179
+ } else {
180
+ attemptParentName = attemptParentName.split("_").slice(0, -1).join("_");
181
+ }
182
+ }
127
183
  if (!palette) {
128
184
  const msg = process.env.NODE_ENV !== "production" ? `: ${themeName}: ${paletteName}
129
185
  Definition: ${JSON.stringify(themeDefinition)}
130
186
  Parent: ${JSON.stringify(parentDefinition)}
131
- Potential: (${Object.keys(this.state.palettes).join(", ")})` : "";
187
+ Potential: (${Object.keys(this.state.palettes).join(", ")})` : ``;
132
188
  throw new Error(`No palette for theme${msg}`);
133
189
  }
134
190
  const template = this.state.templates?.[templateName] ??
135
191
  // fall back to finding the scheme specific on if it exists
136
192
  this.state.templates?.[`${nameParts[0]}_${templateName}`];
137
- if (!template) throw new Error(`No template for theme ${themeName}: ${templateName} in templates:
138
- - ${Object.keys(this.state.templates || {}).join(`
139
- - `)}`);
140
- const theme = (0, import_create_theme.createThemeWithPalettes)(this.state.palettes, paletteName, template, options, themeName, !0);
193
+ if (!template) {
194
+ throw new Error(`No template for theme ${themeName}: ${templateName} in templates:
195
+ - ${Object.keys(this.state.templates || {}).join("\n - ")}`);
196
+ }
197
+ const theme = (0, import_create_theme.createThemeWithPalettes)(this.state.palettes, paletteName, template, options, themeName, true);
141
198
  out[themeName] = this._getThemeFn ? {
142
199
  ...theme,
143
200
  ...this._getThemeFn({
@@ -159,20 +216,27 @@ class ThemeBuilder {
159
216
  parentName
160
217
  } of maskedThemes) {
161
218
  const parent = out[parentName];
162
- if (!parent) continue;
219
+ if (!parent) {
220
+ continue;
221
+ }
163
222
  const {
164
223
  mask: maskName,
165
224
  ...options
166
225
  } = mask;
167
226
  let maskFunction = this.state.masks?.[maskName];
168
- if (!maskFunction) throw new Error(`No mask ${maskName}`);
227
+ if (!maskFunction) {
228
+ throw new Error(`No mask ${maskName}`);
229
+ }
169
230
  const parentTheme = this.state.themes[parentName];
170
231
  if (parentTheme && "childOptions" in parentTheme) {
171
232
  const {
172
233
  mask: mask2,
173
234
  ...childOpts
174
235
  } = parentTheme.childOptions;
175
- mask2 && (maskFunction = this.state.masks?.[mask2]), Object.assign(options, childOpts);
236
+ if (mask2) {
237
+ maskFunction = this.state.masks?.[mask2];
238
+ }
239
+ Object.assign(options, childOpts);
176
240
  }
177
241
  out[themeName] = (0, import_create_theme.applyMask)(parent, maskFunction, options, parentName, themeName);
178
242
  }