@syntrologie/runtime-sdk 2.1.0 → 2.2.0-canary.10

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 (360) 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 +7 -4
  6. package/dist/SmartCanvasElement.d.ts +7 -2
  7. package/dist/SmartCanvasPortal.d.ts +1 -1
  8. package/dist/actions/executors/core-flow.d.ts +19 -0
  9. package/dist/actions/executors/index.d.ts +4 -3
  10. package/dist/actions/executors/tour.d.ts +1 -1
  11. package/dist/actions/index.d.ts +4 -3
  12. package/dist/actions/schema.d.ts +1229 -0
  13. package/dist/actions/schema.js +67 -0
  14. package/dist/actions/schema.js.map +7 -0
  15. package/dist/api.d.ts +4 -2
  16. package/dist/apps/builtinRuntimeModules.generated.d.ts +20 -0
  17. package/dist/apps/examples/gamification-app.example.d.ts +4 -4
  18. package/dist/apps/index.d.ts +7 -7
  19. package/dist/blocks/data/index.d.ts +1 -1
  20. package/dist/blocks/index.d.ts +2 -2
  21. package/dist/blocks/interactive/index.d.ts +1 -1
  22. package/dist/blocks/notification/NotificationBlock.d.ts +1 -1
  23. package/dist/blocks/notification/index.d.ts +1 -1
  24. package/dist/bootstrap.d.ts +4 -4
  25. package/dist/chunk-AYTRRBR5.js +251 -0
  26. package/dist/chunk-AYTRRBR5.js.map +7 -0
  27. package/dist/chunk-VLWWR22N.js +9266 -0
  28. package/dist/chunk-VLWWR22N.js.map +7 -0
  29. package/dist/components/ShadowCanvasOverlay.d.ts +2 -2
  30. package/dist/components/TileCard.d.ts +1 -1
  31. package/dist/context/ContextManager.d.ts +1 -1
  32. package/dist/context/index.d.ts +3 -3
  33. package/dist/decisions/engine.d.ts +1 -1
  34. package/dist/decisions/index.d.ts +3 -3
  35. package/dist/decisions/schema.d.ts +24 -24
  36. package/dist/decisions/strategies/rules.d.ts +1 -1
  37. package/dist/decisions/strategies/score.d.ts +1 -1
  38. package/dist/editorLoader.d.ts +4 -4
  39. package/dist/events/EventAccumulator.d.ts +1 -1
  40. package/dist/events/EventBus.d.ts +1 -1
  41. package/dist/events/index.d.ts +7 -6
  42. package/dist/events/registerConfigPredicates.d.ts +19 -0
  43. package/dist/experiments/adapters/growthbook.d.ts +1 -1
  44. package/dist/experiments/index.d.ts +2 -2
  45. package/dist/experiments/registry.d.ts +1 -1
  46. package/dist/fetchers/index.d.ts +2 -2
  47. package/dist/hooks/useShadowCanvasConfig.d.ts +1 -1
  48. package/dist/hostPatcher/index.d.ts +2 -2
  49. package/dist/index.d.ts +24 -21
  50. package/dist/index.js +2349 -75
  51. package/dist/index.js.map +7 -1
  52. package/dist/metrics/index.d.ts +1 -1
  53. package/dist/notifications/index.d.ts +6 -6
  54. package/dist/overlays/runtime/index.d.ts +3 -3
  55. package/dist/overlays/runtime/overlay/root.d.ts +17 -1
  56. package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
  57. package/dist/react.js +90 -134
  58. package/dist/react.js.map +7 -1
  59. package/dist/render/RenderContext.d.ts +2 -2
  60. package/dist/render/index.d.ts +2 -2
  61. package/dist/render/types.d.ts +2 -2
  62. package/dist/runtime.d.ts +8 -8
  63. package/dist/smart-canvas.esm.js +158 -126
  64. package/dist/smart-canvas.esm.js.map +4 -4
  65. package/dist/smart-canvas.js +18872 -16744
  66. package/dist/smart-canvas.js.map +4 -4
  67. package/dist/smart-canvas.min.js +158 -126
  68. package/dist/smart-canvas.min.js.map +4 -4
  69. package/dist/state/StateStore.d.ts +1 -1
  70. package/dist/state/helpers/cooldowns.d.ts +1 -1
  71. package/dist/state/helpers/dismissals.d.ts +1 -1
  72. package/dist/state/helpers/frequency.d.ts +1 -1
  73. package/dist/state/index.d.ts +3 -3
  74. package/dist/surfaces/index.d.ts +3 -3
  75. package/dist/surfaces/positioning.d.ts +1 -1
  76. package/dist/telemetry/adapters/posthog.d.ts +2 -2
  77. package/dist/telemetry/index.d.ts +3 -3
  78. package/dist/telemetry/registry.d.ts +1 -1
  79. package/dist/telemetry/types.d.ts +5 -0
  80. package/dist/theme/ThemeProvider.d.ts +1 -1
  81. package/dist/theme/extractHostTheme.d.ts +1 -1
  82. package/dist/theme/index.d.ts +4 -4
  83. package/dist/types-only.d.ts +1 -1
  84. package/dist/types-only.js +1 -11
  85. package/dist/types-only.js.map +7 -1
  86. package/dist/types.d.ts +1 -1
  87. package/dist/version.d.ts +1 -1
  88. package/dist/widgets/index.d.ts +1 -1
  89. package/package.json +29 -17
  90. package/schema/canvas-config.base.schema.json +351 -0
  91. package/schema/canvas-config.schema.json +3308 -444
  92. package/scripts/validate-config.mjs +54 -58
  93. package/dist/RuntimeProvider.js +0 -113
  94. package/dist/RuntimeProvider.js.map +0 -1
  95. package/dist/SmartCanvasApp.js +0 -143
  96. package/dist/SmartCanvasApp.js.map +0 -1
  97. package/dist/SmartCanvasElement.js +0 -138
  98. package/dist/SmartCanvasElement.js.map +0 -1
  99. package/dist/SmartCanvasPortal.js +0 -17
  100. package/dist/SmartCanvasPortal.js.map +0 -1
  101. package/dist/actions/ActionEngine.js +0 -272
  102. package/dist/actions/ActionEngine.js.map +0 -1
  103. package/dist/actions/executors/index.js +0 -240
  104. package/dist/actions/executors/index.js.map +0 -1
  105. package/dist/actions/executors/tour.js +0 -332
  106. package/dist/actions/executors/tour.js.map +0 -1
  107. package/dist/actions/index.js +0 -12
  108. package/dist/actions/index.js.map +0 -1
  109. package/dist/actions/types.js +0 -8
  110. package/dist/actions/types.js.map +0 -1
  111. package/dist/actions/validation.js +0 -577
  112. package/dist/actions/validation.js.map +0 -1
  113. package/dist/adaptives/adaptive-chatbot/index.js +0 -9
  114. package/dist/adaptives/adaptive-chatbot/index.js.map +0 -7
  115. package/dist/adaptives/adaptive-content/index.js +0 -22
  116. package/dist/adaptives/adaptive-content/index.js.map +0 -7
  117. package/dist/adaptives/adaptive-faq/index.js +0 -11
  118. package/dist/adaptives/adaptive-faq/index.js.map +0 -7
  119. package/dist/adaptives/adaptive-gamification/index.js +0 -2
  120. package/dist/adaptives/adaptive-gamification/index.js.map +0 -7
  121. package/dist/adaptives/adaptive-nav/index.js +0 -12
  122. package/dist/adaptives/adaptive-nav/index.js.map +0 -7
  123. package/dist/adaptives/adaptive-overlays/index.js +0 -94
  124. package/dist/adaptives/adaptive-overlays/index.js.map +0 -7
  125. package/dist/antiFlicker.js +0 -39
  126. package/dist/antiFlicker.js.map +0 -1
  127. package/dist/api.js +0 -205
  128. package/dist/api.js.map +0 -1
  129. package/dist/apps/AppContext.js +0 -91
  130. package/dist/apps/AppContext.js.map +0 -1
  131. package/dist/apps/AppLoader.js +0 -293
  132. package/dist/apps/AppLoader.js.map +0 -1
  133. package/dist/apps/AppRegistry.js +0 -317
  134. package/dist/apps/AppRegistry.js.map +0 -1
  135. package/dist/apps/examples/gamification-app.example.js +0 -329
  136. package/dist/apps/examples/gamification-app.example.js.map +0 -1
  137. package/dist/apps/index.js +0 -16
  138. package/dist/apps/index.js.map +0 -1
  139. package/dist/apps/types.js +0 -8
  140. package/dist/apps/types.js.map +0 -1
  141. package/dist/blocks/data/ComparisonBlock.js +0 -95
  142. package/dist/blocks/data/ComparisonBlock.js.map +0 -1
  143. package/dist/blocks/data/StatsBlock.js +0 -102
  144. package/dist/blocks/data/StatsBlock.js.map +0 -1
  145. package/dist/blocks/data/index.js +0 -3
  146. package/dist/blocks/data/index.js.map +0 -1
  147. package/dist/blocks/index.js +0 -93
  148. package/dist/blocks/index.js.map +0 -1
  149. package/dist/blocks/interactive/ChecklistBlock.js +0 -111
  150. package/dist/blocks/interactive/ChecklistBlock.js.map +0 -1
  151. package/dist/blocks/interactive/RatingBlock.js +0 -147
  152. package/dist/blocks/interactive/RatingBlock.js.map +0 -1
  153. package/dist/blocks/interactive/index.js +0 -3
  154. package/dist/blocks/interactive/index.js.map +0 -1
  155. package/dist/blocks/notification/NotificationBlock.js +0 -171
  156. package/dist/blocks/notification/NotificationBlock.js.map +0 -1
  157. package/dist/blocks/notification/index.js +0 -2
  158. package/dist/blocks/notification/index.js.map +0 -1
  159. package/dist/blocks/theme-tokens.js +0 -25
  160. package/dist/blocks/theme-tokens.js.map +0 -1
  161. package/dist/bootstrap.js +0 -448
  162. package/dist/bootstrap.js.map +0 -1
  163. package/dist/bundle-entry.js +0 -9
  164. package/dist/bundle-entry.js.map +0 -1
  165. package/dist/components/ShadowCanvasOverlay.js +0 -327
  166. package/dist/components/ShadowCanvasOverlay.js.map +0 -1
  167. package/dist/components/TileCard.js +0 -103
  168. package/dist/components/TileCard.js.map +0 -1
  169. package/dist/components/TileWheel.js +0 -50
  170. package/dist/components/TileWheel.js.map +0 -1
  171. package/dist/config-validator.js +0 -173
  172. package/dist/config-validator.js.map +0 -1
  173. package/dist/configFetcher.js +0 -131
  174. package/dist/configFetcher.js.map +0 -1
  175. package/dist/context/ContextManager.js +0 -269
  176. package/dist/context/ContextManager.js.map +0 -1
  177. package/dist/context/index.js +0 -7
  178. package/dist/context/index.js.map +0 -1
  179. package/dist/context/schema.js +0 -50
  180. package/dist/context/schema.js.map +0 -1
  181. package/dist/context/types.js +0 -8
  182. package/dist/context/types.js.map +0 -1
  183. package/dist/controller.js +0 -34
  184. package/dist/controller.js.map +0 -1
  185. package/dist/decisions/engine.js +0 -117
  186. package/dist/decisions/engine.js.map +0 -1
  187. package/dist/decisions/index.js +0 -10
  188. package/dist/decisions/index.js.map +0 -1
  189. package/dist/decisions/schema.js +0 -151
  190. package/dist/decisions/schema.js.map +0 -1
  191. package/dist/decisions/strategies/rules.js +0 -166
  192. package/dist/decisions/strategies/rules.js.map +0 -1
  193. package/dist/decisions/strategies/score.js +0 -29
  194. package/dist/decisions/strategies/score.js.map +0 -1
  195. package/dist/decisions/types.js +0 -2
  196. package/dist/decisions/types.js.map +0 -1
  197. package/dist/earlyPatcher.js +0 -20
  198. package/dist/earlyPatcher.js.map +0 -1
  199. package/dist/editorLoader.js +0 -254
  200. package/dist/editorLoader.js.map +0 -1
  201. package/dist/events/EventAccumulator.js +0 -101
  202. package/dist/events/EventAccumulator.js.map +0 -1
  203. package/dist/events/EventBus.js +0 -152
  204. package/dist/events/EventBus.js.map +0 -1
  205. package/dist/events/index.js +0 -11
  206. package/dist/events/index.js.map +0 -1
  207. package/dist/events/normalizers/canvas.js +0 -116
  208. package/dist/events/normalizers/canvas.js.map +0 -1
  209. package/dist/events/normalizers/posthog.js +0 -171
  210. package/dist/events/normalizers/posthog.js.map +0 -1
  211. package/dist/events/schema.js +0 -30
  212. package/dist/events/schema.js.map +0 -1
  213. package/dist/events/types.js +0 -54
  214. package/dist/events/types.js.map +0 -1
  215. package/dist/experiments/adapters/growthbook.js +0 -81
  216. package/dist/experiments/adapters/growthbook.js.map +0 -1
  217. package/dist/experiments/index.js +0 -4
  218. package/dist/experiments/index.js.map +0 -1
  219. package/dist/experiments/registry.js +0 -30
  220. package/dist/experiments/registry.js.map +0 -1
  221. package/dist/experiments/types.js +0 -2
  222. package/dist/experiments/types.js.map +0 -1
  223. package/dist/fetchers/cdnFetcher.js +0 -96
  224. package/dist/fetchers/cdnFetcher.js.map +0 -1
  225. package/dist/fetchers/experimentsFetcher.js +0 -109
  226. package/dist/fetchers/experimentsFetcher.js.map +0 -1
  227. package/dist/fetchers/index.js +0 -5
  228. package/dist/fetchers/index.js.map +0 -1
  229. package/dist/fetchers/mergeConfigs.js +0 -38
  230. package/dist/fetchers/mergeConfigs.js.map +0 -1
  231. package/dist/fetchers/registry.js +0 -58
  232. package/dist/fetchers/registry.js.map +0 -1
  233. package/dist/fetchers/types.js +0 -2
  234. package/dist/fetchers/types.js.map +0 -1
  235. package/dist/hooks/useCanvasOverlays.js +0 -128
  236. package/dist/hooks/useCanvasOverlays.js.map +0 -1
  237. package/dist/hooks/useHostPatches.js +0 -40
  238. package/dist/hooks/useHostPatches.js.map +0 -1
  239. package/dist/hooks/useShadowCanvasConfig.js +0 -63
  240. package/dist/hooks/useShadowCanvasConfig.js.map +0 -1
  241. package/dist/hostPatcher/core/patcher.js +0 -181
  242. package/dist/hostPatcher/core/patcher.js.map +0 -1
  243. package/dist/hostPatcher/core/sanitizer.js +0 -66
  244. package/dist/hostPatcher/core/sanitizer.js.map +0 -1
  245. package/dist/hostPatcher/core/types.js +0 -2
  246. package/dist/hostPatcher/core/types.js.map +0 -1
  247. package/dist/hostPatcher/index.js +0 -7
  248. package/dist/hostPatcher/index.js.map +0 -1
  249. package/dist/hostPatcher/policy/defaultPolicy.js +0 -23
  250. package/dist/hostPatcher/policy/defaultPolicy.js.map +0 -1
  251. package/dist/hostPatcher/utils/anchors.js +0 -105
  252. package/dist/hostPatcher/utils/anchors.js.map +0 -1
  253. package/dist/hostPatcher/utils/observer.js +0 -11
  254. package/dist/hostPatcher/utils/observer.js.map +0 -1
  255. package/dist/logger.js +0 -81
  256. package/dist/logger.js.map +0 -1
  257. package/dist/metrics/index.js +0 -5
  258. package/dist/metrics/index.js.map +0 -1
  259. package/dist/metrics/sessionMetrics.js +0 -178
  260. package/dist/metrics/sessionMetrics.js.map +0 -1
  261. package/dist/notifications/NotificationToastStack.js +0 -118
  262. package/dist/notifications/NotificationToastStack.js.map +0 -1
  263. package/dist/notifications/index.js +0 -6
  264. package/dist/notifications/index.js.map +0 -1
  265. package/dist/notifications/matcher.js +0 -66
  266. package/dist/notifications/matcher.js.map +0 -1
  267. package/dist/notifications/types.js +0 -13
  268. package/dist/notifications/types.js.map +0 -1
  269. package/dist/notifications/useNotifications.js +0 -104
  270. package/dist/notifications/useNotifications.js.map +0 -1
  271. package/dist/notifications/useNotifyWatcher.js +0 -62
  272. package/dist/notifications/useNotifyWatcher.js.map +0 -1
  273. package/dist/overlays/fetcher.js +0 -15
  274. package/dist/overlays/fetcher.js.map +0 -1
  275. package/dist/overlays/recipeRegistry.js +0 -32
  276. package/dist/overlays/recipeRegistry.js.map +0 -1
  277. package/dist/overlays/runtime/anchor/resolve.js +0 -87
  278. package/dist/overlays/runtime/anchor/resolve.js.map +0 -1
  279. package/dist/overlays/runtime/index.js +0 -8
  280. package/dist/overlays/runtime/index.js.map +0 -1
  281. package/dist/overlays/runtime/overlay/highlight.js +0 -160
  282. package/dist/overlays/runtime/overlay/highlight.js.map +0 -1
  283. package/dist/overlays/runtime/overlay/modal.js +0 -78
  284. package/dist/overlays/runtime/overlay/modal.js.map +0 -1
  285. package/dist/overlays/runtime/overlay/root.js +0 -297
  286. package/dist/overlays/runtime/overlay/root.js.map +0 -1
  287. package/dist/overlays/runtime/overlay/runner.js +0 -602
  288. package/dist/overlays/runtime/overlay/runner.js.map +0 -1
  289. package/dist/overlays/runtime/overlay/tooltip.js +0 -232
  290. package/dist/overlays/runtime/overlay/tooltip.js.map +0 -1
  291. package/dist/overlays/runtime/utils/dom.js +0 -12
  292. package/dist/overlays/runtime/utils/dom.js.map +0 -1
  293. package/dist/overlays/schema.js +0 -52
  294. package/dist/overlays/schema.js.map +0 -1
  295. package/dist/overlays/types.js +0 -2
  296. package/dist/overlays/types.js.map +0 -1
  297. package/dist/render/RenderContext.js +0 -69
  298. package/dist/render/RenderContext.js.map +0 -1
  299. package/dist/render/index.js +0 -3
  300. package/dist/render/index.js.map +0 -1
  301. package/dist/render/types.js +0 -2
  302. package/dist/render/types.js.map +0 -1
  303. package/dist/runtime.js +0 -237
  304. package/dist/runtime.js.map +0 -1
  305. package/dist/state/StateStore.js +0 -176
  306. package/dist/state/StateStore.js.map +0 -1
  307. package/dist/state/helpers/cooldowns.js +0 -31
  308. package/dist/state/helpers/cooldowns.js.map +0 -1
  309. package/dist/state/helpers/dismissals.js +0 -34
  310. package/dist/state/helpers/dismissals.js.map +0 -1
  311. package/dist/state/helpers/frequency.js +0 -43
  312. package/dist/state/helpers/frequency.js.map +0 -1
  313. package/dist/state/index.js +0 -7
  314. package/dist/state/index.js.map +0 -1
  315. package/dist/state/schema.js +0 -25
  316. package/dist/state/schema.js.map +0 -1
  317. package/dist/state/types.js +0 -9
  318. package/dist/state/types.js.map +0 -1
  319. package/dist/store/example.js +0 -43
  320. package/dist/store/example.js.map +0 -1
  321. package/dist/store/mini-effector.js +0 -88
  322. package/dist/store/mini-effector.js.map +0 -1
  323. package/dist/surfaces/Surfaces.js +0 -361
  324. package/dist/surfaces/Surfaces.js.map +0 -1
  325. package/dist/surfaces/index.js +0 -12
  326. package/dist/surfaces/index.js.map +0 -1
  327. package/dist/surfaces/positioning.js +0 -228
  328. package/dist/surfaces/positioning.js.map +0 -1
  329. package/dist/surfaces/types.js +0 -23
  330. package/dist/surfaces/types.js.map +0 -1
  331. package/dist/telemetry/adapters/noop.js +0 -42
  332. package/dist/telemetry/adapters/noop.js.map +0 -1
  333. package/dist/telemetry/adapters/posthog.js +0 -180
  334. package/dist/telemetry/adapters/posthog.js.map +0 -1
  335. package/dist/telemetry/index.js +0 -4
  336. package/dist/telemetry/index.js.map +0 -1
  337. package/dist/telemetry/registry.js +0 -29
  338. package/dist/telemetry/registry.js.map +0 -1
  339. package/dist/telemetry/types.js +0 -2
  340. package/dist/telemetry/types.js.map +0 -1
  341. package/dist/theme/ThemeProvider.js +0 -109
  342. package/dist/theme/ThemeProvider.js.map +0 -1
  343. package/dist/theme/defaultTheme.js +0 -190
  344. package/dist/theme/defaultTheme.js.map +0 -1
  345. package/dist/theme/extractHostTheme.js +0 -259
  346. package/dist/theme/extractHostTheme.js.map +0 -1
  347. package/dist/theme/index.js +0 -7
  348. package/dist/theme/index.js.map +0 -1
  349. package/dist/theme/types.js +0 -6
  350. package/dist/theme/types.js.map +0 -1
  351. package/dist/token.js +0 -44
  352. package/dist/token.js.map +0 -1
  353. package/dist/types.js +0 -17
  354. package/dist/types.js.map +0 -1
  355. package/dist/version.js +0 -14
  356. package/dist/version.js.map +0 -1
  357. package/dist/widgets/WidgetRegistry.js +0 -190
  358. package/dist/widgets/WidgetRegistry.js.map +0 -1
  359. package/dist/widgets/index.js +0 -7
  360. package/dist/widgets/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/notifications/matcher.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAYtC,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAE5B;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,KAA0C;IAE1C,OAAO,QAAQ,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,MAAM,EAAE,GAAW,EAAE,EAAE;QACvE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAC7C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,SAAiB,EAAE,MAAc;IACpD,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,KAAsB,EACtB,KAAmB;;IAEnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBAAE,SAAS;YAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,MAAA,IAAI,CAAC,GAAG,mCAAI,WAAW,CAAC;YAEpC,OAAO;gBACL,YAAY,EAAE;oBACZ,EAAE,EAAE,SAAS,EAAE,mBAAmB,IAAI,GAAG,EAAE;oBAC3C,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;oBACnD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;oBACzE,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,MAAM,EAAE,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM;wBAC3B,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;wBACxD,CAAC,CAAC,SAAS;oBACb,SAAS,EAAE,GAAG,GAAG,GAAG;oBACpB,SAAS,EAAE,GAAG;oBACd,GAAG;iBACJ;gBACD,IAAI;aACL,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Notification System Types
