@syntrologie/runtime-sdk 2.0.0 → 2.0.1-canary.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 (280) hide show
  1. package/CAPABILITIES.md +232 -138
  2. package/README.md +76 -57
  3. package/dist/RuntimeProvider.d.ts +6 -6
  4. package/dist/RuntimeProvider.js +2 -3
  5. package/dist/RuntimeProvider.js.map +1 -1
  6. package/dist/SmartCanvasApp.d.ts +8 -8
  7. package/dist/SmartCanvasApp.js +16 -18
  8. package/dist/SmartCanvasApp.js.map +1 -1
  9. package/dist/SmartCanvasElement.d.ts +5 -5
  10. package/dist/SmartCanvasElement.js +13 -13
  11. package/dist/SmartCanvasElement.js.map +1 -1
  12. package/dist/SmartCanvasPortal.d.ts +2 -2
  13. package/dist/SmartCanvasPortal.js +2 -2
  14. package/dist/actions/ActionEngine.d.ts +1 -1
  15. package/dist/actions/ActionEngine.js +24 -24
  16. package/dist/actions/ActionEngine.js.map +1 -1
  17. package/dist/actions/executors/index.d.ts +6 -6
  18. package/dist/actions/executors/index.js +22 -22
  19. package/dist/actions/executors/index.js.map +1 -1
  20. package/dist/actions/executors/tour.d.ts +1 -1
  21. package/dist/actions/executors/tour.js +19 -19
  22. package/dist/actions/executors/tour.js.map +1 -1
  23. package/dist/actions/index.d.ts +5 -5
  24. package/dist/actions/index.js +3 -3
  25. package/dist/actions/index.js.map +1 -1
  26. package/dist/actions/types.d.ts +37 -37
  27. package/dist/actions/validation.d.ts +1 -1
  28. package/dist/actions/validation.js +195 -196
  29. package/dist/actions/validation.js.map +1 -1
  30. package/dist/antiFlicker.js +1 -1
  31. package/dist/api.d.ts +10 -10
  32. package/dist/api.js +11 -11
  33. package/dist/api.js.map +1 -1
  34. package/dist/apps/AppContext.d.ts +2 -2
  35. package/dist/apps/AppContext.js +1 -1
  36. package/dist/apps/AppContext.js.map +1 -1
  37. package/dist/apps/AppLoader.d.ts +2 -2
  38. package/dist/apps/AppLoader.js +24 -24
  39. package/dist/apps/AppLoader.js.map +1 -1
  40. package/dist/apps/AppRegistry.d.ts +2 -2
  41. package/dist/apps/AppRegistry.js +28 -28
  42. package/dist/apps/AppRegistry.js.map +1 -1
  43. package/dist/apps/adaptive-chatbot/index.js +7 -0
  44. package/dist/apps/adaptive-chatbot/index.js.map +7 -0
  45. package/dist/apps/examples/gamification-app.example.d.ts +3 -3
  46. package/dist/apps/examples/gamification-app.example.js +94 -94
  47. package/dist/apps/examples/gamification-app.example.js.map +1 -1
  48. package/dist/apps/faq/index.js.map +3 -3
  49. package/dist/apps/gamification/index.js.map +3 -3
  50. package/dist/apps/index.d.ts +10 -10
  51. package/dist/apps/index.js +6 -6
  52. package/dist/apps/nav/index.js.map +3 -3
  53. package/dist/apps/types.d.ts +10 -10
  54. package/dist/blocks/data/ComparisonBlock.d.ts +1 -1
  55. package/dist/blocks/data/ComparisonBlock.js +40 -40
  56. package/dist/blocks/data/ComparisonBlock.js.map +1 -1
  57. package/dist/blocks/data/StatsBlock.d.ts +1 -1
  58. package/dist/blocks/data/StatsBlock.js +41 -41
  59. package/dist/blocks/data/StatsBlock.js.map +1 -1
  60. package/dist/blocks/data/index.d.ts +2 -2
  61. package/dist/blocks/data/index.js +2 -2
  62. package/dist/blocks/index.d.ts +5 -5
  63. package/dist/blocks/index.js +29 -29
  64. package/dist/blocks/index.js.map +1 -1
  65. package/dist/blocks/interactive/ChecklistBlock.d.ts +1 -1
  66. package/dist/blocks/interactive/ChecklistBlock.js +60 -60
  67. package/dist/blocks/interactive/ChecklistBlock.js.map +1 -1
  68. package/dist/blocks/interactive/RatingBlock.d.ts +1 -1
  69. package/dist/blocks/interactive/RatingBlock.js +75 -65
  70. package/dist/blocks/interactive/RatingBlock.js.map +1 -1
  71. package/dist/blocks/interactive/index.d.ts +2 -2
  72. package/dist/blocks/interactive/index.js +2 -2
  73. package/dist/blocks/notification/NotificationBlock.d.ts +2 -2
  74. package/dist/blocks/notification/NotificationBlock.js +67 -63
  75. package/dist/blocks/notification/NotificationBlock.js.map +1 -1
  76. package/dist/blocks/notification/index.d.ts +1 -1
  77. package/dist/blocks/notification/index.js +1 -1
  78. package/dist/bootstrap.d.ts +10 -10
  79. package/dist/bootstrap.js +54 -40
  80. package/dist/bootstrap.js.map +1 -1
  81. package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
  82. package/dist/components/ShadowCanvasOverlay.js +117 -107
  83. package/dist/components/ShadowCanvasOverlay.js.map +1 -1
  84. package/dist/components/TileCard.d.ts +5 -5
  85. package/dist/components/TileCard.js +174 -143
  86. package/dist/components/TileCard.js.map +1 -1
  87. package/dist/components/TileWheel.d.ts +3 -3
  88. package/dist/components/TileWheel.js +7 -7
  89. package/dist/components/TileWheel.js.map +1 -1
  90. package/dist/configFetcher.d.ts +2 -2
  91. package/dist/configFetcher.js +10 -7
  92. package/dist/configFetcher.js.map +1 -1
  93. package/dist/context/ContextManager.d.ts +3 -3
  94. package/dist/context/ContextManager.js +15 -15
  95. package/dist/context/ContextManager.js.map +1 -1
  96. package/dist/context/index.d.ts +4 -4
  97. package/dist/context/index.js +3 -3
  98. package/dist/context/schema.d.ts +1 -1
  99. package/dist/context/schema.js +1 -1
  100. package/dist/decisions/engine.d.ts +5 -5
  101. package/dist/decisions/engine.js +13 -13
  102. package/dist/decisions/index.d.ts +6 -6
  103. package/dist/decisions/index.js +5 -5
  104. package/dist/decisions/schema.d.ts +1 -1
  105. package/dist/decisions/schema.js +20 -20
  106. package/dist/decisions/strategies/rules.d.ts +1 -1
  107. package/dist/decisions/strategies/rules.js +24 -24
  108. package/dist/decisions/strategies/rules.js.map +1 -1
  109. package/dist/decisions/strategies/score.d.ts +1 -1
  110. package/dist/decisions/strategies/score.js +3 -3
  111. package/dist/decisions/types.d.ts +19 -19
  112. package/dist/editorLoader.js +20 -20
  113. package/dist/editorLoader.js.map +1 -1
  114. package/dist/events/EventBus.d.ts +3 -3
  115. package/dist/events/EventBus.js +5 -7
  116. package/dist/events/EventBus.js.map +1 -1
  117. package/dist/events/index.d.ts +6 -6
  118. package/dist/events/index.js +5 -5
  119. package/dist/events/normalizers/canvas.d.ts +2 -2
  120. package/dist/events/normalizers/canvas.js +3 -3
  121. package/dist/events/normalizers/canvas.js.map +1 -1
  122. package/dist/events/normalizers/posthog.d.ts +1 -1
  123. package/dist/events/normalizers/posthog.js +34 -27
  124. package/dist/events/normalizers/posthog.js.map +1 -1
  125. package/dist/events/schema.d.ts +1 -1
  126. package/dist/events/schema.js +2 -2
  127. package/dist/events/types.d.ts +1 -1
  128. package/dist/events/types.js +27 -27
  129. package/dist/experiments/adapters/growthbook.d.ts +4 -4
  130. package/dist/experiments/adapters/growthbook.js +5 -5
  131. package/dist/experiments/adapters/growthbook.js.map +1 -1
  132. package/dist/experiments/index.d.ts +3 -3
  133. package/dist/experiments/index.js +1 -1
  134. package/dist/experiments/registry.d.ts +2 -2
  135. package/dist/experiments/registry.js +2 -2
  136. package/dist/experiments/types.d.ts +5 -1
  137. package/dist/fetchers/cdnFetcher.d.ts +1 -1
  138. package/dist/fetchers/cdnFetcher.js +4 -8
  139. package/dist/fetchers/cdnFetcher.js.map +1 -1
  140. package/dist/fetchers/experimentsFetcher.d.ts +2 -2
  141. package/dist/fetchers/experimentsFetcher.js +7 -7
  142. package/dist/fetchers/experimentsFetcher.js.map +1 -1
  143. package/dist/fetchers/index.d.ts +3 -3
  144. package/dist/fetchers/index.js +2 -2
  145. package/dist/fetchers/index.js.map +1 -1
  146. package/dist/fetchers/registry.d.ts +1 -1
  147. package/dist/fetchers/registry.js +4 -4
  148. package/dist/fetchers/types.d.ts +1 -1
  149. package/dist/hooks/useCanvasOverlays.d.ts +5 -5
  150. package/dist/hooks/useCanvasOverlays.js +15 -13
  151. package/dist/hooks/useCanvasOverlays.js.map +1 -1
  152. package/dist/hooks/useHostPatches.d.ts +2 -2
  153. package/dist/hooks/useHostPatches.js +8 -8
  154. package/dist/hooks/useHostPatches.js.map +1 -1
  155. package/dist/hooks/useShadowCanvasConfig.d.ts +3 -3
  156. package/dist/hooks/useShadowCanvasConfig.js +5 -2
  157. package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
  158. package/dist/hostPatcher/core/patcher.d.ts +1 -1
  159. package/dist/hostPatcher/core/patcher.js +18 -9
  160. package/dist/hostPatcher/core/patcher.js.map +1 -1
  161. package/dist/hostPatcher/core/sanitizer.js +24 -3
  162. package/dist/hostPatcher/core/sanitizer.js.map +1 -1
  163. package/dist/hostPatcher/policy/defaultPolicy.js +15 -5
  164. package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
  165. package/dist/hostPatcher/utils/anchors.js +4 -6
  166. package/dist/hostPatcher/utils/anchors.js.map +1 -1
  167. package/dist/index.d.ts +32 -32
  168. package/dist/index.js +29 -29
  169. package/dist/index.js.map +1 -1
  170. package/dist/metrics/index.d.ts +1 -1
  171. package/dist/metrics/index.js +1 -1
  172. package/dist/metrics/sessionMetrics.d.ts +1 -1
  173. package/dist/metrics/sessionMetrics.js +6 -6
  174. package/dist/overlays/fetcher.d.ts +2 -2
  175. package/dist/overlays/fetcher.js +4 -4
  176. package/dist/overlays/recipeRegistry.js +2 -2
  177. package/dist/overlays/recipeRegistry.js.map +1 -1
  178. package/dist/overlays/runtime/anchor/resolve.js +1 -1
  179. package/dist/overlays/runtime/anchor/resolve.js.map +1 -1
  180. package/dist/overlays/runtime/index.d.ts +7 -7
  181. package/dist/overlays/runtime/index.js +7 -7
  182. package/dist/overlays/runtime/overlay/highlight.js +39 -39
  183. package/dist/overlays/runtime/overlay/highlight.js.map +1 -1
  184. package/dist/overlays/runtime/overlay/modal.js +5 -5
  185. package/dist/overlays/runtime/overlay/modal.js.map +1 -1
  186. package/dist/overlays/runtime/overlay/root.js +1 -1
  187. package/dist/overlays/runtime/overlay/runner.js +70 -23
  188. package/dist/overlays/runtime/overlay/runner.js.map +1 -1
  189. package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
  190. package/dist/overlays/runtime/overlay/tooltip.js +10 -10
  191. package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
  192. package/dist/overlays/runtime/utils/dom.js +4 -1
  193. package/dist/overlays/runtime/utils/dom.js.map +1 -1
  194. package/dist/overlays/schema.js +12 -8
  195. package/dist/overlays/schema.js.map +1 -1
  196. package/dist/react.d.ts +7 -7
  197. package/dist/react.js +4 -4
  198. package/dist/react.js.map +1 -1
  199. package/dist/render/RenderContext.d.ts +2 -2
  200. package/dist/render/RenderContext.js +5 -5
  201. package/dist/render/RenderContext.js.map +1 -1
  202. package/dist/render/index.d.ts +3 -3
  203. package/dist/render/index.js +1 -1
  204. package/dist/render/types.d.ts +4 -4
  205. package/dist/runtime.d.ts +12 -12
  206. package/dist/runtime.js +20 -20
  207. package/dist/runtime.js.map +1 -1
  208. package/dist/smart-canvas.esm.js +16 -16
  209. package/dist/smart-canvas.esm.js.map +4 -4
  210. package/dist/smart-canvas.js +644 -491
  211. package/dist/smart-canvas.js.map +4 -4
  212. package/dist/smart-canvas.min.js +15 -15
  213. package/dist/smart-canvas.min.js.map +4 -4
  214. package/dist/state/StateStore.d.ts +1 -1
  215. package/dist/state/StateStore.js +9 -9
  216. package/dist/state/StateStore.js.map +1 -1
  217. package/dist/state/helpers/cooldowns.d.ts +1 -1
  218. package/dist/state/helpers/cooldowns.js +1 -1
  219. package/dist/state/helpers/dismissals.d.ts +1 -1
  220. package/dist/state/helpers/dismissals.js +1 -1
  221. package/dist/state/helpers/frequency.d.ts +1 -1
  222. package/dist/state/helpers/frequency.js +1 -1
  223. package/dist/state/index.d.ts +4 -4
  224. package/dist/state/index.js +3 -3
  225. package/dist/state/schema.d.ts +1 -1
  226. package/dist/state/schema.js +1 -1
  227. package/dist/store/example.js +13 -13
  228. package/dist/store/example.js.map +1 -1
  229. package/dist/store/mini-effector.js +6 -8
  230. package/dist/store/mini-effector.js.map +1 -1
  231. package/dist/surfaces/Surfaces.d.ts +1 -1
  232. package/dist/surfaces/Surfaces.js +25 -25
  233. package/dist/surfaces/Surfaces.js.map +1 -1
  234. package/dist/surfaces/index.d.ts +4 -4
  235. package/dist/surfaces/index.js +3 -3
  236. package/dist/surfaces/positioning.d.ts +2 -2
  237. package/dist/surfaces/positioning.js +74 -77
  238. package/dist/surfaces/positioning.js.map +1 -1
  239. package/dist/surfaces/types.d.ts +9 -9
  240. package/dist/surfaces/types.js +7 -7
  241. package/dist/surfaces/types.js.map +1 -1
  242. package/dist/telemetry/adapters/noop.d.ts +12 -0
  243. package/dist/telemetry/adapters/noop.js +42 -0
  244. package/dist/telemetry/adapters/noop.js.map +1 -0
  245. package/dist/telemetry/adapters/posthog.d.ts +2 -2
  246. package/dist/telemetry/adapters/posthog.js +29 -16
  247. package/dist/telemetry/adapters/posthog.js.map +1 -1
  248. package/dist/telemetry/index.d.ts +4 -3
  249. package/dist/telemetry/index.js +3 -2
  250. package/dist/telemetry/index.js.map +1 -1
  251. package/dist/telemetry/registry.d.ts +2 -2
  252. package/dist/telemetry/registry.js +4 -2
  253. package/dist/telemetry/registry.js.map +1 -1
  254. package/dist/telemetry/types.d.ts +1 -1
  255. package/dist/theme/ThemeProvider.d.ts +2 -2
  256. package/dist/theme/ThemeProvider.js +21 -21
  257. package/dist/theme/ThemeProvider.js.map +1 -1
  258. package/dist/theme/defaultTheme.d.ts +2 -2
  259. package/dist/theme/defaultTheme.js +111 -111
  260. package/dist/theme/defaultTheme.js.map +1 -1
  261. package/dist/theme/extractHostTheme.d.ts +1 -1
  262. package/dist/theme/extractHostTheme.js +42 -44
  263. package/dist/theme/extractHostTheme.js.map +1 -1
  264. package/dist/theme/index.d.ts +5 -5
  265. package/dist/theme/index.js +3 -3
  266. package/dist/theme/index.js.map +1 -1
  267. package/dist/theme/types.d.ts +2 -2
  268. package/dist/token.js +3 -6
  269. package/dist/token.js.map +1 -1
  270. package/dist/types-only.d.ts +1 -1
  271. package/dist/types.d.ts +43 -43
  272. package/dist/widgets/WidgetRegistry.d.ts +2 -2
  273. package/dist/widgets/WidgetRegistry.js +11 -11
  274. package/dist/widgets/WidgetRegistry.js.map +1 -1
  275. package/dist/widgets/index.d.ts +2 -2
  276. package/dist/widgets/index.js +1 -1
  277. package/dist/widgets/index.js.map +1 -1
  278. package/package.json +4 -2
  279. package/schema/canvas-config.schema.json +51 -7
  280. package/schema/runtime-context.schema.json +1 -5
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../adaptives/adaptive-gamification/src/runtime.ts", "../../../../adaptives/adaptive-gamification/src/cdn.ts"],
4
- "sourcesContent": ["/**\n * Adaptive Gamification - Runtime Module\n *\n * Gamification actions: awardBadge, addPoints.\n * Provides gamification features like badges, points, and rewards.\n */\n\nimport type {\n ExecutorResult,\n ExecutorContext,\n ActionExecutor,\n} from \"./types\";\n\n// ============================================================================\n// Action Types\n// ============================================================================\n\n/**\n * Award badge action\n */\nexport interface AwardBadgeAction {\n kind: \"gamification:awardBadge\";\n badgeId: string;\n anchorId?: string;\n label?: string;\n}\n\n/**\n * Add points action\n */\nexport interface AddPointsAction {\n kind: \"gamification:addPoints\";\n points: number;\n reason?: string;\n label?: string;\n}\n\n// ============================================================================\n// Executors\n// ============================================================================\n\n/**\n * Execute an awardBadge action\n *\n * Note: This executor uses publishEvent to track badge awards.\n * State management is handled at the app level via AppContext,\n * not at the action executor level.\n */\nexport const executeAwardBadge: ActionExecutor<AwardBadgeAction> = async (\n action,\n context\n): Promise<ExecutorResult> => {\n const { badgeId } = action;\n\n // Emit telemetry event (state management handled at app level)\n context.publishEvent(\"gamification.badge_awarded\", {\n badgeId,\n awardedAt: Date.now(),\n });\n\n return {\n cleanup: () => {\n // Badge awards are permanent, no cleanup needed\n },\n };\n};\n\n/**\n * Execute an addPoints action\n *\n * Note: This executor uses publishEvent to track points.\n * State management is handled at the app level via AppContext,\n * not at the action executor level.\n */\nexport const executeAddPoints: ActionExecutor<AddPointsAction> = async (\n action,\n context\n): Promise<ExecutorResult> => {\n const { points, reason } = action;\n\n // Emit telemetry event (state management handled at app level)\n context.publishEvent(\"gamification.points_added\", {\n points,\n reason,\n timestamp: Date.now(),\n });\n\n return {\n cleanup: () => {\n // Points are permanent, no cleanup needed\n },\n };\n};\n\n// ============================================================================\n// Event Handlers\n// ============================================================================\n\n/**\n * Event handler for auto-awarding badges based on triggers.\n */\nexport const badgeTriggerHandler = {\n names: [\"page_view\", \"button_click\"],\n handler: (event: unknown, ctx: unknown) => {\n // Auto-award badges based on event triggers\n // This would check badge trigger conditions in the config\n console.log(\"[Gamification] Event received for badge trigger check\");\n },\n};\n\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n\n/**\n * All executors provided by this app.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executors = [\n { kind: \"gamification:awardBadge\", executor: executeAwardBadge },\n { kind: \"gamification:addPoints\", executor: executeAddPoints },\n] as const;\n\n/**\n * Event handlers provided by this app.\n */\nexport const eventHandlers = [badgeTriggerHandler];\n\n/**\n * App runtime manifest.\n */\nexport const runtime = {\n id: \"adaptive-gamification\",\n version: \"1.0.0\",\n name: \"Gamification\",\n description: \"Badges, rewards, points, and engagement mechanics\",\n executors,\n eventHandlers,\n};\n", "/**\n * CDN Entry Point for Adaptive Gamification\n *\n * This module is bundled for CDN delivery and self-registers with the global\n * SynOS app registry when loaded dynamically via the AppLoader.\n */\n\nimport { executors, eventHandlers, runtime } from \"./runtime\";\n\n/**\n * App manifest for registry registration.\n * Follows the AppManifest interface expected by AppLoader/AppRegistry.\n */\nexport const manifest = {\n id: \"gamification\",\n version: runtime.version,\n name: runtime.name,\n description: runtime.description,\n runtime: {\n actions: executors.map(({ kind, executor }) => ({\n kind,\n executor,\n })),\n events: eventHandlers,\n },\n metadata: {\n isBuiltIn: false,\n },\n};\n\n/**\n * Self-register with global registry if available.\n * This happens when loaded via script tag (UMD).\n */\nif (typeof window !== \"undefined\") {\n const globalRegistry = (window as any).__SYNOS_APP_REGISTRY__;\n if (globalRegistry && typeof globalRegistry.register === \"function\") {\n globalRegistry.register(manifest);\n }\n}\n\nexport default manifest;\n"],
5
- "mappings": "AAgDO,IAAMA,EAAsD,MACjEC,EACAC,IAC4B,CAC5B,GAAM,CAAE,QAAAC,CAAQ,EAAIF,EAGpB,OAAAC,EAAQ,aAAa,6BAA8B,CACjD,QAAAC,EACA,UAAW,KAAK,IAAI,CACtB,CAAC,EAEM,CACL,QAAS,IAAM,CAEf,CACF,CACF,EASaC,EAAoD,MAC/DH,EACAC,IAC4B,CAC5B,GAAM,CAAE,OAAAG,EAAQ,OAAAC,CAAO,EAAIL,EAG3B,OAAAC,EAAQ,aAAa,4BAA6B,CAChD,OAAAG,EACA,OAAAC,EACA,UAAW,KAAK,IAAI,CACtB,CAAC,EAEM,CACL,QAAS,IAAM,CAEf,CACF,CACF,EASaC,EAAsB,CACjC,MAAO,CAAC,YAAa,cAAc,EACnC,QAAS,CAACC,EAAgBC,IAAiB,CAGzC,QAAQ,IAAI,uDAAuD,CACrE,CACF,EAUaC,EAAY,CACvB,CAAE,KAAM,0BAA2B,SAAUV,CAAkB,EAC/D,CAAE,KAAM,yBAA0B,SAAUI,CAAiB,CAC/D,EAKaO,EAAgB,CAACJ,CAAmB,EAKpCK,EAAU,CACrB,GAAI,wBACJ,QAAS,QACT,KAAM,eACN,YAAa,oDACb,UAAAF,EACA,cAAAC,CACF,EC7HO,IAAME,EAAW,CACtB,GAAI,eACJ,QAASC,EAAQ,QACjB,KAAMA,EAAQ,KACd,YAAaA,EAAQ,YACrB,QAAS,CACP,QAASC,EAAU,IAAI,CAAC,CAAE,KAAAC,EAAM,SAAAC,CAAS,KAAO,CAC9C,KAAAD,EACA,SAAAC,CACF,EAAE,EACF,OAAQC,CACV,EACA,SAAU,CACR,UAAW,EACb,CACF,EAMA,GAAI,OAAO,OAAW,IAAa,CACjC,IAAMC,EAAkB,OAAe,uBACnCA,GAAkB,OAAOA,EAAe,UAAa,YACvDA,EAAe,SAASN,CAAQ,CAEpC,CAEA,IAAOO,EAAQP",
6
- "names": ["executeAwardBadge", "action", "context", "badgeId", "executeAddPoints", "points", "reason", "badgeTriggerHandler", "event", "ctx", "executors", "eventHandlers", "runtime", "manifest", "runtime", "executors", "kind", "executor", "eventHandlers", "globalRegistry", "cdn_default"]
4
+ "sourcesContent": ["/**\n * Adaptive Gamification - Runtime Module\n *\n * Gamification actions: awardBadge, addPoints.\n * Provides gamification features like badges, points, and rewards.\n */\n\nimport type { ExecutorResult, ActionExecutor } from './types';\n\n// ============================================================================\n// Action Types\n// ============================================================================\n\n/**\n * Award badge action\n */\nexport interface AwardBadgeAction {\n kind: 'gamification:awardBadge';\n badgeId: string;\n anchorId?: string;\n label?: string;\n}\n\n/**\n * Add points action\n */\nexport interface AddPointsAction {\n kind: 'gamification:addPoints';\n points: number;\n reason?: string;\n label?: string;\n}\n\n// ============================================================================\n// Executors\n// ============================================================================\n\n/**\n * Execute an awardBadge action\n *\n * Note: This executor uses publishEvent to track badge awards.\n * State management is handled at the app level via AppContext,\n * not at the action executor level.\n */\nexport const executeAwardBadge: ActionExecutor<AwardBadgeAction> = async (\n action,\n context\n): Promise<ExecutorResult> => {\n const { badgeId } = action;\n\n // Emit telemetry event (state management handled at app level)\n context.publishEvent('gamification.badge_awarded', {\n badgeId,\n awardedAt: Date.now(),\n });\n\n return {\n cleanup: () => {\n // Badge awards are permanent, no cleanup needed\n },\n };\n};\n\n/**\n * Execute an addPoints action\n *\n * Note: This executor uses publishEvent to track points.\n * State management is handled at the app level via AppContext,\n * not at the action executor level.\n */\nexport const executeAddPoints: ActionExecutor<AddPointsAction> = async (\n action,\n context\n): Promise<ExecutorResult> => {\n const { points, reason } = action;\n\n // Emit telemetry event (state management handled at app level)\n context.publishEvent('gamification.points_added', {\n points,\n reason,\n timestamp: Date.now(),\n });\n\n return {\n cleanup: () => {\n // Points are permanent, no cleanup needed\n },\n };\n};\n\n// ============================================================================\n// Event Handlers\n// ============================================================================\n\n/**\n * Event handler for auto-awarding badges based on triggers.\n */\nexport const badgeTriggerHandler = {\n names: ['page_view', 'button_click'],\n handler: (_event: unknown, _ctx: unknown) => {\n // Auto-award badges based on event triggers\n // This would check badge trigger conditions in the config\n console.log('[Gamification] Event received for badge trigger check');\n },\n};\n\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n\n/**\n * All executors provided by this app.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executors = [\n { kind: 'gamification:awardBadge', executor: executeAwardBadge },\n { kind: 'gamification:addPoints', executor: executeAddPoints },\n] as const;\n\n/**\n * Event handlers provided by this app.\n */\nexport const eventHandlers = [badgeTriggerHandler];\n\n/**\n * App runtime manifest.\n */\nexport const runtime = {\n id: 'adaptive-gamification',\n version: '1.0.0',\n name: 'Gamification',\n description: 'Badges, rewards, points, and engagement mechanics',\n executors,\n eventHandlers,\n};\n", "/**\n * CDN Entry Point for Adaptive Gamification\n *\n * This module is bundled for CDN delivery and self-registers with the global\n * SynOS app registry when loaded dynamically via the AppLoader.\n */\n\nimport { executors, eventHandlers, runtime } from './runtime';\n\n/**\n * App manifest for registry registration.\n * Follows the AppManifest interface expected by AppLoader/AppRegistry.\n */\nexport const manifest = {\n id: 'gamification',\n version: runtime.version,\n name: runtime.name,\n description: runtime.description,\n runtime: {\n actions: executors.map(({ kind, executor }) => ({\n kind,\n executor,\n })),\n events: eventHandlers,\n },\n metadata: {\n isBuiltIn: false,\n },\n};\n\n/**\n * Self-register with global registry if available.\n * This happens when loaded via script tag (UMD).\n */\nif (typeof window !== 'undefined') {\n const globalRegistry = (window as any).__SYNOS_APP_REGISTRY__;\n if (globalRegistry && typeof globalRegistry.register === 'function') {\n globalRegistry.register(manifest);\n }\n}\n\nexport default manifest;\n"],
5
+ "mappings": "AA4CO,IAAMA,EAAsD,MACjEC,EACAC,IAC4B,CAC5B,GAAM,CAAE,QAAAC,CAAQ,EAAIF,EAGpB,OAAAC,EAAQ,aAAa,6BAA8B,CACjD,QAAAC,EACA,UAAW,KAAK,IAAI,CACtB,CAAC,EAEM,CACL,QAAS,IAAM,CAEf,CACF,CACF,EASaC,EAAoD,MAC/DH,EACAC,IAC4B,CAC5B,GAAM,CAAE,OAAAG,EAAQ,OAAAC,CAAO,EAAIL,EAG3B,OAAAC,EAAQ,aAAa,4BAA6B,CAChD,OAAAG,EACA,OAAAC,EACA,UAAW,KAAK,IAAI,CACtB,CAAC,EAEM,CACL,QAAS,IAAM,CAEf,CACF,CACF,EASaC,EAAsB,CACjC,MAAO,CAAC,YAAa,cAAc,EACnC,QAAS,CAACC,EAAiBC,IAAkB,CAG3C,QAAQ,IAAI,uDAAuD,CACrE,CACF,EAUaC,EAAY,CACvB,CAAE,KAAM,0BAA2B,SAAUV,CAAkB,EAC/D,CAAE,KAAM,yBAA0B,SAAUI,CAAiB,CAC/D,EAKaO,EAAgB,CAACJ,CAAmB,EAKpCK,EAAU,CACrB,GAAI,wBACJ,QAAS,QACT,KAAM,eACN,YAAa,oDACb,UAAAF,EACA,cAAAC,CACF,ECzHO,IAAME,EAAW,CACtB,GAAI,eACJ,QAASC,EAAQ,QACjB,KAAMA,EAAQ,KACd,YAAaA,EAAQ,YACrB,QAAS,CACP,QAASC,EAAU,IAAI,CAAC,CAAE,KAAAC,EAAM,SAAAC,CAAS,KAAO,CAC9C,KAAAD,EACA,SAAAC,CACF,EAAE,EACF,OAAQC,CACV,EACA,SAAU,CACR,UAAW,EACb,CACF,EAMA,GAAI,OAAO,OAAW,IAAa,CACjC,IAAMC,EAAkB,OAAe,uBACnCA,GAAkB,OAAOA,EAAe,UAAa,YACvDA,EAAe,SAASN,CAAQ,CAEpC,CAEA,IAAOO,EAAQP",
6
+ "names": ["executeAwardBadge", "action", "context", "badgeId", "executeAddPoints", "points", "reason", "badgeTriggerHandler", "_event", "_ctx", "executors", "eventHandlers", "runtime", "manifest", "runtime", "executors", "kind", "executor", "eventHandlers", "globalRegistry", "cdn_default"]
7
7
  }
