@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.
- package/dist/cjs/ThemeBuilder.cjs +131 -68
- package/dist/cjs/ThemeBuilder.native.js +208 -132
- package/dist/cjs/ThemeBuilder.native.js.map +1 -1
- package/dist/cjs/createStudioThemes.cjs +19 -17
- package/dist/cjs/createStudioThemes.native.js +19 -17
- package/dist/cjs/createStudioThemes.native.js.map +1 -1
- package/dist/cjs/createThemes.cjs +173 -123
- package/dist/cjs/createThemes.native.js +287 -248
- package/dist/cjs/createThemes.native.js.map +1 -1
- package/dist/cjs/defaultComponentThemes.cjs +12 -10
- package/dist/cjs/defaultComponentThemes.native.js +12 -10
- package/dist/cjs/defaultComponentThemes.native.js.map +1 -1
- package/dist/cjs/defaultTemplates.cjs +137 -132
- package/dist/cjs/defaultTemplates.native.js +144 -142
- package/dist/cjs/defaultTemplates.native.js.map +1 -1
- package/dist/cjs/defaultTemplatesStronger.cjs +135 -130
- package/dist/cjs/defaultTemplatesStronger.native.js +142 -140
- package/dist/cjs/defaultTemplatesStronger.native.js.map +1 -1
- package/dist/cjs/defaultTemplatesStrongest.cjs +135 -130
- package/dist/cjs/defaultTemplatesStrongest.native.js +142 -140
- package/dist/cjs/defaultTemplatesStrongest.native.js.map +1 -1
- package/dist/cjs/getThemeSuitePalettes.cjs +61 -50
- package/dist/cjs/getThemeSuitePalettes.native.js +79 -55
- package/dist/cjs/getThemeSuitePalettes.native.js.map +1 -1
- package/dist/cjs/helpers.cjs +12 -10
- package/dist/cjs/helpers.native.js +12 -10
- package/dist/cjs/helpers.native.js.map +1 -1
- package/dist/cjs/index.cjs +19 -17
- package/dist/cjs/index.native.js +19 -17
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/masks.cjs +29 -26
- package/dist/cjs/masks.native.js +98 -96
- package/dist/cjs/masks.native.js.map +1 -1
- package/dist/cjs/types.cjs +7 -5
- package/dist/cjs/types.native.js +7 -5
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/esm/ThemeBuilder.mjs +119 -58
- package/dist/esm/ThemeBuilder.mjs.map +1 -1
- package/dist/esm/ThemeBuilder.native.js +196 -122
- package/dist/esm/ThemeBuilder.native.js.map +1 -1
- package/dist/esm/createStudioThemes.mjs +2 -2
- package/dist/esm/createStudioThemes.mjs.map +1 -1
- package/dist/esm/createStudioThemes.native.js +2 -2
- package/dist/esm/createStudioThemes.native.js.map +1 -1
- package/dist/esm/createThemes.mjs +156 -108
- package/dist/esm/createThemes.mjs.map +1 -1
- package/dist/esm/createThemes.native.js +270 -233
- package/dist/esm/createThemes.native.js.map +1 -1
- package/dist/esm/defaultTemplates.mjs +125 -122
- package/dist/esm/defaultTemplates.mjs.map +1 -1
- package/dist/esm/defaultTemplates.native.js +130 -130
- package/dist/esm/defaultTemplates.native.js.map +1 -1
- package/dist/esm/defaultTemplatesStronger.mjs +123 -120
- package/dist/esm/defaultTemplatesStronger.mjs.map +1 -1
- package/dist/esm/defaultTemplatesStronger.native.js +128 -128
- package/dist/esm/defaultTemplatesStronger.native.js.map +1 -1
- package/dist/esm/defaultTemplatesStrongest.mjs +123 -120
- package/dist/esm/defaultTemplatesStrongest.mjs.map +1 -1
- package/dist/esm/defaultTemplatesStrongest.native.js +128 -128
- package/dist/esm/defaultTemplatesStrongest.native.js.map +1 -1
- package/dist/esm/getThemeSuitePalettes.mjs +49 -40
- package/dist/esm/getThemeSuitePalettes.mjs.map +1 -1
- package/dist/esm/getThemeSuitePalettes.native.js +66 -44
- package/dist/esm/getThemeSuitePalettes.native.js.map +1 -1
- package/dist/esm/index.js +8 -24
- package/dist/esm/index.js.map +1 -6
- package/dist/esm/masks.mjs +17 -16
- package/dist/esm/masks.mjs.map +1 -1
- package/dist/esm/masks.native.js +18 -18
- package/dist/esm/masks.native.js.map +1 -1
- package/package.json +8 -10
- package/src/ThemeBuilder.ts +6 -0
- package/types/ThemeBuilder.d.ts.map +1 -1
- package/dist/cjs/ThemeBuilder.js +0 -184
- package/dist/cjs/ThemeBuilder.js.map +0 -6
- package/dist/cjs/createStudioThemes.js +0 -30
- package/dist/cjs/createStudioThemes.js.map +0 -6
- package/dist/cjs/createThemes.js +0 -356
- package/dist/cjs/createThemes.js.map +0 -6
- package/dist/cjs/defaultComponentThemes.js +0 -41
- package/dist/cjs/defaultComponentThemes.js.map +0 -6
- package/dist/cjs/defaultTemplates.js +0 -138
- package/dist/cjs/defaultTemplates.js.map +0 -6
- package/dist/cjs/defaultTemplatesStronger.js +0 -137
- package/dist/cjs/defaultTemplatesStronger.js.map +0 -6
- package/dist/cjs/defaultTemplatesStrongest.js +0 -137
- package/dist/cjs/defaultTemplatesStrongest.js.map +0 -6
- package/dist/cjs/getThemeSuitePalettes.js +0 -69
- package/dist/cjs/getThemeSuitePalettes.js.map +0 -6
- package/dist/cjs/helpers.js +0 -29
- package/dist/cjs/helpers.js.map +0 -6
- package/dist/cjs/index.js +0 -32
- package/dist/cjs/index.js.map +0 -6
- package/dist/cjs/masks.js +0 -86
- package/dist/cjs/masks.js.map +0 -6
- package/dist/cjs/types.js +0 -14
- package/dist/cjs/types.js.map +0 -6
- package/dist/esm/ThemeBuilder.js +0 -174
- package/dist/esm/ThemeBuilder.js.map +0 -6
- package/dist/esm/createStudioThemes.js +0 -18
- package/dist/esm/createStudioThemes.js.map +0 -6
- package/dist/esm/createThemes.js +0 -344
- package/dist/esm/createThemes.js.map +0 -6
- package/dist/esm/defaultComponentThemes.js +0 -25
- package/dist/esm/defaultComponentThemes.js.map +0 -6
- package/dist/esm/defaultTemplates.js +0 -122
- package/dist/esm/defaultTemplates.js.map +0 -6
- package/dist/esm/defaultTemplatesStronger.js +0 -121
- package/dist/esm/defaultTemplatesStronger.js.map +0 -6
- package/dist/esm/defaultTemplatesStrongest.js +0 -121
- package/dist/esm/defaultTemplatesStrongest.js.map +0 -6
- package/dist/esm/getThemeSuitePalettes.js +0 -53
- package/dist/esm/getThemeSuitePalettes.js.map +0 -6
- package/dist/esm/helpers.js +0 -13
- package/dist/esm/helpers.js.map +0 -6
- package/dist/esm/masks.js +0 -78
- package/dist/esm/masks.js.map +0 -6
- package/dist/esm/types.js +0 -1
- 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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
17
|
-
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
18
20
|
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
19
|
-
value:
|
|
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
|
-
|
|
36
|
+
this.state.palettes = {
|
|
35
37
|
// as {} prevents generic string key merge messing up types
|
|
36
38
|
...this.state.palettes,
|
|
37
39
|
...palettes
|
|
38
|
-
}
|
|
40
|
+
};
|
|
41
|
+
return this;
|
|
39
42
|
}
|
|
40
43
|
addTemplates(templates) {
|
|
41
|
-
|
|
44
|
+
this.state.templates = {
|
|
42
45
|
// as {} prevents generic string key merge messing up types
|
|
43
46
|
...this.state.templates,
|
|
44
47
|
...templates
|
|
45
|
-
}
|
|
48
|
+
};
|
|
49
|
+
return this;
|
|
46
50
|
}
|
|
47
51
|
addMasks(masks) {
|
|
48
|
-
|
|
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
|
-
}
|
|
56
|
+
};
|
|
57
|
+
return this;
|
|
53
58
|
}
|
|
54
59
|
// for dev mode only really
|
|
55
60
|
_addedThemes = [];
|
|
56
61
|
addThemes(themes) {
|
|
57
|
-
|
|
62
|
+
this._addedThemes.push({
|
|
58
63
|
type: "themes",
|
|
59
64
|
args: [themes]
|
|
60
|
-
})
|
|
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
|
-
}
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
129
|
+
this._getThemeFn = fn;
|
|
130
|
+
return this;
|
|
97
131
|
}
|
|
98
132
|
build() {
|
|
99
|
-
if (!this.state.themes)
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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)
|
|
138
|
-
|
|
139
|
-
-
|
|
140
|
-
|
|
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)
|
|
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)
|
|
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
|
-
|
|
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
|
}
|