@syntrologie/runtime-sdk 2.1.0 → 2.2.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 (356) hide show
  1. package/CAPABILITIES.md +50 -43
  2. package/README.md +7 -7
  3. package/dist/RuntimeProvider.d.ts +1 -1
  4. package/dist/ShadowRootContext.d.ts +19 -0
  5. package/dist/SmartCanvasApp.d.ts +3 -3
  6. package/dist/SmartCanvasElement.d.ts +7 -2
  7. package/dist/SmartCanvasPortal.d.ts +1 -1
  8. package/dist/actions/executors/index.d.ts +3 -3
  9. package/dist/actions/executors/tour.d.ts +1 -1
  10. package/dist/actions/index.d.ts +4 -3
  11. package/dist/actions/schema.d.ts +1229 -0
  12. package/dist/actions/schema.js +67 -0
  13. package/dist/actions/schema.js.map +7 -0
  14. package/dist/adaptives/adaptive-chatbot/index.js +4 -4
  15. package/dist/adaptives/adaptive-chatbot/index.js.map +4 -4
  16. package/dist/adaptives/adaptive-content/index.js +2 -2
  17. package/dist/adaptives/adaptive-content/index.js.map +4 -4
  18. package/dist/adaptives/adaptive-faq/index.js +23 -6
  19. package/dist/adaptives/adaptive-faq/index.js.map +4 -4
  20. package/dist/adaptives/adaptive-gamification/index.js.map +1 -1
  21. package/dist/adaptives/adaptive-nav/index.js +22 -7
  22. package/dist/adaptives/adaptive-nav/index.js.map +4 -4
  23. package/dist/adaptives/adaptive-overlays/index.js +13 -13
  24. package/dist/adaptives/adaptive-overlays/index.js.map +4 -4
  25. package/dist/api.d.ts +2 -2
  26. package/dist/apps/examples/gamification-app.example.d.ts +4 -4
  27. package/dist/apps/index.d.ts +7 -7
  28. package/dist/blocks/data/index.d.ts +1 -1
  29. package/dist/blocks/index.d.ts +2 -2
  30. package/dist/blocks/interactive/index.d.ts +1 -1
  31. package/dist/blocks/notification/NotificationBlock.d.ts +1 -1
  32. package/dist/blocks/notification/index.d.ts +1 -1
  33. package/dist/bootstrap.d.ts +4 -4
  34. package/dist/chunk-AYTRRBR5.js +251 -0
  35. package/dist/chunk-AYTRRBR5.js.map +7 -0
  36. package/dist/chunk-HJKAXD5S.js +7921 -0
  37. package/dist/chunk-HJKAXD5S.js.map +7 -0
  38. package/dist/components/ShadowCanvasOverlay.d.ts +2 -2
  39. package/dist/components/TileCard.d.ts +1 -1
  40. package/dist/context/ContextManager.d.ts +1 -1
  41. package/dist/context/index.d.ts +3 -3
  42. package/dist/decisions/engine.d.ts +1 -1
  43. package/dist/decisions/index.d.ts +3 -3
  44. package/dist/decisions/schema.d.ts +24 -24
  45. package/dist/decisions/strategies/rules.d.ts +1 -1
  46. package/dist/decisions/strategies/score.d.ts +1 -1
  47. package/dist/editorLoader.d.ts +4 -4
  48. package/dist/events/EventAccumulator.d.ts +1 -1
  49. package/dist/events/EventBus.d.ts +1 -1
  50. package/dist/events/index.d.ts +7 -6
  51. package/dist/events/registerConfigPredicates.d.ts +19 -0
  52. package/dist/experiments/adapters/growthbook.d.ts +1 -1
  53. package/dist/experiments/index.d.ts +2 -2
  54. package/dist/experiments/registry.d.ts +1 -1
  55. package/dist/fetchers/index.d.ts +2 -2
  56. package/dist/hooks/useShadowCanvasConfig.d.ts +1 -1
  57. package/dist/hostPatcher/index.d.ts +2 -2
  58. package/dist/index.d.ts +24 -21
  59. package/dist/index.js +816 -75
  60. package/dist/index.js.map +7 -1
  61. package/dist/metrics/index.d.ts +1 -1
  62. package/dist/notifications/index.d.ts +6 -6
  63. package/dist/overlays/runtime/index.d.ts +3 -3
  64. package/dist/overlays/runtime/overlay/root.d.ts +17 -1
  65. package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
  66. package/dist/react.js +90 -134
  67. package/dist/react.js.map +7 -1
  68. package/dist/render/RenderContext.d.ts +2 -2
  69. package/dist/render/index.d.ts +2 -2
  70. package/dist/render/types.d.ts +2 -2
  71. package/dist/runtime.d.ts +8 -8
  72. package/dist/smart-canvas.esm.js +127 -124
  73. package/dist/smart-canvas.esm.js.map +4 -4
  74. package/dist/smart-canvas.js +17160 -16782
  75. package/dist/smart-canvas.js.map +4 -4
  76. package/dist/smart-canvas.min.js +127 -124
  77. package/dist/smart-canvas.min.js.map +4 -4
  78. package/dist/state/StateStore.d.ts +1 -1
  79. package/dist/state/helpers/cooldowns.d.ts +1 -1
  80. package/dist/state/helpers/dismissals.d.ts +1 -1
  81. package/dist/state/helpers/frequency.d.ts +1 -1
  82. package/dist/state/index.d.ts +3 -3
  83. package/dist/surfaces/index.d.ts +3 -3
  84. package/dist/surfaces/positioning.d.ts +1 -1
  85. package/dist/telemetry/adapters/posthog.d.ts +2 -2
  86. package/dist/telemetry/index.d.ts +3 -3
  87. package/dist/telemetry/registry.d.ts +1 -1
  88. package/dist/theme/ThemeProvider.d.ts +1 -1
  89. package/dist/theme/extractHostTheme.d.ts +1 -1
  90. package/dist/theme/index.d.ts +4 -4
  91. package/dist/types-only.d.ts +1 -1
  92. package/dist/types-only.js +1 -11
  93. package/dist/types-only.js.map +7 -1
  94. package/dist/types.d.ts +1 -1
  95. package/dist/version.d.ts +1 -1
  96. package/dist/widgets/index.d.ts +1 -1
  97. package/package.json +24 -17
  98. package/schema/canvas-config.base.schema.json +351 -0
  99. package/schema/canvas-config.schema.json +3202 -440
  100. package/scripts/validate-config.mjs +54 -58
  101. package/dist/RuntimeProvider.js +0 -113
  102. package/dist/RuntimeProvider.js.map +0 -1
  103. package/dist/SmartCanvasApp.js +0 -143
  104. package/dist/SmartCanvasApp.js.map +0 -1
  105. package/dist/SmartCanvasElement.js +0 -138
  106. package/dist/SmartCanvasElement.js.map +0 -1
  107. package/dist/SmartCanvasPortal.js +0 -17
  108. package/dist/SmartCanvasPortal.js.map +0 -1
  109. package/dist/actions/ActionEngine.js +0 -272
  110. package/dist/actions/ActionEngine.js.map +0 -1
  111. package/dist/actions/executors/index.js +0 -240
  112. package/dist/actions/executors/index.js.map +0 -1
  113. package/dist/actions/executors/tour.js +0 -332
  114. package/dist/actions/executors/tour.js.map +0 -1
  115. package/dist/actions/index.js +0 -12
  116. package/dist/actions/index.js.map +0 -1
  117. package/dist/actions/types.js +0 -8
  118. package/dist/actions/types.js.map +0 -1
  119. package/dist/actions/validation.js +0 -577
  120. package/dist/actions/validation.js.map +0 -1
  121. package/dist/antiFlicker.js +0 -39
  122. package/dist/antiFlicker.js.map +0 -1
  123. package/dist/api.js +0 -205
  124. package/dist/api.js.map +0 -1
  125. package/dist/apps/AppContext.js +0 -91
  126. package/dist/apps/AppContext.js.map +0 -1
  127. package/dist/apps/AppLoader.js +0 -293
  128. package/dist/apps/AppLoader.js.map +0 -1
  129. package/dist/apps/AppRegistry.js +0 -317
  130. package/dist/apps/AppRegistry.js.map +0 -1
  131. package/dist/apps/examples/gamification-app.example.js +0 -329
  132. package/dist/apps/examples/gamification-app.example.js.map +0 -1
  133. package/dist/apps/index.js +0 -16
  134. package/dist/apps/index.js.map +0 -1
  135. package/dist/apps/types.js +0 -8
  136. package/dist/apps/types.js.map +0 -1
  137. package/dist/blocks/data/ComparisonBlock.js +0 -95
  138. package/dist/blocks/data/ComparisonBlock.js.map +0 -1
  139. package/dist/blocks/data/StatsBlock.js +0 -102
  140. package/dist/blocks/data/StatsBlock.js.map +0 -1
  141. package/dist/blocks/data/index.js +0 -3
  142. package/dist/blocks/data/index.js.map +0 -1
  143. package/dist/blocks/index.js +0 -93
  144. package/dist/blocks/index.js.map +0 -1
  145. package/dist/blocks/interactive/ChecklistBlock.js +0 -111
  146. package/dist/blocks/interactive/ChecklistBlock.js.map +0 -1
  147. package/dist/blocks/interactive/RatingBlock.js +0 -147
  148. package/dist/blocks/interactive/RatingBlock.js.map +0 -1
  149. package/dist/blocks/interactive/index.js +0 -3
  150. package/dist/blocks/interactive/index.js.map +0 -1
  151. package/dist/blocks/notification/NotificationBlock.js +0 -171
  152. package/dist/blocks/notification/NotificationBlock.js.map +0 -1
  153. package/dist/blocks/notification/index.js +0 -2
  154. package/dist/blocks/notification/index.js.map +0 -1
  155. package/dist/blocks/theme-tokens.js +0 -25
  156. package/dist/blocks/theme-tokens.js.map +0 -1
  157. package/dist/bootstrap.js +0 -448
  158. package/dist/bootstrap.js.map +0 -1
  159. package/dist/bundle-entry.js +0 -9
  160. package/dist/bundle-entry.js.map +0 -1
  161. package/dist/components/ShadowCanvasOverlay.js +0 -327
  162. package/dist/components/ShadowCanvasOverlay.js.map +0 -1
  163. package/dist/components/TileCard.js +0 -103
  164. package/dist/components/TileCard.js.map +0 -1
  165. package/dist/components/TileWheel.js +0 -50
  166. package/dist/components/TileWheel.js.map +0 -1
  167. package/dist/config-validator.js +0 -173
  168. package/dist/config-validator.js.map +0 -1
  169. package/dist/configFetcher.js +0 -131
  170. package/dist/configFetcher.js.map +0 -1
  171. package/dist/context/ContextManager.js +0 -269
  172. package/dist/context/ContextManager.js.map +0 -1
  173. package/dist/context/index.js +0 -7
  174. package/dist/context/index.js.map +0 -1
  175. package/dist/context/schema.js +0 -50
  176. package/dist/context/schema.js.map +0 -1
  177. package/dist/context/types.js +0 -8
  178. package/dist/context/types.js.map +0 -1
  179. package/dist/controller.js +0 -34
  180. package/dist/controller.js.map +0 -1
  181. package/dist/decisions/engine.js +0 -117
  182. package/dist/decisions/engine.js.map +0 -1
  183. package/dist/decisions/index.js +0 -10
  184. package/dist/decisions/index.js.map +0 -1
  185. package/dist/decisions/schema.js +0 -151
  186. package/dist/decisions/schema.js.map +0 -1
  187. package/dist/decisions/strategies/rules.js +0 -166
  188. package/dist/decisions/strategies/rules.js.map +0 -1
  189. package/dist/decisions/strategies/score.js +0 -29
  190. package/dist/decisions/strategies/score.js.map +0 -1
  191. package/dist/decisions/types.js +0 -2
  192. package/dist/decisions/types.js.map +0 -1
  193. package/dist/earlyPatcher.js +0 -20
  194. package/dist/earlyPatcher.js.map +0 -1
  195. package/dist/editorLoader.js +0 -254
  196. package/dist/editorLoader.js.map +0 -1
  197. package/dist/events/EventAccumulator.js +0 -101
  198. package/dist/events/EventAccumulator.js.map +0 -1
  199. package/dist/events/EventBus.js +0 -152
  200. package/dist/events/EventBus.js.map +0 -1
  201. package/dist/events/index.js +0 -11
  202. package/dist/events/index.js.map +0 -1
  203. package/dist/events/normalizers/canvas.js +0 -116
  204. package/dist/events/normalizers/canvas.js.map +0 -1
  205. package/dist/events/normalizers/posthog.js +0 -171
  206. package/dist/events/normalizers/posthog.js.map +0 -1
  207. package/dist/events/schema.js +0 -30
  208. package/dist/events/schema.js.map +0 -1
  209. package/dist/events/types.js +0 -54
  210. package/dist/events/types.js.map +0 -1
  211. package/dist/experiments/adapters/growthbook.js +0 -81
  212. package/dist/experiments/adapters/growthbook.js.map +0 -1
  213. package/dist/experiments/index.js +0 -4
  214. package/dist/experiments/index.js.map +0 -1
  215. package/dist/experiments/registry.js +0 -30
  216. package/dist/experiments/registry.js.map +0 -1
  217. package/dist/experiments/types.js +0 -2
  218. package/dist/experiments/types.js.map +0 -1
  219. package/dist/fetchers/cdnFetcher.js +0 -96
  220. package/dist/fetchers/cdnFetcher.js.map +0 -1
  221. package/dist/fetchers/experimentsFetcher.js +0 -109
  222. package/dist/fetchers/experimentsFetcher.js.map +0 -1
  223. package/dist/fetchers/index.js +0 -5
  224. package/dist/fetchers/index.js.map +0 -1
  225. package/dist/fetchers/mergeConfigs.js +0 -38
  226. package/dist/fetchers/mergeConfigs.js.map +0 -1
  227. package/dist/fetchers/registry.js +0 -58
  228. package/dist/fetchers/registry.js.map +0 -1
  229. package/dist/fetchers/types.js +0 -2
  230. package/dist/fetchers/types.js.map +0 -1
  231. package/dist/hooks/useCanvasOverlays.js +0 -128
  232. package/dist/hooks/useCanvasOverlays.js.map +0 -1
  233. package/dist/hooks/useHostPatches.js +0 -40
  234. package/dist/hooks/useHostPatches.js.map +0 -1
  235. package/dist/hooks/useShadowCanvasConfig.js +0 -63
  236. package/dist/hooks/useShadowCanvasConfig.js.map +0 -1
  237. package/dist/hostPatcher/core/patcher.js +0 -181
  238. package/dist/hostPatcher/core/patcher.js.map +0 -1
  239. package/dist/hostPatcher/core/sanitizer.js +0 -66
  240. package/dist/hostPatcher/core/sanitizer.js.map +0 -1
  241. package/dist/hostPatcher/core/types.js +0 -2
  242. package/dist/hostPatcher/core/types.js.map +0 -1
  243. package/dist/hostPatcher/index.js +0 -7
  244. package/dist/hostPatcher/index.js.map +0 -1
  245. package/dist/hostPatcher/policy/defaultPolicy.js +0 -23
  246. package/dist/hostPatcher/policy/defaultPolicy.js.map +0 -1
  247. package/dist/hostPatcher/utils/anchors.js +0 -105
  248. package/dist/hostPatcher/utils/anchors.js.map +0 -1
  249. package/dist/hostPatcher/utils/observer.js +0 -11
  250. package/dist/hostPatcher/utils/observer.js.map +0 -1
  251. package/dist/logger.js +0 -81
  252. package/dist/logger.js.map +0 -1
  253. package/dist/metrics/index.js +0 -5
  254. package/dist/metrics/index.js.map +0 -1
  255. package/dist/metrics/sessionMetrics.js +0 -178
  256. package/dist/metrics/sessionMetrics.js.map +0 -1
  257. package/dist/notifications/NotificationToastStack.js +0 -118
  258. package/dist/notifications/NotificationToastStack.js.map +0 -1
  259. package/dist/notifications/index.js +0 -6
  260. package/dist/notifications/index.js.map +0 -1
  261. package/dist/notifications/matcher.js +0 -66
  262. package/dist/notifications/matcher.js.map +0 -1
  263. package/dist/notifications/types.js +0 -13
  264. package/dist/notifications/types.js.map +0 -1
  265. package/dist/notifications/useNotifications.js +0 -104
  266. package/dist/notifications/useNotifications.js.map +0 -1
  267. package/dist/notifications/useNotifyWatcher.js +0 -62
  268. package/dist/notifications/useNotifyWatcher.js.map +0 -1
  269. package/dist/overlays/fetcher.js +0 -15
  270. package/dist/overlays/fetcher.js.map +0 -1
  271. package/dist/overlays/recipeRegistry.js +0 -32
  272. package/dist/overlays/recipeRegistry.js.map +0 -1
  273. package/dist/overlays/runtime/anchor/resolve.js +0 -87
  274. package/dist/overlays/runtime/anchor/resolve.js.map +0 -1
  275. package/dist/overlays/runtime/index.js +0 -8
  276. package/dist/overlays/runtime/index.js.map +0 -1
  277. package/dist/overlays/runtime/overlay/highlight.js +0 -160
  278. package/dist/overlays/runtime/overlay/highlight.js.map +0 -1
  279. package/dist/overlays/runtime/overlay/modal.js +0 -78
  280. package/dist/overlays/runtime/overlay/modal.js.map +0 -1
  281. package/dist/overlays/runtime/overlay/root.js +0 -297
  282. package/dist/overlays/runtime/overlay/root.js.map +0 -1
  283. package/dist/overlays/runtime/overlay/runner.js +0 -602
  284. package/dist/overlays/runtime/overlay/runner.js.map +0 -1
  285. package/dist/overlays/runtime/overlay/tooltip.js +0 -232
  286. package/dist/overlays/runtime/overlay/tooltip.js.map +0 -1
  287. package/dist/overlays/runtime/utils/dom.js +0 -12
  288. package/dist/overlays/runtime/utils/dom.js.map +0 -1
  289. package/dist/overlays/schema.js +0 -52
  290. package/dist/overlays/schema.js.map +0 -1
  291. package/dist/overlays/types.js +0 -2
  292. package/dist/overlays/types.js.map +0 -1
  293. package/dist/render/RenderContext.js +0 -69
  294. package/dist/render/RenderContext.js.map +0 -1
  295. package/dist/render/index.js +0 -3
  296. package/dist/render/index.js.map +0 -1
  297. package/dist/render/types.js +0 -2
  298. package/dist/render/types.js.map +0 -1
  299. package/dist/runtime.js +0 -237
  300. package/dist/runtime.js.map +0 -1
  301. package/dist/state/StateStore.js +0 -176
  302. package/dist/state/StateStore.js.map +0 -1
  303. package/dist/state/helpers/cooldowns.js +0 -31
  304. package/dist/state/helpers/cooldowns.js.map +0 -1
  305. package/dist/state/helpers/dismissals.js +0 -34
  306. package/dist/state/helpers/dismissals.js.map +0 -1
  307. package/dist/state/helpers/frequency.js +0 -43
  308. package/dist/state/helpers/frequency.js.map +0 -1
  309. package/dist/state/index.js +0 -7
  310. package/dist/state/index.js.map +0 -1
  311. package/dist/state/schema.js +0 -25
  312. package/dist/state/schema.js.map +0 -1
  313. package/dist/state/types.js +0 -9
  314. package/dist/state/types.js.map +0 -1
  315. package/dist/store/example.js +0 -43
  316. package/dist/store/example.js.map +0 -1
  317. package/dist/store/mini-effector.js +0 -88
  318. package/dist/store/mini-effector.js.map +0 -1
  319. package/dist/surfaces/Surfaces.js +0 -361
  320. package/dist/surfaces/Surfaces.js.map +0 -1
  321. package/dist/surfaces/index.js +0 -12
  322. package/dist/surfaces/index.js.map +0 -1
  323. package/dist/surfaces/positioning.js +0 -228
  324. package/dist/surfaces/positioning.js.map +0 -1
  325. package/dist/surfaces/types.js +0 -23
  326. package/dist/surfaces/types.js.map +0 -1
  327. package/dist/telemetry/adapters/noop.js +0 -42
  328. package/dist/telemetry/adapters/noop.js.map +0 -1
  329. package/dist/telemetry/adapters/posthog.js +0 -180
  330. package/dist/telemetry/adapters/posthog.js.map +0 -1
  331. package/dist/telemetry/index.js +0 -4
  332. package/dist/telemetry/index.js.map +0 -1
  333. package/dist/telemetry/registry.js +0 -29
  334. package/dist/telemetry/registry.js.map +0 -1
  335. package/dist/telemetry/types.js +0 -2
  336. package/dist/telemetry/types.js.map +0 -1
  337. package/dist/theme/ThemeProvider.js +0 -109
  338. package/dist/theme/ThemeProvider.js.map +0 -1
  339. package/dist/theme/defaultTheme.js +0 -190
  340. package/dist/theme/defaultTheme.js.map +0 -1
  341. package/dist/theme/extractHostTheme.js +0 -259
  342. package/dist/theme/extractHostTheme.js.map +0 -1
  343. package/dist/theme/index.js +0 -7
  344. package/dist/theme/index.js.map +0 -1
  345. package/dist/theme/types.js +0 -6
  346. package/dist/theme/types.js.map +0 -1
  347. package/dist/token.js +0 -44
  348. package/dist/token.js.map +0 -1
  349. package/dist/types.js +0 -17
  350. package/dist/types.js.map +0 -1
  351. package/dist/version.js +0 -14
  352. package/dist/version.js.map +0 -1
  353. package/dist/widgets/WidgetRegistry.js +0 -190
  354. package/dist/widgets/WidgetRegistry.js.map +0 -1
  355. package/dist/widgets/index.js +0 -7
  356. package/dist/widgets/index.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1,7 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,qEAAqE;AACrE,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,EAAE;AACF,+EAA+E;AAC/E,mFAAmF;AACnF,+EAA+E;AAC/E,8DAA8D;AAC9D,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEpD,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,OAAO,CAAC;AACtB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AAEnC,sCAAsC;AACtC,cAAc,WAAW,CAAC;AAE1B,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,mDAAmD;AACnD,cAAc,WAAW,CAAC;AAE1B,mCAAmC;AACnC,cAAc,UAAU,CAAC;AAEzB,4CAA4C;AAC5C,cAAc,iBAAiB,CAAC;AAEhC,gDAAgD;AAChD,cAAc,SAAS,CAAC;AAExB,mDAAmD;AACnD,cAAc,aAAa,CAAC;AAE5B,sDAAsD;AACtD,cAAc,WAAW,CAAC;AAE1B,qDAAqD;AACrD,cAAc,YAAY,CAAC;AAE3B,yCAAyC;AACzC,cAAc,WAAW,CAAC;AAE1B,0BAA0B;AAC1B,cAAc,QAAQ,CAAC;AAEvB,kBAAkB;AAClB,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGtE,mCAAmC;AACnC,OAAO,EACL,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEnD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAI,MAAc,CAAC,KAAK,CAAC;IACtC,MAAc,CAAC,KAAK,GAAG;QACtB,GAAG,QAAQ;QACX,WAAW,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,WAAW,KAAI,iBAAiB;QACvD,KAAK;QACL,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE;KACzD,CAAC;AACJ,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/components/TileWheel.tsx", "../src/config-validator.ts", "../src/overlays/schema.ts", "../src/overlays/fetcher.ts", "../src/SmartCanvasPortal.tsx", "../src/context/schema.ts", "../src/decisions/schema.ts", "../src/events/schema.ts", "../src/state/schema.ts"],
