@syntrologie/runtime-sdk 0.2.20 → 1.0.0-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/CAPABILITIES.md +756 -284
  2. package/README.md +310 -68
  3. package/dist/RuntimeProvider.d.ts +51 -0
  4. package/dist/RuntimeProvider.js +113 -0
  5. package/dist/RuntimeProvider.js.map +1 -0
  6. package/dist/SmartCanvasApp.d.ts +16 -10
  7. package/dist/SmartCanvasApp.js +45 -49
  8. package/dist/SmartCanvasApp.js.map +1 -1
  9. package/dist/SmartCanvasElement.d.ts +5 -5
  10. package/dist/SmartCanvasElement.js +24 -14
  11. package/dist/SmartCanvasElement.js.map +1 -1
  12. package/dist/SmartCanvasPortal.d.ts +2 -2
  13. package/dist/SmartCanvasPortal.js +2 -2
  14. package/dist/actions/ActionEngine.d.ts +11 -0
  15. package/dist/actions/ActionEngine.js +274 -0
  16. package/dist/actions/ActionEngine.js.map +1 -0
  17. package/dist/actions/executors/index.d.ts +117 -0
  18. package/dist/actions/executors/index.js +242 -0
  19. package/dist/actions/executors/index.js.map +1 -0
  20. package/dist/actions/executors/tour.d.ts +18 -0
  21. package/dist/actions/executors/tour.js +332 -0
  22. package/dist/actions/executors/tour.js.map +1 -0
  23. package/dist/actions/index.d.ts +10 -0
  24. package/dist/actions/index.js +12 -0
  25. package/dist/actions/index.js.map +1 -0
  26. package/dist/actions/types.d.ts +399 -0
  27. package/dist/actions/types.js +8 -0
  28. package/dist/actions/types.js.map +1 -0
  29. package/dist/actions/validation.d.ts +14 -0
  30. package/dist/actions/validation.js +602 -0
  31. package/dist/actions/validation.js.map +1 -0
  32. package/dist/antiFlicker.js +1 -1
  33. package/dist/api.d.ts +40 -26
  34. package/dist/api.js +90 -59
  35. package/dist/api.js.map +1 -1
  36. package/dist/apps/AppContext.d.ts +31 -0
  37. package/dist/apps/AppContext.js +93 -0
  38. package/dist/apps/AppContext.js.map +1 -0
  39. package/dist/apps/AppLoader.d.ts +84 -0
  40. package/dist/apps/AppLoader.js +256 -0
  41. package/dist/apps/AppLoader.js.map +1 -0
  42. package/dist/apps/AppRegistry.d.ts +102 -0
  43. package/dist/apps/AppRegistry.js +317 -0
  44. package/dist/apps/AppRegistry.js.map +1 -0
  45. package/dist/apps/adaptive-chatbot/index.js +7 -0
  46. package/dist/apps/adaptive-chatbot/index.js.map +7 -0
  47. package/dist/apps/examples/gamification-app.example.d.ts +305 -0
  48. package/dist/apps/examples/gamification-app.example.js +329 -0
  49. package/dist/apps/examples/gamification-app.example.js.map +1 -0
  50. package/dist/apps/faq/index.js +11 -0
  51. package/dist/apps/faq/index.js.map +7 -0
  52. package/dist/apps/gamification/index.js +2 -0
  53. package/dist/apps/gamification/index.js.map +7 -0
  54. package/dist/apps/index.d.ts +15 -0
  55. package/dist/apps/index.js +17 -0
  56. package/dist/apps/index.js.map +1 -0
  57. package/dist/apps/nav/index.js +11 -0
  58. package/dist/apps/nav/index.js.map +7 -0
  59. package/dist/apps/types.d.ts +231 -0
  60. package/dist/apps/types.js +8 -0
  61. package/dist/apps/types.js.map +1 -0
  62. package/dist/blocks/data/ComparisonBlock.d.ts +1 -1
  63. package/dist/blocks/data/ComparisonBlock.js +40 -40
  64. package/dist/blocks/data/ComparisonBlock.js.map +1 -1
  65. package/dist/blocks/data/StatsBlock.d.ts +1 -1
  66. package/dist/blocks/data/StatsBlock.js +41 -41
  67. package/dist/blocks/data/StatsBlock.js.map +1 -1
  68. package/dist/blocks/data/index.d.ts +2 -2
  69. package/dist/blocks/data/index.js +2 -2
  70. package/dist/blocks/index.d.ts +5 -5
  71. package/dist/blocks/index.js +29 -29
  72. package/dist/blocks/index.js.map +1 -1
  73. package/dist/blocks/interactive/ChecklistBlock.d.ts +1 -1
  74. package/dist/blocks/interactive/ChecklistBlock.js +60 -60
  75. package/dist/blocks/interactive/ChecklistBlock.js.map +1 -1
  76. package/dist/blocks/interactive/RatingBlock.d.ts +1 -1
  77. package/dist/blocks/interactive/RatingBlock.js +75 -65
  78. package/dist/blocks/interactive/RatingBlock.js.map +1 -1
  79. package/dist/blocks/interactive/index.d.ts +2 -2
  80. package/dist/blocks/interactive/index.js +2 -2
  81. package/dist/blocks/notification/NotificationBlock.d.ts +2 -2
  82. package/dist/blocks/notification/NotificationBlock.js +67 -63
  83. package/dist/blocks/notification/NotificationBlock.js.map +1 -1
  84. package/dist/blocks/notification/index.d.ts +1 -1
  85. package/dist/blocks/notification/index.js +1 -1
  86. package/dist/bootstrap.d.ts +47 -9
  87. package/dist/bootstrap.js +237 -69
  88. package/dist/bootstrap.js.map +1 -1
  89. package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
  90. package/dist/components/ShadowCanvasOverlay.js +144 -107
  91. package/dist/components/ShadowCanvasOverlay.js.map +1 -1
  92. package/dist/components/TileCard.d.ts +5 -5
  93. package/dist/components/TileCard.js +204 -154
  94. package/dist/components/TileCard.js.map +1 -1
  95. package/dist/components/TileWheel.d.ts +3 -3
  96. package/dist/components/TileWheel.js +7 -7
  97. package/dist/components/TileWheel.js.map +1 -1
  98. package/dist/config-validator.d.ts +49 -0
  99. package/dist/config-validator.js +173 -0
  100. package/dist/config-validator.js.map +1 -0
  101. package/dist/configFetcher.d.ts +2 -2
  102. package/dist/configFetcher.js +20 -8
  103. package/dist/configFetcher.js.map +1 -1
  104. package/dist/context/ContextManager.d.ts +66 -0
  105. package/dist/context/ContextManager.js +268 -0
  106. package/dist/context/ContextManager.js.map +1 -0
  107. package/dist/context/index.d.ts +7 -0
  108. package/dist/context/index.js +7 -0
  109. package/dist/context/index.js.map +1 -0
  110. package/dist/context/schema.d.ts +360 -0
  111. package/dist/context/schema.js +50 -0
  112. package/dist/context/schema.js.map +1 -0
  113. package/dist/context/types.d.ts +101 -0
  114. package/dist/context/types.js +8 -0
  115. package/dist/context/types.js.map +1 -0
  116. package/dist/decisions/engine.d.ts +43 -0
  117. package/dist/decisions/engine.js +112 -0
  118. package/dist/decisions/engine.js.map +1 -0
  119. package/dist/decisions/index.d.ts +9 -0
  120. package/dist/decisions/index.js +10 -0
  121. package/dist/decisions/index.js.map +1 -0
  122. package/dist/decisions/schema.d.ts +2166 -0
  123. package/dist/decisions/schema.js +143 -0
  124. package/dist/decisions/schema.js.map +1 -0
  125. package/dist/decisions/strategies/rules.d.ts +24 -0
  126. package/dist/decisions/strategies/rules.js +152 -0
  127. package/dist/decisions/strategies/rules.js.map +1 -0
  128. package/dist/decisions/strategies/score.d.ts +10 -0
  129. package/dist/decisions/strategies/score.js +29 -0
  130. package/dist/decisions/strategies/score.js.map +1 -0
  131. package/dist/decisions/types.d.ts +242 -0
  132. package/dist/decisions/types.js +2 -0
  133. package/dist/decisions/types.js.map +1 -0
  134. package/dist/earlyPatcher.d.ts +8 -20
  135. package/dist/earlyPatcher.js +13 -62
  136. package/dist/earlyPatcher.js.map +1 -1
  137. package/dist/editorLoader.d.ts +12 -0
  138. package/dist/editorLoader.js +132 -48
  139. package/dist/editorLoader.js.map +1 -1
  140. package/dist/events/EventBus.d.ts +59 -0
  141. package/dist/events/EventBus.js +152 -0
  142. package/dist/events/EventBus.js.map +1 -0
  143. package/dist/events/index.d.ts +9 -0
  144. package/dist/events/index.js +10 -0
  145. package/dist/events/index.js.map +1 -0
  146. package/dist/events/normalizers/canvas.d.ts +67 -0
  147. package/dist/events/normalizers/canvas.js +116 -0
  148. package/dist/events/normalizers/canvas.js.map +1 -0
  149. package/dist/events/normalizers/posthog.d.ts +53 -0
  150. package/dist/events/normalizers/posthog.js +163 -0
  151. package/dist/events/normalizers/posthog.js.map +1 -0
  152. package/dist/events/schema.d.ts +70 -0
  153. package/dist/events/schema.js +30 -0
  154. package/dist/events/schema.js.map +1 -0
  155. package/dist/events/types.d.ts +79 -0
  156. package/dist/events/types.js +49 -0
  157. package/dist/events/types.js.map +1 -0
  158. package/dist/experiments/adapters/growthbook.d.ts +4 -4
  159. package/dist/experiments/adapters/growthbook.js +5 -5
  160. package/dist/experiments/adapters/growthbook.js.map +1 -1
  161. package/dist/experiments/index.d.ts +3 -3
  162. package/dist/experiments/index.js +1 -1
  163. package/dist/experiments/registry.d.ts +2 -2
  164. package/dist/experiments/registry.js +2 -2
  165. package/dist/experiments/types.d.ts +5 -1
  166. package/dist/fetchers/cdnFetcher.d.ts +1 -1
  167. package/dist/fetchers/cdnFetcher.js +4 -8
  168. package/dist/fetchers/cdnFetcher.js.map +1 -1
  169. package/dist/fetchers/experimentsFetcher.d.ts +2 -2
  170. package/dist/fetchers/experimentsFetcher.js +7 -7
  171. package/dist/fetchers/experimentsFetcher.js.map +1 -1
  172. package/dist/fetchers/index.d.ts +3 -3
  173. package/dist/fetchers/index.js +2 -2
  174. package/dist/fetchers/index.js.map +1 -1
  175. package/dist/fetchers/registry.d.ts +1 -1
  176. package/dist/fetchers/registry.js +4 -4
  177. package/dist/fetchers/types.d.ts +1 -1
  178. package/dist/hooks/useCanvasOverlays.d.ts +8 -5
  179. package/dist/hooks/useCanvasOverlays.js +66 -17
  180. package/dist/hooks/useCanvasOverlays.js.map +1 -1
  181. package/dist/hooks/useHostPatches.d.ts +2 -2
  182. package/dist/hooks/useHostPatches.js +8 -8
  183. package/dist/hooks/useHostPatches.js.map +1 -1
  184. package/dist/hooks/useShadowCanvasConfig.d.ts +9 -9
  185. package/dist/hooks/useShadowCanvasConfig.js +24 -8
  186. package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
  187. package/dist/hostPatcher/core/patcher.d.ts +1 -1
  188. package/dist/hostPatcher/core/patcher.js +18 -9
  189. package/dist/hostPatcher/core/patcher.js.map +1 -1
  190. package/dist/hostPatcher/core/sanitizer.js +24 -3
  191. package/dist/hostPatcher/core/sanitizer.js.map +1 -1
  192. package/dist/hostPatcher/policy/defaultPolicy.js +15 -5
  193. package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
  194. package/dist/hostPatcher/utils/anchors.js +4 -6
  195. package/dist/hostPatcher/utils/anchors.js.map +1 -1
  196. package/dist/index.d.ts +34 -21
  197. package/dist/index.js +46 -19
  198. package/dist/index.js.map +1 -1
  199. package/dist/logger.d.ts +29 -0
  200. package/dist/logger.js +81 -0
  201. package/dist/logger.js.map +1 -0
  202. package/dist/metrics/index.d.ts +1 -1
  203. package/dist/metrics/index.js +1 -1
  204. package/dist/metrics/sessionMetrics.d.ts +1 -1
  205. package/dist/metrics/sessionMetrics.js +6 -6
  206. package/dist/overlays/fetcher.d.ts +2 -2
  207. package/dist/overlays/fetcher.js +4 -4
  208. package/dist/overlays/recipeRegistry.js +2 -2
  209. package/dist/overlays/recipeRegistry.js.map +1 -1
  210. package/dist/overlays/runtime/anchor/resolve.js +1 -1
  211. package/dist/overlays/runtime/anchor/resolve.js.map +1 -1
  212. package/dist/overlays/runtime/index.d.ts +7 -7
  213. package/dist/overlays/runtime/index.js +7 -7
  214. package/dist/overlays/runtime/overlay/highlight.js +39 -39
  215. package/dist/overlays/runtime/overlay/highlight.js.map +1 -1
  216. package/dist/overlays/runtime/overlay/modal.js +5 -5
  217. package/dist/overlays/runtime/overlay/modal.js.map +1 -1
  218. package/dist/overlays/runtime/overlay/root.js +1 -1
  219. package/dist/overlays/runtime/overlay/runner.js +70 -23
  220. package/dist/overlays/runtime/overlay/runner.js.map +1 -1
  221. package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
  222. package/dist/overlays/runtime/overlay/tooltip.js +10 -10
  223. package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
  224. package/dist/overlays/runtime/utils/dom.js +4 -1
  225. package/dist/overlays/runtime/utils/dom.js.map +1 -1
  226. package/dist/overlays/schema.d.ts +98 -98
  227. package/dist/overlays/schema.js +12 -8
  228. package/dist/overlays/schema.js.map +1 -1
  229. package/dist/react.d.ts +7 -7
  230. package/dist/react.js +4 -4
  231. package/dist/react.js.map +1 -1
  232. package/dist/render/RenderContext.d.ts +2 -2
  233. package/dist/render/RenderContext.js +5 -5
  234. package/dist/render/RenderContext.js.map +1 -1
  235. package/dist/render/index.d.ts +3 -3
  236. package/dist/render/index.js +1 -1
  237. package/dist/render/types.d.ts +4 -4
  238. package/dist/runtime.d.ts +110 -0
  239. package/dist/runtime.js +206 -0
  240. package/dist/runtime.js.map +1 -0
  241. package/dist/smart-canvas.esm.js +155 -78
  242. package/dist/smart-canvas.esm.js.map +4 -4
  243. package/dist/smart-canvas.js +44390 -37343
  244. package/dist/smart-canvas.js.map +4 -4
  245. package/dist/smart-canvas.min.js +156 -78
  246. package/dist/smart-canvas.min.js.map +4 -4
  247. package/dist/state/StateStore.d.ts +41 -0
  248. package/dist/state/StateStore.js +170 -0
  249. package/dist/state/StateStore.js.map +1 -0
  250. package/dist/state/helpers/cooldowns.d.ts +7 -0
  251. package/dist/state/helpers/cooldowns.js +31 -0
  252. package/dist/state/helpers/cooldowns.js.map +1 -0
  253. package/dist/state/helpers/dismissals.d.ts +7 -0
  254. package/dist/state/helpers/dismissals.js +34 -0
  255. package/dist/state/helpers/dismissals.js.map +1 -0
  256. package/dist/state/helpers/frequency.d.ts +8 -0
  257. package/dist/state/helpers/frequency.js +43 -0
  258. package/dist/state/helpers/frequency.js.map +1 -0
  259. package/dist/state/index.d.ts +7 -0
  260. package/dist/state/index.js +7 -0
  261. package/dist/state/index.js.map +1 -0
  262. package/dist/state/schema.d.ts +49 -0
  263. package/dist/state/schema.js +25 -0
  264. package/dist/state/schema.js.map +1 -0
  265. package/dist/state/types.d.ts +137 -0
  266. package/dist/state/types.js +9 -0
  267. package/dist/state/types.js.map +1 -0
  268. package/dist/store/example.d.ts +1 -0
  269. package/dist/store/example.js +43 -0
  270. package/dist/store/example.js.map +1 -0
  271. package/dist/store/mini-effector.d.ts +46 -0
  272. package/dist/store/mini-effector.js +88 -0
  273. package/dist/store/mini-effector.js.map +1 -0
  274. package/dist/surfaces/Surfaces.d.ts +11 -0
  275. package/dist/surfaces/Surfaces.js +361 -0
  276. package/dist/surfaces/Surfaces.js.map +1 -0
  277. package/dist/surfaces/index.d.ts +9 -0
  278. package/dist/surfaces/index.js +12 -0
  279. package/dist/surfaces/index.js.map +1 -0
  280. package/dist/surfaces/positioning.d.ts +50 -0
  281. package/dist/surfaces/positioning.js +228 -0
  282. package/dist/surfaces/positioning.js.map +1 -0
  283. package/dist/surfaces/types.d.ts +167 -0
  284. package/dist/surfaces/types.js +23 -0
  285. package/dist/surfaces/types.js.map +1 -0
  286. package/dist/telemetry/adapters/noop.d.ts +12 -0
  287. package/dist/telemetry/adapters/noop.js +42 -0
  288. package/dist/telemetry/adapters/noop.js.map +1 -0
  289. package/dist/telemetry/adapters/posthog.d.ts +9 -3
  290. package/dist/telemetry/adapters/posthog.js +36 -14
  291. package/dist/telemetry/adapters/posthog.js.map +1 -1
  292. package/dist/telemetry/index.d.ts +4 -3
  293. package/dist/telemetry/index.js +3 -2
  294. package/dist/telemetry/index.js.map +1 -1
  295. package/dist/telemetry/registry.d.ts +2 -2
  296. package/dist/telemetry/registry.js +4 -2
  297. package/dist/telemetry/registry.js.map +1 -1
  298. package/dist/telemetry/types.d.ts +1 -1
  299. package/dist/theme/ThemeProvider.d.ts +2 -2
  300. package/dist/theme/ThemeProvider.js +21 -21
  301. package/dist/theme/ThemeProvider.js.map +1 -1
  302. package/dist/theme/defaultTheme.d.ts +2 -2
  303. package/dist/theme/defaultTheme.js +111 -111
  304. package/dist/theme/defaultTheme.js.map +1 -1
  305. package/dist/theme/extractHostTheme.d.ts +1 -1
  306. package/dist/theme/extractHostTheme.js +42 -44
  307. package/dist/theme/extractHostTheme.js.map +1 -1
  308. package/dist/theme/index.d.ts +5 -5
  309. package/dist/theme/index.js +3 -3
  310. package/dist/theme/index.js.map +1 -1
  311. package/dist/theme/types.d.ts +2 -2
  312. package/dist/token.d.ts +2 -0
  313. package/dist/token.js +3 -6
  314. package/dist/token.js.map +1 -1
  315. package/dist/types-only.d.ts +32 -0
  316. package/dist/types-only.js +11 -0
  317. package/dist/types-only.js.map +1 -0
  318. package/dist/types.d.ts +95 -54
  319. package/dist/types.js +15 -2
  320. package/dist/types.js.map +1 -1
  321. package/dist/version.d.ts +13 -0
  322. package/dist/version.js +14 -0
  323. package/dist/version.js.map +1 -0
  324. package/dist/widgets/WidgetRegistry.d.ts +139 -0
  325. package/dist/widgets/WidgetRegistry.js +182 -0
  326. package/dist/widgets/WidgetRegistry.js.map +1 -0
  327. package/dist/widgets/index.d.ts +7 -0
  328. package/dist/widgets/index.js +7 -0
  329. package/dist/widgets/index.js.map +1 -0
  330. package/package.json +27 -11
  331. package/schema/canvas-config.schema.json +666 -227
  332. package/schema/runtime-context.schema.json +127 -0
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Surfaces Positioning
3
+ *
4
+ * Handles positioning for different slot types using CSS for static slots
5
+ * and Floating UI for adjacent slots.
6
+ */
7
+ import { computePosition, autoUpdate, offset, flip, shift } from '@floating-ui/dom';
8
+ import { getSlotType } from './types';
9
+ /**
10
+ * CSS styles for static surface slots.
11
+ */
12
+ export const STATIC_SLOT_STYLES = {
13
+ drawer_right: {
14
+ position: 'fixed',
15
+ top: '0',
16
+ right: '0',
17
+ bottom: '0',
18
+ width: '360px',
19
+ maxWidth: '90vw',
20
+ },
21
+ drawer_left: {
22
+ position: 'fixed',
23
+ top: '0',
24
+ left: '0',
25
+ bottom: '0',
26
+ width: '360px',
27
+ maxWidth: '90vw',
28
+ },
29
+ drawer_bottom: {
30
+ position: 'fixed',
31
+ left: '0',
32
+ right: '0',
33
+ bottom: '0',
34
+ maxHeight: '50vh',
35
+ },
36
+ overlay_center: {
37
+ position: 'fixed',
38
+ top: '50%',
39
+ left: '50%',
40
+ transform: 'translate(-50%, -50%)',
41
+ maxWidth: '90vw',
42
+ maxHeight: '90vh',
43
+ },
44
+ overlay_corner_br: {
45
+ position: 'fixed',
46
+ bottom: '16px',
47
+ right: '16px',
48
+ maxWidth: '400px',
49
+ maxHeight: '80vh',
50
+ },
51
+ overlay_corner_bl: {
52
+ position: 'fixed',
53
+ bottom: '16px',
54
+ left: '16px',
55
+ maxWidth: '400px',
56
+ maxHeight: '80vh',
57
+ },
58
+ toast_top: {
59
+ position: 'fixed',
60
+ top: '16px',
61
+ left: '50%',
62
+ transform: 'translateX(-50%)',
63
+ maxWidth: '90vw',
64
+ },
65
+ toast_bottom: {
66
+ position: 'fixed',
67
+ bottom: '16px',
68
+ left: '50%',
69
+ transform: 'translateX(-50%)',
70
+ maxWidth: '90vw',
71
+ },
72
+ };
73
+ /**
74
+ * Animation keyframes for different animation types.
75
+ */
76
+ export const ANIMATION_KEYFRAMES = {
77
+ fade: [{ opacity: 0 }, { opacity: 1 }],
78
+ slide: [
79
+ { opacity: 0, transform: 'translateY(10px)' },
80
+ { opacity: 1, transform: 'translateY(0)' },
81
+ ],
82
+ scale: [
83
+ { opacity: 0, transform: 'scale(0.95)' },
84
+ { opacity: 1, transform: 'scale(1)' },
85
+ ],
86
+ none: [],
87
+ };
88
+ /**
89
+ * Animation options.
90
+ */
91
+ export const ANIMATION_OPTIONS = {
92
+ duration: 200,
93
+ easing: 'cubic-bezier(0.16, 1, 0.3, 1)',
94
+ fill: 'forwards',
95
+ };
96
+ /**
97
+ * Apply static slot positioning to an element.
98
+ */
99
+ export function applyStaticSlotStyles(element, slot, constraints) {
100
+ const styles = STATIC_SLOT_STYLES[slot];
101
+ Object.assign(element.style, styles);
102
+ // Apply constraints
103
+ if (constraints) {
104
+ if (constraints.maxWidth)
105
+ element.style.maxWidth = constraints.maxWidth;
106
+ if (constraints.maxHeight)
107
+ element.style.maxHeight = constraints.maxHeight;
108
+ if (constraints.minWidth)
109
+ element.style.minWidth = constraints.minWidth;
110
+ if (constraints.minHeight)
111
+ element.style.minHeight = constraints.minHeight;
112
+ }
113
+ }
114
+ /**
115
+ * Set up adjacent slot positioning using Floating UI.
116
+ * Returns a cleanup function.
117
+ */
118
+ export function setupAdjacentPositioning(container, anchorEl, config) {
119
+ const placement = config.placement === 'auto' ? 'bottom' : config.placement;
120
+ const middleware = [
121
+ offset(config.offset ? { mainAxis: config.offset.y, crossAxis: config.offset.x } : 8),
122
+ ];
123
+ if (config.flip !== false) {
124
+ middleware.push(flip());
125
+ }
126
+ if (config.shift !== false) {
127
+ middleware.push(shift({ padding: 8 }));
128
+ }
129
+ // Set initial position style
130
+ container.style.position = 'absolute';
131
+ container.style.zIndex = '2147483646';
132
+ const cleanup = autoUpdate(anchorEl, container, async () => {
133
+ const { x, y, strategy } = await computePosition(anchorEl, container, {
134
+ placement,
135
+ middleware,
136
+ });
137
+ Object.assign(container.style, {
138
+ position: strategy,
139
+ left: `${x}px`,
140
+ top: `${y}px`,
141
+ });
142
+ });
143
+ return cleanup;
144
+ }
145
+ /**
146
+ * Set up inline slot positioning.
147
+ * Inline slots render content inside the anchor element.
148
+ */
149
+ export function setupInlinePositioning(container, anchorEl, position = 'append') {
150
+ // Reset container positioning (inline is flow-based)
151
+ container.style.position = 'relative';
152
+ container.style.display = 'inline-block';
153
+ if (position === 'prepend') {
154
+ anchorEl.insertBefore(container, anchorEl.firstChild);
155
+ }
156
+ else {
157
+ anchorEl.appendChild(container);
158
+ }
159
+ return () => {
160
+ container.remove();
161
+ };
162
+ }
163
+ /**
164
+ * Play enter animation on an element.
165
+ */
166
+ export function playEnterAnimation(element, animationType) {
167
+ if (animationType === 'none' || ANIMATION_KEYFRAMES[animationType].length === 0) {
168
+ return null;
169
+ }
170
+ return element.animate(ANIMATION_KEYFRAMES[animationType], ANIMATION_OPTIONS);
171
+ }
172
+ /**
173
+ * Play exit animation on an element.
174
+ * Returns a promise that resolves when the animation completes.
175
+ */
176
+ export function playExitAnimation(element, animationType) {
177
+ if (animationType === 'none' || ANIMATION_KEYFRAMES[animationType].length === 0) {
178
+ return Promise.resolve();
179
+ }
180
+ const keyframes = [...ANIMATION_KEYFRAMES[animationType]].reverse();
181
+ const animation = element.animate(keyframes, ANIMATION_OPTIONS);
182
+ return new Promise((resolve) => {
183
+ animation.onfinish = () => resolve();
184
+ animation.oncancel = () => resolve();
185
+ });
186
+ }
187
+ /**
188
+ * Create and style a surface container element.
189
+ */
190
+ export function createSurfaceContainer(slot, id) {
191
+ const container = document.createElement('div');
192
+ container.setAttribute('data-syntro-surface', slot);
193
+ container.setAttribute('data-syntro-mount-id', id);
194
+ container.className = 'syntro-surface';
195
+ // Base styles for all surfaces
196
+ Object.assign(container.style, {
197
+ pointerEvents: 'auto',
198
+ boxSizing: 'border-box',
199
+ overflow: 'auto',
200
+ });
201
+ return container;
202
+ }
203
+ /**
204
+ * Get the z-index for a slot type.
205
+ */
206
+ export function getSlotZIndex(slot) {
207
+ const type = getSlotType(slot);
208
+ switch (type) {
209
+ case 'static':
210
+ // Drawers and overlays
211
+ if (slot.startsWith('drawer'))
212
+ return 2147483640;
213
+ if (slot.startsWith('overlay'))
214
+ return 2147483642;
215
+ if (slot.startsWith('toast'))
216
+ return 2147483644;
217
+ return 2147483640;
218
+ case 'inline':
219
+ // Inline content doesn't need high z-index
220
+ return 1;
221
+ case 'adjacent':
222
+ // Adjacent content needs to be above page content
223
+ return 2147483638;
224
+ default:
225
+ return 2147483640;
226
+ }
227
+ }
228
+ //# sourceMappingURL=positioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positioning.js","sourceRoot":"","sources":["../../src/surfaces/positioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Surfaces Types
3
+ *
4
+ * Defines types for the managed surface system that renders UI into named slots.
5
+ * Surfaces handles layout, stacking, animations, and priority-based arbitration.
6
+ */
7
+ import type { Placement } from '@floating-ui/dom';
8
+ /** Static surface slots with fixed positioning */
9
+ export type StaticSurfaceSlot = 'drawer_right' | 'drawer_left' | 'drawer_bottom' | 'overlay_center' | 'overlay_corner_br' | 'overlay_corner_bl' | 'toast_top' | 'toast_bottom';
10
+ /** Dynamic inline slot (rendered inside anchor) */
11
+ export type InlineSurfaceSlot = `inline:${string}`;
12
+ /** Dynamic adjacent slot (positioned near anchor) */
13
+ export type AdjacentSurfaceSlot = `adjacent:${string}`;
14
+ /** All surface slot types */
15
+ export type SurfaceSlot = StaticSurfaceSlot | InlineSurfaceSlot | AdjacentSurfaceSlot;
16
+ /** React component content */
17
+ export interface ReactContent {
18
+ type: 'react';
19
+ component: unknown;
20
+ props?: Record<string, unknown>;
21
+ }
22
+ /** HTML string content */
23
+ export interface HtmlContent {
24
+ type: 'html';
25
+ content: string;
26
+ }
27
+ /** Widget reference content */
28
+ export interface WidgetContent {
29
+ type: 'widget';
30
+ widgetId: string;
31
+ config?: Record<string, unknown>;
32
+ }
33
+ /** Custom mount function content */
34
+ export interface CustomContent {
35
+ type: 'custom';
36
+ mount: (container: HTMLElement) => () => void;
37
+ }
38
+ /** Union of all renderable content types */
39
+ export type RenderableContent = ReactContent | HtmlContent | WidgetContent | CustomContent;
40
+ /** Position configuration for adjacent slots */
41
+ export interface PositionConfig {
42
+ placement: Placement | 'auto';
43
+ offset?: {
44
+ x: number;
45
+ y: number;
46
+ };
47
+ flip?: boolean;
48
+ shift?: boolean;
49
+ }
50
+ /** Size constraints for mounted content */
51
+ export interface MountConstraints {
52
+ maxWidth?: string;
53
+ maxHeight?: string;
54
+ minWidth?: string;
55
+ minHeight?: string;
56
+ }
57
+ /** Animation types for enter/exit */
58
+ export type AnimationType = 'fade' | 'slide' | 'scale' | 'none';
59
+ /** Options when mounting content to a surface */
60
+ export interface MountOptions {
61
+ /** Priority for conflict resolution (higher wins) */
62
+ priority?: number;
63
+ /** Whether to unmount other content in the same slot */
64
+ exclusive?: boolean;
65
+ /** Animation for enter/exit */
66
+ animation?: AnimationType;
67
+ /** Position configuration for adjacent slots */
68
+ position?: PositionConfig;
69
+ /** Size constraints */
70
+ constraints?: MountConstraints;
71
+ /** ID of the adaptive mounting this content */
72
+ adaptiveId?: string;
73
+ /** Whether to auto-unmount on route change */
74
+ autoUnmountOnRouteChange?: boolean;
75
+ }
76
+ /** Handle returned when content is mounted */
77
+ export interface MountHandle {
78
+ /** Unique ID for this mount */
79
+ id: string;
80
+ /** Update the content */
81
+ update: (content: RenderableContent) => void;
82
+ /** Update mount options */
83
+ setOptions: (opts: Partial<MountOptions>) => void;
84
+ /** Unmount the content */
85
+ unmount: () => void;
86
+ /** Check if still mounted */
87
+ isMounted: () => boolean;
88
+ /** Get the DOM container element */
89
+ getContainer: () => HTMLElement | null;
90
+ }
91
+ /** State of a surface slot */
92
+ export interface SurfaceState {
93
+ /** The slot identifier */
94
+ slot: SurfaceSlot;
95
+ /** Whether the slot is currently occupied */
96
+ occupied: boolean;
97
+ /** Priority of the current content (if occupied) */
98
+ currentPriority?: number;
99
+ /** Adaptive ID that owns current content */
100
+ currentAdaptiveId?: string;
101
+ /** Total number of mounts to this slot this session */
102
+ mountCount: number;
103
+ /** ID of the current mount (if occupied) */
104
+ currentMountId?: string;
105
+ }
106
+ /** Callback for surface state changes */
107
+ export type SurfaceChangeCallback = (state: SurfaceState) => void;
108
+ /** Widget registry interface (subset needed by Surfaces) */
109
+ export interface SurfacesWidgetRegistry {
110
+ has: (id: string) => boolean;
111
+ mount: (id: string, container: HTMLElement, config?: Record<string, unknown>) => {
112
+ unmount: () => void;
113
+ update: (config?: Record<string, unknown>) => void;
114
+ };
115
+ }
116
+ /** Options for creating a Surfaces instance */
117
+ export interface SurfacesOptions {
118
+ /** Overlay root element for rendering */
119
+ overlayRoot: HTMLElement;
120
+ /** Event bus for publishing surface events */
121
+ eventBus?: {
122
+ publish: (name: string, props?: Record<string, unknown>) => void;
123
+ };
124
+ /** Function to resolve anchor IDs to elements (for inline/adjacent slots) */
125
+ anchorResolver?: (anchorId: string) => HTMLElement | null;
126
+ /** Default animation type */
127
+ defaultAnimation?: AnimationType;
128
+ /** Widget registry for resolving widget content */
129
+ widgetRegistry?: SurfacesWidgetRegistry;
130
+ }
131
+ /** The Surfaces interface */
132
+ export interface Surfaces {
133
+ /** Mount content to a surface slot */
134
+ mount: (slot: SurfaceSlot, content: RenderableContent, opts?: MountOptions) => MountHandle;
135
+ /** Get the current state of a slot */
136
+ getState: (slot: SurfaceSlot) => SurfaceState;
137
+ /** Subscribe to state changes for a slot */
138
+ onStateChange: (slot: SurfaceSlot, fn: SurfaceChangeCallback) => () => void;
139
+ /** Check if content can be mounted to a slot */
140
+ canMount: (slot: SurfaceSlot, priority?: number) => boolean;
141
+ /** Clean up all mounted surfaces */
142
+ destroy: () => void;
143
+ }
144
+ /** Resolved internal options (with defaults applied) */
145
+ export interface InternalMountOptions {
146
+ priority: number;
147
+ exclusive: boolean;
148
+ animation: AnimationType;
149
+ position: PositionConfig;
150
+ constraints: MountConstraints;
151
+ adaptiveId?: string;
152
+ autoUnmountOnRouteChange: boolean;
153
+ }
154
+ /** Internal mount entry */
155
+ export interface InternalMountEntry {
156
+ id: string;
157
+ slot: SurfaceSlot;
158
+ content: RenderableContent;
159
+ options: InternalMountOptions;
160
+ container: HTMLElement;
161
+ cleanup?: () => void;
162
+ mountedAt: number;
163
+ }
164
+ /** Slot type classifier */
165
+ export declare function getSlotType(slot: SurfaceSlot): 'static' | 'inline' | 'adjacent';
166
+ /** Extract anchor ID from inline/adjacent slots */
167
+ export declare function getSlotAnchorId(slot: SurfaceSlot): string | null;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Surfaces Types
3
+ *
4
+ * Defines types for the managed surface system that renders UI into named slots.
5
+ * Surfaces handles layout, stacking, animations, and priority-based arbitration.
6
+ */
7
+ /** Slot type classifier */
8
+ export function getSlotType(slot) {
9
+ if (slot.startsWith('inline:'))
10
+ return 'inline';
11
+ if (slot.startsWith('adjacent:'))
12
+ return 'adjacent';
13
+ return 'static';
14
+ }
15
+ /** Extract anchor ID from inline/adjacent slots */
16
+ export function getSlotAnchorId(slot) {
17
+ if (slot.startsWith('inline:'))
18
+ return slot.slice(7);
19
+ if (slot.startsWith('adjacent:'))
20
+ return slot.slice(9);
21
+ return null;
22
+ }
23
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/surfaces/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+OH,2BAA2B;AAC3B,MAAM,UAAU,WAAW,CAAC,IAAiB;IAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,CAAC;IACpD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,eAAe,CAAC,IAAiB;IAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * No-op adapter for the TelemetryClient interface.
3
+ *
4
+ * Used when telemetry is disabled (e.g. demo mode with t="noop").
5
+ * All tracking methods silently do nothing. Session/distinct IDs
6
+ * return stable values so downstream code that reads them still works.
7
+ */
8
+ import type { TelemetryClient } from '../types';
9
+ /**
10
+ * Create a TelemetryClient that silently discards all events.
11
+ */
12
+ export declare function createNoopClient(): TelemetryClient;
@@ -0,0 +1,42 @@
1
+ function randomId() {
2
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
3
+ let id = '';
4
+ for (let i = 0; i < 16; i++) {
5
+ id += chars[Math.floor(Math.random() * chars.length)];
6
+ }
7
+ return id;
8
+ }
9
+ class NoopAdapter {
10
+ constructor() {
11
+ this.sessionId = randomId();
12
+ console.log(`[Syntro Telemetry] Using noop adapter (no telemetry configured). sessionId=${this.sessionId}`);
13
+ }
14
+ trackCanvasOpened(_surface) { }
15
+ trackCanvasClosed(_surface) { }
16
+ trackRectangleViewed(_rectangleId, _surface) { }
17
+ trackAction(_action, _rectangleId, _surface) { }
18
+ register(_properties) { }
19
+ getSessionId() {
20
+ return this.sessionId;
21
+ }
22
+ startSessionRecording() { }
23
+ trackExperiment(_key, _variationId, _variationName) { }
24
+ setPersonProperties(_properties) { }
25
+ setPersonPropertiesOnce(_properties) { }
26
+ getDistinctId() {
27
+ return 'demo-user';
28
+ }
29
+ getAllFeatureFlags() {
30
+ return {};
31
+ }
32
+ getSegmentFlags() {
33
+ return {};
34
+ }
35
+ }
36
+ /**
37
+ * Create a TelemetryClient that silently discards all events.
38
+ */
39
+ export function createNoopClient() {
40
+ return new NoopAdapter();
41
+ }
42
+ //# sourceMappingURL=noop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop.js","sourceRoot":"","sources":["../../../src/telemetry/adapters/noop.ts"],"names":[],"mappings":"AASA,SAAS,QAAQ;IACf,MAAM,KAAK,GAAG,gEAAgE,CAAC;IAC/E,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,WAAW;IAGf;QACE,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CACT,8EAA8E,IAAI,CAAC,SAAS,EAAE,CAC/F,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,QAAuB,IAAS,CAAC;IACnD,iBAAiB,CAAC,QAAuB,IAAS,CAAC;IACnD,oBAAoB,CAAC,YAAoB,EAAE,QAAuB,IAAS,CAAC;IAC5E,WAAW,CAAC,OAAe,EAAE,YAAoB,EAAE,QAAuB,IAAS,CAAC;IAEpF,QAAQ,CAAC,WAAoC,IAAS,CAAC;IACvD,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,qBAAqB,KAAU,CAAC;IAChC,eAAe,CAAC,IAAY,EAAE,YAAoB,EAAE,cAAuB,IAAS,CAAC;IACrF,mBAAmB,CAAC,WAAoC,IAAS,CAAC;IAClE,uBAAuB,CAAC,WAAoC,IAAS,CAAC;IAEtE,aAAa;QACX,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,kBAAkB;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,eAAe;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,WAAW,EAAE,CAAC;AAC3B,CAAC"}
@@ -4,8 +4,8 @@
4
4
  * This file is INTERNAL - consumers should only import from telemetry/types.ts
