@stackwright/themes 0.4.0 → 0.4.1
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/LICENSE +21 -0
- package/dist/index.d.mts +240 -0
- package/dist/index.d.ts +240 -5
- package/dist/index.js +234 -16
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +195 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +33 -10
- package/CHANGELOG.md +0 -18
- package/dist/ThemeProvider.d.ts +0 -14
- package/dist/ThemeProvider.d.ts.map +0 -1
- package/dist/ThemeProvider.js +0 -19
- package/dist/index.d.ts.map +0 -1
- package/dist/themeLoader.d.ts +0 -12
- package/dist/themeLoader.d.ts.map +0 -1
- package/dist/themeLoader.js +0 -84
- package/dist/themes/corporate.d.ts +0 -32
- package/dist/themes/corporate.d.ts.map +0 -1
- package/dist/themes/corporate.js +0 -34
- package/dist/themes/soft.d.ts +0 -32
- package/dist/themes/soft.d.ts.map +0 -1
- package/dist/themes/soft.js +0 -34
- package/dist/types.d.ts +0 -66
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/src/ThemeProvider.tsx +0 -30
- package/src/index.ts +0 -4
- package/src/themeLoader.ts +0 -128
- package/src/themes/corporate.ts +0 -31
- package/src/themes/corporate.yaml +0 -36
- package/src/themes/soft.ts +0 -32
- package/src/themes/soft.yaml +0 -36
- package/src/types.ts +0 -66
- package/tsconfig.json +0 -29
- package/tsup.config.ts +0 -10
package/dist/index.js
CHANGED
|
@@ -1,19 +1,237 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
|
+
ThemeLoader: () => ThemeLoader,
|
|
34
|
+
ThemeProvider: () => ThemeProvider,
|
|
35
|
+
componentStyleSchema: () => componentStyleSchema,
|
|
36
|
+
themeConfigSchema: () => themeConfigSchema,
|
|
37
|
+
themeSchema: () => themeSchema,
|
|
38
|
+
useTheme: () => useTheme
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(index_exports);
|
|
41
|
+
|
|
42
|
+
// src/types.ts
|
|
43
|
+
var import_zod = require("zod");
|
|
44
|
+
var componentStyleSchema = import_zod.z.object({
|
|
45
|
+
base: import_zod.z.string().optional(),
|
|
46
|
+
primary: import_zod.z.string().optional(),
|
|
47
|
+
secondary: import_zod.z.string().optional(),
|
|
48
|
+
outline: import_zod.z.string().optional(),
|
|
49
|
+
shadow: import_zod.z.string().optional(),
|
|
50
|
+
nav: import_zod.z.string().optional(),
|
|
51
|
+
text: import_zod.z.string().optional()
|
|
52
|
+
}).catchall(import_zod.z.string().optional());
|
|
53
|
+
var themeConfigSchema = import_zod.z.object({
|
|
54
|
+
id: import_zod.z.string(),
|
|
55
|
+
name: import_zod.z.string(),
|
|
56
|
+
description: import_zod.z.string(),
|
|
57
|
+
colors: import_zod.z.object({
|
|
58
|
+
primary: import_zod.z.string(),
|
|
59
|
+
secondary: import_zod.z.string(),
|
|
60
|
+
accent: import_zod.z.string(),
|
|
61
|
+
background: import_zod.z.string(),
|
|
62
|
+
surface: import_zod.z.string(),
|
|
63
|
+
text: import_zod.z.string(),
|
|
64
|
+
textSecondary: import_zod.z.string()
|
|
65
|
+
}),
|
|
66
|
+
backgroundImage: import_zod.z.object({
|
|
67
|
+
url: import_zod.z.string(),
|
|
68
|
+
repeat: import_zod.z.enum(["repeat", "repeat-x", "repeat-y", "no-repeat"]).optional(),
|
|
69
|
+
size: import_zod.z.string().optional(),
|
|
70
|
+
position: import_zod.z.string().optional(),
|
|
71
|
+
attachment: import_zod.z.enum(["scroll", "fixed", "local"]).optional(),
|
|
72
|
+
scale: import_zod.z.number().optional(),
|
|
73
|
+
animation: import_zod.z.enum(["drift", "float", "shimmer", "shimmer-float", "none"]).optional(),
|
|
74
|
+
customAnimation: import_zod.z.string().optional()
|
|
75
|
+
}).optional(),
|
|
76
|
+
typography: import_zod.z.object({
|
|
77
|
+
fontFamily: import_zod.z.object({
|
|
78
|
+
primary: import_zod.z.string(),
|
|
79
|
+
secondary: import_zod.z.string()
|
|
80
|
+
}),
|
|
81
|
+
scale: import_zod.z.object({
|
|
82
|
+
xs: import_zod.z.string(),
|
|
83
|
+
sm: import_zod.z.string(),
|
|
84
|
+
base: import_zod.z.string(),
|
|
85
|
+
lg: import_zod.z.string(),
|
|
86
|
+
xl: import_zod.z.string(),
|
|
87
|
+
"2xl": import_zod.z.string(),
|
|
88
|
+
"3xl": import_zod.z.string()
|
|
89
|
+
})
|
|
90
|
+
}),
|
|
91
|
+
spacing: import_zod.z.object({
|
|
92
|
+
xs: import_zod.z.string(),
|
|
93
|
+
sm: import_zod.z.string(),
|
|
94
|
+
md: import_zod.z.string(),
|
|
95
|
+
lg: import_zod.z.string(),
|
|
96
|
+
xl: import_zod.z.string(),
|
|
97
|
+
"2xl": import_zod.z.string()
|
|
98
|
+
}),
|
|
99
|
+
components: import_zod.z.object({
|
|
100
|
+
button: componentStyleSchema.optional(),
|
|
101
|
+
card: componentStyleSchema.optional(),
|
|
102
|
+
header: componentStyleSchema.optional(),
|
|
103
|
+
footer: componentStyleSchema.optional()
|
|
104
|
+
}).optional()
|
|
105
|
+
});
|
|
106
|
+
var themeSchema = themeConfigSchema;
|
|
107
|
+
|
|
108
|
+
// src/ThemeProvider.tsx
|
|
109
|
+
var import_react = require("react");
|
|
110
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
111
|
+
var ThemeContext = (0, import_react.createContext)(void 0);
|
|
112
|
+
var ThemeProvider = ({ theme: initialTheme, children }) => {
|
|
113
|
+
const [theme, setTheme] = (0, import_react.useState)(initialTheme);
|
|
114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemeContext.Provider, { value: { theme, setTheme }, children });
|
|
115
|
+
};
|
|
116
|
+
var useTheme = () => {
|
|
117
|
+
const context = (0, import_react.useContext)(ThemeContext);
|
|
118
|
+
if (!context) {
|
|
119
|
+
throw new Error("useTheme must be used within a ThemeProvider");
|
|
120
|
+
}
|
|
121
|
+
return context;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
// src/themeLoader.ts
|
|
125
|
+
var yaml = __toESM(require("js-yaml"));
|
|
126
|
+
var ThemeLoader = class {
|
|
127
|
+
static themes = /* @__PURE__ */ new Map();
|
|
128
|
+
static loadThemeFromYaml(yamlContent) {
|
|
129
|
+
try {
|
|
130
|
+
const theme = yaml.load(yamlContent);
|
|
131
|
+
this.themes.set(theme.name, theme);
|
|
132
|
+
return theme;
|
|
133
|
+
} catch (error) {
|
|
134
|
+
throw new Error(`Failed to parse theme YAML: ${error}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
static loadThemeFromFile(themeName) {
|
|
138
|
+
const themeData = this.getEmbeddedTheme(themeName);
|
|
139
|
+
return this.loadThemeFromYaml(themeData);
|
|
140
|
+
}
|
|
141
|
+
static getTheme(name) {
|
|
142
|
+
return this.themes.get(name);
|
|
143
|
+
}
|
|
144
|
+
static getAllThemes() {
|
|
145
|
+
return Array.from(this.themes.values());
|
|
146
|
+
}
|
|
147
|
+
static registerCustomTheme(theme) {
|
|
148
|
+
this.themes.set(theme.name, theme);
|
|
149
|
+
console.log(`\u{1F3A8} Registered custom theme: ${theme.name}`);
|
|
150
|
+
}
|
|
151
|
+
static loadCustomTheme(theme) {
|
|
152
|
+
this.registerCustomTheme(theme);
|
|
153
|
+
return theme;
|
|
154
|
+
}
|
|
155
|
+
static getEmbeddedTheme(name) {
|
|
156
|
+
const themes = {
|
|
157
|
+
corporate: `
|
|
158
|
+
id: "corporate"
|
|
159
|
+
name: "Corporate"
|
|
160
|
+
description: "A professional amber-toned corporate theme"
|
|
161
|
+
colors:
|
|
162
|
+
primary: "#f59e0b"
|
|
163
|
+
secondary: "#334155"
|
|
164
|
+
accent: "#d97706"
|
|
165
|
+
background: "#f8fafc"
|
|
166
|
+
surface: "#ffffff"
|
|
167
|
+
text: "#1f2937"
|
|
168
|
+
textSecondary: "#6b7280"
|
|
169
|
+
typography:
|
|
170
|
+
fontFamily:
|
|
171
|
+
primary: "Roboto, sans-serif"
|
|
172
|
+
secondary: "Roboto, sans-serif"
|
|
173
|
+
scale:
|
|
174
|
+
xs: "0.75rem"
|
|
175
|
+
sm: "0.875rem"
|
|
176
|
+
base: "1rem"
|
|
177
|
+
lg: "1.125rem"
|
|
178
|
+
xl: "1.25rem"
|
|
179
|
+
2xl: "1.5rem"
|
|
180
|
+
3xl: "1.875rem"
|
|
181
|
+
spacing:
|
|
182
|
+
xs: "0.5rem"
|
|
183
|
+
sm: "0.75rem"
|
|
184
|
+
md: "1rem"
|
|
185
|
+
lg: "1.5rem"
|
|
186
|
+
xl: "2rem"
|
|
187
|
+
2xl: "3rem"
|
|
188
|
+
`,
|
|
189
|
+
soft: `
|
|
190
|
+
id: "soft"
|
|
191
|
+
name: "Soft"
|
|
192
|
+
description: "A gentle pink-toned soft theme"
|
|
193
|
+
colors:
|
|
194
|
+
primary: "#ec4899"
|
|
195
|
+
secondary: "#6b7280"
|
|
196
|
+
accent: "#db2777"
|
|
197
|
+
background: "#f9fafb"
|
|
198
|
+
surface: "#ffffff"
|
|
199
|
+
text: "#374151"
|
|
200
|
+
textSecondary: "#9ca3af"
|
|
201
|
+
typography:
|
|
202
|
+
fontFamily:
|
|
203
|
+
primary: "Roboto, sans-serif"
|
|
204
|
+
secondary: "Roboto, sans-serif"
|
|
205
|
+
scale:
|
|
206
|
+
xs: "0.75rem"
|
|
207
|
+
sm: "0.875rem"
|
|
208
|
+
base: "1rem"
|
|
209
|
+
lg: "1.125rem"
|
|
210
|
+
xl: "1.25rem"
|
|
211
|
+
2xl: "1.5rem"
|
|
212
|
+
3xl: "1.875rem"
|
|
213
|
+
spacing:
|
|
214
|
+
xs: "0.5rem"
|
|
215
|
+
sm: "0.75rem"
|
|
216
|
+
md: "1rem"
|
|
217
|
+
lg: "1.5rem"
|
|
218
|
+
xl: "2rem"
|
|
219
|
+
2xl: "3rem"
|
|
220
|
+
`
|
|
221
|
+
};
|
|
222
|
+
if (!themes[name]) {
|
|
223
|
+
throw new Error(`Theme '${name}' not found`);
|
|
7
224
|
}
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
225
|
+
return themes[name];
|
|
226
|
+
}
|
|
15
227
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
228
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
229
|
+
0 && (module.exports = {
|
|
230
|
+
ThemeLoader,
|
|
231
|
+
ThemeProvider,
|
|
232
|
+
componentStyleSchema,
|
|
233
|
+
themeConfigSchema,
|
|
234
|
+
themeSchema,
|
|
235
|
+
useTheme
|
|
236
|
+
});
|
|
237
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types.ts","../src/ThemeProvider.tsx","../src/themeLoader.ts"],"sourcesContent":["export * from './types';\nexport * from './ThemeProvider';\nexport * from './themeLoader';\nexport type { ThemeConfig, Theme, ComponentStyle } from './types';\nexport { componentStyleSchema, themeConfigSchema, themeSchema } from './types';","import { z } from 'zod';\n\nexport const componentStyleSchema = z.object({\n base: z.string().optional(),\n primary: z.string().optional(),\n secondary: z.string().optional(),\n outline: z.string().optional(),\n shadow: z.string().optional(),\n nav: z.string().optional(),\n text: z.string().optional(),\n}).catchall(z.string().optional());\n\nexport const themeConfigSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string(),\n colors: z.object({\n primary: z.string(),\n secondary: z.string(),\n accent: z.string(),\n background: z.string(),\n surface: z.string(),\n text: z.string(),\n textSecondary: z.string(),\n }),\n backgroundImage: z.object({\n url: z.string(),\n repeat: z.enum(['repeat', 'repeat-x', 'repeat-y', 'no-repeat']).optional(),\n size: z.string().optional(),\n position: z.string().optional(),\n attachment: z.enum(['scroll', 'fixed', 'local']).optional(),\n scale: z.number().optional(),\n animation: z.enum(['drift', 'float', 'shimmer', 'shimmer-float', 'none']).optional(),\n customAnimation: z.string().optional(),\n }).optional(),\n typography: z.object({\n fontFamily: z.object({\n primary: z.string(),\n secondary: z.string(),\n }),\n scale: z.object({\n xs: z.string(),\n sm: z.string(),\n base: z.string(),\n lg: z.string(),\n xl: z.string(),\n '2xl': z.string(),\n '3xl': z.string(),\n }),\n }),\n spacing: z.object({\n xs: z.string(),\n sm: z.string(),\n md: z.string(),\n lg: z.string(),\n xl: z.string(),\n '2xl': z.string(),\n }),\n components: z.object({\n button: componentStyleSchema.optional(),\n card: componentStyleSchema.optional(),\n header: componentStyleSchema.optional(),\n footer: componentStyleSchema.optional(),\n }).optional(),\n});\n\nexport const themeSchema = themeConfigSchema;\n\nexport type ThemeConfig = z.infer<typeof themeConfigSchema>;\nexport type ComponentStyle = z.infer<typeof componentStyleSchema>;\nexport interface Theme extends ThemeConfig {}\n","import React, { createContext, useContext, useState, ReactNode } from 'react';\nimport { Theme } from './types';\n\ninterface ThemeContextType {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\ninterface ThemeProviderProps {\n theme: Theme;\n children: ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ theme: initialTheme, children }) => {\n const [theme, setTheme] = useState<Theme>(initialTheme);\n return (\n <ThemeContext.Provider value={{ theme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport const useTheme = (): ThemeContextType => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};","import * as yaml from 'js-yaml';\nimport { Theme } from './types';\n\nexport class ThemeLoader {\n private static themes: Map<string, Theme> = new Map();\n\n static loadThemeFromYaml(yamlContent: string): Theme {\n try {\n const theme = yaml.load(yamlContent) as Theme;\n this.themes.set(theme.name, theme);\n return theme;\n } catch (error) {\n throw new Error(`Failed to parse theme YAML: ${error}`);\n }\n }\n\n static loadThemeFromFile(themeName: string): Theme {\n // In a real implementation, this would load from the file system\n // For now, we'll embed the themes\n const themeData = this.getEmbeddedTheme(themeName);\n return this.loadThemeFromYaml(themeData);\n }\n\n static getTheme(name: string): Theme | undefined {\n return this.themes.get(name);\n }\n\n static getAllThemes(): Theme[] {\n return Array.from(this.themes.values());\n }\n\n static registerCustomTheme(theme: Theme): void {\n this.themes.set(theme.name, theme);\n console.log(`🎨 Registered custom theme: ${theme.name}`);\n }\n\n static loadCustomTheme(theme: Theme): Theme {\n this.registerCustomTheme(theme);\n return theme;\n }\n\n private static getEmbeddedTheme(name: string): string {\n const themes: Record<string, string> = {\n corporate: `\nid: \"corporate\"\nname: \"Corporate\"\ndescription: \"A professional amber-toned corporate theme\"\ncolors:\n primary: \"#f59e0b\"\n secondary: \"#334155\"\n accent: \"#d97706\"\n background: \"#f8fafc\"\n surface: \"#ffffff\"\n text: \"#1f2937\"\n textSecondary: \"#6b7280\"\ntypography:\n fontFamily:\n primary: \"Roboto, sans-serif\"\n secondary: \"Roboto, sans-serif\"\n scale:\n xs: \"0.75rem\"\n sm: \"0.875rem\"\n base: \"1rem\"\n lg: \"1.125rem\"\n xl: \"1.25rem\"\n 2xl: \"1.5rem\"\n 3xl: \"1.875rem\"\nspacing:\n xs: \"0.5rem\"\n sm: \"0.75rem\"\n md: \"1rem\"\n lg: \"1.5rem\"\n xl: \"2rem\"\n 2xl: \"3rem\"\n`,\n soft: `\nid: \"soft\"\nname: \"Soft\"\ndescription: \"A gentle pink-toned soft theme\"\ncolors:\n primary: \"#ec4899\"\n secondary: \"#6b7280\"\n accent: \"#db2777\"\n background: \"#f9fafb\"\n surface: \"#ffffff\"\n text: \"#374151\"\n textSecondary: \"#9ca3af\"\ntypography:\n fontFamily:\n primary: \"Roboto, sans-serif\"\n secondary: \"Roboto, sans-serif\"\n scale:\n xs: \"0.75rem\"\n sm: \"0.875rem\"\n base: \"1rem\"\n lg: \"1.125rem\"\n xl: \"1.25rem\"\n 2xl: \"1.5rem\"\n 3xl: \"1.875rem\"\nspacing:\n xs: \"0.5rem\"\n sm: \"0.75rem\"\n md: \"1rem\"\n lg: \"1.5rem\"\n xl: \"2rem\"\n 2xl: \"3rem\"\n`\n };\n\n if (!themes[name]) {\n throw new Error(`Theme '${name}' not found`);\n }\n\n return themes[name];\n }\n}"],"mappings":"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","names":[]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// src/types.ts
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
var componentStyleSchema = z.object({
|
|
4
|
+
base: z.string().optional(),
|
|
5
|
+
primary: z.string().optional(),
|
|
6
|
+
secondary: z.string().optional(),
|
|
7
|
+
outline: z.string().optional(),
|
|
8
|
+
shadow: z.string().optional(),
|
|
9
|
+
nav: z.string().optional(),
|
|
10
|
+
text: z.string().optional()
|
|
11
|
+
}).catchall(z.string().optional());
|
|
12
|
+
var themeConfigSchema = z.object({
|
|
13
|
+
id: z.string(),
|
|
14
|
+
name: z.string(),
|
|
15
|
+
description: z.string(),
|
|
16
|
+
colors: z.object({
|
|
17
|
+
primary: z.string(),
|
|
18
|
+
secondary: z.string(),
|
|
19
|
+
accent: z.string(),
|
|
20
|
+
background: z.string(),
|
|
21
|
+
surface: z.string(),
|
|
22
|
+
text: z.string(),
|
|
23
|
+
textSecondary: z.string()
|
|
24
|
+
}),
|
|
25
|
+
backgroundImage: z.object({
|
|
26
|
+
url: z.string(),
|
|
27
|
+
repeat: z.enum(["repeat", "repeat-x", "repeat-y", "no-repeat"]).optional(),
|
|
28
|
+
size: z.string().optional(),
|
|
29
|
+
position: z.string().optional(),
|
|
30
|
+
attachment: z.enum(["scroll", "fixed", "local"]).optional(),
|
|
31
|
+
scale: z.number().optional(),
|
|
32
|
+
animation: z.enum(["drift", "float", "shimmer", "shimmer-float", "none"]).optional(),
|
|
33
|
+
customAnimation: z.string().optional()
|
|
34
|
+
}).optional(),
|
|
35
|
+
typography: z.object({
|
|
36
|
+
fontFamily: z.object({
|
|
37
|
+
primary: z.string(),
|
|
38
|
+
secondary: z.string()
|
|
39
|
+
}),
|
|
40
|
+
scale: z.object({
|
|
41
|
+
xs: z.string(),
|
|
42
|
+
sm: z.string(),
|
|
43
|
+
base: z.string(),
|
|
44
|
+
lg: z.string(),
|
|
45
|
+
xl: z.string(),
|
|
46
|
+
"2xl": z.string(),
|
|
47
|
+
"3xl": z.string()
|
|
48
|
+
})
|
|
49
|
+
}),
|
|
50
|
+
spacing: z.object({
|
|
51
|
+
xs: z.string(),
|
|
52
|
+
sm: z.string(),
|
|
53
|
+
md: z.string(),
|
|
54
|
+
lg: z.string(),
|
|
55
|
+
xl: z.string(),
|
|
56
|
+
"2xl": z.string()
|
|
57
|
+
}),
|
|
58
|
+
components: z.object({
|
|
59
|
+
button: componentStyleSchema.optional(),
|
|
60
|
+
card: componentStyleSchema.optional(),
|
|
61
|
+
header: componentStyleSchema.optional(),
|
|
62
|
+
footer: componentStyleSchema.optional()
|
|
63
|
+
}).optional()
|
|
64
|
+
});
|
|
65
|
+
var themeSchema = themeConfigSchema;
|
|
66
|
+
|
|
67
|
+
// src/ThemeProvider.tsx
|
|
68
|
+
import { createContext, useContext, useState } from "react";
|
|
69
|
+
import { jsx } from "react/jsx-runtime";
|
|
70
|
+
var ThemeContext = createContext(void 0);
|
|
71
|
+
var ThemeProvider = ({ theme: initialTheme, children }) => {
|
|
72
|
+
const [theme, setTheme] = useState(initialTheme);
|
|
73
|
+
return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: { theme, setTheme }, children });
|
|
74
|
+
};
|
|
75
|
+
var useTheme = () => {
|
|
76
|
+
const context = useContext(ThemeContext);
|
|
77
|
+
if (!context) {
|
|
78
|
+
throw new Error("useTheme must be used within a ThemeProvider");
|
|
79
|
+
}
|
|
80
|
+
return context;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
// src/themeLoader.ts
|
|
84
|
+
import * as yaml from "js-yaml";
|
|
85
|
+
var ThemeLoader = class {
|
|
86
|
+
static themes = /* @__PURE__ */ new Map();
|
|
87
|
+
static loadThemeFromYaml(yamlContent) {
|
|
88
|
+
try {
|
|
89
|
+
const theme = yaml.load(yamlContent);
|
|
90
|
+
this.themes.set(theme.name, theme);
|
|
91
|
+
return theme;
|
|
92
|
+
} catch (error) {
|
|
93
|
+
throw new Error(`Failed to parse theme YAML: ${error}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
static loadThemeFromFile(themeName) {
|
|
97
|
+
const themeData = this.getEmbeddedTheme(themeName);
|
|
98
|
+
return this.loadThemeFromYaml(themeData);
|
|
99
|
+
}
|
|
100
|
+
static getTheme(name) {
|
|
101
|
+
return this.themes.get(name);
|
|
102
|
+
}
|
|
103
|
+
static getAllThemes() {
|
|
104
|
+
return Array.from(this.themes.values());
|
|
105
|
+
}
|
|
106
|
+
static registerCustomTheme(theme) {
|
|
107
|
+
this.themes.set(theme.name, theme);
|
|
108
|
+
console.log(`\u{1F3A8} Registered custom theme: ${theme.name}`);
|
|
109
|
+
}
|
|
110
|
+
static loadCustomTheme(theme) {
|
|
111
|
+
this.registerCustomTheme(theme);
|
|
112
|
+
return theme;
|
|
113
|
+
}
|
|
114
|
+
static getEmbeddedTheme(name) {
|
|
115
|
+
const themes = {
|
|
116
|
+
corporate: `
|
|
117
|
+
id: "corporate"
|
|
118
|
+
name: "Corporate"
|
|
119
|
+
description: "A professional amber-toned corporate theme"
|
|
120
|
+
colors:
|
|
121
|
+
primary: "#f59e0b"
|
|
122
|
+
secondary: "#334155"
|
|
123
|
+
accent: "#d97706"
|
|
124
|
+
background: "#f8fafc"
|
|
125
|
+
surface: "#ffffff"
|
|
126
|
+
text: "#1f2937"
|
|
127
|
+
textSecondary: "#6b7280"
|
|
128
|
+
typography:
|
|
129
|
+
fontFamily:
|
|
130
|
+
primary: "Roboto, sans-serif"
|
|
131
|
+
secondary: "Roboto, sans-serif"
|
|
132
|
+
scale:
|
|
133
|
+
xs: "0.75rem"
|
|
134
|
+
sm: "0.875rem"
|
|
135
|
+
base: "1rem"
|
|
136
|
+
lg: "1.125rem"
|
|
137
|
+
xl: "1.25rem"
|
|
138
|
+
2xl: "1.5rem"
|
|
139
|
+
3xl: "1.875rem"
|
|
140
|
+
spacing:
|
|
141
|
+
xs: "0.5rem"
|
|
142
|
+
sm: "0.75rem"
|
|
143
|
+
md: "1rem"
|
|
144
|
+
lg: "1.5rem"
|
|
145
|
+
xl: "2rem"
|
|
146
|
+
2xl: "3rem"
|
|
147
|
+
`,
|
|
148
|
+
soft: `
|
|
149
|
+
id: "soft"
|
|
150
|
+
name: "Soft"
|
|
151
|
+
description: "A gentle pink-toned soft theme"
|
|
152
|
+
colors:
|
|
153
|
+
primary: "#ec4899"
|
|
154
|
+
secondary: "#6b7280"
|
|
155
|
+
accent: "#db2777"
|
|
156
|
+
background: "#f9fafb"
|
|
157
|
+
surface: "#ffffff"
|
|
158
|
+
text: "#374151"
|
|
159
|
+
textSecondary: "#9ca3af"
|
|
160
|
+
typography:
|
|
161
|
+
fontFamily:
|
|
162
|
+
primary: "Roboto, sans-serif"
|
|
163
|
+
secondary: "Roboto, sans-serif"
|
|
164
|
+
scale:
|
|
165
|
+
xs: "0.75rem"
|
|
166
|
+
sm: "0.875rem"
|
|
167
|
+
base: "1rem"
|
|
168
|
+
lg: "1.125rem"
|
|
169
|
+
xl: "1.25rem"
|
|
170
|
+
2xl: "1.5rem"
|
|
171
|
+
3xl: "1.875rem"
|
|
172
|
+
spacing:
|
|
173
|
+
xs: "0.5rem"
|
|
174
|
+
sm: "0.75rem"
|
|
175
|
+
md: "1rem"
|
|
176
|
+
lg: "1.5rem"
|
|
177
|
+
xl: "2rem"
|
|
178
|
+
2xl: "3rem"
|
|
179
|
+
`
|
|
180
|
+
};
|
|
181
|
+
if (!themes[name]) {
|
|
182
|
+
throw new Error(`Theme '${name}' not found`);
|
|
183
|
+
}
|
|
184
|
+
return themes[name];
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
export {
|
|
188
|
+
ThemeLoader,
|
|
189
|
+
ThemeProvider,
|
|
190
|
+
componentStyleSchema,
|
|
191
|
+
themeConfigSchema,
|
|
192
|
+
themeSchema,
|
|
193
|
+
useTheme
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/ThemeProvider.tsx","../src/themeLoader.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const componentStyleSchema = z.object({\n base: z.string().optional(),\n primary: z.string().optional(),\n secondary: z.string().optional(),\n outline: z.string().optional(),\n shadow: z.string().optional(),\n nav: z.string().optional(),\n text: z.string().optional(),\n}).catchall(z.string().optional());\n\nexport const themeConfigSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string(),\n colors: z.object({\n primary: z.string(),\n secondary: z.string(),\n accent: z.string(),\n background: z.string(),\n surface: z.string(),\n text: z.string(),\n textSecondary: z.string(),\n }),\n backgroundImage: z.object({\n url: z.string(),\n repeat: z.enum(['repeat', 'repeat-x', 'repeat-y', 'no-repeat']).optional(),\n size: z.string().optional(),\n position: z.string().optional(),\n attachment: z.enum(['scroll', 'fixed', 'local']).optional(),\n scale: z.number().optional(),\n animation: z.enum(['drift', 'float', 'shimmer', 'shimmer-float', 'none']).optional(),\n customAnimation: z.string().optional(),\n }).optional(),\n typography: z.object({\n fontFamily: z.object({\n primary: z.string(),\n secondary: z.string(),\n }),\n scale: z.object({\n xs: z.string(),\n sm: z.string(),\n base: z.string(),\n lg: z.string(),\n xl: z.string(),\n '2xl': z.string(),\n '3xl': z.string(),\n }),\n }),\n spacing: z.object({\n xs: z.string(),\n sm: z.string(),\n md: z.string(),\n lg: z.string(),\n xl: z.string(),\n '2xl': z.string(),\n }),\n components: z.object({\n button: componentStyleSchema.optional(),\n card: componentStyleSchema.optional(),\n header: componentStyleSchema.optional(),\n footer: componentStyleSchema.optional(),\n }).optional(),\n});\n\nexport const themeSchema = themeConfigSchema;\n\nexport type ThemeConfig = z.infer<typeof themeConfigSchema>;\nexport type ComponentStyle = z.infer<typeof componentStyleSchema>;\nexport interface Theme extends ThemeConfig {}\n","import React, { createContext, useContext, useState, ReactNode } from 'react';\nimport { Theme } from './types';\n\ninterface ThemeContextType {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\ninterface ThemeProviderProps {\n theme: Theme;\n children: ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ theme: initialTheme, children }) => {\n const [theme, setTheme] = useState<Theme>(initialTheme);\n return (\n <ThemeContext.Provider value={{ theme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport const useTheme = (): ThemeContextType => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};","import * as yaml from 'js-yaml';\nimport { Theme } from './types';\n\nexport class ThemeLoader {\n private static themes: Map<string, Theme> = new Map();\n\n static loadThemeFromYaml(yamlContent: string): Theme {\n try {\n const theme = yaml.load(yamlContent) as Theme;\n this.themes.set(theme.name, theme);\n return theme;\n } catch (error) {\n throw new Error(`Failed to parse theme YAML: ${error}`);\n }\n }\n\n static loadThemeFromFile(themeName: string): Theme {\n // In a real implementation, this would load from the file system\n // For now, we'll embed the themes\n const themeData = this.getEmbeddedTheme(themeName);\n return this.loadThemeFromYaml(themeData);\n }\n\n static getTheme(name: string): Theme | undefined {\n return this.themes.get(name);\n }\n\n static getAllThemes(): Theme[] {\n return Array.from(this.themes.values());\n }\n\n static registerCustomTheme(theme: Theme): void {\n this.themes.set(theme.name, theme);\n console.log(`🎨 Registered custom theme: ${theme.name}`);\n }\n\n static loadCustomTheme(theme: Theme): Theme {\n this.registerCustomTheme(theme);\n return theme;\n }\n\n private static getEmbeddedTheme(name: string): string {\n const themes: Record<string, string> = {\n corporate: `\nid: \"corporate\"\nname: \"Corporate\"\ndescription: \"A professional amber-toned corporate theme\"\ncolors:\n primary: \"#f59e0b\"\n secondary: \"#334155\"\n accent: \"#d97706\"\n background: \"#f8fafc\"\n surface: \"#ffffff\"\n text: \"#1f2937\"\n textSecondary: \"#6b7280\"\ntypography:\n fontFamily:\n primary: \"Roboto, sans-serif\"\n secondary: \"Roboto, sans-serif\"\n scale:\n xs: \"0.75rem\"\n sm: \"0.875rem\"\n base: \"1rem\"\n lg: \"1.125rem\"\n xl: \"1.25rem\"\n 2xl: \"1.5rem\"\n 3xl: \"1.875rem\"\nspacing:\n xs: \"0.5rem\"\n sm: \"0.75rem\"\n md: \"1rem\"\n lg: \"1.5rem\"\n xl: \"2rem\"\n 2xl: \"3rem\"\n`,\n soft: `\nid: \"soft\"\nname: \"Soft\"\ndescription: \"A gentle pink-toned soft theme\"\ncolors:\n primary: \"#ec4899\"\n secondary: \"#6b7280\"\n accent: \"#db2777\"\n background: \"#f9fafb\"\n surface: \"#ffffff\"\n text: \"#374151\"\n textSecondary: \"#9ca3af\"\ntypography:\n fontFamily:\n primary: \"Roboto, sans-serif\"\n secondary: \"Roboto, sans-serif\"\n scale:\n xs: \"0.75rem\"\n sm: \"0.875rem\"\n base: \"1rem\"\n lg: \"1.125rem\"\n xl: \"1.25rem\"\n 2xl: \"1.5rem\"\n 3xl: \"1.875rem\"\nspacing:\n xs: \"0.5rem\"\n sm: \"0.75rem\"\n md: \"1rem\"\n lg: \"1.5rem\"\n xl: \"2rem\"\n 2xl: \"3rem\"\n`\n };\n\n if (!themes[name]) {\n throw new Error(`Theme '${name}' not found`);\n }\n\n return themes[name];\n }\n}"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,19 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackwright/themes",
|
|
3
|
-
"version": "0.4.
|
|
4
|
-
"
|
|
5
|
-
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/Per-Aspera-LLC/stackwright"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"module": "./dist/index.mjs",
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.mjs",
|
|
18
|
+
"require": "./dist/index.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
6
21
|
"dependencies": {
|
|
7
|
-
"
|
|
8
|
-
"
|
|
22
|
+
"js-yaml": "^4",
|
|
23
|
+
"zod": "^4.1.12"
|
|
9
24
|
},
|
|
10
25
|
"devDependencies": {
|
|
11
|
-
"@types/react": "^
|
|
12
|
-
"@types/js-yaml": "^4
|
|
13
|
-
"
|
|
26
|
+
"@types/react": "^19",
|
|
27
|
+
"@types/js-yaml": "^4",
|
|
28
|
+
"react": "^19",
|
|
29
|
+
"typescript": "^5",
|
|
30
|
+
"tsup": "^8",
|
|
31
|
+
"vitest": "^4"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"react": "^19"
|
|
14
35
|
},
|
|
15
36
|
"scripts": {
|
|
16
|
-
"build": "
|
|
17
|
-
"dev": "
|
|
37
|
+
"build": "tsup",
|
|
38
|
+
"dev": "tsup --watch",
|
|
39
|
+
"test": "vitest",
|
|
40
|
+
"test:run": "vitest run"
|
|
18
41
|
}
|
|
19
42
|
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# @stackwright/themes
|
|
2
|
-
|
|
3
|
-
## 0.4.0
|
|
4
|
-
|
|
5
|
-
### Minor Changes
|
|
6
|
-
|
|
7
|
-
- 7c8587c: Bump Bump
|
|
8
|
-
|
|
9
|
-
### Patch Changes
|
|
10
|
-
|
|
11
|
-
- 0985dce: Manually bumping all patch versions
|
|
12
|
-
|
|
13
|
-
## 0.2.1
|
|
14
|
-
|
|
15
|
-
### Patch Changes
|
|
16
|
-
|
|
17
|
-
- 78a02d1: "testing beta tagging"
|
|
18
|
-
- d66fda6: Bump to test github publish action
|
package/dist/ThemeProvider.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import React, { ReactNode } from 'react';
|
|
2
|
-
import { Theme } from './types';
|
|
3
|
-
interface ThemeContextType {
|
|
4
|
-
theme: Theme;
|
|
5
|
-
setTheme?: (theme: Theme) => void;
|
|
6
|
-
}
|
|
7
|
-
interface ThemeProviderProps {
|
|
8
|
-
theme: Theme;
|
|
9
|
-
children: ReactNode;
|
|
10
|
-
}
|
|
11
|
-
export declare const ThemeProvider: React.FC<ThemeProviderProps>;
|
|
12
|
-
export declare const useTheme: () => ThemeContextType;
|
|
13
|
-
export {};
|
|
14
|
-
//# sourceMappingURL=ThemeProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../src/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,UAAU,gBAAgB;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACnC;AAID,UAAU,kBAAkB;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAMtD,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,gBAM3B,CAAC"}
|
package/dist/ThemeProvider.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useTheme = exports.ThemeProvider = void 0;
|
|
4
|
-
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
var react_1 = require("react");
|
|
6
|
-
var ThemeContext = (0, react_1.createContext)(undefined);
|
|
7
|
-
var ThemeProvider = function (_a) {
|
|
8
|
-
var theme = _a.theme, children = _a.children;
|
|
9
|
-
return ((0, jsx_runtime_1.jsx)(ThemeContext.Provider, { value: { theme: theme }, children: children }));
|
|
10
|
-
};
|
|
11
|
-
exports.ThemeProvider = ThemeProvider;
|
|
12
|
-
var useTheme = function () {
|
|
13
|
-
var context = (0, react_1.useContext)(ThemeContext);
|
|
14
|
-
if (!context) {
|
|
15
|
-
throw new Error('useTheme must be used within a ThemeProvider');
|
|
16
|
-
}
|
|
17
|
-
return context;
|
|
18
|
-
};
|
|
19
|
-
exports.useTheme = useTheme;
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/themeLoader.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Theme } from './types';
|
|
2
|
-
export declare class ThemeLoader {
|
|
3
|
-
private static themes;
|
|
4
|
-
static loadThemeFromYaml(yamlContent: string): Theme;
|
|
5
|
-
static loadThemeFromFile(themeName: string): Theme;
|
|
6
|
-
static getTheme(name: string): Theme | undefined;
|
|
7
|
-
static getAllThemes(): Theme[];
|
|
8
|
-
static registerCustomTheme(theme: Theme): void;
|
|
9
|
-
static loadCustomTheme(theme: Theme): Theme;
|
|
10
|
-
private static getEmbeddedTheme;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=themeLoader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"themeLoader.d.ts","sourceRoot":"","sources":["../src/themeLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAiC;IAEtD,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK;IAUpD,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK;IAOlD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIhD,MAAM,CAAC,YAAY,IAAI,KAAK,EAAE;IAI9B,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK9C,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IAK3C,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAsFhC"}
|