@@ -3,13 +3,13 @@
3
3
  *
4
4
  * SynOS app system for extensible runtime and editor modules.
5
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/app-content/runtime";
13
- export { runtime as overlaysRuntime } from "@syntrologie/app-overlays/runtime";
14
- export { runtime as navigationRuntime } from "@syntrologie/app-navigation/runtime";
15
- export type { AppManifest, AppRegistration, AppLifecycleState, AppContext, AppRuntimeExtensions, AppActionDefinition, AppWidgetDefinition, AppEventHandler, AppEventContext, EditorPanelProps, EditorPanelConfig, AppEditorModule, AppRegistryEvent, } from "./types";
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/app-content/runtime';
13
+ export { runtime as overlaysRuntime } from '@syntrologie/app-overlays/runtime';
14
+ export { runtime as navigationRuntime } from '@syntrologie/app-navigation/runtime';
15
+ export type { AppManifest, AppRegistration, AppLifecycleState, AppContext, AppRuntimeExtensions, AppActionDefinition, AppWidgetDefinition, AppEventHandler, AppEventContext, EditorPanelProps, EditorPanelConfig, AppEditorModule, AppRegistryEvent, } from './types';
@@ -4,14 +4,14 @@
4
4
  * SynOS app system for extensible runtime and editor modules.