5
5
  * and use the TelemetryClient interface.
6
6
  */
7
- import type { PostHog, Properties } from "posthog-js";
8
- import type { TelemetryClient, CanvasSurface } from "../types";
7
+ import type { PostHog, Properties } from 'posthog-js';
8
+ import type { TelemetryClient, CanvasSurface } from '../types';
9
9
  export interface PostHogAdapterOptions {
10
10
  /**
11
11
  * PostHog API key.
@@ -13,7 +13,7 @@ export interface PostHogAdapterOptions {
13
13
  apiKey?: string;
14
14
  /**
15
15
  * PostHog API host.
16
- * @default "https://posthog-dev.syntrologie.com"
16
+ * @default "https://telemetry.syntrologie.com"
17
17
  */
18
18
  apiHost?: string;
19
19
  /**
@@ -53,6 +53,11 @@ export interface PostHogAdapterOptions {
53
53
  * Used to update GrowthBook attributes with segment membership.
54
54
  */
55
55
  onFeatureFlagsLoaded?: (flags: Record<string, boolean | string>) => void;
56
+ /**
57
+ * Callback when any event is captured by PostHog.
58
+ * Used to feed events into the EventBus for runtime decisions.
59
+ */
60
+ onCapture?: (eventName: string, properties?: Record<string, unknown>) => void;
56
61
  }
