@tamagui/theme-builder 1.74.2 → 1.74.4

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.
@@ -0,0 +1,134 @@
1
+ import {
2
+ applyMask,
3
+ createMask,
4
+ createTheme,
5
+ objectEntries,
6
+ objectFromEntries
7
+ } from "@tamagui/create-theme";
8
+ class ThemeBuilder {
9
+ constructor(state) {
10
+ this.state = state;
11
+ }
12
+ addPalettes(palettes) {
13
+ return this.state.palettes = {
14
+ // as {} prevents generic string key merge messing up types
15
+ ...this.state.palettes,
16
+ ...palettes
17
+ }, this;
18
+ }
19
+ addTemplates(templates) {
20
+ return this.state.templates = {
21
+ // as {} prevents generic string key merge messing up types
22
+ ...this.state.templates,
23
+ ...templates
24
+ }, this;
25
+ }
26
+ addMasks(masks) {
27
+ return this.state.masks = {
28
+ // as {} prevents generic string key merge messing up types
29
+ ...this.state.masks,
30
+ ...objectFromEntries(
31
+ objectEntries(masks).map(([key, val]) => [key, createMask(val)])
32
+ )
33
+ }, this;
34
+ }
35
+ addThemes(themes) {
36
+ return this.state.themes = {
37
+ // as {} prevents generic string key merge messing up types
38
+ ...this.state.themes,
39
+ ...themes
40
+ }, this;
41
+ }
42
+ addChildThemes(childThemeDefinition, options) {
43
+ const currentThemes = this.state.themes;
44
+ if (!currentThemes)
45
+ throw new Error(
46
+ "No themes defined yet, use addThemes first to set your base themes"
47
+ );
48
+ const currentThemeNames = Object.keys(currentThemes), incomingThemeNames = Object.keys(childThemeDefinition), namesWithDefinitions = currentThemeNames.flatMap((prefix) => {
49
+ const avoidNestingWithin = options?.avoidNestingWithin;
50
+ return avoidNestingWithin && avoidNestingWithin.some(
51
+ (avoidName) => prefix.startsWith(avoidName) || prefix.endsWith(avoidName)
52
+ ) ? [] : incomingThemeNames.map((subName) => {
53
+ const fullName = `${prefix}_${subName}`, definition = childThemeDefinition[subName];
54
+ return "avoidNestingWithin" in definition && definition.avoidNestingWithin.some((name) => prefix.startsWith(name) || prefix.endsWith(name)) ? null : [fullName, definition];
55
+ }).filter(Boolean);
56
+ }), childThemes = Object.fromEntries(namesWithDefinitions), next = {
57
+ // as {} prevents generic string key merge messing up types
58
+ ...this.state.themes,
59
+ ...childThemes
60
+ };
61
+ return this.state.themes = next, this;
62
+ }
63
+ build() {
64
+ if (!this.state.themes)
65
+ return {};
66
+ const out = {}, maskedThemes = [];
67
+ for (const themeName in this.state.themes) {
68
+ const nameParts = themeName.split("_"), parentName = nameParts.slice(0, nameParts.length - 1).join("_"), definitions = this.state.themes[themeName], themeDefinition = Array.isArray(definitions) ? (() => {
69
+ const found = definitions.find(
70
+ // endWith match stronger than startsWith
71
+ (d) => parentName.endsWith(d.parent) || parentName.startsWith(d.parent)
72
+ );
73
+ return found || null;
74
+ })() : definitions;
75
+ if (themeDefinition)
76
+ if ("theme" in themeDefinition)
77
+ out[themeName] = themeDefinition.theme;
78
+ else if ("mask" in themeDefinition)
79
+ maskedThemes.push({ parentName, themeName, mask: themeDefinition });
80
+ else {
81
+ const {
82
+ palette: paletteName,
83
+ template: templateName,
84
+ ...options
85
+ } = themeDefinition;
86
+ if (!this.state.palettes)
87
+ throw new Error(
88
+ `No palettes defined for theme with palette expected: ${themeName}`
89
+ );
90
+ let palette = this.state.palettes[paletteName];
91
+ if (!palette) {
92
+ const fullPaletteName = `${parentName}_${paletteName}`;
93
+ palette = this.state.palettes[fullPaletteName];
94
+ }
95
+ if (!palette)
96
+ throw new Error(`No palette for theme ${themeName}: ${paletteName}`);
97
+ const template = this.state.templates?.[templateName];
98
+ if (!template)
99
+ throw new Error(`No template for theme ${themeName}: ${templateName}`);
100
+ out[themeName] = createTheme(palette, template, options, themeName);
101
+ }
102
+ }
103
+ for (const { mask, themeName, parentName } of maskedThemes) {
104
+ const parent = out[parentName];
105
+ if (!parent)
106
+ continue;
107
+ const { mask: maskName, ...options } = mask;
108
+ let maskFunction = this.state.masks?.[maskName];
109
+ if (!maskFunction)
110
+ throw new Error(`No mask ${maskFunction}`);
111
+ const parentTheme = this.state.themes[parentName];
112
+ if (parentTheme && "childOptions" in parentTheme) {
113
+ const { mask: mask2, ...childOpts } = parentTheme.childOptions;
114
+ mask2 && (maskFunction = this.state.masks?.[mask2]), Object.assign(options, childOpts);
115
+ }
116
+ out[themeName] = applyMask(
117
+ parent,
118
+ maskFunction,
119
+ options,
120
+ parentName,
121
+ themeName
122
+ );
123
+ }
124
+ return out;
125
+ }
126
+ }
127
+ function createThemeBuilder() {
128
+ return new ThemeBuilder({});
129
+ }
130
+ export {
131
+ ThemeBuilder,
132
+ createThemeBuilder
133
+ };
134
+ //# sourceMappingURL=ThemeBuilder.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ThemeBuilder.ts"],
4
+ "mappings": "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",
5
+ "names": ["mask"]
6
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./ThemeBuilder";
2
+ export * from "@tamagui/create-theme";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA,cAAc;AACd,cAAc;",
5
+ "names": []
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/theme-builder",
3
- "version": "1.74.2",
3
+ "version": "1.74.4",
4
4
  "source": "src/index.ts",
5
5
  "types": "./types/index.d.ts",
6
6
  "main": "dist/cjs",
@@ -27,10 +27,10 @@
27
27
  }
28
28
  },
29
29
  "dependencies": {
30
- "@tamagui/create-theme": "1.74.2"
30
+ "@tamagui/create-theme": "1.74.4"
31
31
  },
32
32
  "devDependencies": {
33
- "@tamagui/build": "1.74.2"
33
+ "@tamagui/build": "1.74.4"
34
34
  },
35
35
  "publishConfig": {
36
36
  "access": "public"