@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.
Files changed (144) hide show
  1. package/CAPABILITIES.md +400 -0
  2. package/dist/SmartCanvasApp.js +28 -10
  3. package/dist/SmartCanvasApp.js.map +1 -1
  4. package/dist/api.d.ts +23 -0
  5. package/dist/api.js +23 -5
  6. package/dist/api.js.map +1 -1
  7. package/dist/blocks/data/ComparisonBlock.d.ts +10 -0
  8. package/dist/blocks/data/ComparisonBlock.js +92 -0
  9. package/dist/blocks/data/ComparisonBlock.js.map +1 -0
  10. package/dist/blocks/data/StatsBlock.d.ts +10 -0
  11. package/dist/blocks/data/StatsBlock.js +103 -0
  12. package/dist/blocks/data/StatsBlock.js.map +1 -0
  13. package/dist/blocks/data/index.d.ts +2 -0
  14. package/dist/blocks/data/index.js +3 -0
  15. package/dist/blocks/data/index.js.map +1 -0
  16. package/dist/blocks/index.d.ts +26 -0
  17. package/dist/blocks/index.js +94 -0
  18. package/dist/blocks/index.js.map +1 -0
  19. package/dist/blocks/interactive/ChecklistBlock.d.ts +11 -0
  20. package/dist/blocks/interactive/ChecklistBlock.js +110 -0
  21. package/dist/blocks/interactive/ChecklistBlock.js.map +1 -0
  22. package/dist/blocks/interactive/RatingBlock.d.ts +11 -0
  23. package/dist/blocks/interactive/RatingBlock.js +131 -0
  24. package/dist/blocks/interactive/RatingBlock.js.map +1 -0
  25. package/dist/blocks/interactive/index.d.ts +2 -0
  26. package/dist/blocks/interactive/index.js +3 -0
  27. package/dist/blocks/interactive/index.js.map +1 -0
  28. package/dist/blocks/notification/NotificationBlock.d.ts +26 -0
  29. package/dist/blocks/notification/NotificationBlock.js +166 -0
  30. package/dist/blocks/notification/NotificationBlock.js.map +1 -0
  31. package/dist/blocks/notification/index.d.ts +1 -0
  32. package/dist/blocks/notification/index.js +2 -0
  33. package/dist/blocks/notification/index.js.map +1 -0
  34. package/dist/bootstrap.d.ts +19 -1
  35. package/dist/bootstrap.js +118 -17
  36. package/dist/bootstrap.js.map +1 -1
  37. package/dist/components/ShadowCanvasOverlay.d.ts +12 -3
  38. package/dist/components/ShadowCanvasOverlay.js +75 -24
  39. package/dist/components/ShadowCanvasOverlay.js.map +1 -1
  40. package/dist/components/{RectangleCard.d.ts → TileCard.d.ts} +4 -4
  41. package/dist/components/{RectangleCard.js → TileCard.js} +57 -6
  42. package/dist/components/TileCard.js.map +1 -0
  43. package/dist/components/TileWheel.d.ts +8 -0
  44. package/dist/components/{RectangleWheel.js → TileWheel.js} +7 -7
  45. package/dist/components/TileWheel.js.map +1 -0
  46. package/dist/configFetcher.js.map +1 -1
  47. package/dist/earlyPatcher.js +1 -2
  48. package/dist/earlyPatcher.js.map +1 -1
  49. package/dist/editorLoader.js +74 -17
  50. package/dist/editorLoader.js.map +1 -1
  51. package/dist/experiments/adapters/growthbook.d.ts +18 -2
  52. package/dist/experiments/adapters/growthbook.js +17 -3
  53. package/dist/experiments/adapters/growthbook.js.map +1 -1
  54. package/dist/experiments/registry.d.ts +18 -4
  55. package/dist/experiments/registry.js +1 -1
  56. package/dist/experiments/registry.js.map +1 -1
  57. package/dist/experiments/types.d.ts +8 -3
  58. package/dist/fetchers/cdnFetcher.js.map +1 -1
  59. package/dist/fetchers/experimentsFetcher.js +20 -0
  60. package/dist/fetchers/experimentsFetcher.js.map +1 -1
  61. package/dist/fetchers/types.d.ts +2 -2
  62. package/dist/hooks/useCanvasOverlays.d.ts +5 -1
  63. package/dist/hooks/useCanvasOverlays.js +33 -13
  64. package/dist/hooks/useCanvasOverlays.js.map +1 -1
  65. package/dist/hooks/useShadowCanvasConfig.d.ts +9 -2
  66. package/dist/hooks/useShadowCanvasConfig.js +8 -8
  67. package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
  68. package/dist/hostPatcher/core/patcher.js +14 -15
  69. package/dist/hostPatcher/core/patcher.js.map +1 -1
  70. package/dist/hostPatcher/core/sanitizer.js +1 -1
  71. package/dist/hostPatcher/core/sanitizer.js.map +1 -1
  72. package/dist/hostPatcher/core/types.d.ts +8 -9
  73. package/dist/hostPatcher/policy/defaultPolicy.d.ts +4 -0
  74. package/dist/hostPatcher/policy/defaultPolicy.js +9 -37
  75. package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
  76. package/dist/hostPatcher/utils/anchors.js +3 -3
  77. package/dist/hostPatcher/utils/anchors.js.map +1 -1
  78. package/dist/index.d.ts +2 -2
  79. package/dist/index.js +2 -2
  80. package/dist/index.js.map +1 -1
  81. package/dist/overlays/recipeRegistry.d.ts +14 -0
  82. package/dist/overlays/recipeRegistry.js +32 -0
  83. package/dist/overlays/recipeRegistry.js.map +1 -0
  84. package/dist/overlays/runtime/index.d.ts +1 -0
  85. package/dist/overlays/runtime/index.js +1 -0
  86. package/dist/overlays/runtime/index.js.map +1 -1
  87. package/dist/overlays/runtime/overlay/modal.d.ts +11 -0
  88. package/dist/overlays/runtime/overlay/modal.js +78 -0
  89. package/dist/overlays/runtime/overlay/modal.js.map +1 -0
  90. package/dist/overlays/runtime/overlay/root.js +132 -0
  91. package/dist/overlays/runtime/overlay/root.js.map +1 -1
  92. package/dist/overlays/runtime/overlay/runner.d.ts +2 -0
  93. package/dist/overlays/runtime/overlay/runner.js +441 -2
  94. package/dist/overlays/runtime/overlay/runner.js.map +1 -1
  95. package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -0
  96. package/dist/overlays/runtime/overlay/tooltip.js +61 -1
  97. package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
  98. package/dist/overlays/schema.d.ts +6 -6
  99. package/dist/overlays/types.d.ts +55 -1
  100. package/dist/react.d.ts +6 -1
  101. package/dist/react.js +31 -9
  102. package/dist/react.js.map +1 -1
  103. package/dist/render/RenderContext.d.ts +39 -0
  104. package/dist/render/RenderContext.js +67 -0
  105. package/dist/render/RenderContext.js.map +1 -0
  106. package/dist/render/index.d.ts +3 -0
  107. package/dist/render/index.js +3 -0
  108. package/dist/render/index.js.map +1 -0
  109. package/dist/render/types.d.ts +81 -0
  110. package/dist/render/types.js +2 -0
  111. package/dist/render/types.js.map +1 -0
  112. package/dist/smart-canvas.esm.js +192 -25
  113. package/dist/smart-canvas.esm.js.map +4 -4
  114. package/dist/smart-canvas.js +25962 -26846
  115. package/dist/smart-canvas.js.map +4 -4
  116. package/dist/smart-canvas.min.js +192 -25
  117. package/dist/smart-canvas.min.js.map +4 -4
  118. package/dist/telemetry/adapters/posthog.d.ts +6 -0
  119. package/dist/telemetry/adapters/posthog.js +48 -0
  120. package/dist/telemetry/adapters/posthog.js.map +1 -1
  121. package/dist/telemetry/types.d.ts +30 -0
  122. package/dist/theme/ThemeProvider.d.ts +31 -0
  123. package/dist/theme/ThemeProvider.js +109 -0
  124. package/dist/theme/ThemeProvider.js.map +1 -0
  125. package/dist/theme/defaultTheme.d.ts +18 -0
  126. package/dist/theme/defaultTheme.js +163 -0
  127. package/dist/theme/defaultTheme.js.map +1 -0
  128. package/dist/theme/extractHostTheme.d.ts +14 -0
  129. package/dist/theme/extractHostTheme.js +261 -0
  130. package/dist/theme/extractHostTheme.js.map +1 -0
  131. package/dist/theme/index.d.ts +5 -0
  132. package/dist/theme/index.js +7 -0
  133. package/dist/theme/index.js.map +1 -0
  134. package/dist/theme/types.d.ts +91 -0
  135. package/dist/theme/types.js +6 -0
  136. package/dist/theme/types.js.map +1 -0
  137. package/dist/token.d.ts +4 -0
  138. package/dist/token.js.map +1 -1
  139. package/dist/types.d.ts +228 -47
  140. package/package.json +8 -4
  141. package/schema/canvas-config.schema.json +24 -15
  142. package/dist/components/RectangleCard.js.map +0 -1
  143. package/dist/components/RectangleWheel.d.ts +0 -8
  144. 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;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,EAAU,EAAE,KAAkB;;QACrC,MAAA,IAAI,CAAC,MAAM,0CAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,EAAU,EAAE,OAAe;;QAC/B,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,SAAiB,EAAE,OAAgC;;QACvD,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,iBAAiB,CAAC,OAAsB;QACtC,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,iBAAiB,CAAC,OAAsB;QACtC,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,oBAAoB,CAAC,WAAmB,EAAE,OAAsB;QAC9D,IAAI,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,WAAmB,EAAE,OAAsB;QACrE,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAiC,EAAE;IAEnC,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
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;