@syntrologie/runtime-sdk 0.2.0 → 0.2.3
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/CAPABILITIES.md +400 -0
- package/dist/SmartCanvasApp.js +28 -10
- package/dist/SmartCanvasApp.js.map +1 -1
- package/dist/api.d.ts +23 -0
- package/dist/api.js +23 -5
- package/dist/api.js.map +1 -1
- package/dist/blocks/data/ComparisonBlock.d.ts +10 -0
- package/dist/blocks/data/ComparisonBlock.js +92 -0
- package/dist/blocks/data/ComparisonBlock.js.map +1 -0
- package/dist/blocks/data/StatsBlock.d.ts +10 -0
- package/dist/blocks/data/StatsBlock.js +103 -0
- package/dist/blocks/data/StatsBlock.js.map +1 -0
- package/dist/blocks/data/index.d.ts +2 -0
- package/dist/blocks/data/index.js +3 -0
- package/dist/blocks/data/index.js.map +1 -0
- package/dist/blocks/index.d.ts +26 -0
- package/dist/blocks/index.js +94 -0
- package/dist/blocks/index.js.map +1 -0
- package/dist/blocks/interactive/ChecklistBlock.d.ts +11 -0
- package/dist/blocks/interactive/ChecklistBlock.js +110 -0
- package/dist/blocks/interactive/ChecklistBlock.js.map +1 -0
- package/dist/blocks/interactive/RatingBlock.d.ts +11 -0
- package/dist/blocks/interactive/RatingBlock.js +131 -0
- package/dist/blocks/interactive/RatingBlock.js.map +1 -0
- package/dist/blocks/interactive/index.d.ts +2 -0
- package/dist/blocks/interactive/index.js +3 -0
- package/dist/blocks/interactive/index.js.map +1 -0
- package/dist/blocks/notification/NotificationBlock.d.ts +26 -0
- package/dist/blocks/notification/NotificationBlock.js +166 -0
- package/dist/blocks/notification/NotificationBlock.js.map +1 -0
- package/dist/blocks/notification/index.d.ts +1 -0
- package/dist/blocks/notification/index.js +2 -0
- package/dist/blocks/notification/index.js.map +1 -0
- package/dist/bootstrap.d.ts +19 -1
- package/dist/bootstrap.js +118 -17
- package/dist/bootstrap.js.map +1 -1
- package/dist/components/ShadowCanvasOverlay.d.ts +12 -3
- package/dist/components/ShadowCanvasOverlay.js +75 -24
- package/dist/components/ShadowCanvasOverlay.js.map +1 -1
- package/dist/components/{RectangleCard.d.ts → TileCard.d.ts} +4 -4
- package/dist/components/{RectangleCard.js → TileCard.js} +57 -6
- package/dist/components/TileCard.js.map +1 -0
- package/dist/components/TileWheel.d.ts +8 -0
- package/dist/components/{RectangleWheel.js → TileWheel.js} +7 -7
- package/dist/components/TileWheel.js.map +1 -0
- package/dist/configFetcher.js.map +1 -1
- package/dist/earlyPatcher.js +1 -2
- package/dist/earlyPatcher.js.map +1 -1
- package/dist/editorLoader.js +74 -17
- package/dist/editorLoader.js.map +1 -1
- package/dist/experiments/adapters/growthbook.d.ts +18 -2
- package/dist/experiments/adapters/growthbook.js +17 -3
- package/dist/experiments/adapters/growthbook.js.map +1 -1
- package/dist/experiments/registry.d.ts +18 -4
- package/dist/experiments/registry.js +1 -1
- package/dist/experiments/registry.js.map +1 -1
- package/dist/experiments/types.d.ts +8 -3
- package/dist/fetchers/cdnFetcher.js.map +1 -1
- package/dist/fetchers/experimentsFetcher.js +20 -0
- package/dist/fetchers/experimentsFetcher.js.map +1 -1
- package/dist/fetchers/types.d.ts +2 -2
- package/dist/hooks/useCanvasOverlays.d.ts +5 -1
- package/dist/hooks/useCanvasOverlays.js +33 -13
- package/dist/hooks/useCanvasOverlays.js.map +1 -1
- package/dist/hooks/useShadowCanvasConfig.d.ts +9 -2
- package/dist/hooks/useShadowCanvasConfig.js +8 -8
- package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
- package/dist/hostPatcher/core/patcher.js +14 -15
- package/dist/hostPatcher/core/patcher.js.map +1 -1
- package/dist/hostPatcher/core/sanitizer.js +1 -1
- package/dist/hostPatcher/core/sanitizer.js.map +1 -1
- package/dist/hostPatcher/core/types.d.ts +8 -9
- package/dist/hostPatcher/policy/defaultPolicy.d.ts +4 -0
- package/dist/hostPatcher/policy/defaultPolicy.js +9 -37
- package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
- package/dist/hostPatcher/utils/anchors.js +3 -3
- package/dist/hostPatcher/utils/anchors.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/overlays/recipeRegistry.d.ts +14 -0
- package/dist/overlays/recipeRegistry.js +32 -0
- package/dist/overlays/recipeRegistry.js.map +1 -0
- package/dist/overlays/runtime/index.d.ts +1 -0
- package/dist/overlays/runtime/index.js +1 -0
- package/dist/overlays/runtime/index.js.map +1 -1
- package/dist/overlays/runtime/overlay/modal.d.ts +11 -0
- package/dist/overlays/runtime/overlay/modal.js +78 -0
- package/dist/overlays/runtime/overlay/modal.js.map +1 -0
- package/dist/overlays/runtime/overlay/root.js +132 -0
- package/dist/overlays/runtime/overlay/root.js.map +1 -1
- package/dist/overlays/runtime/overlay/runner.d.ts +2 -0
- package/dist/overlays/runtime/overlay/runner.js +441 -2
- package/dist/overlays/runtime/overlay/runner.js.map +1 -1
- package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -0
- package/dist/overlays/runtime/overlay/tooltip.js +61 -1
- package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
- package/dist/overlays/schema.d.ts +6 -6
- package/dist/overlays/types.d.ts +55 -1
- package/dist/react.d.ts +6 -1
- package/dist/react.js +31 -9
- package/dist/react.js.map +1 -1
- package/dist/render/RenderContext.d.ts +39 -0
- package/dist/render/RenderContext.js +67 -0
- package/dist/render/RenderContext.js.map +1 -0
- package/dist/render/index.d.ts +3 -0
- package/dist/render/index.js +3 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/types.d.ts +81 -0
- package/dist/render/types.js +2 -0
- package/dist/render/types.js.map +1 -0
- package/dist/smart-canvas.esm.js +192 -25
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +25953 -26837
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +192 -25
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/telemetry/adapters/posthog.d.ts +7 -1
- package/dist/telemetry/adapters/posthog.js +49 -1
- package/dist/telemetry/adapters/posthog.js.map +1 -1
- package/dist/telemetry/types.d.ts +30 -0
- package/dist/theme/ThemeProvider.d.ts +31 -0
- package/dist/theme/ThemeProvider.js +109 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/defaultTheme.d.ts +18 -0
- package/dist/theme/defaultTheme.js +163 -0
- package/dist/theme/defaultTheme.js.map +1 -0
- package/dist/theme/extractHostTheme.d.ts +14 -0
- package/dist/theme/extractHostTheme.js +261 -0
- package/dist/theme/extractHostTheme.js.map +1 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/theme/index.js +7 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/types.d.ts +91 -0
- package/dist/theme/types.js +6 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/token.d.ts +4 -0
- package/dist/token.js.map +1 -1
- package/dist/types.d.ts +228 -47
- package/package.json +8 -4
- package/schema/canvas-config.schema.json +24 -15
- package/dist/components/RectangleCard.js.map +0 -1
- package/dist/components/RectangleWheel.d.ts +0 -8
- package/dist/components/RectangleWheel.js.map +0 -1
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { darkTheme, lightTheme } from "./defaultTheme";
|
|
2
|
+
/**
|
|
3
|
+
* Common CSS variable prefixes used by popular frameworks
|
|
4
|
+
*/
|
|
5
|
+
const CSS_VAR_PATTERNS = [
|
|
6
|
+
// Tailwind
|
|
7
|
+
/^--color-/,
|
|
8
|
+
/^--tw-/,
|
|
9
|
+
// Chakra UI
|
|
10
|
+
/^--chakra-/,
|
|
11
|
+
// MUI
|
|
12
|
+
/^--mui-/,
|
|
13
|
+
// Radix
|
|
14
|
+
/^--radix-/,
|
|
15
|
+
// shadcn/ui
|
|
16
|
+
/^--primary/,
|
|
17
|
+
/^--secondary/,
|
|
18
|
+
/^--background/,
|
|
19
|
+
/^--foreground/,
|
|
20
|
+
/^--muted/,
|
|
21
|
+
/^--accent/,
|
|
22
|
+
/^--destructive/,
|
|
23
|
+
/^--border/,
|
|
24
|
+
/^--ring/,
|
|
25
|
+
/^--radius/,
|
|
26
|
+
// Bootstrap
|
|
27
|
+
/^--bs-/,
|
|
28
|
+
// Generic brand patterns
|
|
29
|
+
/^--brand/,
|
|
30
|
+
/^--theme/,
|
|
31
|
+
/^--app-/,
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Extract CSS custom properties from :root
|
|
35
|
+
*/
|
|
36
|
+
function extractCssVariables() {
|
|
37
|
+
const variables = {};
|
|
38
|
+
if (typeof document === "undefined")
|
|
39
|
+
return variables;
|
|
40
|
+
try {
|
|
41
|
+
const root = document.documentElement;
|
|
42
|
+
const computedStyle = getComputedStyle(root);
|
|
43
|
+
// Get all stylesheets
|
|
44
|
+
for (const sheet of document.styleSheets) {
|
|
45
|
+
try {
|
|
46
|
+
for (const rule of sheet.cssRules) {
|
|
47
|
+
if (rule instanceof CSSStyleRule && rule.selectorText === ":root") {
|
|
48
|
+
for (const prop of rule.style) {
|
|
49
|
+
if (prop.startsWith("--")) {
|
|
50
|
+
const value = rule.style.getPropertyValue(prop).trim();
|
|
51
|
+
if (value) {
|
|
52
|
+
variables[prop] = value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Cross-origin stylesheets will throw, skip them
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Also check computed style for inline CSS variables
|
|
64
|
+
for (const prop of computedStyle) {
|
|
65
|
+
if (prop.startsWith("--") && !variables[prop]) {
|
|
66
|
+
const value = computedStyle.getPropertyValue(prop).trim();
|
|
67
|
+
if (value) {
|
|
68
|
+
variables[prop] = value;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
console.warn("[SmartCanvas] Error extracting CSS variables:", err);
|
|
75
|
+
}
|
|
76
|
+
return variables;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get computed color from an element
|
|
80
|
+
*/
|
|
81
|
+
function getComputedColor(element, property) {
|
|
82
|
+
try {
|
|
83
|
+
const style = getComputedStyle(element);
|
|
84
|
+
const value = style.getPropertyValue(property);
|
|
85
|
+
return value && value !== "rgba(0, 0, 0, 0)" ? value.trim() : null;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Find primary color by analyzing interactive elements
|
|
93
|
+
*/
|
|
94
|
+
function findPrimaryColor() {
|
|
95
|
+
if (typeof document === "undefined")
|
|
96
|
+
return null;
|
|
97
|
+
// Look for common button/link patterns
|
|
98
|
+
const selectors = [
|
|
99
|
+
'button[class*="primary"]',
|
|
100
|
+
'button[class*="brand"]',
|
|
101
|
+
".btn-primary",
|
|
102
|
+
"[data-variant='primary']",
|
|
103
|
+
"a[class*='primary']",
|
|
104
|
+
".cta",
|
|
105
|
+
'button:not([disabled]):not([class*="secondary"]):not([class*="ghost"])',
|
|
106
|
+
];
|
|
107
|
+
for (const selector of selectors) {
|
|
108
|
+
try {
|
|
109
|
+
const element = document.querySelector(selector);
|
|
110
|
+
if (element) {
|
|
111
|
+
const bgColor = getComputedColor(element, "background-color");
|
|
112
|
+
if (bgColor && bgColor !== "transparent" && !bgColor.includes("255, 255, 255")) {
|
|
113
|
+
return bgColor;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Selector might be invalid
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Fallback: check links
|
|
122
|
+
const link = document.querySelector("a:not([class])") || document.querySelector("a");
|
|
123
|
+
if (link) {
|
|
124
|
+
const color = getComputedColor(link, "color");
|
|
125
|
+
if (color)
|
|
126
|
+
return color;
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Detect if page is in dark mode
|
|
132
|
+
*/
|
|
133
|
+
function detectDarkMode() {
|
|
134
|
+
var _a, _b;
|
|
135
|
+
if (typeof document === "undefined")
|
|
136
|
+
return true;
|
|
137
|
+
// Check prefers-color-scheme
|
|
138
|
+
if ((_b = (_a = window.matchMedia) === null || _a === void 0 ? void 0 : _a.call(window, "(prefers-color-scheme: dark)")) === null || _b === void 0 ? void 0 : _b.matches) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
// Check body background luminance
|
|
142
|
+
const body = document.body;
|
|
143
|
+
const bgColor = getComputedColor(body, "background-color");
|
|
144
|
+
if (bgColor) {
|
|
145
|
+
const match = bgColor.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
|
|
146
|
+
if (match) {
|
|
147
|
+
const [, r, g, b] = match.map(Number);
|
|
148
|
+
const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
149
|
+
return luminance < 0.5;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Check for dark mode classes
|
|
153
|
+
const html = document.documentElement;
|
|
154
|
+
if (html.classList.contains("dark") ||
|
|
155
|
+
html.dataset.theme === "dark" ||
|
|
156
|
+
body.classList.contains("dark")) {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Extract theme information from the host page
|
|
163
|
+
*/
|
|
164
|
+
export function extractHostTheme() {
|
|
165
|
+
const cssVariables = extractCssVariables();
|
|
166
|
+
// Try to find primary color
|
|
167
|
+
let primaryColor = null;
|
|
168
|
+
// First check CSS variables
|
|
169
|
+
const primaryVarNames = [
|
|
170
|
+
"--primary",
|
|
171
|
+
"--color-primary",
|
|
172
|
+
"--brand-color",
|
|
173
|
+
"--accent-color",
|
|
174
|
+
"--theme-primary",
|
|
175
|
+
"--app-primary",
|
|
176
|
+
];
|
|
177
|
+
for (const varName of primaryVarNames) {
|
|
178
|
+
if (cssVariables[varName]) {
|
|
179
|
+
primaryColor = cssVariables[varName];
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// If not found, analyze elements
|
|
184
|
+
if (!primaryColor) {
|
|
185
|
+
primaryColor = findPrimaryColor();
|
|
186
|
+
}
|
|
187
|
+
// Extract other colors
|
|
188
|
+
const backgroundColor = cssVariables["--background"] ||
|
|
189
|
+
cssVariables["--color-background"] ||
|
|
190
|
+
getComputedColor(document.body, "background-color");
|
|
191
|
+
const textColor = cssVariables["--foreground"] ||
|
|
192
|
+
cssVariables["--color-text"] ||
|
|
193
|
+
getComputedColor(document.body, "color");
|
|
194
|
+
const borderColor = cssVariables["--border"] ||
|
|
195
|
+
cssVariables["--color-border"] ||
|
|
196
|
+
null;
|
|
197
|
+
const borderRadius = cssVariables["--radius"] ||
|
|
198
|
+
cssVariables["--border-radius"] ||
|
|
199
|
+
null;
|
|
200
|
+
const fontFamily = getComputedColor(document.body, "font-family");
|
|
201
|
+
return {
|
|
202
|
+
primaryColor,
|
|
203
|
+
backgroundColor,
|
|
204
|
+
surfaceColor: cssVariables["--card"] || cssVariables["--surface"] || null,
|
|
205
|
+
textColor,
|
|
206
|
+
textSecondaryColor: cssVariables["--muted-foreground"] || cssVariables["--color-text-secondary"] || null,
|
|
207
|
+
borderColor,
|
|
208
|
+
borderRadius,
|
|
209
|
+
fontFamily,
|
|
210
|
+
cssVariables,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Merge extracted theme with default theme tokens
|
|
215
|
+
*/
|
|
216
|
+
export function mergeWithExtractedTheme(extracted, baseTheme) {
|
|
217
|
+
const isDark = detectDarkMode();
|
|
218
|
+
const defaultTheme = baseTheme !== null && baseTheme !== void 0 ? baseTheme : (isDark ? darkTheme : lightTheme);
|
|
219
|
+
// Create merged theme, applying extracted values where available
|
|
220
|
+
const merged = { ...defaultTheme };
|
|
221
|
+
if (extracted.primaryColor) {
|
|
222
|
+
merged.colorPrimary = extracted.primaryColor;
|
|
223
|
+
// Generate hover variant (slightly lighter)
|
|
224
|
+
merged.colorPrimaryHover = extracted.primaryColor; // TODO: compute lighter variant
|
|
225
|
+
merged.colorPrimaryMuted = extracted.primaryColor.replace(")", ", 0.15)").replace("rgb", "rgba");
|
|
226
|
+
}
|
|
227
|
+
if (extracted.backgroundColor) {
|
|
228
|
+
merged.colorBackground = extracted.backgroundColor;
|
|
229
|
+
}
|
|
230
|
+
if (extracted.surfaceColor) {
|
|
231
|
+
merged.colorSurface = extracted.surfaceColor;
|
|
232
|
+
}
|
|
233
|
+
if (extracted.textColor) {
|
|
234
|
+
merged.colorText = extracted.textColor;
|
|
235
|
+
}
|
|
236
|
+
if (extracted.textSecondaryColor) {
|
|
237
|
+
merged.colorTextSecondary = extracted.textSecondaryColor;
|
|
238
|
+
}
|
|
239
|
+
if (extracted.borderColor) {
|
|
240
|
+
merged.colorBorder = extracted.borderColor;
|
|
241
|
+
}
|
|
242
|
+
if (extracted.borderRadius) {
|
|
243
|
+
merged.borderRadiusMd = extracted.borderRadius;
|
|
244
|
+
}
|
|
245
|
+
if (extracted.fontFamily) {
|
|
246
|
+
merged.fontFamily = extracted.fontFamily;
|
|
247
|
+
}
|
|
248
|
+
return merged;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Auto-detect and extract theme from host page
|
|
252
|
+
* Returns merged theme tokens ready to use
|
|
253
|
+
*/
|
|
254
|
+
export function autoDetectTheme(baseTheme) {
|
|
255
|
+
if (typeof document === "undefined") {
|
|
256
|
+
return baseTheme !== null && baseTheme !== void 0 ? baseTheme : darkTheme;
|
|
257
|
+
}
|
|
258
|
+
const extracted = extractHostTheme();
|
|
259
|
+
return mergeWithExtractedTheme(extracted, baseTheme);
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=extractHostTheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractHostTheme.js","sourceRoot":"","sources":["../../src/theme/extractHostTheme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { CanvasThemeTokens, ExtractedTheme, ThemeMode, ThemeAppearance, } from "./types";
|
|
2
|
+
export { darkTheme, lightTheme, getDefaultTheme, themeToCssVariables, } from "./defaultTheme";
|
|
3
|
+
export { extractHostTheme, mergeWithExtractedTheme, autoDetectTheme, } from "./extractHostTheme";
|
|
4
|
+
export { ThemeProvider, useTheme, useThemeToken, useThemeVar, } from "./ThemeProvider";
|
|
5
|
+
export type { ThemeProviderProps } from "./ThemeProvider";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Default themes
|
|
2
|
+
export { darkTheme, lightTheme, getDefaultTheme, themeToCssVariables, } from "./defaultTheme";
|
|
3
|
+
// Theme extraction
|
|
4
|
+
export { extractHostTheme, mergeWithExtractedTheme, autoDetectTheme, } from "./extractHostTheme";
|
|
5
|
+
// Theme provider and hooks
|
|
6
|
+
export { ThemeProvider, useTheme, useThemeToken, useThemeVar, } from "./ThemeProvider";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAQA,iBAAiB;AACjB,OAAO,EACL,SAAS,EACT,UAAU,EACV,eAAe,EACf,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,mBAAmB;AACnB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,2BAA2B;AAC3B,OAAO,EACL,aAAa,EACb,QAAQ,EACR,aAAa,EACb,WAAW,GACZ,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme token definitions for Smart Canvas
|
|
3
|
+
* Inspired by macOS design language and react.email aesthetics
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Complete theme token interface
|
|
7
|
+
*/
|
|
8
|
+
export interface CanvasThemeTokens {
|
|
9
|
+
colorPrimary: string;
|
|
10
|
+
colorPrimaryHover: string;
|
|
11
|
+
colorPrimaryMuted: string;
|
|
12
|
+
colorBackground: string;
|
|
13
|
+
colorBackgroundElevated: string;
|
|
14
|
+
colorBackgroundSubtle: string;
|
|
15
|
+
colorSurface: string;
|
|
16
|
+
colorSurfaceHover: string;
|
|
17
|
+
colorText: string;
|
|
18
|
+
colorTextSecondary: string;
|
|
19
|
+
colorTextMuted: string;
|
|
20
|
+
colorTextInverse: string;
|
|
21
|
+
colorBorder: string;
|
|
22
|
+
colorBorderSubtle: string;
|
|
23
|
+
colorSuccess: string;
|
|
24
|
+
colorSuccessMuted: string;
|
|
25
|
+
colorWarning: string;
|
|
26
|
+
colorWarningMuted: string;
|
|
27
|
+
colorError: string;
|
|
28
|
+
colorErrorMuted: string;
|
|
29
|
+
colorInfo: string;
|
|
30
|
+
colorInfoMuted: string;
|
|
31
|
+
fontFamily: string;
|
|
32
|
+
fontFamilyMono: string;
|
|
33
|
+
fontSizeXs: string;
|
|
34
|
+
fontSizeSm: string;
|
|
35
|
+
fontSizeMd: string;
|
|
36
|
+
fontSizeLg: string;
|
|
37
|
+
fontSizeXl: string;
|
|
38
|
+
fontSizeXxl: string;
|
|
39
|
+
fontWeightNormal: string;
|
|
40
|
+
fontWeightMedium: string;
|
|
41
|
+
fontWeightSemibold: string;
|
|
42
|
+
fontWeightBold: string;
|
|
43
|
+
lineHeightTight: string;
|
|
44
|
+
lineHeightNormal: string;
|
|
45
|
+
lineHeightRelaxed: string;
|
|
46
|
+
spacingXs: string;
|
|
47
|
+
spacingSm: string;
|
|
48
|
+
spacingMd: string;
|
|
49
|
+
spacingLg: string;
|
|
50
|
+
spacingXl: string;
|
|
51
|
+
borderRadiusSm: string;
|
|
52
|
+
borderRadiusMd: string;
|
|
53
|
+
borderRadiusLg: string;
|
|
54
|
+
borderRadiusXl: string;
|
|
55
|
+
borderRadiusFull: string;
|
|
56
|
+
shadowSm: string;
|
|
57
|
+
shadowMd: string;
|
|
58
|
+
shadowLg: string;
|
|
59
|
+
shadowXl: string;
|
|
60
|
+
backdropBlur: string;
|
|
61
|
+
backdropSaturate: string;
|
|
62
|
+
transitionFast: string;
|
|
63
|
+
transitionNormal: string;
|
|
64
|
+
transitionSlow: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Theme extracted from host page CSS variables
|
|
68
|
+
*/
|
|
69
|
+
export interface ExtractedTheme {
|
|
70
|
+
primaryColor: string | null;
|
|
71
|
+
backgroundColor: string | null;
|
|
72
|
+
surfaceColor: string | null;
|
|
73
|
+
textColor: string | null;
|
|
74
|
+
textSecondaryColor: string | null;
|
|
75
|
+
borderColor: string | null;
|
|
76
|
+
borderRadius: string | null;
|
|
77
|
+
fontFamily: string | null;
|
|
78
|
+
cssVariables: Record<string, string>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Theme mode
|
|
82
|
+
*/
|
|
83
|
+
export type ThemeMode = "light" | "dark" | "auto";
|
|
84
|
+
/**
|
|
85
|
+
* User-provided theme overrides via appearance config
|
|
86
|
+
*/
|
|
87
|
+
export interface ThemeAppearance {
|
|
88
|
+
mode?: ThemeMode;
|
|
89
|
+
variables?: Partial<Record<`--sc-${string}`, string>>;
|
|
90
|
+
baseTheme?: "system" | "light" | "dark";
|
|
91
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/dist/token.d.ts
CHANGED
|
@@ -10,8 +10,12 @@ export interface SyntroTokenPayload {
|
|
|
10
10
|
v: 1;
|
|
11
11
|
/** Experiments key (assumes growthbook provider by default) */
|
|
12
12
|
e?: string;
|
|
13
|
+
/** Experiments host URL (e.g., "http://localhost:8110" for dev) */
|
|
14
|
+
eh?: string;
|
|
13
15
|
/** Telemetry key (assumes posthog provider by default) */
|
|
14
16
|
t?: string;
|
|
17
|
+
/** Telemetry host URL (e.g., "https://us.i.posthog.com") */
|
|
18
|
+
th?: string;
|
|
15
19
|
/** Config fetcher type (e.g., "cdn", "experiments") */
|
|
16
20
|
f?: string;
|
|
17
21
|
/** Fetcher-specific options (e.g., configId for cdn fetcher) */
|
package/dist/token.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,YAAY,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,YAAY,GAAG,MAAM,CAAC;AAyB5B;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAChD,uCAAuC;IACvC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAC;IAEvD,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,8CAA8C;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtB,OAAO,YAAY,GAAG,MAAM,CAAC;AAC/B,CAAC"}
|