4
+ "sourcesContent": ["// ============================================================================\n// Early SynOS exposure for adaptive self-registration + shared React\n// ============================================================================\n// Adaptive bundles loaded via <script> (IIFE) check window.SynOS.appRegistry\n// to self-register. In the Chrome extension's dev mode, adaptives load BEFORE\n// Syntro.init() runs. Expose the singleton appRegistry here (module scope) so\n// it's available as soon as smart-canvas.min.js loads. Syntro.init() later\n// enriches the SynOS object with runtime/version but reuses the same registry.\n//\n// React and ReactDOM are also exposed here so that adaptive bundles built with\n// syntroReactPlugin can resolve their lazy shims via SynOS.React / SynOS.ReactDOM.\n// This makes the runtime SDK the single React owner \u2014 adaptives and the editor\n// SDK consume React from SynOS, never from their own bundles.\n\nimport React from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport * as ReactDOMClient from 'react-dom/client';\nimport { appRegistry as _earlyAppRegistry } from './apps';\n\nexport * from './api';\nexport * from './components/ShadowCanvasOverlay';\nexport * from './components/TileCard';\nexport * from './components/TileWheel';\nexport * from './config-validator';\nexport * from './configFetcher';\nexport * from './controller';\nexport * from './experiments';\nexport * from './hooks/useShadowCanvasConfig';\n// Metrics for session-based targeting\nexport * from './metrics';\nexport * from './overlays/fetcher';\nexport * from './overlays/schema';\nexport * from './overlays/types';\nexport * from './ShadowRootContext';\nexport * from './SmartCanvasApp';\nexport * from './SmartCanvasElement';\nexport * from './SmartCanvasPortal';\nexport * from './telemetry';\nexport * from './types';\nexport * from './version';\n\n// ============================================================================\n// v2 Runtime Modules\n// ============================================================================\n\n// Actions - Unified execution layer for interventions\nexport * from './actions';\n// Apps - SynOS app system\nexport * from './apps';\n// Context - Page/session/viewport state management\nexport * from './context';\n// Decisions - Strategy-based conditional rendering\nexport * from './decisions';\n// Events - Normalized event stream\nexport * from './events';\n// Events - Normalized event stream\nexport * from './events';\n// Notifications - Toast notification system\nexport * from './notifications';\n// React context for runtime access\nexport {\n RuntimeProvider,\n useDecision,\n usePageContext,\n useRuntime,\n useRuntimeContext,\n useRuntimeEvents,\n useRuntimeState,\n useSessionContext,\n useViewportContext,\n} from './RuntimeProvider';\nexport type { RuntimeMode, SmartCanvasRuntime, SmartCanvasRuntimeOptions } from './runtime';\n// Unified runtime\nexport { createSmartCanvasRuntime, RUNTIME_VERSION } from './runtime';\n// State - Persistent state storage with helpers\nexport * from './state';\n// State - Persistent state storage with helpers\nexport * from './state';\n// Surfaces - Managed surface system for rendering UI\nexport * from './surfaces';\n// Widgets - Mountable component registry\nexport * from './widgets';\n\n// ============================================================================\n// Single-token initialization\n// ============================================================================\n\nexport type { SyntroInitOptions, SyntroInitResult } from './bootstrap';\nexport { Syntro } from './bootstrap';\nexport type { SyntroTokenPayload } from './token';\nexport { decodeToken, encodeToken } from './token';\n\nif (typeof window !== 'undefined') {\n const existing = (window as any).SynOS;\n (window as any).SynOS = {\n ...existing,\n appRegistry: existing?.appRegistry || _earlyAppRegistry,\n React,\n ReactDOM: { ...ReactDOMClient, createPortal, flushSync },\n };\n}\n", "import { border, brand, slateGrey } from '@syntro/design-system/tokens';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport type { TelemetryClient } from '../telemetry/types';\nimport type { TileConfig } from '../types';\n\nimport { TileCard } from './TileCard';\n\nexport interface TileWheelProps {\n tiles: TileConfig[];\n intervalMs?: number;\n telemetry?: TelemetryClient;\n}\n\nexport function TileWheel({ tiles, intervalMs = 7000, telemetry }: TileWheelProps) {\n const [index, setIndex] = useState(0);\n const ordered = useMemo(\n () => [...tiles].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0)),\n [tiles]\n );\n\n useEffect(() => {\n telemetry?.trackCanvasOpened('wheel');\n }, [telemetry]);\n\n useEffect(() => {\n if (ordered.length <= 1) return;\n const id = setInterval(() => {\n setIndex((prev) => (prev + 1) % ordered.length);\n }, intervalMs);\n return () => clearInterval(id);\n }, [ordered, intervalMs]);\n\n useEffect(() => {\n const current = ordered[index];\n if (current) {\n telemetry?.trackRectangleViewed(current.id, 'wheel');\n }\n }, [index, ordered, telemetry]);\n\n if (!ordered.length) return null;\n\n return (\n <div\n style={{\n position: 'relative',\n overflow: 'hidden',\n borderRadius: '1.5rem',\n border: `1px solid ${border.primary}`,\n background: slateGrey[1],\n padding: '1.5rem',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n }}\n data-shadow-canvas-id=\"wheel\"\n >\n <div\n style={{\n display: 'flex',\n transition: 'transform 700ms ease-out',\n transform: `translateX(-${index * 100}%)`,\n width: `${ordered.length * 100}%`,\n }}\n >\n {ordered.map((tile) => (\n <div key={tile.id} style={{ width: '100%', flexShrink: 0, padding: '0 1rem' }}>\n <TileCard config={tile} surface=\"wheel\" telemetry={telemetry} />\n </div>\n ))}\n </div>\n <div style={{ marginTop: '1rem', display: 'flex', justifyContent: 'center', gap: '0.5rem' }}>\n {ordered.map((tile, idx) => (\n <button\n type=\"button\"\n key={tile.id}\n style={{\n height: '0.5rem',\n width: '1.5rem',\n borderRadius: '9999px',\n background: idx === index ? brand[3] : slateGrey[6],\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n }}\n onClick={() => setIndex(idx)}\n />\n ))}\n </div>\n </div>\n );\n}\n", "/**\n * Config validation and migration for SDK versioning.\n *\n * This module handles:\n * - Validating configs against the current SDK schema version\n * - Migrating old config formats to current version\n * - Providing warnings for version mismatches\n */\n\nimport type { CanvasConfigResponse } from './types';\nimport { SDK_SCHEMA_VERSION } from './types';\n\n/**\n * Result of config validation.\n */\nexport interface ConfigValidationResult {\n /** Whether the config is valid and can be used */\n valid: boolean;\n\n /** Warning messages (non-fatal issues) */\n warnings: string[];\n\n /** Error messages (fatal issues that prevent usage) */\n errors: string[];\n\n /** Migrated config if old version was detected */\n migratedConfig?: CanvasConfigResponse;\n}\n\n/**\n * Parse a schema version string into major and minor numbers.\n */\nexport function parseVersion(version: string): { major: number; minor: number } {\n const parts = version.split('.');\n return {\n major: parseInt(parts[0] || '0', 10),\n minor: parseInt(parts[1] || '0', 10),\n };\n}\n\n/**\n * Validate and normalize a config, handling version mismatches.\n *\n * This function:\n * 1. Checks if config is valid object\n * 2. Compares config schema version with SDK version\n * 3. Migrates old configs to current version\n * 4. Returns validation result with warnings/errors\n *\n * @param config - Raw config from backend or fetcher\n * @returns Validation result with any migrations applied\n */\nexport function validateConfig(config: unknown): ConfigValidationResult {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n // Type check\n if (!config || typeof config !== 'object') {\n return {\n valid: false,\n errors: ['Config must be an object'],\n warnings,\n };\n }\n\n const typedConfig = config as Partial<CanvasConfigResponse>;\n\n // Check required fields\n if (!typedConfig.tiles) {\n errors.push('Config missing required field: tiles');\n }\n if (!typedConfig.actions) {\n errors.push('Config missing required field: actions');\n }\n if (!typedConfig.fetchedAt) {\n errors.push('Config missing required field: fetchedAt');\n }\n\n if (errors.length > 0) {\n return { valid: false, errors, warnings };\n }\n\n // Check schema version\n const configVersion = typedConfig.schemaVersion || '1.0';\n const configVer = parseVersion(configVersion);\n const sdkVer = parseVersion(SDK_SCHEMA_VERSION);\n\n // Future schema version (newer backend)\n if (configVer.major > sdkVer.major) {\n warnings.push(\n `Config schema v${configVersion} is newer than SDK v${SDK_SCHEMA_VERSION}. ` +\n `Some features may not work. Update SDK to latest version.`\n );\n }\n\n // Old schema version (older backend or missing version)\n if (configVer.major < sdkVer.major || !typedConfig.schemaVersion) {\n warnings.push(\n `Config schema v${configVersion} is older than SDK v${SDK_SCHEMA_VERSION}. ` +\n `Migrating config to current version.`\n );\n return {\n valid: true,\n warnings,\n errors,\n migratedConfig: migrateConfig(typedConfig as CanvasConfigResponse, configVersion),\n };\n }\n\n // Compatible version (same major version)\n return {\n valid: true,\n warnings,\n errors,\n };\n}\n\n/**\n * Migrate old config format to current SDK version.\n *\n * This function applies all necessary transformations to bring\n * an old config up to the current schema version.\n *\n * @param config - Config to migrate\n * @param fromVersion - Version to migrate from\n * @returns Migrated config at current SDK version\n */\nfunction migrateConfig(config: CanvasConfigResponse, fromVersion: string): CanvasConfigResponse {\n let migrated = { ...config };\n\n const fromVer = parseVersion(fromVersion);\n\n // v1.x -> v2.x migration\n if (fromVer.major === 1) {\n migrated = migrateV1ToV2(migrated);\n }\n\n // Update schema version to current\n migrated.schemaVersion = SDK_SCHEMA_VERSION;\n\n return migrated;\n}\n\n/**\n * Migrate v1.x config to v2.0 format.\n *\n * Changes in v2.0:\n * - Introduced ActivationConfig to replace experiment field\n * - Unified ActionStep format\n * - Added schemaVersion field\n */\nfunction migrateV1ToV2(config: any): CanvasConfigResponse {\n const migrated: CanvasConfigResponse = {\n schemaVersion: '2.0',\n tiles: [],\n actions: config.actions || [],\n fetchedAt: config.fetchedAt || new Date().toISOString(),\n };\n\n // Migrate tiles\n if (config.tiles && Array.isArray(config.tiles)) {\n migrated.tiles = config.tiles.map((tile: any) => {\n const migratedTile = { ...tile };\n\n // Migrate deprecated experiment field to activation\n if (tile.experiment && !tile.activation) {\n const exp = tile.experiment;\n\n // Convert old experiment format to new activation format\n if (exp.featureKey) {\n migratedTile.activation = {\n strategy: {\n type: 'external' as const,\n provider: 'growthbook' as const,\n featureKey: exp.featureKey,\n fallback: false,\n },\n };\n }\n\n // Remove deprecated field\n delete migratedTile.experiment;\n }\n\n return migratedTile;\n });\n }\n\n // Copy optional fields\n if (config.configVersion) migrated.configVersion = config.configVersion;\n if (config.canvasTitle) migrated.canvasTitle = config.canvasTitle;\n if (config.theme) migrated.theme = config.theme;\n if (config.launcher) migrated.launcher = config.launcher;\n if (config.routes) migrated.routes = config.routes;\n\n return migrated;\n}\n\n/**\n * Check if a config needs migration.\n *\n * @param config - Config to check\n * @returns True if migration is needed\n */\nexport function needsMigration(config: unknown): boolean {\n if (!config || typeof config !== 'object') {\n return false;\n }\n\n const typedConfig = config as Partial<CanvasConfigResponse>;\n const configVersion = typedConfig.schemaVersion || '1.0';\n const configVer = parseVersion(configVersion);\n const sdkVer = parseVersion(SDK_SCHEMA_VERSION);\n\n return configVer.major < sdkVer.major || !typedConfig.schemaVersion;\n}\n", "import { z } from 'zod';\n\nexport const SelectorZ = z.union([\n z.object({ type: z.literal('data'), key: z.string(), value: z.string().optional() }),\n z.object({ type: z.literal('css'), value: z.string() }),\n z.object({ type: z.literal('aria'), role: z.string().optional(), label: z.string().optional() }),\n z.object({ type: z.literal('shadow-css'), value: z.string() }),\n z.object({ type: z.literal('ref'), el: z.any() }), // runtime-only\n]);\n\nexport const TooltipStepZ = z.object({\n kind: z.literal('tooltip'),\n id: z.string(),\n anchor: SelectorZ,\n content: z.object({ title: z.string().optional(), body: z.string() }),\n placement: z.enum(['top', 'bottom', 'left', 'right', 'auto']).optional(),\n offsetPx: z.number().optional(),\n blocking: z.boolean().optional(),\n trigger: z.enum(['immediate', 'hover', 'click']).optional(),\n dismiss: z\n .object({\n onEsc: z.boolean().optional(),\n closeButton: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n })\n .optional(),\n});\n\nexport const HighlightStepZ = z.object({\n kind: z.literal('highlight'),\n id: z.string(),\n anchor: SelectorZ,\n copy: z.string().optional(),\n ring: z.object({ paddingPx: z.number().optional(), radiusPx: z.number().optional() }).optional(),\n scrim: z.object({ opacity: z.number().optional() }).optional(),\n ringColor: z.string().optional(),\n blocking: z.boolean().optional(),\n dismiss: z\n .object({\n onClickOutside: z.boolean().optional(),\n onEsc: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n })\n .optional(),\n});\n\nexport const CanvasRecipeZ = z.object({\n id: z.string(),\n version: z.number(),\n routes: z.array(z.string()).optional(),\n steps: z.array(z.union([TooltipStepZ, HighlightStepZ])),\n});\n\nexport function validateRecipe(json: unknown) {\n return CanvasRecipeZ.parse(json);\n}\n", "import { type CanvasFetcherOptions, resolveConfigUri } from '../configFetcher';\n\nimport { CanvasRecipeZ } from './schema';\nimport type { CanvasRecipe } from './types';\n\nexport type OverlayRecipeFetcher = () => Promise<CanvasRecipe>;\n\nexport const createOverlayRecipeFetcher =\n ({\n configUri,\n experiments,\n featureKey = 'smart-canvas-overlay-uri',\n credentials = 'include',\n }: CanvasFetcherOptions = {}): OverlayRecipeFetcher =>\n async () => {\n const uri = resolveConfigUri({ configUri, experiments, featureKey });\n if (!uri) {\n throw new Error('SmartCanvas overlays: recipe URI missing (env + feature unset).');\n }\n const response = await fetch(uri, { credentials });\n if (!response.ok) {\n throw new Error(`SmartCanvas overlays: failed to fetch recipe (${response.status})`);\n }\n const json = await response.json();\n return CanvasRecipeZ.parse(json) as CanvasRecipe;\n };\n", "import { type ReactNode, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport type { SmartCanvasElement } from './SmartCanvasElement';\n\nexport interface SmartCanvasPortalProps {\n element: SmartCanvasElement | null;\n children: ReactNode;\n}\n\nexport function SmartCanvasPortal({ element, children }: SmartCanvasPortalProps) {\n const [mountNode, setMountNode] = useState<HTMLElement | null>(null);\n\n useLayoutEffect(() => {\n if (!element) {\n setMountNode(null);\n return;\n }\n setMountNode(element.getMountNode());\n return () => setMountNode(null);\n }, [element]);\n\n if (!mountNode) return null;\n return createPortal(children, mountNode);\n}\n", "/**\n * Zod schemas for RuntimeContext validation.\n */\nimport { z } from 'zod';\n\nexport const PageContextZ = z.object({\n url: z.string(),\n routeId: z.string().optional(),\n title: z.string().optional(),\n locale: z.string().optional(),\n});\n\nexport const PageHistoryEntryZ = z.object({\n url: z.string(),\n ts: z.number(),\n});\n\nexport const SessionContextZ = z.object({\n sessionId: z.string(),\n startTs: z.number(),\n pageHistory: z.array(PageHistoryEntryZ).optional(),\n});\n\nexport const ViewportContextZ = z.object({\n width: z.number(),\n height: z.number(),\n});\n\nexport const BoundingBoxZ = z.object({\n x: z.number(),\n y: z.number(),\n w: z.number(),\n h: z.number(),\n});\n\nexport const AnchorStateZ = z.object({\n anchorId: z.string(),\n present: z.boolean(),\n visible: z.boolean().optional(),\n boundingBox: BoundingBoxZ.optional(),\n});\n\nexport const AugmentationZ = z.record(\n z.string(),\n z.union([z.number(), z.string(), z.boolean(), z.undefined()])\n);\n\nexport const RuntimeContextZ = z.object({\n page: PageContextZ,\n session: SessionContextZ,\n viewport: ViewportContextZ,\n anchors: z.array(AnchorStateZ).optional(),\n augmented: AugmentationZ.optional(),\n});\n\n/**\n * Validate a RuntimeContext object.\n */\nexport function validateRuntimeContext(data: unknown) {\n return RuntimeContextZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type RuntimeContextSchema = z.infer<typeof RuntimeContextZ>;\nexport type PageContextSchema = z.infer<typeof PageContextZ>;\nexport type SessionContextSchema = z.infer<typeof SessionContextZ>;\nexport type ViewportContextSchema = z.infer<typeof ViewportContextZ>;\nexport type AnchorStateSchema = z.infer<typeof AnchorStateZ>;\n", "/**\n * Zod schemas for decision strategy validation.\n */\nimport { z } from 'zod';\n\n// =============================================================================\n// CONDITION SCHEMAS\n// =============================================================================\n\nexport const PageUrlConditionZ = z.object({\n type: z.literal('page_url'),\n url: z.string(),\n});\n\nexport const RouteConditionZ = z.object({\n type: z.literal('route'),\n routeId: z.string(),\n});\n\nexport const AnchorVisibleConditionZ = z.object({\n type: z.literal('anchor_visible'),\n anchorId: z.string(),\n state: z.enum(['visible', 'present', 'absent']),\n});\n\nexport const EventOccurredConditionZ = z.object({\n type: z.literal('event_occurred'),\n eventName: z.string(),\n withinMs: z.number().optional(),\n});\n\nexport const StateEqualsConditionZ = z.object({\n type: z.literal('state_equals'),\n key: z.string(),\n value: z.unknown(),\n});\n\nexport const ViewportConditionZ = z.object({\n type: z.literal('viewport'),\n minWidth: z.number().optional(),\n maxWidth: z.number().optional(),\n minHeight: z.number().optional(),\n maxHeight: z.number().optional(),\n});\n\nexport const SessionMetricConditionZ = z.object({\n type: z.literal('session_metric'),\n key: z.string(),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n threshold: z.number(),\n});\n\nexport const DismissedConditionZ = z.object({\n type: z.literal('dismissed'),\n key: z.string(),\n inverted: z.boolean().optional(),\n});\n\nexport const CooldownActiveConditionZ = z.object({\n type: z.literal('cooldown_active'),\n key: z.string(),\n inverted: z.boolean().optional(),\n});\n\nexport const FrequencyLimitConditionZ = z.object({\n type: z.literal('frequency_limit'),\n key: z.string(),\n limit: z.number(),\n inverted: z.boolean().optional(),\n});\n\nexport const EventCountConditionZ = z.object({\n type: z.literal('event_count'),\n key: z.string(),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n count: z.number().int().min(0),\n withinMs: z.number().positive().optional(),\n});\n\nexport const ConditionZ = z.discriminatedUnion('type', [\n PageUrlConditionZ,\n RouteConditionZ,\n AnchorVisibleConditionZ,\n EventOccurredConditionZ,\n StateEqualsConditionZ,\n ViewportConditionZ,\n SessionMetricConditionZ,\n DismissedConditionZ,\n CooldownActiveConditionZ,\n FrequencyLimitConditionZ,\n EventCountConditionZ,\n]);\n\n// =============================================================================\n// STRATEGY SCHEMAS\n// =============================================================================\n\nexport const RuleZ = z.object({\n conditions: z.array(ConditionZ),\n value: z.unknown(),\n});\n\nexport const RuleStrategyZ = z.object({\n type: z.literal('rules'),\n rules: z.array(RuleZ),\n default: z.unknown(),\n});\n\nexport const ScoreStrategyZ = z.object({\n type: z.literal('score'),\n field: z.string(),\n threshold: z.number(),\n above: z.unknown(),\n below: z.unknown(),\n});\n\nexport const ModelStrategyZ = z.object({\n type: z.literal('model'),\n modelId: z.string(),\n inputs: z.array(z.string()),\n outputMapping: z.record(z.string(), z.unknown()),\n default: z.unknown(),\n});\n\nexport const ExternalStrategyZ = z.object({\n type: z.literal('external'),\n endpoint: z.string(),\n method: z.enum(['GET', 'POST']).optional(),\n default: z.unknown(),\n timeoutMs: z.number().optional(),\n});\n\nexport const DecisionStrategyZ = z.discriminatedUnion('type', [\n RuleStrategyZ,\n ScoreStrategyZ,\n ModelStrategyZ,\n ExternalStrategyZ,\n]);\n\n// =============================================================================\n// ACTIVATION CONFIG SCHEMA\n// =============================================================================\n\nexport const RouteFilterZ = z.object({\n include: z.array(z.string()).optional(),\n exclude: z.array(z.string()).optional(),\n});\n\nexport const ActivationConfigZ = z.object({\n routes: RouteFilterZ.optional(),\n strategy: DecisionStrategyZ.optional(),\n});\n\n// =============================================================================\n// VALIDATION FUNCTIONS\n// =============================================================================\n\n/**\n * Validate a Condition object.\n */\nexport function validateCondition(data: unknown) {\n return ConditionZ.safeParse(data);\n}\n\n/**\n * Validate a DecisionStrategy object.\n */\nexport function validateStrategy(data: unknown) {\n return DecisionStrategyZ.safeParse(data);\n}\n\n/**\n * Validate an ActivationConfig object.\n */\nexport function validateActivationConfig(data: unknown) {\n return ActivationConfigZ.safeParse(data);\n}\n\n// =============================================================================\n// TYPE INFERENCE\n// =============================================================================\n\nexport type ConditionSchema = z.infer<typeof ConditionZ>;\nexport type RuleSchema = z.infer<typeof RuleZ>;\nexport type DecisionStrategySchema = z.infer<typeof DecisionStrategyZ>;\nexport type ActivationConfigSchema = z.infer<typeof ActivationConfigZ>;\n", "/**\n * Zod schemas for event validation.\n */\nimport { z } from 'zod';\n\nexport const EventSourceZ = z.enum(['posthog', 'canvas', 'derived']);\n\nexport const NormalizedEventZ = z.object({\n ts: z.number(),\n name: z.string(),\n source: EventSourceZ,\n props: z.record(z.string(), z.unknown()).optional(),\n schemaVersion: z.string(),\n});\n\nexport const EventFilterZ = z.object({\n names: z.array(z.string()).optional(),\n patterns: z.array(z.string()).optional(),\n sources: z.array(EventSourceZ).optional(),\n});\n\n/**\n * Validate a NormalizedEvent object.\n */\nexport function validateNormalizedEvent(data: unknown) {\n return NormalizedEventZ.safeParse(data);\n}\n\n/**\n * Validate an EventFilter object.\n */\nexport function validateEventFilter(data: unknown) {\n return EventFilterZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type NormalizedEventSchema = z.infer<typeof NormalizedEventZ>;\nexport type EventFilterSchema = z.infer<typeof EventFilterZ>;\n", "/**\n * Zod schemas for state validation.\n */\nimport { z } from 'zod';\n\nexport const StoredValueZ = z.object({\n value: z.unknown(),\n expiresAt: z.number().optional(),\n});\n\nexport const FrequencyEntryZ = z.object({\n count: z.number(),\n resetAt: z.number().optional(),\n});\n\n/**\n * Validate a StoredValue object.\n */\nexport function validateStoredValue(data: unknown) {\n return StoredValueZ.safeParse(data);\n}\n\n/**\n * Validate a FrequencyEntry object.\n */\nexport function validateFrequencyEntry(data: unknown) {\n return FrequencyEntryZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type StoredValueSchema = z.infer<typeof StoredValueZ>;\nexport type FrequencyEntrySchema = z.infer<typeof FrequencyEntryZ>;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,OAAO,WAAW;AAClB,SAAS,gBAAAA,eAAc,iBAAiB;AACxC,YAAY,oBAAoB;;;ACfhC,SAAS,WAAW,SAAS,gBAAgB;AA0CzC,SAsBQ,KAtBR;AA7BG,SAAS,UAAU,EAAE,OAAO,aAAa,KAAM,UAAU,GAAmB;AACjF,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,CAAC;AACpC,QAAM,UAAU;AAAA,IACd,MAAM,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAG;AAjBjC;AAiBqC,sBAAE,aAAF,YAAc,OAAM,OAAE,aAAF,YAAc;AAAA,KAAE;AAAA,IACrE,CAAC,KAAK;AAAA,EACR;AAEA,YAAU,MAAM;AACd,2CAAW,kBAAkB;AAAA,EAC/B,GAAG,CAAC,SAAS,CAAC;AAEd,YAAU,MAAM;AACd,QAAI,QAAQ,UAAU,EAAG;AACzB,UAAM,KAAK,YAAY,MAAM;AAC3B,eAAS,CAAC,UAAU,OAAO,KAAK,QAAQ,MAAM;AAAA,IAChD,GAAG,UAAU;AACb,WAAO,MAAM,cAAc,EAAE;AAAA,EAC/B,GAAG,CAAC,SAAS,UAAU,CAAC;AAExB,YAAU,MAAM;AACd,UAAM,UAAU,QAAQ,KAAK;AAC7B,QAAI,SAAS;AACX,6CAAW,qBAAqB,QAAQ,IAAI;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,OAAO,SAAS,SAAS,CAAC;AAE9B,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAE5B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,UAAU;AAAA,QACV,cAAc;AAAA,QACd,QAAQ,aAAa,OAAO,OAAO;AAAA,QACnC,YAAY,UAAU,CAAC;AAAA,QACvB,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,MACA,yBAAsB;AAAA,MAEtB;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,WAAW,eAAe,QAAQ,GAAG;AAAA,cACrC,OAAO,GAAG,QAAQ,SAAS,GAAG;AAAA,YAChC;AAAA,YAEC,kBAAQ,IAAI,CAAC,SACZ,oBAAC,SAAkB,OAAO,EAAE,OAAO,QAAQ,YAAY,GAAG,SAAS,SAAS,GAC1E,8BAAC,YAAS,QAAQ,MAAM,SAAQ,SAAQ,WAAsB,KADtD,KAAK,EAEf,CACD;AAAA;AAAA,QACH;AAAA,QACA,oBAAC,SAAI,OAAO,EAAE,WAAW,QAAQ,SAAS,QAAQ,gBAAgB,UAAU,KAAK,SAAS,GACvF,kBAAQ,IAAI,CAAC,MAAM,QAClB;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YAEL,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,cAAc;AAAA,cACd,YAAY,QAAQ,QAAQ,MAAM,CAAC,IAAI,UAAU,CAAC;AAAA,cAClD,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,SAAS;AAAA,YACX;AAAA,YACA,SAAS,MAAM,SAAS,GAAG;AAAA;AAAA,UAVtB,KAAK;AAAA,QAWZ,CACD,GACH;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACzDO,SAAS,aAAa,SAAmD;AAC9E,QAAM,QAAQ,QAAQ,MAAM,GAAG;AAC/B,SAAO;AAAA,IACL,OAAO,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAAA,IACnC,OAAO,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAAA,EACrC;AACF;AAcO,SAAS,eAAe,QAAyC;AACtE,QAAM,WAAqB,CAAC;AAC5B,QAAM,SAAmB,CAAC;AAG1B,MAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,CAAC,0BAA0B;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc;AAGpB,MAAI,CAAC,YAAY,OAAO;AACtB,WAAO,KAAK,sCAAsC;AAAA,EACpD;AACA,MAAI,CAAC,YAAY,SAAS;AACxB,WAAO,KAAK,wCAAwC;AAAA,EACtD;AACA,MAAI,CAAC,YAAY,WAAW;AAC1B,WAAO,KAAK,0CAA0C;AAAA,EACxD;AAEA,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO,EAAE,OAAO,OAAO,QAAQ,SAAS;AAAA,EAC1C;AAGA,QAAM,gBAAgB,YAAY,iBAAiB;AACnD,QAAM,YAAY,aAAa,aAAa;AAC5C,QAAM,SAAS,aAAa,kBAAkB;AAG9C,MAAI,UAAU,QAAQ,OAAO,OAAO;AAClC,aAAS;AAAA,MACP,kBAAkB,aAAa,uBAAuB,kBAAkB;AAAA,IAE1E;AAAA,EACF;AAGA,MAAI,UAAU,QAAQ,OAAO,SAAS,CAAC,YAAY,eAAe;AAChE,aAAS;AAAA,MACP,kBAAkB,aAAa,uBAAuB,kBAAkB;AAAA,IAE1E;AACA,WAAO;AAAA,MACL,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,gBAAgB,cAAc,aAAqC,aAAa;AAAA,IAClF;AAAA,EACF;AAGA,SAAO;AAAA,IACL,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF;AACF;AAYA,SAAS,cAAc,QAA8B,aAA2C;AAC9F,MAAI,WAAW,EAAE,GAAG,OAAO;AAE3B,QAAM,UAAU,aAAa,WAAW;AAGxC,MAAI,QAAQ,UAAU,GAAG;AACvB,eAAW,cAAc,QAAQ;AAAA,EACnC;AAGA,WAAS,gBAAgB;AAEzB,SAAO;AACT;AAUA,SAAS,cAAc,QAAmC;AACxD,QAAM,WAAiC;AAAA,IACrC,eAAe;AAAA,IACf,OAAO,CAAC;AAAA,IACR,SAAS,OAAO,WAAW,CAAC;AAAA,IAC5B,WAAW,OAAO,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,EACxD;AAGA,MAAI,OAAO,SAAS,MAAM,QAAQ,OAAO,KAAK,GAAG;AAC/C,aAAS,QAAQ,OAAO,MAAM,IAAI,CAAC,SAAc;AAC/C,YAAM,eAAe,EAAE,GAAG,KAAK;AAG/B,UAAI,KAAK,cAAc,CAAC,KAAK,YAAY;AACvC,cAAM,MAAM,KAAK;AAGjB,YAAI,IAAI,YAAY;AAClB,uBAAa,aAAa;AAAA,YACxB,UAAU;AAAA,cACR,MAAM;AAAA,cACN,UAAU;AAAA,cACV,YAAY,IAAI;AAAA,cAChB,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAGA,eAAO,aAAa;AAAA,MACtB;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAGA,MAAI,OAAO,cAAe,UAAS,gBAAgB,OAAO;AAC1D,MAAI,OAAO,YAAa,UAAS,cAAc,OAAO;AACtD,MAAI,OAAO,MAAO,UAAS,QAAQ,OAAO;AAC1C,MAAI,OAAO,SAAU,UAAS,WAAW,OAAO;AAChD,MAAI,OAAO,OAAQ,UAAS,SAAS,OAAO;AAE5C,SAAO;AACT;AAQO,SAAS,eAAe,QAA0B;AACvD,MAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,WAAO;AAAA,EACT;AAEA,QAAM,cAAc;AACpB,QAAM,gBAAgB,YAAY,iBAAiB;AACnD,QAAM,YAAY,aAAa,aAAa;AAC5C,QAAM,SAAS,aAAa,kBAAkB;AAE9C,SAAO,UAAU,QAAQ,OAAO,SAAS,CAAC,YAAY;AACxD;;;ACvNA,SAAS,SAAS;AAEX,IAAM,YAAY,EAAE,MAAM;AAAA,EAC/B,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,MAAM,GAAG,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAAA,EACnF,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,KAAK,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;AAAA,EACtD,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAAA,EAC/F,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,YAAY,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;AAAA,EAC7D,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;AAAA;AAClD,CAAC;AAEM,IAAM,eAAe,EAAE,OAAO;AAAA,EACnC,MAAM,EAAE,QAAQ,SAAS;AAAA,EACzB,IAAI,EAAE,OAAO;AAAA,EACb,QAAQ;AAAA,EACR,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC;AAAA,EACpE,WAAW,EAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,SAAS,MAAM,CAAC,EAAE,SAAS;AAAA,EACvE,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,SAAS,EAAE,KAAK,CAAC,aAAa,SAAS,OAAO,CAAC,EAAE,SAAS;AAAA,EAC1D,SAAS,EACN,OAAO;AAAA,IACN,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC5B,aAAa,EAAE,QAAQ,EAAE,SAAS;AAAA,IAClC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC,EACA,SAAS;AACd,CAAC;AAEM,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,MAAM,EAAE,QAAQ,WAAW;AAAA,EAC3B,IAAI,EAAE,OAAO;AAAA,EACb,QAAQ;AAAA,EACR,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,GAAG,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS;AAAA,EAC/F,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS;AAAA,EAC7D,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,SAAS,EACN,OAAO;AAAA,IACN,gBAAgB,EAAE,QAAQ,EAAE,SAAS;AAAA,IACrC,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC5B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC,EACA,SAAS;AACd,CAAC;AAEM,IAAM,gBAAgB,EAAE,OAAO;AAAA,EACpC,IAAI,EAAE,OAAO;AAAA,EACb,SAAS,EAAE,OAAO;AAAA,EAClB,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACrC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,cAAc,CAAC,CAAC;AACxD,CAAC;AAEM,SAAS,eAAe,MAAe;AAC5C,SAAO,cAAc,MAAM,IAAI;AACjC;;;AChDO,IAAM,6BACX,CAAC;AAAA,EACC;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,cAAc;AAChB,IAA0B,CAAC,MAC3B,YAAY;AACV,QAAM,MAAM,iBAAiB,EAAE,WAAW,aAAa,WAAW,CAAC;AACnE,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,iEAAiE;AAAA,EACnF;AACA,QAAM,WAAW,MAAM,MAAM,KAAK,EAAE,YAAY,CAAC;AACjD,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,iDAAiD,SAAS,MAAM,GAAG;AAAA,EACrF;AACA,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,SAAO,cAAc,MAAM,IAAI;AACjC;;;ACzBF,SAAyB,iBAAiB,YAAAC,iBAAgB;AAC1D,SAAS,oBAAoB;AAStB,SAAS,kBAAkB,EAAE,SAAS,SAAS,GAA2B;AAC/E,QAAM,CAAC,WAAW,YAAY,IAAIA,UAA6B,IAAI;AAEnE,kBAAgB,MAAM;AACpB,QAAI,CAAC,SAAS;AACZ,mBAAa,IAAI;AACjB;AAAA,IACF;AACA,iBAAa,QAAQ,aAAa,CAAC;AACnC,WAAO,MAAM,aAAa,IAAI;AAAA,EAChC,GAAG,CAAC,OAAO,CAAC;AAEZ,MAAI,CAAC,UAAW,QAAO;AACvB,SAAO,aAAa,UAAU,SAAS;AACzC;;;ACrBA,SAAS,KAAAC,UAAS;AAEX,IAAM,eAAeA,GAAE,OAAO;AAAA,EACnC,KAAKA,GAAE,OAAO;AAAA,EACd,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,QAAQA,GAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAEM,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACxC,KAAKA,GAAE,OAAO;AAAA,EACd,IAAIA,GAAE,OAAO;AACf,CAAC;AAEM,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EACtC,WAAWA,GAAE,OAAO;AAAA,EACpB,SAASA,GAAE,OAAO;AAAA,EAClB,aAAaA,GAAE,MAAM,iBAAiB,EAAE,SAAS;AACnD,CAAC;AAEM,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EACvC,OAAOA,GAAE,OAAO;AAAA,EAChB,QAAQA,GAAE,OAAO;AACnB,CAAC;AAEM,IAAM,eAAeA,GAAE,OAAO;AAAA,EACnC,GAAGA,GAAE,OAAO;AAAA,EACZ,GAAGA,GAAE,OAAO;AAAA,EACZ,GAAGA,GAAE,OAAO;AAAA,EACZ,GAAGA,GAAE,OAAO;AACd,CAAC;AAEM,IAAM,eAAeA,GAAE,OAAO;AAAA,EACnC,UAAUA,GAAE,OAAO;AAAA,EACnB,SAASA,GAAE,QAAQ;AAAA,EACnB,SAASA,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,aAAa,aAAa,SAAS;AACrC,CAAC;AAEM,IAAM,gBAAgBA,GAAE;AAAA,EAC7BA,GAAE,OAAO;AAAA,EACTA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,GAAGA,GAAE,QAAQ,GAAGA,GAAE,UAAU,CAAC,CAAC;AAC9D;AAEO,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EACtC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAASA,GAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EACxC,WAAW,cAAc,SAAS;AACpC,CAAC;AAKM,SAAS,uBAAuB,MAAe;AACpD,SAAO,gBAAgB,UAAU,IAAI;AACvC;;;ACzDA,SAAS,KAAAC,UAAS;AAMX,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACxC,MAAMA,GAAE,QAAQ,UAAU;AAAA,EAC1B,KAAKA,GAAE,OAAO;AAChB,CAAC;AAEM,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EACtC,MAAMA,GAAE,QAAQ,OAAO;AAAA,EACvB,SAASA,GAAE,OAAO;AACpB,CAAC;AAEM,IAAM,0BAA0BA,GAAE,OAAO;AAAA,EAC9C,MAAMA,GAAE,QAAQ,gBAAgB;AAAA,EAChC,UAAUA,GAAE,OAAO;AAAA,EACnB,OAAOA,GAAE,KAAK,CAAC,WAAW,WAAW,QAAQ,CAAC;AAChD,CAAC;AAEM,IAAM,0BAA0BA,GAAE,OAAO;AAAA,EAC9C,MAAMA,GAAE,QAAQ,gBAAgB;AAAA,EAChC,WAAWA,GAAE,OAAO;AAAA,EACpB,UAAUA,GAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AAEM,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EAC5C,MAAMA,GAAE,QAAQ,cAAc;AAAA,EAC9B,KAAKA,GAAE,OAAO;AAAA,EACd,OAAOA,GAAE,QAAQ;AACnB,CAAC;AAEM,IAAM,qBAAqBA,GAAE,OAAO;AAAA,EACzC,MAAMA,GAAE,QAAQ,UAAU;AAAA,EAC1B,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAWA,GAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,IAAM,0BAA0BA,GAAE,OAAO;AAAA,EAC9C,MAAMA,GAAE,QAAQ,gBAAgB;AAAA,EAChC,KAAKA,GAAE,OAAO;AAAA,EACd,UAAUA,GAAE,KAAK,CAAC,OAAO,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,EACjD,WAAWA,GAAE,OAAO;AACtB,CAAC;AAEM,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EAC1C,MAAMA,GAAE,QAAQ,WAAW;AAAA,EAC3B,KAAKA,GAAE,OAAO;AAAA,EACd,UAAUA,GAAE,QAAQ,EAAE,SAAS;AACjC,CAAC;AAEM,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EAC/C,MAAMA,GAAE,QAAQ,iBAAiB;AAAA,EACjC,KAAKA,GAAE,OAAO;AAAA,EACd,UAAUA,GAAE,QAAQ,EAAE,SAAS;AACjC,CAAC;AAEM,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EAC/C,MAAMA,GAAE,QAAQ,iBAAiB;AAAA,EACjC,KAAKA,GAAE,OAAO;AAAA,EACd,OAAOA,GAAE,OAAO;AAAA,EAChB,UAAUA,GAAE,QAAQ,EAAE,SAAS;AACjC,CAAC;AAEM,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EAC3C,MAAMA,GAAE,QAAQ,aAAa;AAAA,EAC7B,KAAKA,GAAE,OAAO;AAAA,EACd,UAAUA,GAAE,KAAK,CAAC,OAAO,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,EACjD,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,EAC7B,UAAUA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC3C,CAAC;AAEM,IAAM,aAAaA,GAAE,mBAAmB,QAAQ;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,QAAQA,GAAE,OAAO;AAAA,EAC5B,YAAYA,GAAE,MAAM,UAAU;AAAA,EAC9B,OAAOA,GAAE,QAAQ;AACnB,CAAC;AAEM,IAAM,gBAAgBA,GAAE,OAAO;AAAA,EACpC,MAAMA,GAAE,QAAQ,OAAO;AAAA,EACvB,OAAOA,GAAE,MAAM,KAAK;AAAA,EACpB,SAASA,GAAE,QAAQ;AACrB,CAAC;AAEM,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EACrC,MAAMA,GAAE,QAAQ,OAAO;AAAA,EACvB,OAAOA,GAAE,OAAO;AAAA,EAChB,WAAWA,GAAE,OAAO;AAAA,EACpB,OAAOA,GAAE,QAAQ;AAAA,EACjB,OAAOA,GAAE,QAAQ;AACnB,CAAC;AAEM,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EACrC,MAAMA,GAAE,QAAQ,OAAO;AAAA,EACvB,SAASA,GAAE,OAAO;AAAA,EAClB,QAAQA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EAC1B,eAAeA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC;AAAA,EAC/C,SAASA,GAAE,QAAQ;AACrB,CAAC;AAEM,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACxC,MAAMA,GAAE,QAAQ,UAAU;AAAA,EAC1B,UAAUA,GAAE,OAAO;AAAA,EACnB,QAAQA,GAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS;AAAA,EACzC,SAASA,GAAE,QAAQ;AAAA,EACnB,WAAWA,GAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,IAAM,oBAAoBA,GAAE,mBAAmB,QAAQ;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,eAAeA,GAAE,OAAO;AAAA,EACnC,SAASA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACtC,SAASA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AACxC,CAAC;AAEM,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACxC,QAAQ,aAAa,SAAS;AAAA,EAC9B,UAAU,kBAAkB,SAAS;AACvC,CAAC;AASM,SAAS,kBAAkB,MAAe;AAC/C,SAAO,WAAW,UAAU,IAAI;AAClC;AAKO,SAAS,iBAAiB,MAAe;AAC9C,SAAO,kBAAkB,UAAU,IAAI;AACzC;AAKO,SAAS,yBAAyB,MAAe;AACtD,SAAO,kBAAkB,UAAU,IAAI;AACzC;;;AC7KA,SAAS,KAAAC,UAAS;AAEX,IAAM,eAAeA,GAAE,KAAK,CAAC,WAAW,UAAU,SAAS,CAAC;AAE5D,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EACvC,IAAIA,GAAE,OAAO;AAAA,EACb,MAAMA,GAAE,OAAO;AAAA,EACf,QAAQ;AAAA,EACR,OAAOA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EAClD,eAAeA,GAAE,OAAO;AAC1B,CAAC;AAEM,IAAM,eAAeA,GAAE,OAAO;AAAA,EACnC,OAAOA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACpC,UAAUA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,SAASA,GAAE,MAAM,YAAY,EAAE,SAAS;AAC1C,CAAC;AAKM,SAAS,wBAAwB,MAAe;AACrD,SAAO,iBAAiB,UAAU,IAAI;AACxC;AAKO,SAAS,oBAAoB,MAAe;AACjD,SAAO,aAAa,UAAU,IAAI;AACpC;;;AC9BA,SAAS,KAAAC,UAAS;AAEX,IAAM,eAAeA,GAAE,OAAO;AAAA,EACnC,OAAOA,GAAE,QAAQ;AAAA,EACjB,WAAWA,GAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EACtC,OAAOA,GAAE,OAAO;AAAA,EAChB,SAASA,GAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAKM,SAAS,oBAAoB,MAAe;AACjD,SAAO,aAAa,UAAU,IAAI;AACpC;AAKO,SAAS,uBAAuB,MAAe;AACpD,SAAO,gBAAgB,UAAU,IAAI;AACvC;;;ATiEA,IAAI,OAAO,WAAW,aAAa;AACjC,QAAM,WAAY,OAAe;AACjC,EAAC,OAAe,QAAQ;AAAA,IACtB,GAAG;AAAA,IACH,cAAa,qCAAU,gBAAe;AAAA,IACtC;AAAA,IACA,UAAU,EAAE,GAAG,gBAAgB,cAAAC,eAAc,UAAU;AAAA,EACzD;AACF;",
6
+ "names": ["createPortal", "useState", "z", "z", "z", "z", "createPortal"]
7
+ }
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Metrics module for session-based real-time targeting.
3
3
  */
