@tamagui/theme-builder 2.0.0-rc.4 → 2.0.0-rc.40

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