3
- *
4
- * Config-driven toast notifications that surface adaptive events
5
- * (FAQ triggers, nav suggestions) above the launcher button.
6
- */
7
- /** Max number of visible toasts at once */
8
- export const MAX_VISIBLE_TOASTS = 3;
9
- /** Default auto-dismiss duration in ms */
10
- export const DEFAULT_TTL = 8000;
11
- /** Default cooldown between same rule firing in ms */
12
- export const DEFAULT_COOLDOWN = 30000;
13
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/notifications/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyDH,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEhC,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC"}
@@ -1,104 +0,0 @@
1
- import { useCallback, useEffect, useRef, useState } from 'react';
2
- import { StandardEvents } from '../events/types';
3
- import { matchEvent } from './matcher';
4
- import { DEFAULT_COOLDOWN, MAX_VISIBLE_TOASTS } from './types';
5
- /**
6
- * React hook that subscribes to the EventBus, evaluates notification rules
7
- * from tile configs, and manages the active toast queue.
8
- *
9
- * Features:
10
- * - Max 3 visible toasts (FIFO eviction when exceeded)
11
- * - Deduplication by tileId + itemId
12
- * - Cooldown per rule (prevents rapid re-firing)
13
- * - Auto-dismiss after TTL
14
- * - Publishes NOTIFICATION_SHOWN / NOTIFICATION_DISMISSED telemetry events
15
- */
16
- export function useNotifications(eventBus, tiles) {
17
- const [notifications, setNotifications] = useState([]);
18
- const cooldownMap = useRef(new Map());
19
- const timerIds = useRef(new Map());
20
- const publishDismissed = useCallback((notif) => {
21
- eventBus === null || eventBus === void 0 ? void 0 : eventBus.publish(StandardEvents.NOTIFICATION_DISMISSED, {
22
- notificationId: notif.id,
23
- tileId: notif.tileId,
24
- itemId: notif.itemId,
25
- });
26
- }, [eventBus]);
27
- const scheduleDismiss = useCallback((notif) => {
28
- const timerId = setTimeout(() => {
29
- setNotifications((prev) => prev.filter((n) => n.id !== notif.id));
30
- timerIds.current.delete(notif.id);
31
- publishDismissed(notif);
32
- }, notif.ttl);
33
- timerIds.current.set(notif.id, timerId);
34
- }, [publishDismissed]);
35
- const dismiss = useCallback((id) => {
36
- setNotifications((prev) => {
37
- const notif = prev.find((n) => n.id === id);
38
- if (notif)
39
- publishDismissed(notif);
40
- return prev.filter((n) => n.id !== id);
41
- });
42
- const timerId = timerIds.current.get(id);
43
- if (timerId) {
44
- clearTimeout(timerId);
45
- timerIds.current.delete(id);
46
- }
47
- }, [publishDismissed]);
48
- useEffect(() => {
49
- if (!eventBus)
50
- return;
51
- const unsubscribe = eventBus.subscribe((event) => {
52
- var _a;
53
- const match = matchEvent(event, tiles);
54
- if (!match)
55
- return;
56
- const { notification: matched, rule: matchedRule } = match;
57
- // --- Cooldown check ---
58
- const cooldownKey = `${matched.tileId}:${event.name}`;
59
- const lastFired = cooldownMap.current.get(cooldownKey);
60
- const now = Date.now();
61
- const cooldown = (_a = matchedRule.cooldown) !== null && _a !== void 0 ? _a : DEFAULT_COOLDOWN;
62
- if (lastFired !== undefined && now - lastFired < cooldown)
63
- return;
64
- cooldownMap.current.set(cooldownKey, now);
65
- // --- Dedup check + queue management ---
66
- setNotifications((prev) => {
67
- // Dedup: skip if a notification with the same tileId + itemId already exists
68
- if (matched.itemId) {
69
- const isDuplicate = prev.some((n) => n.tileId === matched.tileId && n.itemId === matched.itemId);
70
- if (isDuplicate)
71
- return prev;
72
- }
73
- const next = [...prev, matched];
74
- // FIFO eviction: remove oldest when exceeding max visible
75
- if (next.length > MAX_VISIBLE_TOASTS) {
76
- const evicted = next.shift();
77
- const timerId = timerIds.current.get(evicted.id);
78
- if (timerId) {
79
- clearTimeout(timerId);
80
- timerIds.current.delete(evicted.id);
81
- }
82
- }
83
- return next;
84
- });
85
- // Publish shown event
86
- eventBus.publish(StandardEvents.NOTIFICATION_SHOWN, {
87
- notificationId: matched.id,
88
- tileId: matched.tileId,
89
- itemId: matched.itemId,
90
- title: matched.title,
91
- });
92
- scheduleDismiss(matched);
93
- });
94
- return () => {
95
- unsubscribe();
96
- for (const timerId of timerIds.current.values()) {
97
- clearTimeout(timerId);
98
- }
99
- timerIds.current.clear();
100
- };
101
- }, [eventBus, tiles, scheduleDismiss]);
102
- return { notifications, dismiss };
103
- }
104
- //# sourceMappingURL=useNotifications.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useNotifications.js","sourceRoot":"","sources":["../../src/notifications/useNotifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAO/D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAyB,EACzB,KAAmB;IAEnB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAuB,EAAE,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAA6C,IAAI,GAAG,EAAE,CAAC,CAAC;IAE/E,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,KAAyB,EAAE,EAAE;QAC5B,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAAC,cAAc,CAAC,sBAAsB,EAAE;YACvD,cAAc,EAAE,KAAK,CAAC,EAAE;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,KAAyB,EAAE,EAAE;QAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACd,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC,EACD,CAAC,gBAAgB,CAAC,CACnB,CAAC;IAEF,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,EAAU,EAAE,EAAE;QACb,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5C,IAAI,KAAK;gBAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EACD,CAAC,gBAAgB,CAAC,CACnB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;;YAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;YAE3D,yBAAyB;YACzB,MAAM,WAAW,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,MAAA,WAAW,CAAC,QAAQ,mCAAI,gBAAgB,CAAC;YAE1D,IAAI,SAAS,KAAK,SAAS,IAAI,GAAG,GAAG,SAAS,GAAG,QAAQ;gBAAE,OAAO;YAClE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAE1C,yCAAyC;YACzC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE;gBACxB,6EAA6E;gBAC7E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAClE,CAAC;oBACF,IAAI,WAAW;wBAAE,OAAO,IAAI,CAAC;gBAC/B,CAAC;gBAED,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;gBAEhC,0DAA0D;gBAC1D,IAAI,IAAI,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;oBACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAG,CAAC;oBAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACjD,IAAI,OAAO,EAAE,CAAC;wBACZ,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACtC,CAAC;gBACH,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,sBAAsB;YACtB,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE;gBAClD,cAAc,EAAE,OAAO,CAAC,EAAE;gBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YAEH,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAC;YACd,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBAChD,YAAY,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YACD,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;IAEvC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC"}
@@ -1,62 +0,0 @@
1
- /**
2
- * useNotifyWatcher
3
- *
4
- * Runs in ShadowCanvasOverlay (always mounted). Collects NotifyWatcherEntry
5
- * registrations from each app's `runtime.notifyWatchers(props)` callback,
6
- * subscribes to EventBus, and publishes events when DecisionStrategy
7
- * conditions transition false → true.
8
- *
9
- * This lets adaptives fire notification events even when their widgets
10
- * aren't mounted (e.g., drawer is closed).
11
- */
12
- import { useEffect, useRef } from 'react';
13
- /**
14
- * Collect NotifyWatcherEntry[] from all registered apps for the given tiles.
15
- */
16
- function collectEntries(tiles, appRegistry) {
17
- var _a, _b;
18
- const entries = [];
19
- for (const tile of tiles) {
20
- // Widget format: "adaptive-faq:accordion" → appId = "adaptive-faq"
21
- const appId = tile.widget.split(':')[0];
22
- const registration = appRegistry.get(appId);
23
- const watcherFn = (_a = registration === null || registration === void 0 ? void 0 : registration.manifest.runtime) === null || _a === void 0 ? void 0 : _a.notifyWatchers;
24
- if (watcherFn) {
25
- entries.push(...watcherFn((_b = tile.props) !== null && _b !== void 0 ? _b : {}));
26
- }
27
- }
28
- return entries;
29
- }
30
- export function useNotifyWatcher(runtime, tiles, appRegistry) {
31
- const prevStateRef = useRef(new Map());
32
- useEffect(() => {
33
- if (!(runtime === null || runtime === void 0 ? void 0 : runtime.events) || !appRegistry)
34
- return;
35
- const entries = collectEntries(tiles, appRegistry);
36
- if (entries.length === 0)
37
- return;
38
- // Snapshot current state so we don't fire on conditions already true
39
- for (const entry of entries) {
40
- if (!prevStateRef.current.has(entry.id)) {
41
- const result = runtime.evaluateSync(entry.strategy);
42
- prevStateRef.current.set(entry.id, result.value);
43
- }
44
- }
45
- const unsub = runtime.events.subscribe(() => {
46
- var _a;
47
- for (const entry of entries) {
48
- const result = runtime.evaluateSync(entry.strategy);
49
- const wasVisible = (_a = prevStateRef.current.get(entry.id)) !== null && _a !== void 0 ? _a : false;
50
- // Update state BEFORE publishing to prevent re-entrant loops.
51
- // EventBus.publish() synchronously notifies subscribers, so without
52
- // this guard the nested callback would see wasVisible=false again.
53
- prevStateRef.current.set(entry.id, result.value);
54
- if (!wasVisible && result.value) {
55
- runtime.events.publish(entry.eventName, entry.eventProps);
56
- }
57
- }
58
- });
59
- return unsub;
60
- }, [runtime, tiles, appRegistry]);
61
- }
62
- //# sourceMappingURL=useNotifyWatcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useNotifyWatcher.js","sourceRoot":"","sources":["../../src/notifications/useNotifyWatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAO1C;;GAEG;AACH,SAAS,cAAc,CACrB,KAAmB,EACnB,WAAwB;;IAExB,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,mEAAmE;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,CAAC,OAAO,0CAAE,cAAc,CAAC;QAEjE,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAkC,EAClC,KAAmB,EACnB,WAAoC;IAEpC,MAAM,YAAY,GAAG,MAAM,CAAuB,IAAI,GAAG,EAAE,CAAC,CAAC;IAE7D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7C,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEjC,qEAAqE;QACrE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAU,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC7D,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;;YAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAU,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC7D,MAAM,UAAU,GAAG,MAAA,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,mCAAI,KAAK,CAAC;gBAE/D,8DAA8D;gBAC9D,oEAAoE;gBACpE,mEAAmE;gBACnE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEjD,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AACpC,CAAC"}
@@ -1,15 +0,0 @@
1
- import { resolveConfigUri } from '../configFetcher';
2
- import { CanvasRecipeZ } from './schema';
3
- export const createOverlayRecipeFetcher = ({ configUri, experiments, featureKey = 'smart-canvas-overlay-uri', credentials = 'include', } = {}) => async () => {
4
- const uri = resolveConfigUri({ configUri, experiments, featureKey });
5
- if (!uri) {
6
- throw new Error('SmartCanvas overlays: recipe URI missing (env + feature unset).');
7
- }
8
- const response = await fetch(uri, { credentials });
9
- if (!response.ok) {
10
- throw new Error(`SmartCanvas overlays: failed to fetch recipe (${response.status})`);
11
- }
12
- const json = await response.json();
13
- return CanvasRecipeZ.parse(json);
14
- };
15
- //# sourceMappingURL=fetcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/overlays/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA6B,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKzC,MAAM,CAAC,MAAM,0BAA0B,GACrC,CAAC,EACC,SAAS,EACT,WAAW,EACX,UAAU,GAAG,0BAA0B,EACvC,WAAW,GAAG,SAAS,MACC,EAAE,EAAwB,EAAE,CACtD,KAAK,IAAI,EAAE;IACT,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,iDAAiD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC;AACnD,CAAC,CAAC"}
@@ -1,32 +0,0 @@
1
- /**
2
- * Module-level registry for overlay recipes.
3
- * Allows components like TileCard to look up recipes by ID
4
- * without needing to prop-drill the entire recipe config.
5
- */
6
- let registeredRecipes = [];
7
- /** Register recipes (called when overlays are loaded) */
8
- export function registerRecipes(recipes) {
9
- registeredRecipes = recipes;
10
- }
11
- /** Get a recipe by ID */
12
- export function getRecipeById(id) {
13
- return registeredRecipes.find((r) => r.id === id);
14
- }
15
- /** Get the first step's route for a recipe */
16
- export function getRecipeStartRoute(recipeId) {
17
- var _a;
18
- const recipe = getRecipeById(recipeId);
19
- if (!recipe)
20
- return undefined;
21
- // Find the start step
22
- const startStepId = recipe.startStep || ((_a = recipe.steps[0]) === null || _a === void 0 ? void 0 : _a.id);
23
- if (!startStepId)
24
- return undefined;
25
- const startStep = recipe.steps.find((s) => s.id === startStepId);
26
- return startStep === null || startStep === void 0 ? void 0 : startStep.route;
27
- }
28
- /** Clear the registry */
29
- export function clearRecipes() {
30
- registeredRecipes = [];
31
- }
32
- //# sourceMappingURL=recipeRegistry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recipeRegistry.js","sourceRoot":"","sources":["../../src/overlays/recipeRegistry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,IAAI,iBAAiB,GAAmB,EAAE,CAAC;AAE3C,yDAAyD;AACzD,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,iBAAiB,GAAG,OAAO,CAAC;AAC9B,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,mBAAmB,CAAC,QAAgB;;IAClD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,sBAAsB;IACtB,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,KAAI,MAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,0CAAE,EAAE,CAAA,CAAC;IAC5D,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IAEnC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;IACjE,OAAQ,SAAiB,aAAjB,SAAS,uBAAT,SAAS,CAAU,KAAK,CAAC;AACnC,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,YAAY;IAC1B,iBAAiB,GAAG,EAAE,CAAC;AACzB,CAAC"}
@@ -1,87 +0,0 @@
1
- /**
2
- * Dangerous selector patterns that should be blocked.
3
- */
4
- const DANGEROUS_SELECTOR_PATTERNS = [
5
- /^\*$/, // Universal selector alone - matches everything
6
- /^\s*$/, // Empty/whitespace
7
- /:has\(/i, // :has() can be slow and used for DOM probing
8
- /javascript:/i, // Should never appear in selectors
9
- ];
10
- const MAX_SELECTOR_LENGTH = 500;
11
- /**
12
- * Validates a CSS selector for security and performance.
13
- */
14
- function validateSelector(selector) {
15
- if (!selector || selector.length > MAX_SELECTOR_LENGTH) {
16
- console.warn('[SmartCanvas] Selector too long or empty:', selector === null || selector === void 0 ? void 0 : selector.slice(0, 50));
17
- return false;
18
- }
19
- if (DANGEROUS_SELECTOR_PATTERNS.some((p) => p.test(selector))) {
20
- console.warn('[SmartCanvas] Dangerous selector pattern blocked:', selector);
21
- return false;
22
- }
23
- try {
24
- document.querySelector(selector);
25
- return true;
26
- }
27
- catch {
28
- console.warn('[SmartCanvas] Invalid CSS selector:', selector);
29
- return false;
30
- }
31
- }
32
- /**
33
- * Resolves a selector and warns about ambiguous matches.
34
- */
35
- function resolveWithWarning(root, selector) {
36
- if (!validateSelector(selector)) {
37
- return null;
38
- }
39
- const matches = root.querySelectorAll(selector);
40
- if (matches.length === 0) {
41
- console.warn(`[SmartCanvas] No elements match selector: ${selector}`);
42
- return null;
43
- }
44
- if (matches.length > 1) {
45
- console.warn(`[SmartCanvas] Selector "${selector}" matches ${matches.length} elements. ` +
46
- `Using first match. Consider a more specific selector.`);
47
- }
48
- return matches[0];
49
- }
50
- export function createAnchorResolver(opts) {
51
- var _a;
52
- const canvasHost = (_a = opts.canvasHost) !== null && _a !== void 0 ? _a : document.querySelector('syntro-canvas');
53
- return async function resolve(sel) {
54
- // Direct element reference - no validation needed
55
- if (sel.el instanceof HTMLElement)
56
- return sel.el;
57
- if (sel.type === 'data') {
58
- const q = `[data-${sel.key}${sel.value ? `="${sel.value}"` : ''}]`;
59
- // Try document first, then shadow DOM
60
- const result = resolveWithWarning(document, q);
61
- if (result)
62
- return result;
63
- if (canvasHost === null || canvasHost === void 0 ? void 0 : canvasHost.shadowRoot) {
64
- return resolveWithWarning(canvasHost.shadowRoot, q);
65
- }
66
- return null;
67
- }
68
- if (sel.type === 'css') {
69
- return resolveWithWarning(document, sel.value);
70
- }
71
- if (sel.type === 'aria') {
72
- const role = sel.role ? `[role="${sel.role}"]` : '';
73
- const label = sel.label ? `[aria-label="${sel.label}"]` : '';
74
- const selector = `${role}${label}`;
75
- return resolveWithWarning(document, selector);
76
- }
77
- if (sel.type === 'shadow-css') {
78
- if (!(canvasHost === null || canvasHost === void 0 ? void 0 : canvasHost.shadowRoot)) {
79
- console.warn('[SmartCanvas] shadow-css selector used but no shadow root available');
80
- return null;
81
- }
82
- return resolveWithWarning(canvasHost.shadowRoot, sel.value);
83
- }
84
- return null;
85
- };
86
- }
87
- //# sourceMappingURL=resolve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../src/overlays/runtime/anchor/resolve.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export { ensureOverlayRoot, injectBaseStyles } from './overlay/root';
2
- export { showTooltip } from './overlay/tooltip';
3
- export { showHighlight } from './overlay/highlight';
4
- export { showModal } from './overlay/modal';
5
- export { runOverlays } from './overlay/runner';
6
- export { createAnchorResolver } from './anchor/resolve';
7
- export { isVisible, scrollIntoViewIfNeeded } from './utils/dom';
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlays/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
@@ -1,160 +0,0 @@
1
- var _a;
2
- const supportsPathClip = typeof CSS !== 'undefined' && ((_a = CSS.supports) === null || _a === void 0 ? void 0 : _a.call(CSS, 'clip-path', "path('M0 0 H1 V1 Z')"));
3
- export function showHighlight(anchorEl, overlayRoot, opts) {
4
- var _a, _b, _c, _d, _e, _f, _g;
5
- const padding = (_a = opts === null || opts === void 0 ? void 0 : opts.paddingPx) !== null && _a !== void 0 ? _a : 12;
6
- const radius = (_b = opts === null || opts === void 0 ? void 0 : opts.radiusPx) !== null && _b !== void 0 ? _b : 12;
7
- const opacity = Math.min(Math.max((_c = opts === null || opts === void 0 ? void 0 : opts.scrimOpacity) !== null && _c !== void 0 ? _c : 0.55, 0), 1);
8
- const ringColor = (_d = opts === null || opts === void 0 ? void 0 : opts.ringColor) !== null && _d !== void 0 ? _d : 'var(--syntro-ring, #5b8cff)';
9
- const blocking = (_e = opts === null || opts === void 0 ? void 0 : opts.blocking) !== null && _e !== void 0 ? _e : false;
10
- const onClickOutside = (_f = opts === null || opts === void 0 ? void 0 : opts.onClickOutside) !== null && _f !== void 0 ? _f : true; // Default to true for backwards compat
11
- const onEsc = (_g = opts === null || opts === void 0 ? void 0 : opts.onEsc) !== null && _g !== void 0 ? _g : true; // Default to true for backwards compat
12
- const rootStyles = getComputedStyle(document.documentElement);
13
- const tokenScrim = rootStyles.getPropertyValue('--syntro-spotlight-backdrop').trim();
14
- const tokenRing = rootStyles.getPropertyValue('--syntro-ring').trim();
15
- const scrim = document.createElement('div');
16
- scrim.className = 'syntro-spotlight-scrim';
17
- // Enable pointer events if blocking OR if we want to dismiss on click outside
18
- const needsPointerEvents = blocking || onClickOutside;
19
- Object.assign(scrim.style, {
20
- position: 'fixed',
21
- inset: '0',
22
- zIndex: '2147483646',
23
- pointerEvents: needsPointerEvents ? 'auto' : 'none',
24
- background: tokenScrim || `rgba(2, 6, 23, ${opacity})`,
25
- transition: 'opacity 220ms ease',
26
- opacity: '0',
27
- });
28
- overlayRoot.appendChild(scrim);
29
- requestAnimationFrame(() => (scrim.style.opacity = '1'));
30
- const ring = document.createElement('div');
31
- ring.className = 'syntro-spotlight-ring';
32
- Object.assign(ring.style, {
33
- position: 'fixed',
34
- pointerEvents: 'none',
35
- borderRadius: `${radius}px`,
36
- border: `2px solid ${ringColor || tokenRing || '#5b8cff'}`,
37
- boxShadow: `0 0 0 4px rgba(255,255,255,0.35)`,
38
- zIndex: '2147483647',
39
- transition: 'all 220ms cubic-bezier(0.16,1,0.3,1)',
40
- });
41
- overlayRoot.appendChild(ring);
42
- const fallbackSlices = [];
43
- if (!supportsPathClip) {
44
- for (let i = 0; i < 4; i++) {
45
- const slice = document.createElement('div');
46
- slice.style.position = 'fixed';
47
- slice.style.background = 'inherit';
48
- fallbackSlices.push(slice);
49
- scrim.appendChild(slice);
50
- }
51
- }
52
- const setClipPath = (path) => {
53
- scrim.style.clipPath = path;
54
- scrim.style.webkitClipPath = path;
55
- };
56
- const update = () => {
57
- const rect = anchorEl.getBoundingClientRect();
58
- const x = Math.max(0, rect.left - padding);
59
- const y = Math.max(0, rect.top - padding);
60
- const w = Math.min(window.innerWidth, rect.width + padding * 2);
61
- const h = Math.min(window.innerHeight, rect.height + padding * 2);
62
- Object.assign(ring.style, {
63
- left: `${x}px`,
64
- top: `${y}px`,
65
- width: `${w}px`,
66
- height: `${h}px`,
67
- });
68
- if (supportsPathClip) {
69
- // Create a single path that covers viewport with a ROUNDED hole cut out
70
- const vw = window.innerWidth;
71
- const vh = window.innerHeight;
72
- const r = Math.min(radius, w / 2, h / 2); // Don't let radius exceed half width/height
73
- // Outer path: clockwise around viewport
74
- const outer = `M 0 0 L ${vw} 0 L ${vw} ${vh} L 0 ${vh} Z`;
75
- // Inner path with rounded corners: counter-clockwise to create hole
76
- // Start at top-left, go LEFT first (counter-clockwise means opposite direction)
77
- const inner = `M ${x + r} ${y} ` +
78
- `A ${r} ${r} 0 0 0 ${x} ${y + r} ` + // top-left curve (sweep-flag=0 for counter-clockwise)
79
- `L ${x} ${y + h - r} ` + // left edge (going down)
80
- `A ${r} ${r} 0 0 0 ${x + r} ${y + h} ` + // bottom-left curve
81
- `L ${x + w - r} ${y + h} ` + // bottom edge (going right)
82
- `A ${r} ${r} 0 0 0 ${x + w} ${y + h - r} ` + // bottom-right curve
83
- `L ${x + w} ${y + r} ` + // right edge (going up)
84
- `A ${r} ${r} 0 0 0 ${x + w - r} ${y} ` + // top-right curve
85
- `L ${x + r} ${y} ` + // top edge (going left, back to start)
86
- `Z`;
87
- const path = `path('${outer} ${inner}')`;
88
- setClipPath(path);
89
- }
90
- else {
91
- const [top, right, bottom, left] = fallbackSlices;
92
- Object.assign(top.style, {
93
- left: '0px',
94
- top: '0px',
95
- width: '100vw',
96
- height: `${y}px`,
97
- });
98
- Object.assign(bottom.style, {
99
- left: '0px',
100
- top: `${y + h}px`,
101
- width: '100vw',
102
- height: `${Math.max(0, window.innerHeight - (y + h))}px`,
103
- });
104
- Object.assign(left.style, {
105
- left: '0px',
106
- top: `${y}px`,
107
- width: `${x}px`,
108
- height: `${h}px`,
109
- });
110
- Object.assign(right.style, {
111
- left: `${x + w}px`,
112
- top: `${y}px`,
113
- width: `${Math.max(0, window.innerWidth - (x + w))}px`,
114
- height: `${h}px`,
115
- });
116
- }
117
- };
118
- const ro = new ResizeObserver(() => requestAnimationFrame(update));
119
- ro.observe(anchorEl);
120
- const onScroll = () => requestAnimationFrame(update);
121
- const onResize = () => requestAnimationFrame(update);
122
- window.addEventListener('scroll', onScroll, true);
123
- window.addEventListener('resize', onResize);
124
- const onKey = (e) => {
125
- if (e.key === 'Escape' && onEsc)
126
- handle.destroy();
127
- };
128
- if (onEsc) {
129
- window.addEventListener('keydown', onKey);
130
- }
131
- const onClick = (event) => {
132
- if (blocking) {
133
- event.preventDefault();
134
- event.stopPropagation();
135
- }
136
- else if (onClickOutside) {
137
- handle.destroy();
138
- }
139
- };
140
- scrim.addEventListener('click', onClick);
141
- const handle = {
142
- destroy() {
143
- ro.disconnect();
144
- window.removeEventListener('scroll', onScroll, true);
145
- window.removeEventListener('resize', onResize);
146
- if (onEsc) {
147
- window.removeEventListener('keydown', onKey);
148
- }
149
- scrim.removeEventListener('click', onClick);
150
- scrim.style.opacity = '0';
151
- setTimeout(() => {
152
- scrim.remove();
153
- ring.remove();
154
- }, 220);
155
- },
156
- };
157
- update();
158
- return handle;
159
- }
160
- //# sourceMappingURL=highlight.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../../src/overlays/runtime/overlay/highlight.ts"],"names":[],"mappings":"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"}
@@ -1,78 +0,0 @@
1
- import { sanitizeWithFallback } from '../../../hostPatcher/core/sanitizer';
2
- export function showModal(overlayRoot, opts) {
3
- var _a, _b;
4
- // Create scrim backdrop
5
- const scrim = document.createElement('div');
6
- scrim.className = 'syntro-modal-scrim';
7
- scrim.style.opacity = String((_a = opts.scrimOpacity) !== null && _a !== void 0 ? _a : 0.6);
8
- overlayRoot.appendChild(scrim);
9
- // Create modal container
10
- const modal = document.createElement('div');
11
- modal.className = `syntro-modal syntro-modal-${(_b = opts.size) !== null && _b !== void 0 ? _b : 'md'}`;
12
- modal.setAttribute('role', 'dialog');
13
- modal.setAttribute('aria-modal', 'true');
14
- // Sanitize HTML to prevent XSS
15
- modal.innerHTML = sanitizeWithFallback(opts.html);
16
- overlayRoot.appendChild(modal);
17
- // Handle action button clicks
18
- const actionBtns = modal.querySelectorAll('[data-syntro-action]');
19
- const actionHandler = (e) => {
20
- const btn = e.currentTarget;
21
- const actionId = btn.getAttribute('data-syntro-action');
22
- if (actionId && opts.onAction) {
23
- opts.onAction(actionId);
24
- }
25
- };
26
- actionBtns.forEach((btn) => btn.addEventListener('click', actionHandler));
27
- // Handle escape key
28
- const onKey = (e) => {
29
- if (e.key === 'Escape')
30
- handle.destroy();
31
- };
32
- window.addEventListener('keydown', onKey);
33
- // Handle click outside (on scrim)
34
- const onScrimClick = () => handle.destroy();
35
- scrim.addEventListener('click', onScrimClick);
36
- // Blocking mode - make siblings inert
37
- const originalInert = [];
38
- if (opts.blocking) {
39
- Array.from(document.body.children).forEach((el) => {
40
- if (el !== overlayRoot && el.getAttribute('inert') === null) {
41
- el.setAttribute('inert', '');
42
- originalInert.push(el);
43
- }
44
- });
45
- }
46
- // Focus first focusable element
47
- const focusableEls = modal.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
48
- if (focusableEls.length > 0) {
49
- requestAnimationFrame(() => focusableEls[0].focus());
50
- }
51
- // Fade in
52
- requestAnimationFrame(() => {
53
- var _a;
54
- scrim.style.opacity = String((_a = opts.scrimOpacity) !== null && _a !== void 0 ? _a : 0.6);
55
- modal.style.opacity = '1';
56
- modal.style.transform = 'translate(-50%, -50%) scale(1)';
57
- });
58
- const handle = {
59
- el: modal,
60
- destroy() {
61
- window.removeEventListener('keydown', onKey);
62
- scrim.removeEventListener('click', onScrimClick);
63
- actionBtns.forEach((btn) => btn.removeEventListener('click', actionHandler));
64
- // Restore inert state
65
- originalInert.forEach((el) => el.removeAttribute('inert'));
66
- // Fade out then remove
67
- modal.style.opacity = '0';
68
- modal.style.transform = 'translate(-50%, -50%) scale(0.95)';
69
- scrim.style.opacity = '0';
70
- setTimeout(() => {
71
- modal.remove();
72
- scrim.remove();
73
- }, 200);
74
- },
75
- };
76
- return handle;
77
- }
78
- //# sourceMappingURL=modal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modal.js","sourceRoot":"","sources":["../../../../src/overlays/runtime/overlay/modal.ts"],"names":[],"mappings":"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"}