57
62
  interface CanvasAnalyticsPayload extends Properties {
58
63
  rectangleId?: string;
@@ -65,6 +70,7 @@ export declare class PostHogAdapter implements TelemetryClient {
65
70
  private readonly options;
66
71
  private client?;
67
72
  private featureFlagsCallback?;
73
+ private captureCallback?;
68
74
  constructor(options?: PostHogAdapterOptions);
69
75
  /**
70
76
  * Get all feature flags from PostHog.
@@ -1,4 +1,4 @@
1
- import posthog from "posthog-js";
1
+ import posthog from 'posthog-js';
2
2
  /**
3
3
  * Internal adapter that implements TelemetryClient using PostHog.
4
4
  */
@@ -8,14 +8,17 @@ export class PostHogAdapter {
8
8
  this.options = options;
9
9
  this.client = options.client;
10
10
  this.featureFlagsCallback = options.onFeatureFlagsLoaded;
11
- if (!this.client && typeof window !== "undefined" && options.apiKey) {
12
- this.client = posthog;
11
+ this.captureCallback = options.onCapture;
12
+ if (!this.client && typeof window !== 'undefined' && options.apiKey) {
13
13
  // Determine if we should enable feature flags (for segment membership)
14
14
  // Default: true (enabled) to support segment targeting via /decide
15
15
  const enableFeatureFlags = (_a = options.enableFeatureFlags) !== null && _a !== void 0 ? _a : true;
16
+ // Use a named instance so we don't clobber the customer's global PostHog.
17
+ // posthog.init() with a 3rd arg returns an isolated instance.
18
+ const instanceName = 'syntro_' + (options.apiKey.slice(-6) || 'sdk');
16
19
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
- this.client.init(options.apiKey, {
18
- api_host: (_b = options.apiHost) !== null && _b !== void 0 ? _b : "https://posthog-dev.syntrologie.com",
20
+ this.client = posthog.init(options.apiKey, {
21
+ api_host: (_b = options.apiHost) !== null && _b !== void 0 ? _b : 'https://telemetry.syntrologie.com',
19
22
  // Feature flags for segment membership (in_segment_* flags)
20
23
  // When enabled, /decide is called to get segment flags
21
24
  advanced_disable_feature_flags: !enableFeatureFlags,
@@ -48,9 +51,28 @@ export class PostHogAdapter {
48
51
  this.featureFlagsCallback(allFlags);
49
52
  }
50
53
  });
54
+ // If flags already loaded before callback was registered, fire immediately
55
+ const existingFlags = this.getAllFeatureFlags();
56
+ if (existingFlags && Object.keys(existingFlags).length > 0) {
57
+ this.featureFlagsCallback(existingFlags);
58
+ }
59
+ }
60
+ // Wire up capture callback to feed events into EventBus
61
+ if (this.captureCallback) {
62
+ // PostHog's eventCaptured passes a single CaptureResult object:
63
+ // { uuid, event, properties, $set, $set_once, timestamp }
64
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
65
+ ph.on('eventCaptured', (data) => {
66
+ var _a;
67
+ const eventName = typeof data === 'string' ? data : data === null || data === void 0 ? void 0 : data.event;
68
+ const properties = typeof data === 'string' ? undefined : data === null || data === void 0 ? void 0 : data.properties;
69
+ if (typeof eventName === 'string') {
70
+ (_a = this.captureCallback) === null || _a === void 0 ? void 0 : _a.call(this, eventName, properties);
71
+ }
72
+ });
51
73
  }
52
74
  },
53
- });
75
+ }, instanceName);
54
76
  }