5
5
  */
6
6
  // App Registry
7
- export { AppRegistry, appRegistry } from "./AppRegistry";
7
+ export { AppRegistry, appRegistry } from './AppRegistry';
8
8
  // App Context
9
- export { createAppContext, cleanupAppContext } from "./AppContext";
9
+ export { createAppContext, cleanupAppContext } from './AppContext';
10
10
  // App Loader
11
- export { createAppLoader, isCoreActionKind, getAppIdFromActionKind, getAppIdFromWidgetId, } from "./AppLoader";
11
+ export { createAppLoader, isCoreActionKind, getAppIdFromActionKind, getAppIdFromWidgetId, } from './AppLoader';
12
12
  // Core app runtime modules (bundled with runtime SDK)
13
13
  // These executors are available immediately without CDN loading.
14
- export { runtime as contentRuntime } from "@syntrologie/app-content/runtime";
15
- export { runtime as overlaysRuntime } from "@syntrologie/app-overlays/runtime";
16
- export { runtime as navigationRuntime } from "@syntrologie/app-navigation/runtime";
14
+ export { runtime as contentRuntime } from '@syntrologie/app-content/runtime';
15
+ export { runtime as overlaysRuntime } from '@syntrologie/app-overlays/runtime';
16
+ export { runtime as navigationRuntime } from '@syntrologie/app-navigation/runtime';
17
17
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../adaptives/adaptive-nav/src/NavWidget.tsx", "../../../../adaptives/adaptive-nav/src/runtime.ts", "../../../../adaptives/adaptive-nav/src/cdn.ts"],
4
- "sourcesContent": ["/**\n * Adaptive Nav - NavWidget Component\n *\n * React component that renders a navigation link list with per-item\n * conditional visibility based on showWhen decision strategies.\n *\n * Demonstrates the compositional action pattern where child actions\n * (nav:link) serve as configuration data for the parent widget.\n */\n\nimport React, { useEffect, useReducer, useMemo, useCallback } from \"react\";\nimport type { NavWidgetProps, NavLinkAction, NavConfig, NavWidgetRuntime } from \"./types\";\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst baseStyles = {\n nav: {\n display: \"flex\",\n gap: \"4px\",\n padding: \"8px\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n },\n link: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 12px\",\n borderRadius: \"6px\",\n textDecoration: \"none\",\n fontSize: \"14px\",\n fontWeight: 500,\n transition: \"background-color 0.15s ease, color 0.15s ease\",\n cursor: \"pointer\",\n border: \"none\",\n background: \"transparent\",\n },\n icon: {\n fontSize: \"16px\",\n },\n externalIcon: {\n fontSize: \"12px\",\n opacity: 0.6,\n },\n} as const;\n\nconst themeStyles = {\n light: {\n nav: {\n backgroundColor: \"#ffffff\",\n },\n link: {\n color: \"#374151\",\n },\n linkHover: {\n backgroundColor: \"#f3f4f6\",\n color: \"#111827\",\n },\n },\n dark: {\n nav: {\n backgroundColor: \"#1f2937\",\n },\n link: {\n color: \"#d1d5db\",\n },\n linkHover: {\n backgroundColor: \"#374151\",\n color: \"#f9fafb\",\n },\n },\n} as const;\n\n// ============================================================================\n// NavLink Component\n// ============================================================================\n\ninterface NavLinkComponentProps {\n link: NavLinkAction;\n theme: \"light\" | \"dark\";\n onNavigate: (href: string, external: boolean) => void;\n}\n\nfunction NavLinkComponent({ link, theme, onNavigate }: NavLinkComponentProps) {\n const [isHovered, setIsHovered] = React.useState(false);\n const { label, href, icon, external } = link.config;\n const colors = themeStyles[theme];\n\n const style: React.CSSProperties = {\n ...baseStyles.link,\n ...colors.link,\n ...(isHovered ? colors.linkHover : {}),\n };\n\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n onNavigate(href, external ?? false);\n };\n\n return (\n <a\n href={href}\n onClick={handleClick}\n style={style}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n >\n {icon && <span style={baseStyles.icon}>{icon}</span>}\n <span>{label}</span>\n {external && <span style={baseStyles.externalIcon}>\u2197</span>}\n </a>\n );\n}\n\n// ============================================================================\n// NavWidget Component\n// ============================================================================\n\n/**\n * NavWidget - Renders a navigation link list with per-item activation.\n *\n * This component demonstrates the compositional action pattern:\n * - Parent (NavWidget) receives `config.actions` array\n * - Each action has optional `showWhen` for per-item visibility\n * - Parent evaluates showWhen and filters visible links\n * - Parent manages re-rendering on context changes\n */\nexport function NavWidget({ config, runtime, instanceId }: NavWidgetProps) {\n // Force re-render when context changes\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n\n // Subscribe to context changes for reactive updates\n useEffect(() => {\n const unsubscribe = runtime.context.subscribe(() => {\n forceUpdate();\n });\n return unsubscribe;\n }, [runtime.context]);\n\n // Filter visible links based on per-item showWhen\n const visibleLinks = useMemo(() => {\n return config.actions.filter((link) => {\n // No showWhen = always visible\n if (!link.showWhen) return true;\n\n // Evaluate the decision strategy\n const result = runtime.evaluateSync<boolean>(link.showWhen);\n return result.value;\n });\n }, [config.actions, runtime]);\n\n // Resolve theme (auto \u2192 detect system preference)\n const resolvedTheme = useMemo(() => {\n if (config.theme !== \"auto\") return config.theme;\n\n // Check system preference (SSR-safe)\n if (typeof window !== \"undefined\") {\n return window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n }\n return \"light\";\n }, [config.theme]);\n\n // Handle navigation with event publishing\n const handleNavigate = useCallback(\n (href: string, external: boolean) => {\n // Publish navigation event for analytics\n runtime.events.publish(\"nav:click\", {\n instanceId,\n href,\n external,\n timestamp: Date.now(),\n });\n\n // Perform navigation\n if (external) {\n window.open(href, \"_blank\", \"noopener,noreferrer\");\n } else {\n window.location.href = href;\n }\n },\n [runtime.events, instanceId]\n );\n\n // Compute nav styles\n const navStyle: React.CSSProperties = {\n ...baseStyles.nav,\n ...themeStyles[resolvedTheme].nav,\n flexDirection: config.layout === \"vertical\" ? \"column\" : \"row\",\n };\n\n // Empty state\n if (visibleLinks.length === 0) {\n return null;\n }\n\n return (\n <nav style={navStyle} data-adaptive-id={instanceId} data-adaptive-type=\"adaptive-nav\">\n {visibleLinks.map((link, index) => (\n <NavLinkComponent\n key={link.config.href + index}\n link={link}\n theme={resolvedTheme}\n onNavigate={handleNavigate}\n />\n ))}\n </nav>\n );\n}\n\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\n\n/**\n * Mountable widget interface for the runtime's WidgetRegistry.\n */\nexport const NavMountableWidget = {\n mount(\n container: HTMLElement,\n config?: NavConfig & { runtime?: NavWidgetRuntime; instanceId?: string }\n ) {\n // This is a simplified mount for non-React environments\n // In practice, the runtime handles React rendering\n\n const { runtime, instanceId = \"nav-widget\", ...navConfig } = config || {\n layout: \"horizontal\" as const,\n theme: \"auto\" as const,\n actions: [],\n };\n\n // Create simple HTML fallback if no runtime\n if (!runtime) {\n const links = navConfig.actions || [];\n container.innerHTML = `\n <nav style=\"display: flex; gap: 8px; padding: 8px; font-family: system-ui;\">\n ${links\n .map(\n (link) => `\n <a href=\"${link.config.href}\" style=\"padding: 8px 12px; text-decoration: none; color: #374151;\">\n ${link.config.icon ? `<span>${link.config.icon}</span>` : \"\"}\n ${link.config.label}\n </a>\n `\n )\n .join(\"\")}\n </nav>\n `;\n }\n\n return () => {\n container.innerHTML = \"\";\n };\n },\n};\n\nexport default NavWidget;\n", "/**\n * Adaptive Nav - Runtime Module\n *\n * Runtime manifest for the navigation link list adaptive.\n * This is a widget-based adaptive with no action executors.\n */\n\nimport { NavMountableWidget } from \"./NavWidget\";\n\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n\n/**\n * Runtime manifest for adaptive-nav.\n *\n * Note: This adaptive is widget-based, not action-based.\n * The `nav:link` actions are compositional - they're rendered by\n * the widget, not executed by the runtime.\n */\nexport const runtime = {\n id: \"adaptive-nav\",\n version: \"1.0.0\",\n name: \"Navigation Links\",\n description: \"Widget-based navigation link list with per-item conditional visibility\",\n\n /**\n * No action executors - nav:link actions are compositional,\n * meaning they serve as configuration for the NavWidget.\n */\n executors: [],\n\n /**\n * Widget definitions for the runtime's WidgetRegistry.\n */\n widgets: [\n {\n id: \"adaptive-nav:links\",\n component: NavMountableWidget,\n metadata: {\n name: \"Navigation Links\",\n description: \"Horizontal or vertical navigation link list\",\n icon: \"\uD83D\uDD17\",\n },\n },\n ],\n};\n\nexport default runtime;\n", "/**\n * CDN Entry Point for Adaptive Nav\n *\n * This module is bundled for CDN delivery and self-registers with the global\n * SynOS app registry when loaded dynamically via the AppLoader.\n */\n\nimport { runtime } from \"./runtime\";\n\n/**\n * App manifest for registry registration.\n * Follows the AppManifest interface expected by AppLoader/AppRegistry.\n */\nexport const manifest = {\n id: \"nav\",\n version: runtime.version,\n name: runtime.name,\n description: runtime.description,\n runtime: {\n // Nav is widget-based, no action executors\n actions: [],\n widgets: runtime.widgets,\n },\n metadata: {\n isBuiltIn: false,\n },\n};\n\n/**\n * Self-register with global registry if available.\n * This happens when loaded via script tag (UMD).\n */\nif (typeof window !== \"undefined\") {\n const globalRegistry = (window as any).__SYNOS_APP_REGISTRY__;\n if (globalRegistry && typeof globalRegistry.register === \"function\") {\n globalRegistry.register(manifest);\n }\n}\n\nexport default manifest;\n"],
5
- "mappings": "AAUA,OAAOA,GAAS,aAAAC,EAAW,cAAAC,EAAY,WAAAC,EAAS,eAAAC,MAAmB,QA2F/D,OASW,OAAAC,EATX,QAAAC,MAAA,oBAwHG,IAAMC,EAAqB,CAChC,MACEC,EACAC,EACA,CAIA,GAAM,CAAE,QAAAC,EAAS,WAAAC,EAAa,aAAc,GAAGC,CAAU,EAAIH,GAAU,CACrE,OAAQ,aACR,MAAO,OACP,QAAS,CAAC,CACZ,EAGA,GAAI,CAACC,EAAS,CACZ,IAAMG,EAAQD,EAAU,SAAW,CAAC,EACpCJ,EAAU,UAAY;AAAA;AAAA,YAEhBK,EACC,IACEC,GAAS;AAAA,uBACDA,EAAK,OAAO,IAAI;AAAA,gBACvBA,EAAK,OAAO,KAAO,SAASA,EAAK,OAAO,IAAI,UAAY,EAAE;AAAA,gBAC1DA,EAAK,OAAO,KAAK;AAAA;AAAA,WAGrB,EACC,KAAK,EAAE,CAAC;AAAA;AAAA,OAGjB,CAEA,MAAO,IAAM,CACXN,EAAU,UAAY,EACxB,CACF,CACF,EC9OO,IAAMO,EAAU,CACrB,GAAI,eACJ,QAAS,QACT,KAAM,mBACN,YAAa,yEAMb,UAAW,CAAC,EAKZ,QAAS,CACP,CACE,GAAI,qBACJ,UAAWC,EACX,SAAU,CACR,KAAM,mBACN,YAAa,8CACb,KAAM,WACR,CACF,CACF,CACF,ECjCO,IAAMC,EAAW,CACtB,GAAI,MACJ,QAASC,EAAQ,QACjB,KAAMA,EAAQ,KACd,YAAaA,EAAQ,YACrB,QAAS,CAEP,QAAS,CAAC,EACV,QAASA,EAAQ,OACnB,EACA,SAAU,CACR,UAAW,EACb,CACF,EAMA,GAAI,OAAO,OAAW,IAAa,CACjC,IAAMC,EAAkB,OAAe,uBACnCA,GAAkB,OAAOA,EAAe,UAAa,YACvDA,EAAe,SAASF,CAAQ,CAEpC,CAEA,IAAOG,EAAQH",
6
- "names": ["React", "useEffect", "useReducer", "useMemo", "useCallback", "jsx", "jsxs", "NavMountableWidget", "container", "config", "runtime", "instanceId", "navConfig", "links", "link", "runtime", "NavMountableWidget", "manifest", "runtime", "globalRegistry", "cdn_default"]
4
+ "sourcesContent": ["/**\n * Adaptive Nav - NavWidget Component\n *\n * React component that renders a navigation link list with per-item\n * conditional visibility based on showWhen decision strategies.\n *\n * Demonstrates the compositional action pattern where child actions\n * (nav:link) serve as configuration data for the parent widget.\n */\n\nimport React, { useEffect, useReducer, useMemo, useCallback } from 'react';\nimport type { NavWidgetProps, NavLinkAction, NavConfig, NavWidgetRuntime } from './types';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst baseStyles = {\n nav: {\n display: 'flex',\n gap: '4px',\n padding: '8px',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n link: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 12px',\n borderRadius: '6px',\n textDecoration: 'none',\n fontSize: '14px',\n fontWeight: 500,\n transition: 'background-color 0.15s ease, color 0.15s ease',\n cursor: 'pointer',\n border: 'none',\n background: 'transparent',\n },\n icon: {\n fontSize: '16px',\n },\n externalIcon: {\n fontSize: '12px',\n opacity: 0.6,\n },\n} as const;\n\nconst themeStyles = {\n light: {\n nav: {\n backgroundColor: '#ffffff',\n },\n link: {\n color: '#374151',\n },\n linkHover: {\n backgroundColor: '#f3f4f6',\n color: '#111827',\n },\n },\n dark: {\n nav: {\n backgroundColor: '#1f2937',\n },\n link: {\n color: '#d1d5db',\n },\n linkHover: {\n backgroundColor: '#374151',\n color: '#f9fafb',\n },\n },\n} as const;\n\n// ============================================================================\n// NavLink Component\n// ============================================================================\n\ninterface NavLinkComponentProps {\n link: NavLinkAction;\n theme: 'light' | 'dark';\n onNavigate: (href: string, external: boolean) => void;\n}\n\nfunction NavLinkComponent({ link, theme, onNavigate }: NavLinkComponentProps) {\n const [isHovered, setIsHovered] = React.useState(false);\n const { label, href, icon, external } = link.config;\n const colors = themeStyles[theme];\n\n const style: React.CSSProperties = {\n ...baseStyles.link,\n ...colors.link,\n ...(isHovered ? colors.linkHover : {}),\n };\n\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n onNavigate(href, external ?? false);\n };\n\n return (\n <a\n href={href}\n onClick={handleClick}\n style={style}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n target={external ? '_blank' : undefined}\n rel={external ? 'noopener noreferrer' : undefined}\n >\n {icon && <span style={baseStyles.icon}>{icon}</span>}\n <span>{label}</span>\n {external && <span style={baseStyles.externalIcon}>\u2197</span>}\n </a>\n );\n}\n\n// ============================================================================\n// NavWidget Component\n// ============================================================================\n\n/**\n * NavWidget - Renders a navigation link list with per-item activation.\n *\n * This component demonstrates the compositional action pattern:\n * - Parent (NavWidget) receives `config.actions` array\n * - Each action has optional `showWhen` for per-item visibility\n * - Parent evaluates showWhen and filters visible links\n * - Parent manages re-rendering on context changes\n */\nexport function NavWidget({ config, runtime, instanceId }: NavWidgetProps) {\n // Force re-render when context changes\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n\n // Subscribe to context changes for reactive updates\n useEffect(() => {\n const unsubscribe = runtime.context.subscribe(() => {\n forceUpdate();\n });\n return unsubscribe;\n }, [runtime.context]);\n\n // Filter visible links based on per-item showWhen\n const visibleLinks = useMemo(() => {\n return config.actions.filter((link) => {\n // No showWhen = always visible\n if (!link.showWhen) return true;\n\n // Evaluate the decision strategy\n const result = runtime.evaluateSync<boolean>(link.showWhen);\n return result.value;\n });\n }, [config.actions, runtime]);\n\n // Resolve theme (auto \u2192 detect system preference)\n const resolvedTheme = useMemo(() => {\n if (config.theme !== 'auto') return config.theme;\n\n // Check system preference (SSR-safe)\n if (typeof window !== 'undefined') {\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n }, [config.theme]);\n\n // Handle navigation with event publishing\n const handleNavigate = useCallback(\n (href: string, external: boolean) => {\n // Publish navigation event for analytics\n runtime.events.publish('nav:click', {\n instanceId,\n href,\n external,\n timestamp: Date.now(),\n });\n\n // Perform navigation\n if (external) {\n window.open(href, '_blank', 'noopener,noreferrer');\n } else {\n window.location.href = href;\n }\n },\n [runtime.events, instanceId]\n );\n\n // Compute nav styles\n const navStyle: React.CSSProperties = {\n ...baseStyles.nav,\n ...themeStyles[resolvedTheme].nav,\n flexDirection: config.layout === 'vertical' ? 'column' : 'row',\n };\n\n // Empty state\n if (visibleLinks.length === 0) {\n return null;\n }\n\n return (\n <nav style={navStyle} data-adaptive-id={instanceId} data-adaptive-type=\"adaptive-nav\">\n {visibleLinks.map((link, index) => (\n <NavLinkComponent\n key={link.config.href + index}\n link={link}\n theme={resolvedTheme}\n onNavigate={handleNavigate}\n />\n ))}\n </nav>\n );\n}\n\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\n\n/**\n * Mountable widget interface for the runtime's WidgetRegistry.\n */\nexport const NavMountableWidget = {\n mount(\n container: HTMLElement,\n config?: NavConfig & { runtime?: NavWidgetRuntime; instanceId?: string }\n ) {\n // This is a simplified mount for non-React environments\n // In practice, the runtime handles React rendering\n\n const {\n runtime,\n instanceId: _instanceId = 'nav-widget',\n ...navConfig\n } = config || {\n layout: 'horizontal' as const,\n theme: 'auto' as const,\n actions: [],\n };\n\n // Create simple HTML fallback if no runtime\n if (!runtime) {\n const links = navConfig.actions || [];\n container.innerHTML = `\n <nav style=\"display: flex; gap: 8px; padding: 8px; font-family: system-ui;\">\n ${links\n .map(\n (link) => `\n <a href=\"${link.config.href}\" style=\"padding: 8px 12px; text-decoration: none; color: #374151;\">\n ${link.config.icon ? `<span>${link.config.icon}</span>` : ''}\n ${link.config.label}\n </a>\n `\n )\n .join('')}\n </nav>\n `;\n }\n\n return () => {\n container.innerHTML = '';\n };\n },\n};\n\nexport default NavWidget;\n", "/**\n * Adaptive Nav - Runtime Module\n *\n * Runtime manifest for the navigation link list adaptive.\n * This is a widget-based adaptive with no action executors.\n */\n\nimport { NavMountableWidget } from './NavWidget';\n\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n\n/**\n * Runtime manifest for adaptive-nav.\n *\n * Note: This adaptive is widget-based, not action-based.\n * The `nav:link` actions are compositional - they're rendered by\n * the widget, not executed by the runtime.\n */\nexport const runtime = {\n id: 'adaptive-nav',\n version: '1.0.0',\n name: 'Navigation Links',\n description: 'Widget-based navigation link list with per-item conditional visibility',\n\n /**\n * No action executors - nav:link actions are compositional,\n * meaning they serve as configuration for the NavWidget.\n */\n executors: [],\n\n /**\n * Widget definitions for the runtime's WidgetRegistry.\n */\n widgets: [\n {\n id: 'adaptive-nav:links',\n component: NavMountableWidget,\n metadata: {\n name: 'Navigation Links',\n description: 'Horizontal or vertical navigation link list',\n icon: '\uD83D\uDD17',\n },\n },\n ],\n};\n\nexport default runtime;\n", "/**\n * CDN Entry Point for Adaptive Nav\n *\n * This module is bundled for CDN delivery and self-registers with the global\n * SynOS app registry when loaded dynamically via the AppLoader.\n */\n\nimport { runtime } from './runtime';\n\n/**\n * App manifest for registry registration.\n * Follows the AppManifest interface expected by AppLoader/AppRegistry.\n */\nexport const manifest = {\n id: 'nav',\n version: runtime.version,\n name: runtime.name,\n description: runtime.description,\n runtime: {\n // Nav is widget-based, no action executors\n actions: [],\n widgets: runtime.widgets,\n },\n metadata: {\n isBuiltIn: false,\n },\n};\n\n/**\n * Self-register with global registry if available.\n * This happens when loaded via script tag (UMD).\n */\nif (typeof window !== 'undefined') {\n const globalRegistry = (window as any).__SYNOS_APP_REGISTRY__;\n if (globalRegistry && typeof globalRegistry.register === 'function') {\n globalRegistry.register(manifest);\n }\n}\n\nexport default manifest;\n"],
5
+ "mappings": "AAUA,OAAOA,GAAS,aAAAC,EAAW,cAAAC,EAAY,WAAAC,EAAS,eAAAC,MAAmB,QA2F/D,OASW,OAAAC,EATX,QAAAC,MAAA,oBAsHG,IAAMC,EAAqB,CAChC,MACEC,EACAC,EACA,CAIA,GAAM,CACJ,QAAAC,EACA,WAAYC,EAAc,aAC1B,GAAGC,CACL,EAAIH,GAAU,CACZ,OAAQ,aACR,MAAO,OACP,QAAS,CAAC,CACZ,EAGA,GAAI,CAACC,EAAS,CACZ,IAAMG,EAAQD,EAAU,SAAW,CAAC,EACpCJ,EAAU,UAAY;AAAA;AAAA,YAEhBK,EACC,IACEC,GAAS;AAAA,uBACDA,EAAK,OAAO,IAAI;AAAA,gBACvBA,EAAK,OAAO,KAAO,SAASA,EAAK,OAAO,IAAI,UAAY,EAAE;AAAA,gBAC1DA,EAAK,OAAO,KAAK;AAAA;AAAA,WAGrB,EACC,KAAK,EAAE,CAAC;AAAA;AAAA,OAGjB,CAEA,MAAO,IAAM,CACXN,EAAU,UAAY,EACxB,CACF,CACF,EChPO,IAAMO,EAAU,CACrB,GAAI,eACJ,QAAS,QACT,KAAM,mBACN,YAAa,yEAMb,UAAW,CAAC,EAKZ,QAAS,CACP,CACE,GAAI,qBACJ,UAAWC,EACX,SAAU,CACR,KAAM,mBACN,YAAa,8CACb,KAAM,WACR,CACF,CACF,CACF,ECjCO,IAAMC,EAAW,CACtB,GAAI,MACJ,QAASC,EAAQ,QACjB,KAAMA,EAAQ,KACd,YAAaA,EAAQ,YACrB,QAAS,CAEP,QAAS,CAAC,EACV,QAASA,EAAQ,OACnB,EACA,SAAU,CACR,UAAW,EACb,CACF,EAMA,GAAI,OAAO,OAAW,IAAa,CACjC,IAAMC,EAAkB,OAAe,uBACnCA,GAAkB,OAAOA,EAAe,UAAa,YACvDA,EAAe,SAASF,CAAQ,CAEpC,CAEA,IAAOG,EAAQH",
6
+ "names": ["React", "useEffect", "useReducer", "useMemo", "useCallback", "jsx", "jsxs", "NavMountableWidget", "container", "config", "runtime", "_instanceId", "navConfig", "links", "link", "runtime", "NavMountableWidget", "manifest", "runtime", "globalRegistry", "cdn_default"]
7
7
  }