4
- export { SessionMetricTracker, createSessionMetricTracker, type SessionMetricTrackerOptions, } from './sessionMetrics';
4
+ export { createSessionMetricTracker, SessionMetricTracker, type SessionMetricTrackerOptions, } from './sessionMetrics';
@@ -1,9 +1,9 @@
1
- export type { TileNotificationRule, NotificationDeepLink, ActiveNotification } from './types';
2
- export { MAX_VISIBLE_TOASTS, DEFAULT_TTL, DEFAULT_COOLDOWN } from './types';
3
- export { interpolateTemplate, matchEvent } from './matcher';
4
1
  export type { MatchResult } from './matcher';
5
- export { useNotifications } from './useNotifications';
2
+ export { interpolateTemplate, matchEvent } from './matcher';
3
+ export type { NotificationToastStackProps } from './NotificationToastStack';
4
+ export { NotificationToastStack } from './NotificationToastStack';
5
+ export type { ActiveNotification, NotificationDeepLink, TileNotificationRule } from './types';
6
+ export { DEFAULT_COOLDOWN, DEFAULT_TTL, MAX_VISIBLE_TOASTS } from './types';
6
7
  export type { UseNotificationsReturn } from './useNotifications';
8
+ export { useNotifications } from './useNotifications';
7
9
  export { useNotifyWatcher } from './useNotifyWatcher';