55
77
  }
56
78
  /**
@@ -72,7 +94,7 @@ export class PostHogAdapter {
72
94
  return {};
73
95
  const segmentFlags = {};
74
96
  for (const [key, value] of Object.entries(allFlags)) {
75
- if (key.startsWith("in_segment_")) {
97
+ if (key.startsWith('in_segment_')) {
76
98
  segmentFlags[key] = value === true;
77
99
  }
78
100
  }
@@ -91,16 +113,16 @@ export class PostHogAdapter {
91
113
  (_a = this.client) === null || _a === void 0 ? void 0 : _a.capture(eventName, payload);
92
114
  }
93
115
  trackCanvasOpened(surface) {
94
- this.track("shadow_canvas_opened", { surface });
116
+ this.track('shadow_canvas_opened', { surface });
95
117
  }
96
118
  trackCanvasClosed(surface) {
97
- this.track("shadow_canvas_closed", { surface });
119
+ this.track('shadow_canvas_closed', { surface });
98
120
  }
99
121
  trackRectangleViewed(rectangleId, surface) {
100
- this.track("shadow_canvas_rectangle_viewed", { rectangleId, surface });
122
+ this.track('shadow_canvas_rectangle_viewed', { rectangleId, surface });
101
123
  }
102
124
  trackAction(action, rectangleId, surface) {
103
- this.track("shadow_canvas_action", { action, rectangleId, surface });
125
+ this.track('shadow_canvas_action', { action, rectangleId, surface });
104
126
  }
105
127
  register(properties) {
106
128
  var _a, _b;
@@ -126,7 +148,7 @@ export class PostHogAdapter {
126
148
  [`${experimentProperty}_id`]: variationId,
127
149
  });
128
150
  // Fire discrete event for experiment assignment tracking
129
- this.track("$experiment_started", {
151
+ this.track('$experiment_started', {
130
152
  $experiment_key: experimentKey,
131
153
  $experiment_variation_id: variationId,
132
154
  $experiment_variation_name: variationName !== null && variationName !== void 0 ? variationName : `variation_${variationId}`,
@@ -135,12 +157,12 @@ export class PostHogAdapter {
135
157
  setPersonProperties(properties) {
136
158
  var _a;
137
159
  // PostHog's $set event sets person properties
138
- (_a = this.client) === null || _a === void 0 ? void 0 : _a.capture("$set", { $set: properties });
160
+ (_a = this.client) === null || _a === void 0 ? void 0 : _a.capture('$set', { $set: properties });
139
161
  }
140
162
  setPersonPropertiesOnce(properties) {
141
163
  var _a;
142
164
  // PostHog's $set_once only sets if property doesn't exist
143
- (_a = this.client) === null || _a === void 0 ? void 0 : _a.capture("$set", { $set_once: properties });
165
+ (_a = this.client) === null || _a === void 0 ? void 0 : _a.capture('$set', { $set_once: properties });
144
166
  }
145
167
  getDistinctId() {
146
168
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/telemetry/adapters/posthog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/telemetry/adapters/posthog.ts"],"names":[],"mappings":"AAOA,OAAO,OAAO,MAAM,YAAY,CAAC;AAuEjC;;GAEG;AACH,MAAM,OAAO,cAAc;IAKzB,YAA6B,UAAiC,EAAE;;QAAnC,YAAO,GAAP,OAAO,CAA4B;QAC9D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;QACzD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpE,uEAAuE;YACvE,mEAAmE;YACnE,MAAM,kBAAkB,GAAG,MAAA,OAAO,CAAC,kBAAkB,mCAAI,IAAI,CAAC;YAE9D,0EAA0E;YAC1E,8DAA8D;YAC9D,MAAM,YAAY,GAAG,SAAS,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;YAErE,8DAA8D;YAC9D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CACxB,OAAO,CAAC,MAAM,EACd;gBACE,QAAQ,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,mCAAmC;gBAChE,4DAA4D;gBAC5D,uDAAuD;gBACvD,8BAA8B,EAAE,CAAC,kBAAkB;gBACnD,4CAA4C,EAAE,CAAC,kBAAkB;gBACjE,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,kEAAkE;gBAClE,0EAA0E;gBAC1E,gEAAgE;gBAChE,wBAAwB,EAAE,IAAI;gBAC9B,2CAA2C;gBAC3C,iBAAiB,EAAE;oBACjB,wBAAwB,EAAE,IAAI;iBAC/B;gBACD,8BAA8B;gBAC9B,mBAAmB,EAAE,IAAI;gBACzB,oBAAoB;gBACpB,4BAA4B,EAAE,IAAI;gBAClC,+CAA+C;gBAC/C,MAAM,EAAE,CAAC,EAAW,EAAE,EAAE;oBACtB,IAAI,kBAAkB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBACpD,qDAAqD;wBACrD,8DAA8D;wBAC7D,EAAU,CAAC,cAAc,CAAC,GAAG,EAAE;4BAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BAC3C,IAAI,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gCAC1C,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;4BACtC,CAAC;wBACH,CAAC,CAAC,CAAC;wBAEH,2EAA2E;wBAC3E,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAChD,IAAI,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC3D,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;wBAC3C,CAAC;oBACH,CAAC;oBAED,wDAAwD;oBACxD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;wBACzB,gEAAgE;wBAChE,0DAA0D;wBAC1D,8DAA8D;wBAC7D,EAAU,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAS,EAAE,EAAE;;4BAC5C,MAAM,SAAS,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAC;4BAChE,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC;4BAC3E,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gCAClC,MAAA,IAAI,CAAC,eAAe,qDAAG,SAAS,EAAE,UAAU,CAAC,CAAC;4BAChD,CAAC;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;aACK,EACR,YAAY,CACF,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,kBAAkB;;QAChB,8DAA8D;QAC9D,MAAM,KAAK,GAAG,MAAA,MAAA,MAAC,IAAI,CAAC,MAAc,0CAAE,YAAY,0CAAE,eAAe,kDAAI,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,eAAe;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,MAAM,YAAY,GAA4B,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC;YACrC,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,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;IAED,QAAQ,CAAC,UAAmC;;QAC1C,8DAA8D;QAC9D,MAAA,MAAC,IAAI,CAAC,MAAc,0CAAE,QAAQ,mDAAG,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,YAAY;;QACV,8DAA8D;QAC9D,OAAO,MAAA,MAAC,IAAI,CAAC,MAAc,0CAAE,cAAc,kDAAI,CAAC;IAClD,CAAC;IAED,qBAAqB;;QACnB,sEAAsE;QACtE,8DAA8D;QAC9D,MAAA,MAAC,IAAI,CAAC,MAAc,0CAAE,qBAAqB,kDAAI,CAAC;IAClD,CAAC;IAED,eAAe,CAAC,aAAqB,EAAE,WAAmB,EAAE,aAAsB;QAChF,8EAA8E;QAC9E,MAAM,kBAAkB,GAAG,eAAe,aAAa,EAAE,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC;YACZ,CAAC,kBAAkB,CAAC,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,aAAa,WAAW,EAAE;YACjE,CAAC,GAAG,kBAAkB,KAAK,CAAC,EAAE,WAAW;SAC1C,CAAC,CAAC;QAEH,yDAAyD;QACzD,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE;YAChC,eAAe,EAAE,aAAa;YAC9B,wBAAwB,EAAE,WAAW;YACrC,0BAA0B,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,aAAa,WAAW,EAAE;SACxE,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB,CAAC,UAAmC;;QACrD,8CAA8C;QAC9C,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,uBAAuB,CAAC,UAAmC;;QACzD,0DAA0D;QAC1D,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,aAAa;;QACX,0DAA0D;QAC1D,8DAA8D;QAC9D,OAAO,MAAA,MAAC,IAAI,CAAC,MAAc,0CAAE,eAAe,kDAAI,CAAC;IACnD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAiC,EAAE;IACrE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}