@@ -4,10 +4,10 @@
4
4
  * Defines the types for the SynOS app system.
5
5
  * Apps provide runtime extensions (actions, widgets, events) and editor modules.
6
6
  */
7
- import type { ZodSchema } from "zod";
8
- import type { ActionExecutor } from "../actions/types";
9
- import type { MountableWidget } from "../widgets/WidgetRegistry";
10
- import type { NormalizedEvent } from "../events/types";
7
+ import type { ZodSchema } from 'zod';
8
+ import type { ActionExecutor } from '../actions/types';
9
+ import type { MountableWidget } from '../widgets/WidgetRegistry';
10
+ import type { NormalizedEvent } from '../events/types';
11
11
  /**
12
12
  * Action definition provided by an app.
13
13
  */
@@ -155,7 +155,7 @@ export interface AppManifest {
155
155
  /**
156
156
  * App lifecycle state.
157
157
  */
158
- export type AppLifecycleState = "registered" | "activating" | "active" | "deactivating" | "inactive" | "error";
158
+ export type AppLifecycleState = 'registered' | 'activating' | 'active' | 'deactivating' | 'inactive' | 'error';
159
159
  /**
160
160
  * App registration - tracked state for a registered app.
161
161
  */
@@ -212,20 +212,20 @@ export interface AppContext {
212
212
  * Events emitted by the app registry.
213
213
  */
214
214
  export type AppRegistryEvent = {
215
- type: "app:registered";
215
+ type: 'app:registered';
216
216
  appId: string;
217
217
  manifest: AppManifest;
218
218
  } | {
219
- type: "app:activated";
219
+ type: 'app:activated';
220
220
  appId: string;
221
221
  } | {
222
- type: "app:deactivated";
222
+ type: 'app:deactivated';
223
223
  appId: string;
224
224
  } | {
225
- type: "app:error";
225
+ type: 'app:error';
226
226
  appId: string;
227
227
  error: string;
228
228
  } | {
229
- type: "app:unregistered";
229
+ type: 'app:unregistered';
230
230
  appId: string;
231
231
  };
@@ -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;
@@ -5,33 +5,33 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  function ComparisonItemCard({ item, accentColor, layout, }) {
6
6
  const isHighlighted = item.highlight;
7
7
  const cardStyle = {
8
- display: "flex",
9
- flexDirection: layout === "list" ? "row" : "column",
10
- alignItems: layout === "list" ? "center" : "flex-start",
11
- gap: layout === "list" ? "var(--sc-spacing-md, 0.75rem)" : "var(--sc-spacing-xs, 0.25rem)",
12
- padding: "var(--sc-spacing-md, 0.75rem)",
13
- borderRadius: "var(--sc-border-radius-sm, 6px)",
8
+ display: 'flex',
9
+ flexDirection: layout === 'list' ? 'row' : 'column',
10
+ alignItems: layout === 'list' ? 'center' : 'flex-start',
11
+ gap: layout === 'list' ? 'var(--sc-spacing-md, 0.75rem)' : 'var(--sc-spacing-xs, 0.25rem)',
12
+ padding: 'var(--sc-spacing-md, 0.75rem)',
13
+ borderRadius: 'var(--sc-border-radius-sm, 6px)',
14
14
  background: isHighlighted
15
- ? "var(--sc-color-primary-muted, rgba(99, 102, 241, 0.15))"
16
- : "var(--sc-color-background-subtle, rgba(0, 0, 0, 0.2))",
15
+ ? 'var(--sc-color-primary-muted, rgba(99, 102, 241, 0.15))'
16
+ : 'var(--sc-color-background-subtle, rgba(0, 0, 0, 0.2))',
17
17
  border: isHighlighted
18
18
  ? `1px solid ${accentColor}`
19
- : "1px solid var(--sc-color-border-subtle, rgba(255, 255, 255, 0.06))",
20
- transition: "all 0.15s ease",
19
+ : '1px solid var(--sc-color-border-subtle, rgba(255, 255, 255, 0.06))',
20
+ transition: 'all 0.15s ease',
21
21
  };
22
22
  const iconStyle = {
23
- fontSize: "1.25rem",
24
- marginBottom: layout === "list" ? 0 : "var(--sc-spacing-xs, 0.25rem)",
23
+ fontSize: '1.25rem',
24
+ marginBottom: layout === 'list' ? 0 : 'var(--sc-spacing-xs, 0.25rem)',
25
25
  };
26
26
  const labelStyle = {
27
- fontSize: "var(--sc-font-size-sm, 0.8rem)",
28
- color: "var(--sc-color-text-secondary, #a1a1a6)",
29
- flex: layout === "list" ? 1 : undefined,
27
+ fontSize: 'var(--sc-font-size-sm, 0.8rem)',
28
+ color: 'var(--sc-color-text-secondary, #a1a1a6)',
29
+ flex: layout === 'list' ? 1 : undefined,
30
30
  };
31
31
  const valueStyle = {
32
- fontSize: "var(--sc-font-size-lg, 1rem)",
33
- fontWeight: "var(--sc-font-weight-semibold, 600)",
34
- color: isHighlighted ? accentColor : "var(--sc-color-text, #f5f5f7)",
32
+ fontSize: 'var(--sc-font-size-lg, 1rem)',
33
+ fontWeight: 'var(--sc-font-weight-semibold, 600)',
34
+ color: isHighlighted ? accentColor : 'var(--sc-color-text, #f5f5f7)',
35
35
  };
36
36
  return (_jsxs("div", { style: cardStyle, children: [item.icon && _jsx("span", { style: iconStyle, children: item.icon }), _jsx("span", { style: labelStyle, children: item.label }), _jsx("span", { style: valueStyle, children: item.value })] }));
37
37
  }
@@ -39,8 +39,8 @@ function ComparisonItemCard({ item, accentColor, layout, }) {
39
39
  * Comparison block component - displays items in grid/list/table layout
40
40
  */
41
41
  export function ComparisonBlock({ content, accentColor }) {
42
- const primaryColor = accentColor || "var(--sc-color-primary, #6366f1)";
43
- const layout = content.layout || "grid";
42
+ const primaryColor = accentColor || 'var(--sc-color-primary, #6366f1)';
43
+ const layout = content.layout || 'grid';
44
44
  const columns = content.columns || 2;
45
45
  // Find best item if highlightBest is true
46
46
  let processedItems = content.items;
@@ -48,7 +48,7 @@ export function ComparisonBlock({ content, accentColor }) {
48
48
  // Find the item with highest numeric value
49
49
  const itemsWithNumeric = content.items.map((item) => ({
50
50
  ...item,
51
- numericValue: typeof item.value === "number" ? item.value : parseFloat(String(item.value)),
51
+ numericValue: typeof item.value === 'number' ? item.value : parseFloat(String(item.value)),
52
52
  }));
53
53
  const maxValue = Math.max(...itemsWithNumeric.map((i) => i.numericValue || 0));
54
54
  processedItems = itemsWithNumeric.map((item) => ({
@@ -57,33 +57,33 @@ export function ComparisonBlock({ content, accentColor }) {
57
57
  }));
58
58
  }
59
59
  const containerStyle = {
60
- display: layout === "table" ? "block" : layout === "list" ? "flex" : "grid",
61
- flexDirection: layout === "list" ? "column" : undefined,
62
- gridTemplateColumns: layout === "grid" ? `repeat(${columns}, 1fr)` : undefined,
63
- gap: "var(--sc-spacing-sm, 0.5rem)",
64
- padding: "var(--sc-spacing-sm, 0.5rem) 0",
60
+ display: layout === 'table' ? 'block' : layout === 'list' ? 'flex' : 'grid',
61
+ flexDirection: layout === 'list' ? 'column' : undefined,
62
+ gridTemplateColumns: layout === 'grid' ? `repeat(${columns}, 1fr)` : undefined,
63
+ gap: 'var(--sc-spacing-sm, 0.5rem)',
64
+ padding: 'var(--sc-spacing-sm, 0.5rem) 0',
65
65
  };
66
66
  // Table layout
67
- if (layout === "table") {
67
+ if (layout === 'table') {
68
68
  return (_jsx("table", { style: {
69
- width: "100%",
70
- borderCollapse: "collapse",
71
- fontSize: "var(--sc-font-size-sm, 0.8rem)",
69
+ width: '100%',
70
+ borderCollapse: 'collapse',
71
+ fontSize: 'var(--sc-font-size-sm, 0.8rem)',
72
72
  }, children: _jsx("tbody", { children: processedItems.map((item, idx) => (_jsxs("tr", { style: {
73
73
  borderBottom: idx < processedItems.length - 1
74
- ? "1px solid var(--sc-color-border-subtle, rgba(255, 255, 255, 0.06))"
74
+ ? '1px solid var(--sc-color-border-subtle, rgba(255, 255, 255, 0.06))'
75
75
  : undefined,
76
76
  }, children: [_jsxs("td", { style: {
77
- padding: "var(--sc-spacing-sm, 0.5rem) 0",
78
- color: "var(--sc-color-text-secondary, #a1a1a6)",
79
- display: "flex",
80
- alignItems: "center",
81
- gap: "var(--sc-spacing-sm, 0.5rem)",
77
+ padding: 'var(--sc-spacing-sm, 0.5rem) 0',
78
+ color: 'var(--sc-color-text-secondary, #a1a1a6)',
79
+ display: 'flex',
80
+ alignItems: 'center',
81
+ gap: 'var(--sc-spacing-sm, 0.5rem)',
82
82
  }, children: [item.icon && _jsx("span", { children: item.icon }), item.label] }), _jsx("td", { style: {
83
- padding: "var(--sc-spacing-sm, 0.5rem) 0",
84
- textAlign: "right",
85
- fontWeight: "var(--sc-font-weight-semibold, 600)",
86
- color: item.highlight ? primaryColor : "var(--sc-color-text, #f5f5f7)",
83
+ padding: 'var(--sc-spacing-sm, 0.5rem) 0',
84
+ textAlign: 'right',
85
+ fontWeight: 'var(--sc-font-weight-semibold, 600)',
86
+ color: item.highlight ? primaryColor : 'var(--sc-color-text, #f5f5f7)',
87
87
  }, children: item.value })] }, idx))) }) }));
88
88
  }
89
89
  // Grid or list layout
@@ -1 +1 @@
1
- {"version":3,"file":"ComparisonBlock.js","sourceRoot":"","sources":["../../../src/blocks/data/ComparisonBlock.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ComparisonBlock.js","sourceRoot":"","sources":["../../../src/blocks/data/ComparisonBlock.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { StatsContent } from "../../types";
1
+ import type { StatsContent } from '../../types';
2
2
  interface StatsBlockProps {
3
3
  content: StatsContent;
4
4
  accentColor?: string;
@@ -1,35 +1,35 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo } from "react";
2
+ import { useMemo } from 'react';
3
3
  /**
4
4
  * Trend indicator component
5
5
  */
6
6
  function TrendBadge({ trend }) {
7
- const isPositive = trend.direction === "up";
8
- const isNegative = trend.direction === "down";
7
+ const isPositive = trend.direction === 'up';
8
+ const isNegative = trend.direction === 'down';
9
9
  const color = isPositive
10
- ? "var(--sc-color-success, #34c759)"
10
+ ? 'var(--sc-color-success, #34c759)'
11
11
  : isNegative
12
- ? "var(--sc-color-error, #ff453a)"
13
- : "var(--sc-color-text-muted, #8e8e93)";
12
+ ? 'var(--sc-color-error, #ff453a)'
13
+ : 'var(--sc-color-text-muted, #8e8e93)';
14
14
  const bgColor = isPositive
15
- ? "var(--sc-color-success-muted, rgba(52, 199, 89, 0.15))"
15
+ ? 'var(--sc-color-success-muted, rgba(52, 199, 89, 0.15))'
16
16
  : isNegative
17
- ? "var(--sc-color-error-muted, rgba(255, 69, 58, 0.15))"
18
- : "rgba(142, 142, 147, 0.15)";
17
+ ? 'var(--sc-color-error-muted, rgba(255, 69, 58, 0.15))'
18
+ : 'rgba(142, 142, 147, 0.15)';
19
19
  const ArrowIcon = () => (_jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", style: {
20
- transform: isPositive ? "rotate(0deg)" : isNegative ? "rotate(180deg)" : "rotate(90deg)",
20
+ transform: isPositive ? 'rotate(0deg)' : isNegative ? 'rotate(180deg)' : 'rotate(90deg)',
21
21
  }, children: _jsx("path", { d: "M5 1v8M5 1L2 4M5 1l3 3", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
22
22
  return (_jsxs("span", { style: {
23
- display: "inline-flex",
24
- alignItems: "center",
25
- gap: "4px",
26
- padding: "2px 8px",
27
- borderRadius: "var(--sc-border-radius-full, 9999px)",
23
+ display: 'inline-flex',
24
+ alignItems: 'center',
25
+ gap: '4px',
26
+ padding: '2px 8px',
27
+ borderRadius: 'var(--sc-border-radius-full, 9999px)',
28
28
  background: bgColor,
29
29
  color: color,
30
- fontSize: "var(--sc-font-size-xs, 0.7rem)",
31
- fontWeight: "var(--sc-font-weight-medium, 500)",
32
- }, children: [_jsx(ArrowIcon, {}), trend.value, trend.timeframe && (_jsx("span", { style: { color: "var(--sc-color-text-muted, #8e8e93)" }, children: trend.timeframe }))] }));
30
+ fontSize: 'var(--sc-font-size-xs, 0.7rem)',
31
+ fontWeight: 'var(--sc-font-weight-medium, 500)',
32
+ }, children: [_jsx(ArrowIcon, {}), trend.value, trend.timeframe && (_jsx("span", { style: { color: 'var(--sc-color-text-muted, #8e8e93)' }, children: trend.timeframe }))] }));
33
33
  }
34
34
  /**
35
35
  * Mini sparkline chart using SVG
@@ -40,7 +40,7 @@ function Sparkline({ data, color }) {
40
40
  const h = 24;
41
41
  const padding = 2;
42
42
  if (data.length < 2) {
43
- return { path: "", width: w, height: h };
43
+ return { path: '', width: w, height: h };
44
44
  }
45
45
  const min = Math.min(...data);
46
46
  const max = Math.max(...data);
@@ -52,51 +52,51 @@ function Sparkline({ data, color }) {
52
52
  });
53
53
  const pathData = points.reduce((acc, point, i) => {
54
54
  return acc + (i === 0 ? `M ${point.x} ${point.y}` : ` L ${point.x} ${point.y}`);
55
- }, "");
55
+ }, '');
56
56
  return { path: pathData, width: w, height: h };
57
57
  }, [data]);
58
58
  if (!path)
59
59
  return null;
60
- return (_jsxs("svg", { width: width, height: height, viewBox: `0 0 ${width} ${height}`, style: { overflow: "visible" }, children: [_jsx("path", { d: path, stroke: color, strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }), _jsx("defs", { children: _jsxs("linearGradient", { id: "sparkline-gradient", x1: "0", x2: "0", y1: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: color, stopOpacity: "0.3" }), _jsx("stop", { offset: "100%", stopColor: color, stopOpacity: "0" })] }) }), _jsx("path", { d: `${path} L ${width - 2} ${height} L 2 ${height} Z`, fill: "url(#sparkline-gradient)" })] }));
60
+ return (_jsxs("svg", { width: width, height: height, viewBox: `0 0 ${width} ${height}`, style: { overflow: 'visible' }, children: [_jsx("path", { d: path, stroke: color, strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }), _jsx("defs", { children: _jsxs("linearGradient", { id: "sparkline-gradient", x1: "0", x2: "0", y1: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: color, stopOpacity: "0.3" }), _jsx("stop", { offset: "100%", stopColor: color, stopOpacity: "0" })] }) }), _jsx("path", { d: `${path} L ${width - 2} ${height} L 2 ${height} Z`, fill: "url(#sparkline-gradient)" })] }));
61
61
  }
62
62
  /**
63
63
  * Stats block component - displays a metric with trend and sparkline
64
64
  */
65
65
  export function StatsBlock({ content, accentColor }) {
66
- const primaryColor = accentColor || "var(--sc-color-primary, #6366f1)";
66
+ const primaryColor = accentColor || 'var(--sc-color-primary, #6366f1)';
67
67
  const containerStyle = {
68
- display: "flex",
69
- flexDirection: "column",
70
- gap: "var(--sc-spacing-sm, 0.5rem)",
71
- padding: "var(--sc-spacing-sm, 0.5rem) 0",
68
+ display: 'flex',
69
+ flexDirection: 'column',
70
+ gap: 'var(--sc-spacing-sm, 0.5rem)',
71
+ padding: 'var(--sc-spacing-sm, 0.5rem) 0',
72
72
  };
73
73
  const valueContainerStyle = {
74
- display: "flex",
75
- alignItems: "baseline",
76
- gap: "var(--sc-spacing-xs, 0.25rem)",
74
+ display: 'flex',
75
+ alignItems: 'baseline',
76
+ gap: 'var(--sc-spacing-xs, 0.25rem)',
77
77
  };
78
78
  const valueStyle = {
79
- fontSize: "var(--sc-font-size-xxl, 1.5rem)",
80
- fontWeight: "var(--sc-font-weight-bold, 700)",
79
+ fontSize: 'var(--sc-font-size-xxl, 1.5rem)',
80
+ fontWeight: 'var(--sc-font-weight-bold, 700)',
81
81
  color: primaryColor,
82
- letterSpacing: "-0.02em",
82
+ letterSpacing: '-0.02em',
83
83
  lineHeight: 1,
84
84
  };
85
85
  const unitStyle = {
86
- fontSize: "var(--sc-font-size-md, 0.9rem)",
87
- fontWeight: "var(--sc-font-weight-normal, 400)",
88
- color: "var(--sc-color-text-muted, #8e8e93)",
86
+ fontSize: 'var(--sc-font-size-md, 0.9rem)',
87
+ fontWeight: 'var(--sc-font-weight-normal, 400)',
88
+ color: 'var(--sc-color-text-muted, #8e8e93)',
89
89
  };
90
90
  const labelStyle = {
91
- fontSize: "var(--sc-font-size-sm, 0.8rem)",
92
- color: "var(--sc-color-text-secondary, #a1a1a6)",
91
+ fontSize: 'var(--sc-font-size-sm, 0.8rem)',
92
+ color: 'var(--sc-color-text-secondary, #a1a1a6)',
93
93
  margin: 0,
94
94
  };
95
95
  const bottomRowStyle = {
96
- display: "flex",
97
- alignItems: "center",
98
- justifyContent: "space-between",
99
- marginTop: "var(--sc-spacing-xs, 0.25rem)",
96
+ display: 'flex',
97
+ alignItems: 'center',
98
+ justifyContent: 'space-between',
99
+ marginTop: 'var(--sc-spacing-xs, 0.25rem)',
100
100
  };
101
101
  return (_jsxs("div", { style: containerStyle, children: [_jsxs("div", { style: valueContainerStyle, children: [content.prefix && _jsx("span", { style: unitStyle, children: content.prefix }), _jsx("span", { style: valueStyle, children: content.value }), content.suffix && _jsx("span", { style: unitStyle, children: content.suffix })] }), _jsx("p", { style: labelStyle, children: content.label }), (content.trend || content.sparkline) && (_jsxs("div", { style: bottomRowStyle, children: [content.trend && _jsx(TrendBadge, { trend: content.trend }), content.sparkline && content.sparkline.length > 1 && (_jsx(Sparkline, { data: content.sparkline, color: primaryColor }))] }))] }));
102
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StatsBlock.js","sourceRoot":"","sources":["../../../src/blocks/data/StatsBlock.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StatsBlock.js","sourceRoot":"","sources":["../../../src/blocks/data/StatsBlock.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { StatsBlock } from "./StatsBlock";
2
- export { ComparisonBlock } from "./ComparisonBlock";
1
+ export { StatsBlock } from './StatsBlock';
2
+ export { ComparisonBlock } from './ComparisonBlock';
@@ -1,3 +1,3 @@
1
- export { StatsBlock } from "./StatsBlock";
2
- export { ComparisonBlock } from "./ComparisonBlock";
1
+ export { StatsBlock } from './StatsBlock';
2
+ export { ComparisonBlock } from './ComparisonBlock';
3
3
  //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
- export * from "./notification";
2
- export * from "./data";
3
- export * from "./interactive";
4
- import type { ReactNode } from "react";
5
- import type { TileContent } from "../types";
1
+ export * from './notification';
2
+ export * from './data';
3
+ export * from './interactive';
4
+ import type { ReactNode } from 'react';
5
+ import type { TileContent } from '../types';
6
6
  /**
7
7
  * Block renderer function type
8
8
  */