@syntrologie/runtime-sdk 0.2.21 → 1.0.0

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 (324) hide show
  1. package/CAPABILITIES.md +944 -440
  2. package/README.md +395 -66
  3. package/dist/RuntimeProvider.d.ts +51 -0
  4. package/dist/RuntimeProvider.js +113 -0
  5. package/dist/RuntimeProvider.js.map +1 -0
  6. package/dist/SmartCanvasApp.d.ts +16 -10
  7. package/dist/SmartCanvasApp.js +47 -51
  8. package/dist/SmartCanvasApp.js.map +1 -1
  9. package/dist/SmartCanvasElement.d.ts +5 -5
  10. package/dist/SmartCanvasElement.js +24 -14
  11. package/dist/SmartCanvasElement.js.map +1 -1
  12. package/dist/SmartCanvasPortal.d.ts +2 -2
  13. package/dist/SmartCanvasPortal.js +2 -2
  14. package/dist/SmartCanvasPortal.js.map +1 -1
  15. package/dist/actions/ActionEngine.d.ts +11 -0
  16. package/dist/actions/ActionEngine.js +272 -0
  17. package/dist/actions/ActionEngine.js.map +1 -0
  18. package/dist/actions/executors/index.d.ts +116 -0
  19. package/dist/actions/executors/index.js +240 -0
  20. package/dist/actions/executors/index.js.map +1 -0
  21. package/dist/actions/executors/tour.d.ts +18 -0
  22. package/dist/actions/executors/tour.js +332 -0
  23. package/dist/actions/executors/tour.js.map +1 -0
  24. package/dist/actions/index.d.ts +10 -0
  25. package/dist/actions/index.js +12 -0
  26. package/dist/actions/index.js.map +1 -0
  27. package/dist/actions/types.d.ts +399 -0
  28. package/dist/actions/types.js +8 -0
  29. package/dist/actions/types.js.map +1 -0
  30. package/dist/actions/validation.d.ts +14 -0
  31. package/dist/actions/validation.js +577 -0
  32. package/dist/actions/validation.js.map +1 -0
  33. package/dist/adaptives/adaptive-chatbot/index.js +9 -0
  34. package/dist/adaptives/adaptive-chatbot/index.js.map +7 -0
  35. package/dist/adaptives/adaptive-content/index.js +2 -0
  36. package/dist/adaptives/adaptive-content/index.js.map +7 -0
  37. package/dist/adaptives/adaptive-faq/index.js +11 -0
  38. package/dist/adaptives/adaptive-faq/index.js.map +7 -0
  39. package/dist/adaptives/adaptive-gamification/index.js +2 -0
  40. package/dist/adaptives/adaptive-gamification/index.js.map +7 -0
  41. package/dist/adaptives/adaptive-nav/index.js +11 -0
  42. package/dist/adaptives/adaptive-nav/index.js.map +7 -0
  43. package/dist/adaptives/adaptive-overlays/index.js +91 -0
  44. package/dist/adaptives/adaptive-overlays/index.js.map +7 -0
  45. package/dist/antiFlicker.js +1 -1
  46. package/dist/api.d.ts +40 -26
  47. package/dist/api.js +87 -60
  48. package/dist/api.js.map +1 -1
  49. package/dist/apps/AppContext.d.ts +31 -0
  50. package/dist/apps/AppContext.js +91 -0
  51. package/dist/apps/AppContext.js.map +1 -0
  52. package/dist/apps/AppLoader.d.ts +85 -0
  53. package/dist/apps/AppLoader.js +282 -0
  54. package/dist/apps/AppLoader.js.map +1 -0
  55. package/dist/apps/AppRegistry.d.ts +102 -0
  56. package/dist/apps/AppRegistry.js +317 -0
  57. package/dist/apps/AppRegistry.js.map +1 -0
  58. package/dist/apps/examples/gamification-app.example.d.ts +305 -0
  59. package/dist/apps/examples/gamification-app.example.js +329 -0
  60. package/dist/apps/examples/gamification-app.example.js.map +1 -0
  61. package/dist/apps/index.d.ts +14 -0
  62. package/dist/apps/index.js +16 -0
  63. package/dist/apps/index.js.map +1 -0
  64. package/dist/apps/types.d.ts +231 -0
  65. package/dist/apps/types.js +8 -0
  66. package/dist/apps/types.js.map +1 -0
  67. package/dist/blocks/data/ComparisonBlock.d.ts +1 -1
  68. package/dist/blocks/data/ComparisonBlock.js +40 -40
  69. package/dist/blocks/data/ComparisonBlock.js.map +1 -1
  70. package/dist/blocks/data/StatsBlock.d.ts +1 -1
  71. package/dist/blocks/data/StatsBlock.js +42 -44
  72. package/dist/blocks/data/StatsBlock.js.map +1 -1
  73. package/dist/blocks/data/index.d.ts +2 -2
  74. package/dist/blocks/data/index.js +2 -2
  75. package/dist/blocks/index.d.ts +5 -5
  76. package/dist/blocks/index.js +29 -30
  77. package/dist/blocks/index.js.map +1 -1
  78. package/dist/blocks/interactive/ChecklistBlock.d.ts +1 -1
  79. package/dist/blocks/interactive/ChecklistBlock.js +60 -60
  80. package/dist/blocks/interactive/ChecklistBlock.js.map +1 -1
  81. package/dist/blocks/interactive/RatingBlock.d.ts +1 -1
  82. package/dist/blocks/interactive/RatingBlock.js +73 -65
  83. package/dist/blocks/interactive/RatingBlock.js.map +1 -1
  84. package/dist/blocks/interactive/index.d.ts +2 -2
  85. package/dist/blocks/interactive/index.js +2 -2
  86. package/dist/blocks/notification/NotificationBlock.d.ts +2 -2
  87. package/dist/blocks/notification/NotificationBlock.js +68 -64
  88. package/dist/blocks/notification/NotificationBlock.js.map +1 -1
  89. package/dist/blocks/notification/index.d.ts +1 -1
  90. package/dist/blocks/notification/index.js +1 -1
  91. package/dist/bootstrap.d.ts +32 -8
  92. package/dist/bootstrap.js +218 -102
  93. package/dist/bootstrap.js.map +1 -1
  94. package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
  95. package/dist/components/ShadowCanvasOverlay.js +156 -118
  96. package/dist/components/ShadowCanvasOverlay.js.map +1 -1
  97. package/dist/components/TileCard.d.ts +5 -5
  98. package/dist/components/TileCard.js +205 -154
  99. package/dist/components/TileCard.js.map +1 -1
  100. package/dist/components/TileWheel.d.ts +3 -3
  101. package/dist/components/TileWheel.js +29 -7
  102. package/dist/components/TileWheel.js.map +1 -1
  103. package/dist/config-validator.d.ts +49 -0
  104. package/dist/config-validator.js +173 -0
  105. package/dist/config-validator.js.map +1 -0
  106. package/dist/configFetcher.d.ts +7 -3
  107. package/dist/configFetcher.js +70 -29
  108. package/dist/configFetcher.js.map +1 -1
  109. package/dist/context/ContextManager.d.ts +3 -3
  110. package/dist/context/ContextManager.js +19 -18
  111. package/dist/context/ContextManager.js.map +1 -1
  112. package/dist/context/index.d.ts +4 -4
  113. package/dist/context/index.js +3 -3
  114. package/dist/context/schema.d.ts +9 -9
  115. package/dist/context/schema.js +2 -2
  116. package/dist/context/schema.js.map +1 -1
  117. package/dist/decisions/engine.d.ts +5 -5
  118. package/dist/decisions/engine.js +13 -13
  119. package/dist/decisions/engine.js.map +1 -1
  120. package/dist/decisions/index.d.ts +6 -6
  121. package/dist/decisions/index.js +5 -5
  122. package/dist/decisions/schema.d.ts +131 -131
  123. package/dist/decisions/schema.js +21 -21
  124. package/dist/decisions/schema.js.map +1 -1
  125. package/dist/decisions/strategies/rules.d.ts +1 -1
  126. package/dist/decisions/strategies/rules.js +24 -24
  127. package/dist/decisions/strategies/rules.js.map +1 -1
  128. package/dist/decisions/strategies/score.d.ts +1 -1
  129. package/dist/decisions/strategies/score.js +3 -3
  130. package/dist/decisions/types.d.ts +19 -19
  131. package/dist/earlyPatcher.d.ts +8 -20
  132. package/dist/earlyPatcher.js +13 -62
  133. package/dist/earlyPatcher.js.map +1 -1
  134. package/dist/editorLoader.d.ts +19 -7
  135. package/dist/editorLoader.js +154 -97
  136. package/dist/editorLoader.js.map +1 -1
  137. package/dist/events/EventBus.d.ts +3 -3
  138. package/dist/events/EventBus.js +5 -7
  139. package/dist/events/EventBus.js.map +1 -1
  140. package/dist/events/index.d.ts +6 -6
  141. package/dist/events/index.js +5 -5
  142. package/dist/events/normalizers/canvas.d.ts +2 -2
  143. package/dist/events/normalizers/canvas.js +3 -3
  144. package/dist/events/normalizers/canvas.js.map +1 -1
  145. package/dist/events/normalizers/posthog.d.ts +25 -1
  146. package/dist/events/normalizers/posthog.js +35 -27
  147. package/dist/events/normalizers/posthog.js.map +1 -1
  148. package/dist/events/schema.d.ts +13 -13
  149. package/dist/events/schema.js +3 -3
  150. package/dist/events/schema.js.map +1 -1
  151. package/dist/events/types.d.ts +7 -1
  152. package/dist/events/types.js +29 -21
  153. package/dist/events/types.js.map +1 -1
  154. package/dist/experiments/adapters/growthbook.d.ts +5 -4
  155. package/dist/experiments/adapters/growthbook.js +14 -6
  156. package/dist/experiments/adapters/growthbook.js.map +1 -1
  157. package/dist/experiments/index.d.ts +3 -3
  158. package/dist/experiments/index.js +1 -1
  159. package/dist/experiments/registry.d.ts +2 -2
  160. package/dist/experiments/registry.js +2 -2
  161. package/dist/experiments/types.d.ts +10 -1
  162. package/dist/fetchers/cdnFetcher.d.ts +1 -1
  163. package/dist/fetchers/cdnFetcher.js +4 -8
  164. package/dist/fetchers/cdnFetcher.js.map +1 -1
  165. package/dist/fetchers/experimentsFetcher.d.ts +25 -3
  166. package/dist/fetchers/experimentsFetcher.js +55 -8
  167. package/dist/fetchers/experimentsFetcher.js.map +1 -1
  168. package/dist/fetchers/index.d.ts +3 -3
  169. package/dist/fetchers/index.js +2 -2
  170. package/dist/fetchers/index.js.map +1 -1
  171. package/dist/fetchers/mergeConfigs.d.ts +29 -0
  172. package/dist/fetchers/mergeConfigs.js +38 -0
  173. package/dist/fetchers/mergeConfigs.js.map +1 -0
  174. package/dist/fetchers/registry.d.ts +1 -1
  175. package/dist/fetchers/registry.js +4 -4
  176. package/dist/fetchers/types.d.ts +1 -1
  177. package/dist/hooks/useCanvasOverlays.d.ts +8 -5
  178. package/dist/hooks/useCanvasOverlays.js +66 -17
  179. package/dist/hooks/useCanvasOverlays.js.map +1 -1
  180. package/dist/hooks/useHostPatches.d.ts +2 -2
  181. package/dist/hooks/useHostPatches.js +8 -8
  182. package/dist/hooks/useHostPatches.js.map +1 -1
  183. package/dist/hooks/useShadowCanvasConfig.d.ts +5 -9
  184. package/dist/hooks/useShadowCanvasConfig.js +7 -5
  185. package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
  186. package/dist/hostPatcher/core/patcher.d.ts +1 -1
  187. package/dist/hostPatcher/core/patcher.js +18 -9
  188. package/dist/hostPatcher/core/patcher.js.map +1 -1
  189. package/dist/hostPatcher/core/sanitizer.js +24 -3
  190. package/dist/hostPatcher/core/sanitizer.js.map +1 -1
  191. package/dist/hostPatcher/policy/defaultPolicy.js +15 -5
  192. package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
  193. package/dist/hostPatcher/utils/anchors.js +4 -6
  194. package/dist/hostPatcher/utils/anchors.js.map +1 -1
  195. package/dist/index.d.ts +34 -27
  196. package/dist/index.js +51 -24
  197. package/dist/index.js.map +1 -1
  198. package/dist/logger.d.ts +29 -0
  199. package/dist/logger.js +81 -0
  200. package/dist/logger.js.map +1 -0
  201. package/dist/metrics/index.d.ts +1 -1
  202. package/dist/metrics/index.js +1 -1
  203. package/dist/metrics/sessionMetrics.d.ts +1 -1
  204. package/dist/metrics/sessionMetrics.js +6 -6
  205. package/dist/overlays/fetcher.d.ts +2 -2
  206. package/dist/overlays/fetcher.js +13 -15
  207. package/dist/overlays/fetcher.js.map +1 -1
  208. package/dist/overlays/recipeRegistry.js +2 -2
  209. package/dist/overlays/recipeRegistry.js.map +1 -1
  210. package/dist/overlays/runtime/anchor/resolve.js +1 -1
  211. package/dist/overlays/runtime/anchor/resolve.js.map +1 -1
  212. package/dist/overlays/runtime/index.d.ts +7 -7
  213. package/dist/overlays/runtime/index.js +7 -7
  214. package/dist/overlays/runtime/overlay/highlight.js +39 -39
  215. package/dist/overlays/runtime/overlay/highlight.js.map +1 -1
  216. package/dist/overlays/runtime/overlay/modal.js +5 -5
  217. package/dist/overlays/runtime/overlay/modal.js.map +1 -1
  218. package/dist/overlays/runtime/overlay/root.js +1 -1
  219. package/dist/overlays/runtime/overlay/runner.js +88 -28
  220. package/dist/overlays/runtime/overlay/runner.js.map +1 -1
  221. package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
  222. package/dist/overlays/runtime/overlay/tooltip.js +13 -15
  223. package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
  224. package/dist/overlays/runtime/utils/dom.js +4 -1
  225. package/dist/overlays/runtime/utils/dom.js.map +1 -1
  226. package/dist/overlays/schema.d.ts +146 -146
  227. package/dist/overlays/schema.js +12 -8
  228. package/dist/overlays/schema.js.map +1 -1
  229. package/dist/react.d.ts +7 -7
  230. package/dist/react.js +4 -4
  231. package/dist/react.js.map +1 -1
  232. package/dist/render/RenderContext.d.ts +2 -2
  233. package/dist/render/RenderContext.js +5 -5
  234. package/dist/render/RenderContext.js.map +1 -1
  235. package/dist/render/index.d.ts +3 -3
  236. package/dist/render/index.js +1 -1
  237. package/dist/render/types.d.ts +4 -4
  238. package/dist/runtime.d.ts +32 -8
  239. package/dist/runtime.js +109 -13
  240. package/dist/runtime.js.map +1 -1
  241. package/dist/smart-canvas.esm.js +144 -55
  242. package/dist/smart-canvas.esm.js.map +4 -4
  243. package/dist/smart-canvas.js +14688 -11455
  244. package/dist/smart-canvas.js.map +4 -4
  245. package/dist/smart-canvas.min.js +145 -55
  246. package/dist/smart-canvas.min.js.map +4 -4
  247. package/dist/state/StateStore.d.ts +1 -7
  248. package/dist/state/StateStore.js +15 -9
  249. package/dist/state/StateStore.js.map +1 -1
  250. package/dist/state/helpers/cooldowns.d.ts +1 -1
  251. package/dist/state/helpers/cooldowns.js +1 -1
  252. package/dist/state/helpers/dismissals.d.ts +1 -1
  253. package/dist/state/helpers/dismissals.js +1 -1
  254. package/dist/state/helpers/frequency.d.ts +1 -1
  255. package/dist/state/helpers/frequency.js +1 -1
  256. package/dist/state/index.d.ts +4 -4
  257. package/dist/state/index.js +3 -3
  258. package/dist/state/schema.d.ts +1 -1
  259. package/dist/state/schema.js +1 -1
  260. package/dist/store/example.d.ts +1 -0
  261. package/dist/store/example.js +43 -0
  262. package/dist/store/example.js.map +1 -0
  263. package/dist/store/mini-effector.d.ts +46 -0
  264. package/dist/store/mini-effector.js +88 -0
  265. package/dist/store/mini-effector.js.map +1 -0
  266. package/dist/surfaces/Surfaces.d.ts +11 -0
  267. package/dist/surfaces/Surfaces.js +361 -0
  268. package/dist/surfaces/Surfaces.js.map +1 -0
  269. package/dist/surfaces/index.d.ts +9 -0
  270. package/dist/surfaces/index.js +12 -0
  271. package/dist/surfaces/index.js.map +1 -0
  272. package/dist/surfaces/positioning.d.ts +50 -0
  273. package/dist/surfaces/positioning.js +228 -0
  274. package/dist/surfaces/positioning.js.map +1 -0
  275. package/dist/surfaces/types.d.ts +167 -0
  276. package/dist/surfaces/types.js +23 -0
  277. package/dist/surfaces/types.js.map +1 -0
  278. package/dist/telemetry/adapters/noop.d.ts +12 -0
  279. package/dist/telemetry/adapters/noop.js +42 -0
  280. package/dist/telemetry/adapters/noop.js.map +1 -0
  281. package/dist/telemetry/adapters/posthog.d.ts +8 -2
  282. package/dist/telemetry/adapters/posthog.js +36 -14
  283. package/dist/telemetry/adapters/posthog.js.map +1 -1
  284. package/dist/telemetry/index.d.ts +4 -3
  285. package/dist/telemetry/index.js +3 -2
  286. package/dist/telemetry/index.js.map +1 -1
  287. package/dist/telemetry/registry.d.ts +2 -9
  288. package/dist/telemetry/registry.js +4 -2
  289. package/dist/telemetry/registry.js.map +1 -1
  290. package/dist/telemetry/types.d.ts +1 -1
  291. package/dist/theme/ThemeProvider.d.ts +2 -2
  292. package/dist/theme/ThemeProvider.js +21 -21
  293. package/dist/theme/ThemeProvider.js.map +1 -1
  294. package/dist/theme/defaultTheme.d.ts +4 -5
  295. package/dist/theme/defaultTheme.js +127 -118
  296. package/dist/theme/defaultTheme.js.map +1 -1
  297. package/dist/theme/extractHostTheme.d.ts +1 -1
  298. package/dist/theme/extractHostTheme.js +43 -45
  299. package/dist/theme/extractHostTheme.js.map +1 -1
  300. package/dist/theme/index.d.ts +5 -5
  301. package/dist/theme/index.js +3 -3
  302. package/dist/theme/index.js.map +1 -1
  303. package/dist/theme/types.d.ts +2 -2
  304. package/dist/token.d.ts +2 -0
  305. package/dist/token.js +3 -6
  306. package/dist/token.js.map +1 -1
  307. package/dist/types-only.d.ts +32 -0
  308. package/dist/types-only.js +11 -0
  309. package/dist/types-only.js.map +1 -0
  310. package/dist/types.d.ts +89 -56
  311. package/dist/types.js +14 -2
  312. package/dist/types.js.map +1 -1
  313. package/dist/version.d.ts +13 -0
  314. package/dist/version.js +14 -0
  315. package/dist/version.js.map +1 -0
  316. package/dist/widgets/WidgetRegistry.d.ts +145 -0
  317. package/dist/widgets/WidgetRegistry.js +191 -0
  318. package/dist/widgets/WidgetRegistry.js.map +1 -0
  319. package/dist/widgets/index.d.ts +7 -0
  320. package/dist/widgets/index.js +7 -0
  321. package/dist/widgets/index.js.map +1 -0
  322. package/package.json +35 -15
  323. package/schema/canvas-config.schema.json +488 -254
  324. package/schema/runtime-context.schema.json +1 -5
