@syntrologie/runtime-sdk 0.2.1 → 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 +25962 -26846
- 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 +6 -0
- package/dist/telemetry/adapters/posthog.js +48 -0
- 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
|
@@ -59,6 +59,12 @@ export declare class PostHogAdapter implements TelemetryClient {
|
|
|
59
59
|
trackCanvasClosed(surface: CanvasSurface): void;
|
|
60
60
|
trackRectangleViewed(rectangleId: string, surface: CanvasSurface): void;
|
|
61
61
|
trackAction(action: string, rectangleId: string, surface: CanvasSurface): void;
|
|
62
|
+
register(properties: Record<string, unknown>): void;
|
|
63
|
+
getSessionId(): string | undefined;
|
|
64
|
+
startSessionRecording(): void;
|
|
65
|
+
trackExperiment(experimentKey: string, variationId: number, variationName?: string): void;
|
|
66
|
+
setPersonProperties(properties: Record<string, unknown>): void;
|
|
67
|
+
setPersonPropertiesOnce(properties: Record<string, unknown>): void;
|
|
62
68
|
}
|
|
63
69
|
/**
|
|
64
70
|
* Create a TelemetryClient backed by PostHog.
|
|
@@ -9,13 +9,21 @@ export class PostHogAdapter {
|
|
|
9
9
|
this.client = options.client;
|
|
10
10
|
if (!this.client && typeof window !== "undefined" && options.apiKey) {
|
|
11
11
|
this.client = posthog;
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
13
|
this.client.init(options.apiKey, {
|
|
13
14
|
api_host: (_a = options.apiHost) !== null && _a !== void 0 ? _a : "https://posthog-dev.syntrologie.com",
|
|
15
|
+
// Disable feature flags - we use GrowthBook for experiments
|
|
16
|
+
advanced_disable_feature_flags: true,
|
|
17
|
+
advanced_disable_feature_flags_on_first_load: true,
|
|
14
18
|
// Full-page tracking - all ON by default
|
|
15
19
|
autocapture: (_b = options.autocapture) !== null && _b !== void 0 ? _b : true,
|
|
16
20
|
capture_pageview: (_c = options.capturePageview) !== null && _c !== void 0 ? _c : true,
|
|
17
21
|
capture_pageleave: (_d = options.capturePageleave) !== null && _d !== void 0 ? _d : true,
|
|
18
22
|
disable_session_recording: !((_e = options.sessionRecording) !== null && _e !== void 0 ? _e : true),
|
|
23
|
+
// CRITICAL: Disable user agent filtering to allow headless Chrome
|
|
24
|
+
// PostHog blocks "HeadlessChrome" user agents by default as bot detection
|
|
25
|
+
// This enables session recording in Playwright/crawler sessions
|
|
26
|
+
opt_out_useragent_filter: true,
|
|
19
27
|
// Cross-domain iframe recording for embeds
|
|
20
28
|
session_recording: {
|
|
21
29
|
recordCrossDomainIFrames: true,
|
|
@@ -51,6 +59,46 @@ export class PostHogAdapter {
|
|
|
51
59
|
trackAction(action, rectangleId, surface) {
|
|
52
60
|
this.track("shadow_canvas_action", { action, rectangleId, surface });
|
|
53
61
|
}
|
|
62
|
+
register(properties) {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
65
|
+
(_b = (_a = this.client) === null || _a === void 0 ? void 0 : _a.register) === null || _b === void 0 ? void 0 : _b.call(_a, properties);
|
|
66
|
+
}
|
|
67
|
+
getSessionId() {
|
|
68
|
+
var _a, _b;
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
70
|
+
return (_b = (_a = this.client) === null || _a === void 0 ? void 0 : _a.get_session_id) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
71
|
+
}
|
|
72
|
+
startSessionRecording() {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
// Force start recording - bypasses bot detection for crawler sessions
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
76
|
+
(_b = (_a = this.client) === null || _a === void 0 ? void 0 : _a.startSessionRecording) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
77
|
+
}
|
|
78
|
+
trackExperiment(experimentKey, variationId, variationName) {
|
|
79
|
+
// Register as super property so all subsequent events include experiment data
|
|
80
|
+
const experimentProperty = `$experiment_${experimentKey}`;
|
|
81
|
+
this.register({
|
|
82
|
+
[experimentProperty]: variationName !== null && variationName !== void 0 ? variationName : `variation_${variationId}`,
|
|
83
|
+
[`${experimentProperty}_id`]: variationId,
|
|
84
|
+
});
|
|
85
|
+
// Fire discrete event for experiment assignment tracking
|
|
86
|
+
this.track("$experiment_started", {
|
|
87
|
+
$experiment_key: experimentKey,
|
|
88
|
+
$experiment_variation_id: variationId,
|
|
89
|
+
$experiment_variation_name: variationName !== null && variationName !== void 0 ? variationName : `variation_${variationId}`,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
setPersonProperties(properties) {
|
|
93
|
+
var _a;
|
|
94
|
+
// PostHog's $set event sets person properties
|
|
95
|
+
(_a = this.client) === null || _a === void 0 ? void 0 : _a.capture("$set", { $set: properties });
|
|
96
|
+
}
|
|
97
|
+
setPersonPropertiesOnce(properties) {
|
|
98
|
+
var _a;
|
|
99
|
+
// PostHog's $set_once only sets if property doesn't exist
|
|
100
|
+
(_a = this.client) === null || _a === void 0 ? void 0 : _a.capture("$set", { $set_once: properties });
|
|
101
|
+
}
|
|
54
102
|
}
|
|
55
103
|
/**
|
|
56
104
|
* Create a TelemetryClient backed by PostHog.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/telemetry/adapters/posthog.ts"],"names":[],"mappings":"AAOA,OAAO,OAAO,MAAM,YAAY,CAAC;AAkDjC;;GAEG;AACH,MAAM,OAAO,cAAc;IAGzB,YAA6B,UAAiC,EAAE;;QAAnC,YAAO,GAAP,OAAO,CAA4B;QAC9D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAC/B,QAAQ,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,qCAAqC;gBAClE,yCAAyC;gBACzC,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,IAAI;gBACxC,gBAAgB,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,IAAI;gBACjD,iBAAiB,EAAE,MAAA,OAAO,CAAC,gBAAgB,mCAAI,IAAI;gBACnD,yBAAyB,EAAE,CAAC,CAAC,MAAA,OAAO,CAAC,gBAAgB,mCAAI,IAAI,CAAC;gBAC9D,2CAA2C;gBAC3C,iBAAiB,EAAE;oBACjB,wBAAwB,EAAE,IAAI;iBAC/B;gBACD,8BAA8B;gBAC9B,mBAAmB,EAAE,IAAI;gBACzB,oBAAoB;gBACpB,4BAA4B,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/telemetry/adapters/posthog.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,4 +25,34 @@ export interface TelemetryClient {
|
|
|
25
25
|
* Track a user action.
|
|
26
26
|
*/
|
|
27
27
|
trackAction(action: string, rectangleId: string, surface: CanvasSurface): void;
|
|
28
|
+
/**
|
|
29
|
+
* Register super properties that will be sent with all subsequent events.
|
|
30
|
+
* Used by the editor SDK to tag crawler sessions.
|
|
31
|
+
*/
|
|
32
|
+
register?(properties: Record<string, unknown>): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get the current session ID from the telemetry provider.
|
|
35
|
+
*/
|
|
36
|
+
getSessionId?(): string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Force start session recording.
|
|
39
|
+
* Used to bypass bot detection for crawler sessions.
|
|
40
|
+
*/
|
|
41
|
+
startSessionRecording?(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Track experiment assignment.
|
|
44
|
+
* Called when a user is assigned to an experiment variation.
|
|
45
|
+
* Registers experiment as super property and fires $experiment_started event.
|
|
46
|
+
*/
|
|
47
|
+
trackExperiment?(experimentKey: string, variationId: number, variationName?: string): void;
|
|
48
|
+
/**
|
|
49
|
+
* Set person properties that persist across sessions/devices.
|
|
50
|
+
* Used to store tour completion state, user preferences, etc.
|
|
51
|
+
*/
|
|
52
|
+
setPersonProperties?(properties: Record<string, unknown>): void;
|
|
53
|
+
/**
|
|
54
|
+
* Set person properties only if they haven't been set before.
|
|
55
|
+
* Useful for tracking first-time events like tour completion.
|
|
56
|
+
*/
|
|
57
|
+
setPersonPropertiesOnce?(properties: Record<string, unknown>): void;
|
|
28
58
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import type { CanvasThemeTokens, ThemeAppearance, ThemeMode } from "./types";
|
|
3
|
+
interface ThemeContextValue {
|
|
4
|
+
theme: CanvasThemeTokens;
|
|
5
|
+
mode: ThemeMode;
|
|
6
|
+
cssVariables: Record<string, string>;
|
|
7
|
+
setMode: (mode: ThemeMode) => void;
|
|
8
|
+
}
|
|
9
|
+
export interface ThemeProviderProps {
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
appearance?: ThemeAppearance;
|
|
12
|
+
autoDetect?: boolean;
|
|
13
|
+
shadowRoot?: ShadowRoot | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Theme provider component that injects CSS variables into shadow DOM
|
|
17
|
+
*/
|
|
18
|
+
export declare function ThemeProvider({ children, appearance, autoDetect, shadowRoot, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
/**
|
|
20
|
+
* Hook to access theme context
|
|
21
|
+
*/
|
|
22
|
+
export declare function useTheme(): ThemeContextValue;
|
|
23
|
+
/**
|
|
24
|
+
* Hook to get specific theme token with CSS variable fallback
|
|
25
|
+
*/
|
|
26
|
+
export declare function useThemeToken<K extends keyof CanvasThemeTokens>(token: K): string;
|
|
27
|
+
/**
|
|
28
|
+
* Hook to get CSS variable name for a token
|
|
29
|
+
*/
|
|
30
|
+
export declare function useThemeVar(token: keyof CanvasThemeTokens): string;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useMemo, useEffect, useState } from "react";
|
|
3
|
+
import { darkTheme, lightTheme, themeToCssVariables } from "./defaultTheme";
|
|
4
|
+
import { autoDetectTheme } from "./extractHostTheme";
|
|
5
|
+
const ThemeContext = createContext(null);
|
|
6
|
+
/**
|
|
7
|
+
* Detect system color scheme preference
|
|
8
|
+
*/
|
|
9
|
+
function getSystemMode() {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
if (typeof window === "undefined")
|
|
12
|
+
return "dark";
|
|
13
|
+
return ((_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) ? "dark" : "light";
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Theme provider component that injects CSS variables into shadow DOM
|
|
17
|
+
*/
|
|
18
|
+
export function ThemeProvider({ children, appearance, autoDetect = true, shadowRoot, }) {
|
|
19
|
+
var _a;
|
|
20
|
+
const [mode, setMode] = useState((_a = appearance === null || appearance === void 0 ? void 0 : appearance.mode) !== null && _a !== void 0 ? _a : "auto");
|
|
21
|
+
const [systemMode, setSystemMode] = useState(getSystemMode);
|
|
22
|
+
// Listen for system color scheme changes
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (typeof window === "undefined")
|
|
25
|
+
return;
|
|
26
|
+
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
27
|
+
const handleChange = (e) => {
|
|
28
|
+
setSystemMode(e.matches ? "dark" : "light");
|
|
29
|
+
};
|
|
30
|
+
mediaQuery.addEventListener("change", handleChange);
|
|
31
|
+
return () => mediaQuery.removeEventListener("change", handleChange);
|
|
32
|
+
}, []);
|
|
33
|
+
// Resolve effective mode
|
|
34
|
+
const effectiveMode = mode === "auto" ? systemMode : mode;
|
|
35
|
+
// Build theme
|
|
36
|
+
const theme = useMemo(() => {
|
|
37
|
+
let baseTheme;
|
|
38
|
+
if (autoDetect) {
|
|
39
|
+
// Auto-detect theme from host page
|
|
40
|
+
baseTheme = autoDetectTheme(effectiveMode === "light" ? lightTheme : darkTheme);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
baseTheme = effectiveMode === "light" ? lightTheme : darkTheme;
|
|
44
|
+
}
|
|
45
|
+
return baseTheme;
|
|
46
|
+
}, [autoDetect, effectiveMode]);
|
|
47
|
+
// Build CSS variables
|
|
48
|
+
const cssVariables = useMemo(() => {
|
|
49
|
+
const vars = themeToCssVariables(theme);
|
|
50
|
+
// Apply user overrides from appearance.variables
|
|
51
|
+
if (appearance === null || appearance === void 0 ? void 0 : appearance.variables) {
|
|
52
|
+
for (const [key, value] of Object.entries(appearance.variables)) {
|
|
53
|
+
if (value) {
|
|
54
|
+
vars[key] = value;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return vars;
|
|
59
|
+
}, [theme, appearance === null || appearance === void 0 ? void 0 : appearance.variables]);
|
|
60
|
+
// Inject CSS variables into shadow root
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
if (!shadowRoot)
|
|
63
|
+
return;
|
|
64
|
+
// Find or create the style element
|
|
65
|
+
let styleEl = shadowRoot.querySelector("#sc-theme-vars");
|
|
66
|
+
if (!styleEl) {
|
|
67
|
+
styleEl = document.createElement("style");
|
|
68
|
+
styleEl.id = "sc-theme-vars";
|
|
69
|
+
shadowRoot.insertBefore(styleEl, shadowRoot.firstChild);
|
|
70
|
+
}
|
|
71
|
+
// Generate CSS
|
|
72
|
+
const cssRules = Object.entries(cssVariables)
|
|
73
|
+
.map(([key, value]) => ` ${key}: ${value};`)
|
|
74
|
+
.join("\n");
|
|
75
|
+
styleEl.textContent = `:host {\n${cssRules}\n}`;
|
|
76
|
+
}, [shadowRoot, cssVariables]);
|
|
77
|
+
const value = {
|
|
78
|
+
theme,
|
|
79
|
+
mode: effectiveMode,
|
|
80
|
+
cssVariables,
|
|
81
|
+
setMode,
|
|
82
|
+
};
|
|
83
|
+
return _jsx(ThemeContext.Provider, { value: value, children: children });
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Hook to access theme context
|
|
87
|
+
*/
|
|
88
|
+
export function useTheme() {
|
|
89
|
+
const context = useContext(ThemeContext);
|
|
90
|
+
if (!context) {
|
|
91
|
+
throw new Error("useTheme must be used within a ThemeProvider");
|
|
92
|
+
}
|
|
93
|
+
return context;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Hook to get specific theme token with CSS variable fallback
|
|
97
|
+
*/
|
|
98
|
+
export function useThemeToken(token) {
|
|
99
|
+
const { theme } = useTheme();
|
|
100
|
+
return theme[token];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Hook to get CSS variable name for a token
|
|
104
|
+
*/
|
|
105
|
+
export function useThemeVar(token) {
|
|
106
|
+
const kebabCase = (str) => str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
|
|
107
|
+
return `var(--sc-${kebabCase(token)})`;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=ThemeProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CanvasThemeTokens } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Default dark theme inspired by macOS Notification Center
|
|
4
|
+
* Uses the Apple HIG color palette with slight adjustments for accessibility
|
|
5
|
+
*/
|
|
6
|
+
export declare const darkTheme: CanvasThemeTokens;
|
|
7
|
+
/**
|
|
8
|
+
* Light theme variant
|
|
9
|
+
*/
|
|
10
|
+
export declare const lightTheme: CanvasThemeTokens;
|
|
11
|
+
/**
|
|
12
|
+
* Get default theme based on mode
|
|
13
|
+
*/
|
|
14
|
+
export declare function getDefaultTheme(mode?: "light" | "dark"): CanvasThemeTokens;
|
|
15
|
+
/**
|
|
16
|
+
* Convert theme tokens to CSS custom properties
|
|
17
|
+
*/
|
|
18
|
+
export declare function themeToCssVariables(theme: CanvasThemeTokens): Record<string, string>;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default dark theme inspired by macOS Notification Center
|
|
3
|
+
* Uses the Apple HIG color palette with slight adjustments for accessibility
|
|
4
|
+
*/
|
|
5
|
+
export const darkTheme = {
|
|
6
|
+
// Brand colors (indigo accent like macOS)
|
|
7
|
+
colorPrimary: "#6366f1",
|
|
8
|
+
colorPrimaryHover: "#818cf8",
|
|
9
|
+
colorPrimaryMuted: "rgba(99, 102, 241, 0.15)",
|
|
10
|
+
// Surface colors (macOS dark mode vibrancy)
|
|
11
|
+
colorBackground: "rgba(28, 28, 30, 0.95)",
|
|
12
|
+
colorBackgroundElevated: "rgba(44, 44, 46, 0.95)",
|
|
13
|
+
colorBackgroundSubtle: "rgba(0, 0, 0, 0.2)",
|
|
14
|
+
colorSurface: "rgba(58, 58, 60, 0.8)",
|
|
15
|
+
colorSurfaceHover: "rgba(72, 72, 74, 0.8)",
|
|
16
|
+
// Text colors
|
|
17
|
+
colorText: "#f5f5f7",
|
|
18
|
+
colorTextSecondary: "#a1a1a6",
|
|
19
|
+
colorTextMuted: "#8e8e93",
|
|
20
|
+
colorTextInverse: "#1c1c1e",
|
|
21
|
+
// Border colors
|
|
22
|
+
colorBorder: "rgba(255, 255, 255, 0.12)",
|
|
23
|
+
colorBorderSubtle: "rgba(255, 255, 255, 0.06)",
|
|
24
|
+
// Semantic colors
|
|
25
|
+
colorSuccess: "#34c759",
|
|
26
|
+
colorSuccessMuted: "rgba(52, 199, 89, 0.15)",
|
|
27
|
+
colorWarning: "#ff9f0a",
|
|
28
|
+
colorWarningMuted: "rgba(255, 159, 10, 0.15)",
|
|
29
|
+
colorError: "#ff453a",
|
|
30
|
+
colorErrorMuted: "rgba(255, 69, 58, 0.15)",
|
|
31
|
+
colorInfo: "#0a84ff",
|
|
32
|
+
colorInfoMuted: "rgba(10, 132, 255, 0.15)",
|
|
33
|
+
// Typography (SF Pro stack)
|
|
34
|
+
fontFamily: "-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, sans-serif",
|
|
35
|
+
fontFamilyMono: "'SF Mono', 'Fira Code', Consolas, monospace",
|
|
36
|
+
fontSizeXs: "0.7rem",
|
|
37
|
+
fontSizeSm: "0.8rem",
|
|
38
|
+
fontSizeMd: "0.9rem",
|
|
39
|
+
fontSizeLg: "1rem",
|
|
40
|
+
fontSizeXl: "1.25rem",
|
|
41
|
+
fontSizeXxl: "1.5rem",
|
|
42
|
+
fontWeightNormal: "400",
|
|
43
|
+
fontWeightMedium: "500",
|
|
44
|
+
fontWeightSemibold: "600",
|
|
45
|
+
fontWeightBold: "700",
|
|
46
|
+
lineHeightTight: "1.25",
|
|
47
|
+
lineHeightNormal: "1.5",
|
|
48
|
+
lineHeightRelaxed: "1.75",
|
|
49
|
+
// Spacing
|
|
50
|
+
spacingXs: "0.25rem",
|
|
51
|
+
spacingSm: "0.5rem",
|
|
52
|
+
spacingMd: "0.75rem",
|
|
53
|
+
spacingLg: "1rem",
|
|
54
|
+
spacingXl: "1.5rem",
|
|
55
|
+
// Border radius (macOS rounded corners)
|
|
56
|
+
borderRadiusSm: "6px",
|
|
57
|
+
borderRadiusMd: "10px",
|
|
58
|
+
borderRadiusLg: "14px",
|
|
59
|
+
borderRadiusXl: "20px",
|
|
60
|
+
borderRadiusFull: "9999px",
|
|
61
|
+
// Shadows
|
|
62
|
+
shadowSm: "0 1px 2px rgba(0, 0, 0, 0.2)",
|
|
63
|
+
shadowMd: "0 2px 12px rgba(0, 0, 0, 0.3)",
|
|
64
|
+
shadowLg: "0 8px 24px rgba(0, 0, 0, 0.4)",
|
|
65
|
+
shadowXl: "0 16px 48px rgba(0, 0, 0, 0.5)",
|
|
66
|
+
// Backdrop effects
|
|
67
|
+
backdropBlur: "blur(20px)",
|
|
68
|
+
backdropSaturate: "saturate(180%)",
|
|
69
|
+
// Animation
|
|
70
|
+
transitionFast: "0.1s ease",
|
|
71
|
+
transitionNormal: "0.25s ease",
|
|
72
|
+
transitionSlow: "0.4s ease",
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Light theme variant
|
|
76
|
+
*/
|
|
77
|
+
export const lightTheme = {
|
|
78
|
+
// Brand colors
|
|
79
|
+
colorPrimary: "#5856d6",
|
|
80
|
+
colorPrimaryHover: "#6366f1",
|
|
81
|
+
colorPrimaryMuted: "rgba(88, 86, 214, 0.1)",
|
|
82
|
+
// Surface colors
|
|
83
|
+
colorBackground: "rgba(255, 255, 255, 0.95)",
|
|
84
|
+
colorBackgroundElevated: "rgba(242, 242, 247, 0.95)",
|
|
85
|
+
colorBackgroundSubtle: "rgba(0, 0, 0, 0.02)",
|
|
86
|
+
colorSurface: "rgba(229, 229, 234, 0.6)",
|
|
87
|
+
colorSurfaceHover: "rgba(209, 209, 214, 0.6)",
|
|
88
|
+
// Text colors
|
|
89
|
+
colorText: "#1c1c1e",
|
|
90
|
+
colorTextSecondary: "#636366",
|
|
91
|
+
colorTextMuted: "#8e8e93",
|
|
92
|
+
colorTextInverse: "#f5f5f7",
|
|
93
|
+
// Border colors
|
|
94
|
+
colorBorder: "rgba(0, 0, 0, 0.12)",
|
|
95
|
+
colorBorderSubtle: "rgba(0, 0, 0, 0.06)",
|
|
96
|
+
// Semantic colors (slightly adjusted for light mode)
|
|
97
|
+
colorSuccess: "#34c759",
|
|
98
|
+
colorSuccessMuted: "rgba(52, 199, 89, 0.12)",
|
|
99
|
+
colorWarning: "#ff9500",
|
|
100
|
+
colorWarningMuted: "rgba(255, 149, 0, 0.12)",
|
|
101
|
+
colorError: "#ff3b30",
|
|
102
|
+
colorErrorMuted: "rgba(255, 59, 48, 0.12)",
|
|
103
|
+
colorInfo: "#007aff",
|
|
104
|
+
colorInfoMuted: "rgba(0, 122, 255, 0.12)",
|
|
105
|
+
// Typography (same as dark)
|
|
106
|
+
fontFamily: "-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, sans-serif",
|
|
107
|
+
fontFamilyMono: "'SF Mono', 'Fira Code', Consolas, monospace",
|
|
108
|
+
fontSizeXs: "0.7rem",
|
|
109
|
+
fontSizeSm: "0.8rem",
|
|
110
|
+
fontSizeMd: "0.9rem",
|
|
111
|
+
fontSizeLg: "1rem",
|
|
112
|
+
fontSizeXl: "1.25rem",
|
|
113
|
+
fontSizeXxl: "1.5rem",
|
|
114
|
+
fontWeightNormal: "400",
|
|
115
|
+
fontWeightMedium: "500",
|
|
116
|
+
fontWeightSemibold: "600",
|
|
117
|
+
fontWeightBold: "700",
|
|
118
|
+
lineHeightTight: "1.25",
|
|
119
|
+
lineHeightNormal: "1.5",
|
|
120
|
+
lineHeightRelaxed: "1.75",
|
|
121
|
+
// Spacing (same as dark)
|
|
122
|
+
spacingXs: "0.25rem",
|
|
123
|
+
spacingSm: "0.5rem",
|
|
124
|
+
spacingMd: "0.75rem",
|
|
125
|
+
spacingLg: "1rem",
|
|
126
|
+
spacingXl: "1.5rem",
|
|
127
|
+
// Border radius (same as dark)
|
|
128
|
+
borderRadiusSm: "6px",
|
|
129
|
+
borderRadiusMd: "10px",
|
|
130
|
+
borderRadiusLg: "14px",
|
|
131
|
+
borderRadiusXl: "20px",
|
|
132
|
+
borderRadiusFull: "9999px",
|
|
133
|
+
// Shadows (lighter for light mode)
|
|
134
|
+
shadowSm: "0 1px 2px rgba(0, 0, 0, 0.08)",
|
|
135
|
+
shadowMd: "0 2px 12px rgba(0, 0, 0, 0.12)",
|
|
136
|
+
shadowLg: "0 8px 24px rgba(0, 0, 0, 0.16)",
|
|
137
|
+
shadowXl: "0 16px 48px rgba(0, 0, 0, 0.2)",
|
|
138
|
+
// Backdrop effects
|
|
139
|
+
backdropBlur: "blur(20px)",
|
|
140
|
+
backdropSaturate: "saturate(180%)",
|
|
141
|
+
// Animation
|
|
142
|
+
transitionFast: "0.1s ease",
|
|
143
|
+
transitionNormal: "0.25s ease",
|
|
144
|
+
transitionSlow: "0.4s ease",
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Get default theme based on mode
|
|
148
|
+
*/
|
|
149
|
+
export function getDefaultTheme(mode = "dark") {
|
|
150
|
+
return mode === "light" ? lightTheme : darkTheme;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Convert theme tokens to CSS custom properties
|
|
154
|
+
*/
|
|
155
|
+
export function themeToCssVariables(theme) {
|
|
156
|
+
const kebabCase = (str) => str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
|
|
157
|
+
const variables = {};
|
|
158
|
+
for (const [key, value] of Object.entries(theme)) {
|
|
159
|
+
variables[`--sc-${kebabCase(key)}`] = value;
|
|
160
|
+
}
|
|
161
|
+
return variables;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=defaultTheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultTheme.js","sourceRoot":"","sources":["../../src/theme/defaultTheme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ExtractedTheme, CanvasThemeTokens } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Extract theme information from the host page
|
|
4
|
+
*/
|
|
5
|
+
export declare function extractHostTheme(): ExtractedTheme;
|
|
6
|
+
/**
|
|
7
|
+
* Merge extracted theme with default theme tokens
|
|
8
|
+
*/
|
|
9
|
+
export declare function mergeWithExtractedTheme(extracted: ExtractedTheme, baseTheme?: CanvasThemeTokens): CanvasThemeTokens;
|
|
10
|
+
/**
|
|
11
|
+
* Auto-detect and extract theme from host page
|
|
12
|
+
* Returns merged theme tokens ready to use
|
|
13
|
+
*/
|
|
14
|
+
export declare function autoDetectTheme(baseTheme?: CanvasThemeTokens): CanvasThemeTokens;
|