8
- export { NotificationToastStack } from './NotificationToastStack';
9
- export type { NotificationToastStackProps } from './NotificationToastStack';
@@ -1,7 +1,7 @@
1
- export { ensureOverlayRoot, injectBaseStyles } from './overlay/root';
2
- export { showTooltip } from './overlay/tooltip';
1
+ export { createAnchorResolver } from './anchor/resolve';
3
2
  export { showHighlight } from './overlay/highlight';
4
3
  export { showModal } from './overlay/modal';
4
+ export { ensureOverlayRoot, injectBaseStyles } from './overlay/root';
5
5
  export { runOverlays } from './overlay/runner';
6
- export { createAnchorResolver } from './anchor/resolve';
6
+ export { showTooltip } from './overlay/tooltip';
7
7
  export { isVisible, scrollIntoViewIfNeeded } from './utils/dom';
@@ -1,4 +1,20 @@
1
+ /**
2
+ * Redirect overlay rendering into the shadow root's #overlayContainer.
3
+ *
4
+ * If `ensureOverlayRoot()` was already called (e.g. during runtime creation
5
+ * before the canvas element exists), the temporary fallback element is
6
+ * reparented into `container` so that existing references remain valid.
7
+ */
8
+ export declare function setOverlayRoot(container: HTMLElement): void;
9
+ /**
10
+ * Return the overlay root element for appending overlays (tooltips, modals, etc).
11
+ *
12
+ * On first call (before `setOverlayRoot()`), creates a temporary element on
13
+ * document.body. When `setOverlayRoot()` is called later during shadow DOM
14
+ * bootstrap, this element is reparented into the shadow root so all existing
15
+ * references continue to work.
16
+ */
1
17
  export declare function ensureOverlayRoot(): HTMLElement;