@@ -0,0 +1,329 @@
1
+ var _a;
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { z } from 'zod';
4
+ // ============================================================================
5
+ // CONFIG SCHEMA
6
+ // ============================================================================
7
+ /**
8
+ * Badge configuration.
9
+ */
10
+ const BadgeSchema = z.object({
11
+ id: z.string(),
12
+ name: z.string(),
13
+ description: z.string().optional(),
14
+ icon: z.string(), // URL or emoji
15
+ trigger: z.object({
16
+ event: z.string(),
17
+ count: z.number().optional(),
18
+ }),
19
+ });
20
+ /**
21
+ * App config schema - defines what config this app expects.
22
+ */
23
+ export const configSchema = z.object({
24
+ badges: z.array(BadgeSchema).default([]),
25
+ showProgress: z.boolean().default(true),
26
+ celebrationStyle: z.enum(['confetti', 'toast', 'modal']).default('toast'),
27
+ });
28
+ // ============================================================================
29
+ // ACTION SCHEMAS
30
+ // ============================================================================
31
+ /**
32
+ * Action: Award a badge to the user.
33
+ */
34
+ const AwardBadgeSchema = z.object({
35
+ kind: z.literal('gamification:award_badge'),
36
+ badgeId: z.string(),
37
+ showCelebration: z.boolean().default(true),
38
+ label: z.string().optional(),
39
+ });
40
+ /**
41
+ * Action: Show the progress widget.
42
+ */
43
+ const ShowProgressSchema = z.object({
44
+ kind: z.literal('gamification:show_progress'),
45
+ slot: z.string().default('overlay_corner_br'),
46
+ label: z.string().optional(),
47
+ });
48
+ // ============================================================================
49
+ // ACTION EXECUTORS
50
+ // ============================================================================
51
+ /**
52
+ * Award badge executor.
53
+ */
54
+ async function executeAwardBadge(action, context) {
55
+ const { badgeId, showCelebration: _showCelebration } = action;
56
+ // Emit event for tracking
57
+ context.publishEvent('gamification:badge_awarded', {
58
+ badgeId,
59
+ timestamp: Date.now(),
60
+ });
61
+ // Return cleanup function
62
+ return {
63
+ cleanup: () => {
64
+ // Badge awards are permanent, no cleanup
65
+ },
66
+ };
67
+ }
68
+ /**
69
+ * Show progress executor.
70
+ */
71
+ async function executeShowProgress(action, context) {
72
+ // This would mount the progress widget
73
+ // For now, just emit an event
74
+ context.publishEvent('gamification:progress_shown', {
75
+ slot: action.slot,
76
+ });
77
+ return {
78
+ cleanup: () => { },
79
+ };
80
+ }
81
+ // ============================================================================
82
+ // WIDGETS
83
+ // ============================================================================
84
+ /**
85
+ * Badge display widget.
86
+ */
87
+ const BadgeWidget = {
88
+ mount(container, config) {
89
+ container.innerHTML = `
90
+ <div style="
91
+ display: flex;
92
+ align-items: center;
93
+ gap: 8px;
94
+ padding: 12px;
95
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
96
+ border-radius: 8px;
97
+ color: white;
98
+ font-family: system-ui, sans-serif;
99
+ ">
100
+ <span style="font-size: 24px;">${(config === null || config === void 0 ? void 0 : config.icon) || '🏆'}</span>
101
+ <div>
102
+ <div style="font-weight: 600; font-size: 14px;">${(config === null || config === void 0 ? void 0 : config.name) || 'Badge'}</div>
103
+ <div style="font-size: 12px; opacity: 0.8;">Unlocked!</div>
104
+ </div>
105
+ </div>
106
+ `;
107
+ return () => {
108
+ container.innerHTML = '';
109
+ };
110
+ },
111
+ };
112
+ /**
113
+ * Progress tracker widget.
114
+ */
115
+ const ProgressWidget = {
116
+ mount(container, config) {
117
+ const progress = (config === null || config === void 0 ? void 0 : config.progress) || 0;
118
+ const total = (config === null || config === void 0 ? void 0 : config.total) || 100;
119
+ const percentage = Math.round((progress / total) * 100);
120
+ container.innerHTML = `
121
+ <div style="
122
+ padding: 16px;
123
+ background: rgba(0, 0, 0, 0.8);
124
+ border-radius: 12px;
125
+ color: white;
126
+ font-family: system-ui, sans-serif;
127
+ min-width: 200px;
128
+ ">
129
+ <div style="font-size: 12px; opacity: 0.7; margin-bottom: 8px;">Progress</div>
130
+ <div style="font-size: 24px; font-weight: 700; margin-bottom: 8px;">${percentage}%</div>
131
+ <div style="
132
+ height: 4px;
133
+ background: rgba(255,255,255,0.2);
134
+ border-radius: 2px;
135
+ overflow: hidden;
136
+ ">
137
+ <div style="
138
+ height: 100%;
139
+ width: ${percentage}%;
140
+ background: linear-gradient(90deg, #667eea, #764ba2);
141
+ transition: width 0.3s ease;
142
+ "></div>
143
+ </div>
144
+ </div>
145
+ `;
146
+ return () => {
147
+ container.innerHTML = '';
148
+ };
149
+ },
150
+ };
151
+ /**
152
+ * Gamification editor component.
153
+ */
154
+ function GamificationEditor({ config, onChange, editor }) {
155
+ const typedConfig = config;
156
+ const badges = typedConfig.badges || [];
157
+ const handleAddBadge = () => {
158
+ const newBadge = {
159
+ id: `badge-${Date.now()}`,
160
+ name: 'New Badge',
161
+ icon: '🏆',
162
+ trigger: { event: 'page_view', count: 1 },
163
+ };
164
+ onChange({
165
+ ...config,
166
+ badges: [...badges, newBadge],
167
+ });
168
+ editor.setDirty(true);
169
+ };
170
+ const handleRemoveBadge = (id) => {
171
+ onChange({
172
+ ...config,
173
+ badges: badges.filter((b) => b.id !== id),
174
+ });
175
+ editor.setDirty(true);
176
+ };
177
+ return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', height: '100%' }, children: [_jsxs("div", { style: {
178
+ padding: '16px',
179
+ borderBottom: '1px solid #334155',
180
+ display: 'flex',
181
+ alignItems: 'center',
182
+ gap: '12px',
183
+ }, children: [_jsx("button", { onClick: () => editor.navigateHome(), style: {
184
+ padding: '6px 12px',
185
+ borderRadius: '6px',
186
+ border: 'none',
187
+ backgroundColor: 'rgba(255,255,255,0.05)',
188
+ color: '#94a3b8',
189
+ fontSize: '13px',
190
+ cursor: 'pointer',
191
+ }, children: "\u2190 Back" }), _jsxs("div", { children: [_jsx("h2", { style: { margin: 0, fontSize: '15px', fontWeight: 600, color: '#f8fafc' }, children: "Gamification" }), _jsx("p", { style: { margin: '2px 0 0 0', fontSize: '11px', color: '#64748b' }, children: "Badges, rewards, and engagement" })] })] }), _jsxs("div", { style: { flex: 1, overflow: 'auto', padding: '16px' }, children: [_jsx("button", { onClick: handleAddBadge, style: {
192
+ width: '100%',
193
+ padding: '12px',
194
+ borderRadius: '8px',
195
+ border: '1px dashed rgba(139, 92, 246, 0.3)',
196
+ background: 'rgba(139, 92, 246, 0.05)',
197
+ color: '#8b5cf6',
198
+ fontSize: '13px',
199
+ fontWeight: 600,
200
+ cursor: 'pointer',
201
+ marginBottom: '16px',
202
+ }, children: "+ Add Badge" }), badges.map((badge) => (_jsxs("div", { style: {
203
+ padding: '12px',
204
+ borderRadius: '8px',
205
+ border: '1px solid rgba(255,255,255,0.08)',
206
+ background: 'rgba(255,255,255,0.02)',
207
+ marginBottom: '8px',
208
+ display: 'flex',
209
+ alignItems: 'center',
210
+ gap: '12px',
211
+ }, children: [_jsx("span", { style: { fontSize: '24px' }, children: badge.icon }), _jsxs("div", { style: { flex: 1 }, children: [_jsx("div", { style: { fontSize: '14px', fontWeight: 500, color: '#f8fafc' }, children: badge.name }), _jsxs("div", { style: { fontSize: '12px', color: '#64748b' }, children: ["Trigger: ", badge.trigger.event, badge.trigger.count && ` × ${badge.trigger.count}`] })] }), _jsx("button", { onClick: () => handleRemoveBadge(badge.id), style: {
212
+ padding: '4px 8px',
213
+ borderRadius: '4px',
214
+ border: 'none',
215
+ background: 'rgba(239, 68, 68, 0.1)',
216
+ color: '#ef4444',
217
+ fontSize: '12px',
218
+ cursor: 'pointer',
219
+ }, children: "Remove" })] }, badge.id))), badges.length === 0 && (_jsx("div", { style: {
220
+ textAlign: 'center',
221
+ padding: '32px 16px',
222
+ color: '#64748b',
223
+ fontSize: '13px',
224
+ }, children: "No badges configured. Click the button above to add one." }))] }), _jsxs("div", { style: {
225
+ padding: '12px 16px',
226
+ borderTop: '1px solid #334155',
227
+ display: 'flex',
228
+ gap: '8px',
229
+ }, children: [_jsx("button", { onClick: () => editor.save(), style: {
230
+ flex: 1,
231
+ padding: '10px',
232
+ borderRadius: '8px',
233
+ border: 'none',
234
+ background: 'rgba(59, 130, 246, 0.15)',
235
+ color: '#3b82f6',
236
+ fontSize: '13px',
237
+ fontWeight: 600,
238
+ cursor: 'pointer',
239
+ }, children: "Save Draft" }), _jsx("button", { onClick: () => editor.publish(), style: {
240
+ flex: 1,
241
+ padding: '10px',
242
+ borderRadius: '8px',
243
+ border: 'none',
244
+ background: '#22c55e',
245
+ color: 'white',
246
+ fontSize: '13px',
247
+ fontWeight: 600,
248
+ cursor: 'pointer',
249
+ }, children: "Publish" })] })] }));
250
+ }
251
+ // ============================================================================
252
+ // APP MANIFEST
253
+ // ============================================================================
254
+ /**
255
+ * The complete app manifest.
256
+ * This is what gets registered with the AppRegistry.
257
+ */
258
+ export const manifest = {
259
+ id: 'gamification',
260
+ version: '1.0.0',
261
+ name: 'Gamification',
262
+ description: 'Badges, rewards, and engagement mechanics',
263
+ runtime: {
264
+ actions: [
265
+ {
266
+ kind: 'gamification:award_badge',
267
+ schema: AwardBadgeSchema,
268
+ executor: executeAwardBadge,
269
+ },
270
+ {
271
+ kind: 'gamification:show_progress',
272
+ schema: ShowProgressSchema,
273
+ executor: executeShowProgress,
274
+ },
275
+ ],
276
+ widgets: [
277
+ {
278
+ id: 'gamification:badge',
279
+ component: BadgeWidget,
280
+ metadata: { name: 'Badge Display', icon: '🏆' },
281
+ },
282
+ {
283
+ id: 'gamification:progress',
284
+ component: ProgressWidget,
285
+ metadata: { name: 'Progress Tracker', icon: '📊' },
286
+ },
287
+ ],
288
+ events: [
289
+ {
290
+ names: ['page_view', 'button_click'],
291
+ handler: (event, _ctx) => {
292
+ // Check badge triggers
293
+ console.log('[Gamification] Event received:', event.name);
294
+ },
295
+ },
296
+ ],
297
+ },
298
+ configSchema,
299
+ editor: {
300
+ component: GamificationEditor,
301
+ panel: {
302
+ title: 'Gamification',
303
+ icon: '🎮',
304
+ description: 'Badges, rewards, and engagement',
305
+ },
306
+ },
307
+ metadata: {
308
+ author: 'Syntro',
309
+ tags: ['gamification', 'badges', 'rewards', 'engagement'],
310
+ },
311
+ };
312
+ // ============================================================================
313
+ // SELF-REGISTRATION (for UMD bundles)
314
+ // ============================================================================
315
+ /**
316
+ * Auto-register when loaded as a script tag.
317
+ * This looks for a global SynOS.appRegistry and registers the manifest.
318
+ */
319
+ if (typeof window !== 'undefined') {
320
+ const global = window;
321
+ if ((_a = global.SynOS) === null || _a === void 0 ? void 0 : _a.appRegistry) {
322
+ global.SynOS.appRegistry.register(manifest);
323
+ }
324
+ }
325
+ // ============================================================================
326
+ // MODULE EXPORT (for ES modules)
327
+ // ============================================================================
328
+ export default manifest;
329
+ //# sourceMappingURL=gamification-app.example.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gamification-app.example.js","sourceRoot":"","sources":["../../../src/apps/examples/gamification-app.example.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Apps Module
3
+ *
4
+ * SynOS app system for extensible runtime and editor modules.
5
+ */
6
+ export { AppRegistry, appRegistry } from './AppRegistry';
7
+ export type { AppRegistryEventCallback } from './AppRegistry';
8
+ export { createAppContext, cleanupAppContext } from './AppContext';
9
+ export type { CreateAppContextOptions } from './AppContext';
10
+ export { createAppLoader, isCoreActionKind, getAppIdFromActionKind, getAppIdFromWidgetId, } from './AppLoader';
11
+ export type { AppLoader, AppLoaderOptions, AppLoadResult, CanvasConfigForLoader, } from './AppLoader';
12
+ export { runtime as contentRuntime } from '@syntrologie/adapt-content/runtime';
13
+ export { runtime as overlaysRuntime } from '@syntrologie/adapt-overlays/runtime';
14
+ export type { AppManifest, AppRegistration, AppLifecycleState, AppContext, AppRuntimeExtensions, AppActionDefinition, AppWidgetDefinition, AppEventHandler, AppEventContext, EditorPanelProps, EditorPanelConfig, AppEditorModule, AppRegistryEvent, } from './types';
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Apps Module
3
+ *
4
+ * SynOS app system for extensible runtime and editor modules.
5
+ */
6
+ // App Registry
7
+ export { AppRegistry, appRegistry } from './AppRegistry';
8
+ // App Context
9
+ export { createAppContext, cleanupAppContext } from './AppContext';
10
+ // App Loader
11
+ export { createAppLoader, isCoreActionKind, getAppIdFromActionKind, getAppIdFromWidgetId, } from './AppLoader';
12
+ // Core app runtime modules (bundled with runtime SDK)
13
+ // These executors are available immediately without CDN loading.
14
+ export { runtime as contentRuntime } from '@syntrologie/adapt-content/runtime';
15
+ export { runtime as overlaysRuntime } from '@syntrologie/adapt-overlays/runtime';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/apps/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGzD,cAAc;AACd,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGnE,aAAa;AACb,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAQrB,sDAAsD;AACtD,iEAAiE;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qCAAqC,CAAC"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * App Types
3
+ *
4
+ * Defines the types for the SynOS app system.
5
+ * Apps provide runtime extensions (actions, widgets, events) and editor modules.
6
+ */
7
+ import type { ZodSchema } from 'zod';
8
+ import type { ActionExecutor } from '../actions/types';
9
+ import type { NormalizedEvent } from '../events/types';
10
+ import type { MountableWidget } from '../widgets/WidgetRegistry';
11
+ /**
12
+ * Action definition provided by an app.
13
+ */
14
+ export interface AppActionDefinition {
15
+ /** Action kind (e.g., "gamification:awardBadge") */
16
+ kind: string;
17
+ /** Zod schema for validation */
18
+ schema?: ZodSchema;
19
+ /** Executor function */
20
+ executor: ActionExecutor<any>;
21
+ }
22
+ /**
23
+ * Widget definition provided by an app.
24
+ */
25
+ export interface AppWidgetDefinition {
26
+ /** Widget ID (e.g., "gamification:leaderboard") */
27
+ id: string;
28
+ /** The widget component */
29
+ component: MountableWidget;
30
+ /** Optional metadata */
31
+ metadata?: {
32
+ name?: string;
33
+ description?: string;
34
+ icon?: string;
35
+ };
36
+ }
37
+ /**
38
+ * Context passed to app event handlers.
39
+ */
40
+ export interface AppEventContext {
41
+ /** The app ID */
42
+ appId: string;
43
+ /** Access to state store */
44
+ state: {
45
+ get: (key: string) => unknown;
46
+ set: (key: string, value: unknown) => void;
47
+ };
48
+ /** Emit telemetry events */
49
+ telemetry?: {
50
+ emit: (eventName: string, props?: Record<string, unknown>) => void;
51
+ };
52
+ /** Access to surfaces */
53
+ surfaces?: {
54
+ mount: (slot: string, content: unknown, opts?: unknown) => {
55
+ unmount: () => void;
56
+ };
57
+ };
58
+ }
59
+ /**
60
+ * Event handler definition provided by an app.
61
+ */
62
+ export interface AppEventHandler {
63
+ /** Event names to listen for */
64
+ names: string[];
65
+ /** Handler function */
66
+ handler: (event: NormalizedEvent, ctx: AppEventContext) => void | Promise<void>;
67
+ }
68
+ /**
69
+ * Runtime extensions provided by an app.
70
+ */
71
+ export interface AppRuntimeExtensions {
72
+ /** Custom action kinds */
73
+ actions?: AppActionDefinition[];
74
+ /** Widget components */
75
+ widgets?: AppWidgetDefinition[];
76
+ /** Event handlers */
77
+ events?: AppEventHandler[];
78
+ }
79
+ /**
80
+ * Props passed to editor panel components.
81
+ */
82
+ export interface EditorPanelProps {
83
+ /** The current config for this app's portion */
84
+ config: Record<string, unknown>;
85
+ /** Callback when config changes */
86
+ onChange: (config: Record<string, unknown>) => void;
87
+ /** Editor utilities */
88
+ editor: {
89
+ /** Mark the editor as dirty (has unsaved changes) */
90
+ setDirty: (dirty: boolean) => void;
91
+ /** Navigate back to home */
92
+ navigateHome: () => Promise<boolean>;
93
+ /** Save the current config */
94
+ save: () => Promise<void>;
95
+ /** Publish the current config */
96
+ publish: (captureScreenshot?: boolean) => Promise<void>;
97
+ };
98
+ /** Platform client for API calls (optional) */
99
+ platformClient?: unknown;
100
+ }
101
+ /**
102
+ * Editor panel configuration.
103
+ */
104
+ export interface EditorPanelConfig {
105
+ /** Panel title */
106
+ title: string;
107
+ /** Panel icon (emoji or icon key) */
108
+ icon: string;
109
+ /** Panel description */
110
+ description: string;
111
+ }
112
+ /**
113
+ * Editor module provided by an app.
114
+ */
115
+ export interface AppEditorModule {
116
+ /** React component for the editor panel */
117
+ component: React.ComponentType<EditorPanelProps>;
118
+ /** Panel configuration */
119
+ panel: EditorPanelConfig;
120
+ }
121
+ /**
122
+ * App manifest - the complete definition of a SynOS app.
123
+ */
124
+ export interface AppManifest {
125
+ /** Unique app identifier (e.g., "adaptive-gamification") */
126
+ id: string;
127
+ /** App version (semver) */
128
+ version: string;
129
+ /** Human-readable app name */
130
+ name: string;
131
+ /** App description */
132
+ description?: string;
133
+ /** Runtime extensions */
134
+ runtime?: AppRuntimeExtensions;
135
+ /** Zod schema for this app's config portion */
136
+ configSchema?: ZodSchema;
137
+ /** Editor module (optional - apps without editors are runtime-only) */
138
+ editor?: AppEditorModule;
139
+ /** App dependencies (other app IDs that must be loaded first) */
140
+ dependencies?: string[];
141
+ /** App metadata */
142
+ metadata?: {
143
+ /** Author name or organization */
144
+ author?: string;
145
+ /** Homepage URL */
146
+ homepage?: string;
147
+ /** License identifier */
148
+ license?: string;
149
+ /** Tags for categorization */
150
+ tags?: string[];
151
+ /** Whether this is a built-in app (bundled with runtime) */
152
+ isBuiltIn?: boolean;
153
+ };
154
+ }
155
+ /**
156
+ * App lifecycle state.
157
+ */
158
+ export type AppLifecycleState = 'registered' | 'activating' | 'active' | 'deactivating' | 'inactive' | 'error';
159
+ /**
160
+ * App registration - tracked state for a registered app.
161
+ */
162
+ export interface AppRegistration {
163
+ /** The app manifest */
164
+ manifest: AppManifest;
165
+ /** Current lifecycle state */
166
+ state: AppLifecycleState;
167
+ /** When the app was registered */
168
+ registeredAt: number;
169
+ /** When the app was last activated */
170
+ activatedAt?: number;
171
+ /** Error message if state is "error" */
172
+ error?: string;
173
+ /** Cleanup function to deactivate the app */
174
+ cleanup?: () => void | Promise<void>;
175
+ }
176
+ /**
177
+ * Sandboxed runtime context provided to apps.
178
+ */
179
+ export interface AppContext {
180
+ /** The app ID */
181
+ appId: string;
182
+ /** State store (scoped to app namespace) */
183
+ state: {
184
+ get: (key: string) => unknown;
185
+ set: (key: string, value: unknown) => void;
186
+ remove: (key: string) => void;
187
+ };
188
+ /** Telemetry (if available) */
189
+ telemetry?: {
190
+ emit: (eventName: string, props?: Record<string, unknown>) => void;
191
+ getSessionId: () => string | undefined;
192
+ };
193
+ /** Surfaces access */
194
+ surfaces: {
195
+ mount: (slot: string, content: unknown, opts?: unknown) => {
196
+ unmount: () => void;
197
+ update: (content: unknown) => void;
198
+ };
199
+ canMount: (slot: string, priority?: number) => boolean;
200
+ };
201
+ /** Event subscription */
202
+ events: {
203
+ subscribe: (callback: (event: NormalizedEvent) => void) => () => void;
204
+ publish: (name: string, props?: Record<string, unknown>) => void;
205
+ };
206
+ /** Register app-provided actions */
207
+ registerAction: (definition: AppActionDefinition) => void;
208
+ /** Register app-provided widgets */
209
+ registerWidget: (definition: AppWidgetDefinition) => void;
210
+ }
211
+ /**
212
+ * Events emitted by the app registry.
213
+ */
214
+ export type AppRegistryEvent = {
215
+ type: 'app:registered';
216
+ appId: string;
217
+ manifest: AppManifest;
218
+ } | {
219
+ type: 'app:activated';
220
+ appId: string;
221
+ } | {
222
+ type: 'app:deactivated';
223
+ appId: string;
224
+ } | {
225
+ type: 'app:error';
226
+ appId: string;
227
+ error: string;
228
+ } | {
229
+ type: 'app:unregistered';
230
+ appId: string;
231
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * App Types
3
+ *
4
+ * Defines the types for the SynOS app system.
5
+ * Apps provide runtime extensions (actions, widgets, events) and editor modules.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/apps/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,4 +1,4 @@
1
- import type { ComparisonContent } from "../../types";
1
+ import type { ComparisonContent } from '../../types';
2
2
  interface ComparisonBlockProps {
3
3
  content: ComparisonContent;
4
4
  accentColor?: string;