@syntrologie/runtime-sdk 0.2.1 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -0,0 +1,131 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ /**
4
+ * Star rating variant
5
+ */
6
+ function StarRating({ value, maxValue, onChange, color, }) {
7
+ const [hovered, setHovered] = useState(null);
8
+ return (_jsx("div", { style: { display: "flex", gap: "4px" }, children: Array.from({ length: maxValue }, (_, i) => {
9
+ var _a;
10
+ const starValue = i + 1;
11
+ const isFilled = ((_a = hovered !== null && hovered !== void 0 ? hovered : value) !== null && _a !== void 0 ? _a : 0) >= starValue;
12
+ return (_jsx("button", { onClick: () => onChange(starValue), onMouseEnter: () => setHovered(starValue), onMouseLeave: () => setHovered(null), style: {
13
+ width: "28px",
14
+ height: "28px",
15
+ padding: 0,
16
+ border: "none",
17
+ background: "none",
18
+ cursor: "pointer",
19
+ color: isFilled ? color : "var(--sc-color-text-muted, #8e8e93)",
20
+ transition: "color 0.15s ease, transform 0.1s ease",
21
+ transform: hovered === starValue ? "scale(1.15)" : "scale(1)",
22
+ }, "aria-label": `Rate ${starValue} out of ${maxValue}`, children: _jsx("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: isFilled ? "currentColor" : "none", children: _jsx("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z", stroke: "currentColor", strokeWidth: "1.5", strokeLinejoin: "round" }) }) }, i));
23
+ }) }));
24
+ }
25
+ /**
26
+ * Thumbs up/down variant
27
+ */
28
+ function ThumbsRating({ value, onChange, color, }) {
29
+ const buttonStyle = (isSelected) => ({
30
+ width: "48px",
31
+ height: "48px",
32
+ padding: "8px",
33
+ border: "none",
34
+ borderRadius: "var(--sc-border-radius-md, 10px)",
35
+ background: isSelected ? color : "var(--sc-color-surface, rgba(58, 58, 60, 0.8))",
36
+ cursor: "pointer",
37
+ color: isSelected ? "white" : "var(--sc-color-text-muted, #8e8e93)",
38
+ transition: "all 0.15s ease",
39
+ });
40
+ return (_jsxs("div", { style: { display: "flex", gap: "12px" }, children: [_jsx("button", { onClick: () => onChange(1), style: buttonStyle(value === 1), "aria-label": "Thumbs up", children: _jsx("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3H14zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", fill: value === 1 ? "currentColor" : "none" }) }) }), _jsx("button", { onClick: () => onChange(0), style: buttonStyle(value === 0), "aria-label": "Thumbs down", children: _jsx("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", style: { transform: "rotate(180deg)" }, children: _jsx("path", { d: "M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3H14zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", fill: value === 0 ? "currentColor" : "none" }) }) })] }));
41
+ }
42
+ /**
43
+ * NPS (0-10) rating variant
44
+ */
45
+ function NpsRating({ value, maxValue, onChange, color, }) {
46
+ return (_jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sc-spacing-sm, 0.5rem)" }, children: [_jsx("div", { style: { display: "flex", gap: "4px", justifyContent: "center" }, children: Array.from({ length: maxValue + 1 }, (_, i) => {
47
+ const isSelected = value === i;
48
+ return (_jsx("button", { onClick: () => onChange(i), style: {
49
+ width: "28px",
50
+ height: "32px",
51
+ padding: 0,
52
+ border: isSelected ? `2px solid ${color}` : "1px solid var(--sc-color-border, rgba(255, 255, 255, 0.12))",
53
+ borderRadius: "var(--sc-border-radius-sm, 6px)",
54
+ background: isSelected ? color : "var(--sc-color-surface, rgba(58, 58, 60, 0.8))",
55
+ cursor: "pointer",
56
+ color: isSelected ? "white" : "var(--sc-color-text, #f5f5f7)",
57
+ fontSize: "var(--sc-font-size-sm, 0.8rem)",
58
+ fontWeight: "var(--sc-font-weight-medium, 500)",
59
+ transition: "all 0.15s ease",
60
+ }, "aria-label": `Rate ${i}`, children: i }, i));
61
+ }) }), _jsxs("div", { style: { display: "flex", justifyContent: "space-between", padding: "0 2px" }, children: [_jsx("span", { style: { fontSize: "var(--sc-font-size-xs, 0.7rem)", color: "var(--sc-color-text-muted, #8e8e93)" }, children: "Not likely" }), _jsx("span", { style: { fontSize: "var(--sc-font-size-xs, 0.7rem)", color: "var(--sc-color-text-muted, #8e8e93)" }, children: "Very likely" })] })] }));
62
+ }
63
+ /**
64
+ * Emoji rating variant
65
+ */
66
+ function EmojiRating({ value, onChange, color, }) {
67
+ const emojis = ["😢", "😕", "😐", "🙂", "😄"];
68
+ return (_jsx("div", { style: { display: "flex", gap: "8px", justifyContent: "center" }, children: emojis.map((emoji, i) => {
69
+ const isSelected = value === i;
70
+ return (_jsx("button", { onClick: () => onChange(i), style: {
71
+ width: "44px",
72
+ height: "44px",
73
+ padding: 0,
74
+ border: isSelected ? `2px solid ${color}` : "1px solid transparent",
75
+ borderRadius: "var(--sc-border-radius-md, 10px)",
76
+ background: isSelected ? "var(--sc-color-primary-muted, rgba(99, 102, 241, 0.15))" : "transparent",
77
+ cursor: "pointer",
78
+ fontSize: "1.75rem",
79
+ transition: "all 0.15s ease",
80
+ transform: isSelected ? "scale(1.1)" : "scale(1)",
81
+ }, "aria-label": `Rate ${i + 1} out of 5`, children: emoji }, i));
82
+ }) }));
83
+ }
84
+ /**
85
+ * Rating block component
86
+ */
87
+ export function RatingBlock({ content, onSubmit, accentColor }) {
88
+ var _a;
89
+ const [value, setValue] = useState(null);
90
+ const [submitted, setSubmitted] = useState(false);
91
+ const primaryColor = accentColor || "var(--sc-color-primary, #6366f1)";
92
+ const maxValue = (_a = content.maxValue) !== null && _a !== void 0 ? _a : (content.variant === "nps" ? 10 : 5);
93
+ const handleChange = (v) => {
94
+ setValue(v);
95
+ };
96
+ const handleSubmit = () => {
97
+ if (value !== null) {
98
+ setSubmitted(true);
99
+ onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(value);
100
+ }
101
+ };
102
+ const containerStyle = {
103
+ display: "flex",
104
+ flexDirection: "column",
105
+ gap: "var(--sc-spacing-md, 0.75rem)",
106
+ padding: "var(--sc-spacing-sm, 0.5rem) 0",
107
+ alignItems: "center",
108
+ };
109
+ const questionStyle = {
110
+ fontSize: "var(--sc-font-size-md, 0.9rem)",
111
+ color: "var(--sc-color-text, #f5f5f7)",
112
+ textAlign: "center",
113
+ margin: 0,
114
+ };
115
+ if (submitted) {
116
+ return (_jsxs("div", { style: { ...containerStyle, padding: "var(--sc-spacing-lg, 1rem)" }, children: [_jsx("span", { style: { fontSize: "2rem" }, children: "\u2713" }), _jsx("p", { style: { ...questionStyle, color: "var(--sc-color-success, #34c759)" }, children: "Thanks for your feedback!" })] }));
117
+ }
118
+ return (_jsxs("div", { style: containerStyle, children: [content.question && _jsx("p", { style: questionStyle, children: content.question }), content.variant === "stars" && (_jsx(StarRating, { value: value, maxValue: maxValue, onChange: handleChange, color: primaryColor })), content.variant === "thumbs" && (_jsx(ThumbsRating, { value: value, onChange: handleChange, color: primaryColor })), content.variant === "nps" && (_jsx(NpsRating, { value: value, maxValue: maxValue, onChange: handleChange, color: primaryColor })), content.variant === "emoji" && (_jsx(EmojiRating, { value: value, onChange: handleChange, color: primaryColor })), value !== null && content.submitActionId && (_jsx("button", { onClick: handleSubmit, style: {
119
+ marginTop: "var(--sc-spacing-sm, 0.5rem)",
120
+ padding: "var(--sc-spacing-sm, 0.5rem) var(--sc-spacing-lg, 1rem)",
121
+ borderRadius: "var(--sc-border-radius-sm, 6px)",
122
+ border: "none",
123
+ background: primaryColor,
124
+ color: "white",
125
+ fontSize: "var(--sc-font-size-sm, 0.8rem)",
126
+ fontWeight: "var(--sc-font-weight-semibold, 600)",
127
+ cursor: "pointer",
128
+ transition: "opacity 0.15s ease",
129
+ }, children: "Submit" }))] }));
130
+ }
131
+ //# sourceMappingURL=RatingBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RatingBlock.js","sourceRoot":"","sources":["../../../src/blocks/interactive/RatingBlock.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { RatingBlock } from "./RatingBlock";
2
+ export { ChecklistBlock } from "./ChecklistBlock";
@@ -0,0 +1,3 @@
1
+ export { RatingBlock } from "./RatingBlock";
2
+ export { ChecklistBlock } from "./ChecklistBlock";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/blocks/interactive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { AlertContent, SuccessContent, WarningContent, InfoContent, ErrorContent, NotificationContent } from "../../types";
2
+ interface NotificationBlockProps {
3
+ content: NotificationContent;
4
+ onDismiss?: () => void;
5
+ accentColor?: string;
6
+ }
7
+ /**
8
+ * Main notification block component
9
+ */
10
+ export declare function NotificationBlock({ content, onDismiss, accentColor, }: NotificationBlockProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function SuccessBlock({ content, ...props }: {
12
+ content: SuccessContent;
13
+ } & Omit<NotificationBlockProps, 'content'>): import("react/jsx-runtime").JSX.Element;
14
+ export declare function WarningBlock({ content, ...props }: {
15
+ content: WarningContent;
16
+ } & Omit<NotificationBlockProps, 'content'>): import("react/jsx-runtime").JSX.Element;
17
+ export declare function ErrorBlock({ content, ...props }: {
18
+ content: ErrorContent;
19
+ } & Omit<NotificationBlockProps, 'content'>): import("react/jsx-runtime").JSX.Element;
20
+ export declare function InfoBlock({ content, ...props }: {
21
+ content: InfoContent;
22
+ } & Omit<NotificationBlockProps, 'content'>): import("react/jsx-runtime").JSX.Element;
23
+ export declare function AlertBlock({ content, ...props }: {
24
+ content: AlertContent;
25
+ } & Omit<NotificationBlockProps, 'content'>): import("react/jsx-runtime").JSX.Element;
26
+ export {};
@@ -0,0 +1,166 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ /**
4
+ * Icon components for each notification type
5
+ */
6
+ const Icons = {
7
+ success: () => (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: [_jsx("circle", { cx: "10", cy: "10", r: "9", stroke: "currentColor", strokeWidth: "1.5" }), _jsx("path", { d: "M6 10l2.5 2.5L14 7", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })] })),
8
+ warning: () => (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: [_jsx("path", { d: "M10 2L18 17H2L10 2Z", stroke: "currentColor", strokeWidth: "1.5", strokeLinejoin: "round" }), _jsx("path", { d: "M10 8v4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "14", r: "0.75", fill: "currentColor" })] })),
9
+ error: () => (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: [_jsx("circle", { cx: "10", cy: "10", r: "9", stroke: "currentColor", strokeWidth: "1.5" }), _jsx("path", { d: "M7 7l6 6M13 7l-6 6", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })] })),
10
+ info: () => (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: [_jsx("circle", { cx: "10", cy: "10", r: "9", stroke: "currentColor", strokeWidth: "1.5" }), _jsx("path", { d: "M10 9v5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "6", r: "0.75", fill: "currentColor" })] })),
11
+ alert: () => (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: [_jsx("circle", { cx: "10", cy: "10", r: "9", stroke: "currentColor", strokeWidth: "1.5" }), _jsx("path", { d: "M10 5v6", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }), _jsx("circle", { cx: "10", cy: "14", r: "0.75", fill: "currentColor" })] })),
12
+ };
13
+ /**
14
+ * Dismiss X button
15
+ */
16
+ function DismissButton({ onClick, color }) {
17
+ return (_jsx("button", { onClick: (e) => {
18
+ e.stopPropagation();
19
+ onClick();
20
+ }, style: {
21
+ position: "absolute",
22
+ top: "8px",
23
+ right: "8px",
24
+ width: "20px",
25
+ height: "20px",
26
+ padding: 0,
27
+ border: "none",
28
+ background: "rgba(255, 255, 255, 0.1)",
29
+ borderRadius: "50%",
30
+ cursor: "pointer",
31
+ display: "flex",
32
+ alignItems: "center",
33
+ justifyContent: "center",
34
+ color: color,
35
+ opacity: 0.6,
36
+ transition: "opacity 0.15s ease",
37
+ }, onMouseEnter: (e) => { e.currentTarget.style.opacity = "1"; }, onMouseLeave: (e) => { e.currentTarget.style.opacity = "0.6"; }, "aria-label": "Dismiss", children: _jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", children: _jsx("path", { d: "M1 1l8 8M9 1l-8 8", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) }));
38
+ }
39
+ /**
40
+ * Get semantic color based on notification type
41
+ */
42
+ function getSemanticColors(type) {
43
+ const colors = {
44
+ success: {
45
+ bg: "var(--sc-color-success-muted, rgba(52, 199, 89, 0.15))",
46
+ border: "var(--sc-color-success, #34c759)",
47
+ icon: "var(--sc-color-success, #34c759)",
48
+ text: "var(--sc-color-text, #f5f5f7)",
49
+ },
50
+ warning: {
51
+ bg: "var(--sc-color-warning-muted, rgba(255, 159, 10, 0.15))",
52
+ border: "var(--sc-color-warning, #ff9f0a)",
53
+ icon: "var(--sc-color-warning, #ff9f0a)",
54
+ text: "var(--sc-color-text, #f5f5f7)",
55
+ },
56
+ error: {
57
+ bg: "var(--sc-color-error-muted, rgba(255, 69, 58, 0.15))",
58
+ border: "var(--sc-color-error, #ff453a)",
59
+ icon: "var(--sc-color-error, #ff453a)",
60
+ text: "var(--sc-color-text, #f5f5f7)",
61
+ },
62
+ info: {
63
+ bg: "var(--sc-color-info-muted, rgba(10, 132, 255, 0.15))",
64
+ border: "var(--sc-color-info, #0a84ff)",
65
+ icon: "var(--sc-color-info, #0a84ff)",
66
+ text: "var(--sc-color-text, #f5f5f7)",
67
+ },
68
+ alert: {
69
+ bg: "var(--sc-color-primary-muted, rgba(99, 102, 241, 0.15))",
70
+ border: "var(--sc-color-primary, #6366f1)",
71
+ icon: "var(--sc-color-primary, #6366f1)",
72
+ text: "var(--sc-color-text, #f5f5f7)",
73
+ },
74
+ };
75
+ return colors[type] || colors.info;
76
+ }
77
+ /**
78
+ * Main notification block component
79
+ */
80
+ export function NotificationBlock({ content, onDismiss, accentColor, }) {
81
+ var _a;
82
+ const [isDismissed, setIsDismissed] = useState(false);
83
+ const [countdown, setCountdown] = useState(content.type === "warning" ? (_a = content.countdown) !== null && _a !== void 0 ? _a : null : null);
84
+ // Countdown timer for warnings
85
+ useEffect(() => {
86
+ if (countdown === null || countdown <= 0)
87
+ return;
88
+ const timer = setInterval(() => {
89
+ setCountdown((prev) => (prev !== null && prev > 0 ? prev - 1 : null));
90
+ }, 1000);
91
+ return () => clearInterval(timer);
92
+ }, [countdown]);
93
+ const handleDismiss = () => {
94
+ setIsDismissed(true);
95
+ setTimeout(() => onDismiss === null || onDismiss === void 0 ? void 0 : onDismiss(), 200); // Wait for animation
96
+ };
97
+ const colors = getSemanticColors(content.type);
98
+ const Icon = Icons[content.type];
99
+ const containerStyle = {
100
+ position: "relative",
101
+ padding: "var(--sc-spacing-md, 0.75rem)",
102
+ borderRadius: "var(--sc-border-radius-md, 10px)",
103
+ background: colors.bg,
104
+ borderLeft: `3px solid ${colors.border}`,
105
+ opacity: isDismissed ? 0 : 1,
106
+ transform: isDismissed ? "translateX(10px)" : "translateX(0)",
107
+ transition: "opacity 0.2s ease, transform 0.2s ease",
108
+ };
109
+ const headerStyle = {
110
+ display: "flex",
111
+ alignItems: "flex-start",
112
+ gap: "var(--sc-spacing-sm, 0.5rem)",
113
+ };
114
+ const iconStyle = {
115
+ color: colors.icon,
116
+ flexShrink: 0,
117
+ marginTop: "1px",
118
+ };
119
+ const contentStyle = {
120
+ flex: 1,
121
+ minWidth: 0,
122
+ paddingRight: content.dismissible ? "24px" : 0,
123
+ };
124
+ const titleStyle = {
125
+ fontSize: "var(--sc-font-size-md, 0.9rem)",
126
+ fontWeight: "var(--sc-font-weight-semibold, 600)",
127
+ color: colors.text,
128
+ margin: 0,
129
+ lineHeight: "var(--sc-line-height-tight, 1.25)",
130
+ };
131
+ const bodyStyle = {
132
+ fontSize: "var(--sc-font-size-sm, 0.8rem)",
133
+ color: "var(--sc-color-text-secondary, #a1a1a6)",
134
+ margin: "var(--sc-spacing-xs, 0.25rem) 0 0",
135
+ lineHeight: "var(--sc-line-height-normal, 1.5)",
136
+ };
137
+ const timestampStyle = {
138
+ fontSize: "var(--sc-font-size-xs, 0.7rem)",
139
+ color: "var(--sc-color-text-muted, #8e8e93)",
140
+ marginTop: "var(--sc-spacing-sm, 0.5rem)",
141
+ };
142
+ return (_jsxs("div", { style: containerStyle, children: [_jsxs("div", { style: headerStyle, children: [_jsx("div", { style: iconStyle, children: _jsx(Icon, {}) }), _jsxs("div", { style: contentStyle, children: [_jsx("h4", { style: titleStyle, children: content.title }), content.body && _jsx("p", { style: bodyStyle, children: content.body }), content.type === "error" && content.errorCode && (_jsxs("p", { style: { ...bodyStyle, fontFamily: "var(--sc-font-family-mono, monospace)" }, children: ["Code: ", content.errorCode] })), content.type === "info" && content.learnMoreUrl && (_jsx("a", { href: content.learnMoreUrl, target: "_blank", rel: "noopener noreferrer", style: {
143
+ display: "inline-block",
144
+ marginTop: "var(--sc-spacing-sm, 0.5rem)",
145
+ fontSize: "var(--sc-font-size-sm, 0.8rem)",
146
+ color: colors.icon,
147
+ textDecoration: "none",
148
+ }, onClick: (e) => e.stopPropagation(), children: "Learn more \u2192" })), countdown !== null && countdown > 0 && (_jsxs("p", { style: { ...bodyStyle, color: colors.icon }, children: ["Action required in ", countdown, "s"] })), content.timestamp && _jsx("p", { style: timestampStyle, children: content.timestamp })] })] }), content.dismissible && (_jsx(DismissButton, { onClick: handleDismiss, color: colors.text }))] }));
149
+ }
150
+ // Individual block exports for type-specific usage
151
+ export function SuccessBlock({ content, ...props }) {
152
+ return _jsx(NotificationBlock, { content: content, ...props });
153
+ }
154
+ export function WarningBlock({ content, ...props }) {
155
+ return _jsx(NotificationBlock, { content: content, ...props });
156
+ }
157
+ export function ErrorBlock({ content, ...props }) {
158
+ return _jsx(NotificationBlock, { content: content, ...props });
159
+ }
160
+ export function InfoBlock({ content, ...props }) {
161
+ return _jsx(NotificationBlock, { content: content, ...props });
162
+ }
163
+ export function AlertBlock({ content, ...props }) {
164
+ return _jsx(NotificationBlock, { content: content, ...props });
165
+ }
166
+ //# sourceMappingURL=NotificationBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationBlock.js","sourceRoot":"","sources":["../../../src/blocks/notification/NotificationBlock.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { NotificationBlock, SuccessBlock, WarningBlock, ErrorBlock, InfoBlock, AlertBlock, } from "./NotificationBlock";
@@ -0,0 +1,2 @@
1
+ export { NotificationBlock, SuccessBlock, WarningBlock, ErrorBlock, InfoBlock, AlertBlock, } from "./NotificationBlock";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/blocks/notification/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,SAAS,EACT,UAAU,GACX,MAAM,qBAAqB,CAAC"}
@@ -14,16 +14,27 @@ import { decodeToken, encodeToken } from "./token";
14
14
  import { SmartCanvasConfig, SmartCanvasHandle } from "./api";
15
15
  import type { ExperimentClient } from "./experiments/types";
16
16
  import type { TelemetryClient } from "./telemetry/types";
17
+ import type { CanvasConfigFetcher } from "./types";
17
18
  export interface SyntroInitOptions {
18
19
  /**
19
20
  * The Syntro token containing all credentials.
20
21
  * Generated from your admin dashboard.
22
+ *
23
+ * Optional in editor mode (when editor_token is present in URL params).
21
24
  */
22
- token: string;
25
+ token?: string;
23
26
  /**
24
27
  * Optional canvas configuration overrides.
25
28
  */
26
29
  canvas?: Partial<Omit<SmartCanvasConfig, "integrations" | "fetcher">>;
30
+ /**
31
+ * Custom config fetcher to override the default experiment-based fetcher.
32
+ * Use this for local development or when bypassing the experiment server.
33
+ *
34
+ * When provided, this fetcher is used instead of the experiments-based config lookup.
35
+ * The token's telemetry credentials (t field) are still used if present.
36
+ */
37
+ fetcher?: CanvasConfigFetcher;
27
38
  }
28
39
  export interface SyntroInitResult {
29
40
  /**
@@ -42,6 +53,13 @@ export interface SyntroInitResult {
42
53
  /**
43
54
  * Initialize the Syntro SDK with a single token.
44
55
  *
56
+ * Environment variable overrides (for dev):
57
+ * SYNTRO_EXPERIMENT_HOST - Override experiment server URL
58
+ * SYNTRO_TELEMETRY_HOST - Override telemetry server URL
59
+ *
60
+ * In editor mode (when editor_token is in URL), the token is optional.
61
+ * The editor SDK handles its own authentication.
62
+ *
45
63
  * @param options - Initialization options
46
64
  * @returns The initialized SDK components
47
65
  */
package/dist/bootstrap.js CHANGED
@@ -16,38 +16,138 @@ import { createTelemetryClient } from "./telemetry/registry";
16
16
  import { createConfigFetcher } from "./fetchers/registry";
17
17
  import { createCanvasConfigFetcher } from "./configFetcher";
18
18
  import { createSmartCanvas } from "./api";
19
+ /**
20
+ * Get environment variable, supporting both Vite and Next.js patterns.
21
+ */
22
+ function getEnvVar(name) {
23
+ if (typeof process !== "undefined" && process.env) {
24
+ // Next.js / Node.js
25
+ return process.env[name];
26
+ }
27
+ // Vite uses import.meta.env - use try/catch to avoid esbuild IIFE warning
28
+ try {
29
+ const meta = (0, eval)('import.meta');
30
+ if (meta === null || meta === void 0 ? void 0 : meta.env) {
31
+ return meta.env[name];
32
+ }
33
+ }
34
+ catch {
35
+ // import.meta not available (IIFE bundle)
36
+ }
37
+ return undefined;
38
+ }
39
+ /**
40
+ * Check if we're in editor mode (editor_token in URL params).
41
+ */
42
+ function isEditorMode() {
43
+ if (typeof window === "undefined") {
44
+ console.log('[Syntro Bootstrap] isEditorMode: not in browser');
45
+ return false;
46
+ }
47
+ const params = new URLSearchParams(window.location.search);
48
+ const hasToken = params.has("editor_token");
49
+ console.log('[Syntro Bootstrap] isEditorMode check:', {
50
+ url: window.location.href,
51
+ search: window.location.search,
52
+ hasEditorToken: hasToken,
53
+ allParams: Object.fromEntries(params.entries()),
54
+ });
55
+ return hasToken;
56
+ }
19
57
  /**
20
58
  * Initialize the Syntro SDK with a single token.
21
59
  *
60
+ * Environment variable overrides (for dev):
61
+ * SYNTRO_EXPERIMENT_HOST - Override experiment server URL
62
+ * SYNTRO_TELEMETRY_HOST - Override telemetry server URL
63
+ *
64
+ * In editor mode (when editor_token is in URL), the token is optional.
65
+ * The editor SDK handles its own authentication.
66
+ *
22
67
  * @param options - Initialization options
23
68
  * @returns The initialized SDK components
24
69
  */
25
70
  async function init(options) {
26
- var _a;
27
- const payload = decodeToken(options.token);
28
- // Initialize experiment client if configured (defaults to growthbook)
29
- let experiments;
30
- if (payload.e) {
31
- experiments = createExperimentClient("growthbook", {
32
- clientKey: payload.e,
33
- });
71
+ var _a, _b, _c;
72
+ console.log('[Syntro Bootstrap] ====== INIT ======');
73
+ console.log('[Syntro Bootstrap] Options:', {
74
+ hasToken: !!options.token,
75
+ tokenPrefix: ((_a = options.token) === null || _a === void 0 ? void 0 : _a.slice(0, 15)) + '...',
76
+ hasCanvasOptions: !!options.canvas,
77
+ });
78
+ // In editor mode, token is optional - editor SDK handles auth
79
+ const editorMode = isEditorMode();
80
+ console.log('[Syntro Bootstrap] Editor mode:', editorMode);
81
+ let payload;
82
+ if (options.token) {
83
+ // If token is provided and starts with syn_, decode it
84
+ if (options.token.startsWith("syn_")) {
85
+ console.log('[Syntro Bootstrap] Token starts with syn_, decoding...');
86
+ payload = decodeToken(options.token);
87
+ }
88
+ else if (!editorMode) {
89
+ // Not a syn_ token and not in editor mode - error
90
+ console.error('[Syntro Bootstrap] ❌ Token does not start with syn_ and NOT in editor mode!');
91
+ console.error('[Syntro Bootstrap] Token received:', options.token);
92
+ throw new Error("Invalid Syntro token: must start with 'syn_'");
93
+ }
94
+ else {
95
+ console.log('[Syntro Bootstrap] ✓ Non-syn_ token allowed (editor mode)');
96
+ }
97
+ // If in editor mode with non-syn_ token, skip token decoding
98
+ }
99
+ else if (!editorMode) {
100
+ // No token and not in editor mode - error
101
+ console.error('[Syntro Bootstrap] ❌ No token provided and NOT in editor mode!');
102
+ throw new Error("Syntro token is required (unless in editor mode)");
103
+ }
104
+ else {
105
+ console.log('[Syntro Bootstrap] ✓ No token, but editor mode - proceeding');
34
106
  }
35
- // Initialize telemetry client if configured (defaults to posthog)
107
+ // Host resolution priority: env var > token > default
108
+ // Env vars are checked at build time by bundlers (Next.js/Vite)
109
+ const experimentHost = getEnvVar("NEXT_PUBLIC_SYNTRO_EXPERIMENT_HOST")
110
+ || getEnvVar("VITE_SYNTRO_EXPERIMENT_HOST")
111
+ || (payload === null || payload === void 0 ? void 0 : payload.eh); // from token
112
+ const telemetryHost = getEnvVar("NEXT_PUBLIC_SYNTRO_TELEMETRY_HOST")
113
+ || getEnvVar("VITE_SYNTRO_TELEMETRY_HOST")
114
+ || (payload === null || payload === void 0 ? void 0 : payload.th); // from token
115
+ // Editor SDK URL (for loading editor in edit mode)
116
+ const editorUrl = getEnvVar("NEXT_PUBLIC_SYNTRO_EDITOR_URL")
117
+ || getEnvVar("VITE_SYNTRO_EDITOR_URL")
118
+ || ((_b = options.canvas) === null || _b === void 0 ? void 0 : _b.editorUrl);
119
+ // Initialize telemetry client FIRST (so experiments can wire tracking callback)
36
120
  let telemetry;
37
- if (payload.t) {
121
+ if (payload === null || payload === void 0 ? void 0 : payload.t) {
38
122
  telemetry = createTelemetryClient("posthog", {
39
123
  apiKey: payload.t,
124
+ apiHost: telemetryHost, // undefined falls back to adapter default
125
+ });
126
+ }
127
+ // Initialize experiment client with tracking callback wired to telemetry
128
+ let experiments;
129
+ if (payload === null || payload === void 0 ? void 0 : payload.e) {
130
+ experiments = createExperimentClient("growthbook", {
131
+ clientKey: payload.e,
132
+ apiHost: experimentHost, // undefined falls back to adapter default
133
+ // Wire experiment tracking to telemetry provider
134
+ onExperimentViewed: (telemetry === null || telemetry === void 0 ? void 0 : telemetry.trackExperiment)
135
+ ? (key, variationId, variationName) => {
136
+ telemetry.trackExperiment(key, variationId, variationName);
137
+ }
138
+ : undefined,
40
139
  });
41
140
  }
42
141
  // Create config fetcher
43
- // Default: use experiments-based fetcher (checks for config object, then URI)
44
- // This uses the existing createCanvasConfigFetcher which:
45
- // 1. Checks "smart-canvas-config" feature for direct config object
46
- // 2. Falls back to "smart-canvas-config-uri" feature for config URI
142
+ // Priority: custom fetcher > token-specified fetcher > experiments-based
47
143
  let fetcher;
48
- if (payload.f) {
49
- // Explicit fetcher type specified
50
- const configFetcher = createConfigFetcher(payload.f, (_a = payload.o) !== null && _a !== void 0 ? _a : {});
144
+ if (options.fetcher) {
145
+ // Custom fetcher provided - use it directly (for local dev / bypassing experiments)
146
+ fetcher = options.fetcher;
147
+ }
148
+ else if (payload === null || payload === void 0 ? void 0 : payload.f) {
149
+ // Explicit fetcher type specified in token
150
+ const configFetcher = createConfigFetcher(payload.f, (_c = payload.o) !== null && _c !== void 0 ? _c : {});
51
151
  fetcher = async () => {
52
152
  var _a;
53
153
  const result = await configFetcher.fetch();
@@ -66,6 +166,7 @@ async function init(options) {
66
166
  ...options.canvas,
67
167
  fetcher,
68
168
  integrations: { experiments, telemetry },
169
+ editorUrl,
69
170
  });
70
171
  return { canvas, experiments, telemetry };
71
172
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAsB,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAwC,MAAM,OAAO,CAAC;AAmChF;;;;;GAKG;AACH,KAAK,UAAU,IAAI,CAAC,OAA0B;;IAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE3C,sEAAsE;IACtE,IAAI,WAAyC,CAAC;IAC9C,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;QACd,WAAW,GAAG,sBAAsB,CAAC,YAAY,EAAE;YACjD,SAAS,EAAE,OAAO,CAAC,CAAC;SACrB,CAAC,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,IAAI,SAAsC,CAAC;IAC3C,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;QACd,SAAS,GAAG,qBAAqB,CAAC,SAAS,EAAE;YAC3C,MAAM,EAAE,OAAO,CAAC,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,8EAA8E;IAC9E,0DAA0D;IAC1D,qEAAqE;IACrE,sEAAsE;IACtE,IAAI,OAAwC,CAAC;IAC7C,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;QACd,kCAAkC;QAClC,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,MAAA,OAAO,CAAC,CAAC,mCAAI,EAAE,CAAC,CAAC;QACtE,OAAO,GAAG,KAAK,IAAI,EAAE;;YACnB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC;YAC3C,OAAO;gBACL,GAAG,MAAM,CAAC,MAAM;gBAChB,KAAK,EAAE,MAAA,MAAM,CAAC,MAAM,CAAC,KAAK,mCAAI,EAAE;aACjC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,oEAAoE;QACpE,OAAO,GAAG,yBAAyB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,kCAAkC;IAClC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;QACrC,GAAG,OAAO,CAAC,MAAM;QACjB,OAAO;QACP,YAAY,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;KACzC,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI;IACJ,WAAW;IACX,WAAW;CACZ,CAAC;AASF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}