2
- export declare function injectBaseStyles(): void;
18
+ export declare function injectBaseStyles(target: ShadowRoot | DocumentOrShadowRoot): void;
3
19
  export declare function setDocumentInertExcept(keepEl: HTMLElement): void;
4
20
  export declare function clearDocumentInert(): void;
@@ -1,4 +1,4 @@
1
- import { Placement } from '@floating-ui/dom';
1
+ import { type Placement } from '@floating-ui/dom';
2
2
  export type TooltipHandle = {
3
3
  destroy(): void;
4
4
  el: HTMLElement;
package/dist/react.js CHANGED
@@ -1,141 +1,97 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * React bindings for the Syntro SDK.
4
- *
5
- * Usage:
6
- * ```tsx
7
- * import { SyntroProvider, useSyntro } from '@syntrologie/runtime-sdk/react';
8
- *
9
- * function App() {
10
- * return (
11
- * <SyntroProvider token="syn_xxx">
12
- * <MyApp />
13
- * </SyntroProvider>
14
- * );
15
- * }
16
- *
17
- * function MyComponent() {
18
- * const { canvas, experiments, telemetry, isReady } = useSyntro();
19
- * // ...
20
- * }
21
- * ```
22
- */
23
- import { createContext, useContext, useEffect, useState, useRef, } from 'react';
24
- import { Syntro } from './bootstrap';
25
- const SyntroContext = createContext(null);
26
- // Global tracking to handle React Strict Mode double-mounting
27
- let globalInitPromise = null;
28
- let globalInitToken = null;
29
- /**
30
- * Provider component that initializes the Syntro SDK.
31
- *
32
- * Place this at the root of your app or at the top of any subtree
33
- * that needs access to the SDK.
34
- */
35
- export function SyntroProvider({ token, canvasOptions, fetcher, children, onReady, onError, }) {
36
- const [state, setState] = useState({
37
- canvas: null,
38
- experiments: null,
39
- telemetry: null,
40
- isReady: false,
41
- error: null,
42
- });
43
- const initRef = useRef(false);
44
- const handleRef = useRef(null);
45
- useEffect(() => {
46
- if (!token)
47
- return;
48
- // Reuse existing init if same token (handles React Strict Mode remounts)
49
- if (globalInitPromise && globalInitToken === token) {
50
- globalInitPromise.then((result) => {
51
- var _a, _b;
52
- handleRef.current = result.canvas;
53
- setState({
54
- canvas: result.canvas,
55
- experiments: (_a = result.experiments) !== null && _a !== void 0 ? _a : null,
56
- telemetry: (_b = result.telemetry) !== null && _b !== void 0 ? _b : null,
57
- isReady: true,
58
- error: null,
59
- });
60
- });
61
- return;
62
- }
63
- // Prevent double init
64
- if (initRef.current)
65
- return;
66
- initRef.current = true;
67
- globalInitToken = token;
68
- globalInitPromise = Syntro.init({ token, canvas: canvasOptions, fetcher });
69
- globalInitPromise
70
- .then((result) => {
71
- var _a, _b;
72
- handleRef.current = result.canvas;
73
- setState({
74
- canvas: result.canvas,
75
- experiments: (_a = result.experiments) !== null && _a !== void 0 ? _a : null,
76
- telemetry: (_b = result.telemetry) !== null && _b !== void 0 ? _b : null,
77
- isReady: true,
78
- error: null,
79
- });
80
- onReady === null || onReady === void 0 ? void 0 : onReady(result);
81
- })
82
- .catch((err) => {
83
- const error = err instanceof Error ? err : new Error(String(err));
84
- setState((prev) => ({ ...prev, error, isReady: true }));
85
- onError === null || onError === void 0 ? void 0 : onError(error);
86
- // Clear global state on error so retry is possible
87
- globalInitPromise = null;
88
- globalInitToken = null;
1
+ import {
2
+ Syntro
3
+ } from "./chunk-HJKAXD5S.js";
4
+ import "./chunk-AYTRRBR5.js";
5
+
6
+ // src/react.tsx
7
+ import { createContext, useContext, useEffect, useRef, useState } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ var SyntroContext = createContext(null);
10
+ var globalInitPromise = null;
11
+ var globalInitToken = null;
12
+ function SyntroProvider({
13
+ token,
14
+ canvasOptions,
15
+ fetcher,
16
+ children,
17
+ onReady,
18
+ onError
19
+ }) {
20
+ const [state, setState] = useState({
21
+ canvas: null,
22
+ experiments: null,
23
+ telemetry: null,
24
+ isReady: false,
25
+ error: null
26
+ });
27
+ const initRef = useRef(false);
28
+ const handleRef = useRef(null);
29
+ useEffect(() => {
30
+ if (!token) return;
31
+ if (globalInitPromise && globalInitToken === token) {
32
+ globalInitPromise.then((result) => {
33
+ var _a, _b;
34
+ handleRef.current = result.canvas;
35
+ setState({
36
+ canvas: result.canvas,
37
+ experiments: (_a = result.experiments) != null ? _a : null,
38
+ telemetry: (_b = result.telemetry) != null ? _b : null,
39
+ isReady: true,
40
+ error: null
89
41
  });
90
- // Don't destroy on unmount in dev mode - React Strict Mode will remount
91
- // The canvas persists and will be reused on remount
92
- }, [token]);
93
- return _jsx(SyntroContext.Provider, { value: state, children: children });
94
- }
95
- /**
96
- * Hook to access the Syntro SDK.
97
- *
98
- * Must be used within a SyntroProvider.
99
- *
100
- * @returns The SDK context containing canvas, experiments, telemetry, and status
101
- */
102
- export function useSyntro() {
103
- const context = useContext(SyntroContext);
104
- if (!context) {
105
- throw new Error('useSyntro must be used within a SyntroProvider');
42
+ });
43
+ return;
106
44
  }
107
- return context;
45
+ if (initRef.current) return;
46
+ initRef.current = true;
47
+ globalInitToken = token;
48
+ globalInitPromise = Syntro.init({ token, canvas: canvasOptions, fetcher });
49
+ globalInitPromise.then((result) => {
50
+ var _a, _b;
51
+ handleRef.current = result.canvas;
52
+ setState({
53
+ canvas: result.canvas,
54
+ experiments: (_a = result.experiments) != null ? _a : null,
55
+ telemetry: (_b = result.telemetry) != null ? _b : null,
56
+ isReady: true,
57
+ error: null
58
+ });
59
+ onReady == null ? void 0 : onReady(result);
60
+ }).catch((err) => {
61
+ const error = err instanceof Error ? err : new Error(String(err));
62
+ setState((prev) => ({ ...prev, error, isReady: true }));
63
+ onError == null ? void 0 : onError(error);
64
+ globalInitPromise = null;
65
+ globalInitToken = null;
66
+ });
67
+ }, [token, canvasOptions, fetcher, onError, onReady]);
68
+ return /* @__PURE__ */ jsx(SyntroContext.Provider, { value: state, children });
69
+ }
70
+ function useSyntro() {
71
+ const context = useContext(SyntroContext);
72
+ if (!context) {
73
+ throw new Error("useSyntro must be used within a SyntroProvider");
74
+ }
75
+ return context;
108
76
  }
109
- /**
110
- * Hook to check if the SDK is ready.
111
- *
112
- * Shorthand for `useSyntro().isReady`.
113
- */
114
- export function useSyntroReady() {
115
- return useSyntro().isReady;
77
+ function useSyntroReady() {
78
+ return useSyntro().isReady;
116
79
  }
117
- /**
118
- * Hook to access the experiment client.
119
- *
120
- * @returns The experiment client, or null if not configured
121
- */
122
- export function useSyntroExperiments() {
123
- return useSyntro().experiments;
80
+ function useSyntroExperiments() {
81
+ return useSyntro().experiments;
124
82
  }
125
- /**
126
- * Hook to access the telemetry client.
127
- *
128
- * @returns The telemetry client, or null if not configured
129
- */
130
- export function useSyntroTelemetry() {
131
- return useSyntro().telemetry;
83
+ function useSyntroTelemetry() {
84
+ return useSyntro().telemetry;
132
85
  }
133
- /**
134
- * Hook to access the canvas handle.
135
- *
136
- * @returns The canvas handle, or null if not ready
137
- */
138
- export function useSyntroCanvas() {
139
- return useSyntro().canvas;
86
+ function useSyntroCanvas() {
87
+ return useSyntro().canvas;
140
88
  }
141
- //# sourceMappingURL=react.js.map
89
+ export {
90
+ SyntroProvider,
91
+ useSyntro,
92
+ useSyntroCanvas,
93
+ useSyntroExperiments,
94
+ useSyntroReady,
95
+ useSyntroTelemetry
96
+ };
97
+ //# sourceMappingURL=react.js.map
package/dist/react.js.map CHANGED
@@ -1 +1,7 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/react.tsx"],
4
+ "sourcesContent": ["/**\n * React bindings for the Syntro SDK.\n *\n * Usage:\n * ```tsx\n * import { SyntroProvider, useSyntro } from '@syntrologie/runtime-sdk/react';\n *\n * function App() {\n * return (\n * <SyntroProvider token=\"syn_xxx\">\n * <MyApp />\n * </SyntroProvider>\n * );\n * }\n *\n * function MyComponent() {\n * const { canvas, experiments, telemetry, isReady } = useSyntro();\n * // ...\n * }\n * ```\n */\nimport { createContext, type ReactNode, useContext, useEffect, useRef, useState } from 'react';\n\nimport type { SmartCanvasHandle } from './api';\nimport { Syntro, type SyntroInitOptions, type SyntroInitResult } from './bootstrap';\nimport type { ExperimentClient } from './experiments/types';\nimport type { TelemetryClient } from './telemetry/types';\n\nexport interface SyntroContextValue {\n /** The SmartCanvas handle */\n canvas: SmartCanvasHandle | null;\n /** The experiment client */\n experiments: ExperimentClient | null;\n /** The telemetry client */\n telemetry: TelemetryClient | null;\n /** Whether the SDK has finished initializing */\n isReady: boolean;\n /** Any error that occurred during initialization */\n error: Error | null;\n}\n\nconst SyntroContext = createContext<SyntroContextValue | null>(null);\n\n// Global tracking to handle React Strict Mode double-mounting\nlet globalInitPromise: Promise<SyntroInitResult> | null = null;\nlet globalInitToken: string | null = null;\n\nexport interface SyntroProviderProps {\n /**\n * The Syntro token containing all credentials.\n */\n token: string;\n\n /**\n * Optional canvas configuration overrides.\n */\n canvasOptions?: SyntroInitOptions['canvas'];\n\n /**\n * Custom config fetcher to override the default experiment-based fetcher.\n * Use this for local development or when bypassing the experiment server.\n */\n fetcher?: SyntroInitOptions['fetcher'];\n\n /**\n * Children to render.\n */\n children: ReactNode;\n\n /**\n * Called when initialization completes.\n */\n onReady?: (result: SyntroInitResult) => void;\n\n /**\n * Called when initialization fails.\n */\n onError?: (error: Error) => void;\n}\n\n/**\n * Provider component that initializes the Syntro SDK.\n *\n * Place this at the root of your app or at the top of any subtree\n * that needs access to the SDK.\n */\nexport function SyntroProvider({\n token,\n canvasOptions,\n fetcher,\n children,\n onReady,\n onError,\n}: SyntroProviderProps) {\n const [state, setState] = useState<SyntroContextValue>({\n canvas: null,\n experiments: null,\n telemetry: null,\n isReady: false,\n error: null,\n });\n\n const initRef = useRef(false);\n const handleRef = useRef<SmartCanvasHandle | null>(null);\n\n useEffect(() => {\n if (!token) return;\n\n // Reuse existing init if same token (handles React Strict Mode remounts)\n if (globalInitPromise && globalInitToken === token) {\n globalInitPromise.then((result) => {\n handleRef.current = result.canvas;\n setState({\n canvas: result.canvas,\n experiments: result.experiments ?? null,\n telemetry: result.telemetry ?? null,\n isReady: true,\n error: null,\n });\n });\n return;\n }\n\n // Prevent double init\n if (initRef.current) return;\n initRef.current = true;\n\n globalInitToken = token;\n globalInitPromise = Syntro.init({ token, canvas: canvasOptions, fetcher });\n\n globalInitPromise\n .then((result) => {\n handleRef.current = result.canvas;\n setState({\n canvas: result.canvas,\n experiments: result.experiments ?? null,\n telemetry: result.telemetry ?? null,\n isReady: true,\n error: null,\n });\n onReady?.(result);\n })\n .catch((err) => {\n const error = err instanceof Error ? err : new Error(String(err));\n setState((prev) => ({ ...prev, error, isReady: true }));\n onError?.(error);\n // Clear global state on error so retry is possible\n globalInitPromise = null;\n globalInitToken = null;\n });\n\n // Don't destroy on unmount in dev mode - React Strict Mode will remount\n // The canvas persists and will be reused on remount\n }, [token, canvasOptions, fetcher, onError, onReady]);\n\n return <SyntroContext.Provider value={state}>{children}</SyntroContext.Provider>;\n}\n\n/**\n * Hook to access the Syntro SDK.\n *\n * Must be used within a SyntroProvider.\n *\n * @returns The SDK context containing canvas, experiments, telemetry, and status\n */\nexport function useSyntro(): SyntroContextValue {\n const context = useContext(SyntroContext);\n if (!context) {\n throw new Error('useSyntro must be used within a SyntroProvider');\n }\n return context;\n}\n\n/**\n * Hook to check if the SDK is ready.\n *\n * Shorthand for `useSyntro().isReady`.\n */\nexport function useSyntroReady(): boolean {\n return useSyntro().isReady;\n}\n\n/**\n * Hook to access the experiment client.\n *\n * @returns The experiment client, or null if not configured\n */\nexport function useSyntroExperiments(): ExperimentClient | null {\n return useSyntro().experiments;\n}\n\n/**\n * Hook to access the telemetry client.\n *\n * @returns The telemetry client, or null if not configured\n */\nexport function useSyntroTelemetry(): TelemetryClient | null {\n return useSyntro().telemetry;\n}\n\n/**\n * Hook to access the canvas handle.\n *\n * @returns The canvas handle, or null if not ready\n */\nexport function useSyntroCanvas(): SmartCanvasHandle | null {\n return useSyntro().canvas;\n}\n"],
5
+ "mappings": ";;;;;;AAqBA,SAAS,eAA+B,YAAY,WAAW,QAAQ,gBAAgB;AAsI9E;AAlHT,IAAM,gBAAgB,cAAyC,IAAI;AAGnE,IAAI,oBAAsD;AAC1D,IAAI,kBAAiC;AAyC9B,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA6B;AAAA,IACrD,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACT,CAAC;AAED,QAAM,UAAU,OAAO,KAAK;AAC5B,QAAM,YAAY,OAAiC,IAAI;AAEvD,YAAU,MAAM;AACd,QAAI,CAAC,MAAO;AAGZ,QAAI,qBAAqB,oBAAoB,OAAO;AAClD,wBAAkB,KAAK,CAAC,WAAW;AA9GzC;AA+GQ,kBAAU,UAAU,OAAO;AAC3B,iBAAS;AAAA,UACP,QAAQ,OAAO;AAAA,UACf,cAAa,YAAO,gBAAP,YAAsB;AAAA,UACnC,YAAW,YAAO,cAAP,YAAoB;AAAA,UAC/B,SAAS;AAAA,UACT,OAAO;AAAA,QACT,CAAC;AAAA,MACH,CAAC;AACD;AAAA,IACF;AAGA,QAAI,QAAQ,QAAS;AACrB,YAAQ,UAAU;AAElB,sBAAkB;AAClB,wBAAoB,OAAO,KAAK,EAAE,OAAO,QAAQ,eAAe,QAAQ,CAAC;AAEzE,sBACG,KAAK,CAAC,WAAW;AAnIxB;AAoIQ,gBAAU,UAAU,OAAO;AAC3B,eAAS;AAAA,QACP,QAAQ,OAAO;AAAA,QACf,cAAa,YAAO,gBAAP,YAAsB;AAAA,QACnC,YAAW,YAAO,cAAP,YAAoB;AAAA,QAC/B,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AACD,yCAAU;AAAA,IACZ,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,YAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAChE,eAAS,CAAC,UAAU,EAAE,GAAG,MAAM,OAAO,SAAS,KAAK,EAAE;AACtD,yCAAU;AAEV,0BAAoB;AACpB,wBAAkB;AAAA,IACpB,CAAC;AAAA,EAIL,GAAG,CAAC,OAAO,eAAe,SAAS,SAAS,OAAO,CAAC;AAEpD,SAAO,oBAAC,cAAc,UAAd,EAAuB,OAAO,OAAQ,UAAS;AACzD;AASO,SAAS,YAAgC;AAC9C,QAAM,UAAU,WAAW,aAAa;AACxC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,SAAO;AACT;AAOO,SAAS,iBAA0B;AACxC,SAAO,UAAU,EAAE;AACrB;AAOO,SAAS,uBAAgD;AAC9D,SAAO,UAAU,EAAE;AACrB;AAOO,SAAS,qBAA6C;AAC3D,SAAO,UAAU,EAAE;AACrB;AAOO,SAAS,kBAA4C;AAC1D,SAAO,UAAU,EAAE;AACrB;",
6
+ "names": []
7
+ }
@@ -1,5 +1,5 @@
1
- import { ReactNode } from 'react';
2
- import type { RenderProps, RenderData, DefaultRenderer, AppearanceConfig, ActionHandler } from './types';
1
+ import { type ReactNode } from 'react';
2
+ import type { ActionHandler, AppearanceConfig, DefaultRenderer, RenderData, RenderProps } from './types';
3
3
  interface RenderContextValue {
4
4
  renderProps: RenderProps;
5
5
  appearance: AppearanceConfig;
@@ -1,3 +1,3 @@
1
- export type { RenderData, DefaultRenderer, RenderProp, RenderProps, StyleOverrides, ClassNameOverrides, AppearanceConfig, ActionHandler, } from './types';
2
- export { RenderProvider, useRenderContext, useRenderProps, useAppearance, useActionHandlers, useRender, } from './RenderContext';
3
1
  export type { RenderProviderProps } from './RenderContext';
2
+ export { RenderProvider, useActionHandlers, useAppearance, useRender, useRenderContext, useRenderProps, } from './RenderContext';
3
+ export type { ActionHandler, AppearanceConfig, ClassNameOverrides, DefaultRenderer, RenderData, RenderProp, RenderProps, StyleOverrides, } from './types';
@@ -1,5 +1,5 @@
1
- import type { ReactNode, CSSProperties } from 'react';
2
- import type { TileConfig, BlockType } from '../types';
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ import type { BlockType, TileConfig } from '../types';
3
3
  /**
4
4
  * Data passed to render props
5
5
  */
package/dist/runtime.d.ts CHANGED
@@ -13,18 +13,18 @@
13
13
  * GrowthBook's job is done at page load when it selects which config to deliver.
14
14
  * The runtime receives the config and makes decisions using DecisionStrategy.
15
15
  */
16
- import { type ActionEngine, ExecutorRegistry } from './actions';
17
- import { AppRegistry } from './apps';
18
- import { ContextManager } from './context/ContextManager';
19
- import type { DecisionStrategy, DecisionResult } from './decisions/types';
16
+ import { type ActionEngine, type ExecutorRegistry } from './actions';
17
+ import { type AppRegistry } from './apps';
18
+ import { type ContextManager } from './context/ContextManager';
19
+ import type { DecisionResult, DecisionStrategy } from './decisions/types';
20
20
  import { type EventAccumulator } from './events/EventAccumulator';
21
- import { EventBus } from './events/EventBus';
21
+ import { type EventBus } from './events/EventBus';
22
22
  import type { SessionMetricTracker } from './metrics/sessionMetrics';
23
- import { StateStore } from './state/StateStore';
23
+ import { type StateStore } from './state/StateStore';
24
24
  import { type Surfaces } from './surfaces';
25
25
  import type { TelemetryClient } from './telemetry/types';
26
26
  import type { RoutesConfig, TileConfig } from './types';
27
- import { WidgetRegistry } from './widgets';
27
+ import { type WidgetRegistry } from './widgets';
28
28
  /**
29
29
  * Runtime version.
30
30
  */
@@ -32,7 +32,7 @@ export declare const RUNTIME_VERSION = "2.0.0";
32
32
  /**
33
33
  * Runtime mode.
34
34
  */
35
- export type RuntimeMode = 'production' | 'development' | 'editor' | 'audit';
35
+ export type RuntimeMode = 'production' | 'development' | 'editor' | 'audit' | 'review';
36
36
  /**
37
37
  * SmartCanvasRuntime interface.
38
38
  */