@codeyam/codeyam-cli 0.1.0-staging.dbc742d → 0.1.0-staging.df25827

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 (479) hide show
  1. package/analyzer-template/.build-info.json +8 -8
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +6 -6
  4. package/analyzer-template/packages/ai/package.json +1 -1
  5. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +135 -0
  6. package/analyzer-template/packages/ai/src/lib/astScopes/nodeToSource.ts +19 -0
  7. package/analyzer-template/packages/ai/src/lib/astScopes/paths.ts +11 -4
  8. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +36 -9
  9. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.ts +10 -3
  10. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +16 -6
  11. package/analyzer-template/packages/analyze/index.ts +4 -1
  12. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +28 -2
  13. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +5 -36
  14. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +10 -6
  15. package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +9 -12
  16. package/analyzer-template/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.ts +21 -0
  17. package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +82 -10
  18. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +4 -0
  19. package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +4 -0
  20. package/analyzer-template/packages/analyze/src/lib/files/analyzeNextRoute.ts +8 -3
  21. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +239 -58
  22. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +1684 -1462
  23. package/analyzer-template/packages/aws/package.json +7 -7
  24. package/analyzer-template/packages/database/package.json +3 -3
  25. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +77 -6
  26. package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +25 -15
  27. package/analyzer-template/packages/database/src/lib/loadEntity.ts +19 -8
  28. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +5 -1
  29. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -1
  30. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +79 -6
  31. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
  32. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
  33. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +7 -1
  34. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
  35. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts +4 -1
  36. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts.map +1 -1
  37. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js +5 -5
  38. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js.map +1 -1
  39. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts +3 -1
  40. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  41. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +22 -1
  42. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  43. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +27 -0
  44. package/analyzer-template/project/analyzeFileEntities.ts +26 -0
  45. package/analyzer-template/project/runMultiScenarioServer.ts +26 -3
  46. package/background/src/lib/virtualized/project/analyzeFileEntities.js +22 -0
  47. package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
  48. package/background/src/lib/virtualized/project/runMultiScenarioServer.js +23 -3
  49. package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
  50. package/codeyam-cli/src/cli.js +24 -0
  51. package/codeyam-cli/src/cli.js.map +1 -1
  52. package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js +47 -0
  53. package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js.map +1 -0
  54. package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js +71 -0
  55. package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js.map +1 -0
  56. package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js +30 -0
  57. package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js.map +1 -0
  58. package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js +51 -0
  59. package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js.map +1 -0
  60. package/codeyam-cli/src/commands/__tests__/editor.statePersistence.test.js +55 -0
  61. package/codeyam-cli/src/commands/__tests__/editor.statePersistence.test.js.map +1 -0
  62. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +56 -0
  63. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
  64. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +39 -3
  65. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  66. package/codeyam-cli/src/commands/editor.js +3819 -624
  67. package/codeyam-cli/src/commands/editor.js.map +1 -1
  68. package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js +23 -0
  69. package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js.map +1 -0
  70. package/codeyam-cli/src/commands/editorIsolateArgs.js +25 -0
  71. package/codeyam-cli/src/commands/editorIsolateArgs.js.map +1 -0
  72. package/codeyam-cli/src/commands/init.js +22 -0
  73. package/codeyam-cli/src/commands/init.js.map +1 -1
  74. package/codeyam-cli/src/commands/telemetry.js +37 -0
  75. package/codeyam-cli/src/commands/telemetry.js.map +1 -0
  76. package/codeyam-cli/src/data/designSystems.js +27 -0
  77. package/codeyam-cli/src/data/designSystems.js.map +1 -0
  78. package/codeyam-cli/src/data/techStacks.js +1 -1
  79. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +173 -0
  80. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
  81. package/codeyam-cli/src/utils/__tests__/devServerState.test.js +93 -1
  82. package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -1
  83. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +62 -8
  84. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -1
  85. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +3526 -1
  86. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
  87. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js +76 -0
  88. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js.map +1 -0
  89. package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js +137 -0
  90. package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js.map +1 -0
  91. package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js +100 -0
  92. package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js.map +1 -0
  93. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +76 -3
  94. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -1
  95. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js +381 -0
  96. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js.map +1 -0
  97. package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js +67 -0
  98. package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js.map +1 -0
  99. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +75 -1
  100. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -1
  101. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js +435 -0
  102. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js.map +1 -0
  103. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +73 -1
  104. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -1
  105. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +98 -1
  106. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -1
  107. package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js +1108 -0
  108. package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js.map +1 -0
  109. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +190 -0
  110. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -1
  111. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +936 -9
  112. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -1
  113. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +201 -1
  114. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -1
  115. package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js +143 -0
  116. package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js.map +1 -0
  117. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js +66 -0
  118. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js.map +1 -0
  119. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js +53 -0
  120. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js.map +1 -0
  121. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +390 -11
  122. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -1
  123. package/codeyam-cli/src/utils/__tests__/envFile.test.js +125 -0
  124. package/codeyam-cli/src/utils/__tests__/envFile.test.js.map +1 -0
  125. package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js +177 -0
  126. package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js.map +1 -0
  127. package/codeyam-cli/src/utils/__tests__/handoffContext.test.js +500 -0
  128. package/codeyam-cli/src/utils/__tests__/handoffContext.test.js.map +1 -0
  129. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +16 -1
  130. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -1
  131. package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js +302 -0
  132. package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js.map +1 -0
  133. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +30 -2
  134. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -1
  135. package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js +127 -0
  136. package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js.map +1 -0
  137. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js +118 -0
  138. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js.map +1 -0
  139. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +57 -0
  140. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -1
  141. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +373 -1
  142. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -1
  143. package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js +84 -0
  144. package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js.map +1 -0
  145. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +1 -0
  146. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  147. package/codeyam-cli/src/utils/__tests__/telemetry.test.js +159 -0
  148. package/codeyam-cli/src/utils/__tests__/telemetry.test.js.map +1 -0
  149. package/codeyam-cli/src/utils/__tests__/testRunner.test.js +216 -0
  150. package/codeyam-cli/src/utils/__tests__/testRunner.test.js.map +1 -0
  151. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +6 -0
  152. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -1
  153. package/codeyam-cli/src/utils/analysisRunner.js +39 -8
  154. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  155. package/codeyam-cli/src/utils/analyzer.js +11 -1
  156. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  157. package/codeyam-cli/src/utils/analyzerFinalization.js +100 -0
  158. package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
  159. package/codeyam-cli/src/utils/backgroundServer.js +1 -1
  160. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  161. package/codeyam-cli/src/utils/designSystemShowcase.js +810 -0
  162. package/codeyam-cli/src/utils/designSystemShowcase.js.map +1 -0
  163. package/codeyam-cli/src/utils/devServerState.js +32 -0
  164. package/codeyam-cli/src/utils/devServerState.js.map +1 -1
  165. package/codeyam-cli/src/utils/editorApi.js +27 -5
  166. package/codeyam-cli/src/utils/editorApi.js.map +1 -1
  167. package/codeyam-cli/src/utils/editorAudit.js +700 -10
  168. package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
  169. package/codeyam-cli/src/utils/editorBroadcastViewport.js +26 -0
  170. package/codeyam-cli/src/utils/editorBroadcastViewport.js.map +1 -0
  171. package/codeyam-cli/src/utils/editorDeleteScenario.js +67 -0
  172. package/codeyam-cli/src/utils/editorDeleteScenario.js.map +1 -0
  173. package/codeyam-cli/src/utils/editorEntityChangeStatus.js +13 -7
  174. package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -1
  175. package/codeyam-cli/src/utils/editorEntityHelpers.js +144 -0
  176. package/codeyam-cli/src/utils/editorEntityHelpers.js.map +1 -0
  177. package/codeyam-cli/src/utils/editorGuard.js +36 -0
  178. package/codeyam-cli/src/utils/editorGuard.js.map +1 -0
  179. package/codeyam-cli/src/utils/editorLoaderHelpers.js +40 -1
  180. package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -1
  181. package/codeyam-cli/src/utils/editorMigration.js +224 -0
  182. package/codeyam-cli/src/utils/editorMigration.js.map +1 -0
  183. package/codeyam-cli/src/utils/editorPreview.js +33 -0
  184. package/codeyam-cli/src/utils/editorPreview.js.map +1 -1
  185. package/codeyam-cli/src/utils/editorRecapture.js +109 -0
  186. package/codeyam-cli/src/utils/editorRecapture.js.map +1 -0
  187. package/codeyam-cli/src/utils/editorRoadmap.js +574 -0
  188. package/codeyam-cli/src/utils/editorRoadmap.js.map +1 -0
  189. package/codeyam-cli/src/utils/editorScenarioSwitch.js +39 -2
  190. package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -1
  191. package/codeyam-cli/src/utils/editorScenarios.js +375 -16
  192. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -1
  193. package/codeyam-cli/src/utils/editorSeedAdapter.js +308 -6
  194. package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -1
  195. package/codeyam-cli/src/utils/editorShouldRevalidate.js +21 -0
  196. package/codeyam-cli/src/utils/editorShouldRevalidate.js.map +1 -0
  197. package/codeyam-cli/src/utils/entityChangeStatus.js +50 -5
  198. package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -1
  199. package/codeyam-cli/src/utils/entityChangeStatus.server.js +72 -3
  200. package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -1
  201. package/codeyam-cli/src/utils/envFile.js +90 -0
  202. package/codeyam-cli/src/utils/envFile.js.map +1 -0
  203. package/codeyam-cli/src/utils/fileWatcher.js +38 -0
  204. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  205. package/codeyam-cli/src/utils/glossaryAdd.js +74 -0
  206. package/codeyam-cli/src/utils/glossaryAdd.js.map +1 -0
  207. package/codeyam-cli/src/utils/handoffContext.js +257 -0
  208. package/codeyam-cli/src/utils/handoffContext.js.map +1 -0
  209. package/codeyam-cli/src/utils/install-skills.js +50 -6
  210. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  211. package/codeyam-cli/src/utils/manualEntityAnalysis.js +196 -0
  212. package/codeyam-cli/src/utils/manualEntityAnalysis.js.map +1 -0
  213. package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -1
  214. package/codeyam-cli/src/utils/progress.js +2 -2
  215. package/codeyam-cli/src/utils/progress.js.map +1 -1
  216. package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js +159 -0
  217. package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js.map +1 -0
  218. package/codeyam-cli/src/utils/queue/job.js +35 -6
  219. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  220. package/codeyam-cli/src/utils/registerScenarioResult.js +52 -0
  221. package/codeyam-cli/src/utils/registerScenarioResult.js.map +1 -0
  222. package/codeyam-cli/src/utils/routePatternMatching.js +129 -0
  223. package/codeyam-cli/src/utils/routePatternMatching.js.map +1 -0
  224. package/codeyam-cli/src/utils/scenarioCoverage.js +12 -10
  225. package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -1
  226. package/codeyam-cli/src/utils/scenariosManifest.js +154 -0
  227. package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -1
  228. package/codeyam-cli/src/utils/screenshotHash.js +26 -0
  229. package/codeyam-cli/src/utils/screenshotHash.js.map +1 -0
  230. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +1 -0
  231. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  232. package/codeyam-cli/src/utils/simulationGateMiddleware.js +9 -0
  233. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -1
  234. package/codeyam-cli/src/utils/techStackConfig.js +38 -0
  235. package/codeyam-cli/src/utils/techStackConfig.js.map +1 -0
  236. package/codeyam-cli/src/utils/techStackConfig.test.js +85 -0
  237. package/codeyam-cli/src/utils/techStackConfig.test.js.map +1 -0
  238. package/codeyam-cli/src/utils/telemetry.js +106 -0
  239. package/codeyam-cli/src/utils/telemetry.js.map +1 -0
  240. package/codeyam-cli/src/utils/telemetryMiddleware.js +22 -0
  241. package/codeyam-cli/src/utils/telemetryMiddleware.js.map +1 -0
  242. package/codeyam-cli/src/utils/testResultCache.js +53 -0
  243. package/codeyam-cli/src/utils/testResultCache.js.map +1 -0
  244. package/codeyam-cli/src/utils/testResultCache.server.js +81 -0
  245. package/codeyam-cli/src/utils/testResultCache.server.js.map +1 -0
  246. package/codeyam-cli/src/utils/testResultCache.server.test.js +187 -0
  247. package/codeyam-cli/src/utils/testResultCache.server.test.js.map +1 -0
  248. package/codeyam-cli/src/utils/testResultCache.test.js +230 -0
  249. package/codeyam-cli/src/utils/testResultCache.test.js.map +1 -0
  250. package/codeyam-cli/src/utils/testRunner.js +193 -1
  251. package/codeyam-cli/src/utils/testRunner.js.map +1 -1
  252. package/codeyam-cli/src/utils/webappDetection.js +4 -2
  253. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  254. package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js +99 -0
  255. package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js.map +1 -0
  256. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +153 -0
  257. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js.map +1 -0
  258. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +68 -1
  259. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -1
  260. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +454 -4
  261. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -1
  262. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +315 -0
  263. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -0
  264. package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js +135 -0
  265. package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js.map +1 -0
  266. package/codeyam-cli/src/webserver/app/lib/clientErrors.js +22 -1
  267. package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -1
  268. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  269. package/codeyam-cli/src/webserver/app/lib/git.js +3 -2
  270. package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -1
  271. package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js +34 -0
  272. package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js.map +1 -0
  273. package/codeyam-cli/src/webserver/app/types/editor.js +8 -0
  274. package/codeyam-cli/src/webserver/app/types/editor.js.map +1 -0
  275. package/codeyam-cli/src/webserver/backgroundServer.js +60 -61
  276. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  277. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-DTBZZfSk.js +1 -0
  278. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-BcgbViKV.js → EntityItem-BxclONWq.js} +3 -3
  279. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-CQgyEGV-.js +1 -0
  280. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-CQIG2qda.js → EntityTypeIcon-BsnEOJZ_.js} +1 -1
  281. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ByaELMbv.js +1 -0
  282. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-6WjVfhxX.js +25 -0
  283. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-ChX-Hp7W.js +3 -0
  284. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-BU_OAEMP.js → LoadingDots-By5zI316.js} +1 -1
  285. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-ceAyBX-H.js → LogViewer-C-9zQdXg.js} +3 -3
  286. package/codeyam-cli/src/webserver/build/client/assets/MiniClaudeChat-Bs2_Oua4.js +36 -0
  287. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-BzHcG7SE.js → ReportIssueModal-DQsceHVv.js} +2 -2
  288. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DThcm_9M.js +1 -0
  289. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-0DY_NKil.js → ScenarioViewer-Cl4oOA3A.js} +3 -3
  290. package/codeyam-cli/src/webserver/build/client/assets/Spinner-CIil5-gb.js +34 -0
  291. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CK7-NaPZ.js +1 -0
  292. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-BqkA9zyZ.js +1 -0
  293. package/codeyam-cli/src/webserver/build/client/assets/{_index-DLxKhri3.js → _index-DnOgyseQ.js} +2 -2
  294. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BcY3q6nt.js → activity.(_tab)-DqM9hbNE.js} +3 -3
  295. package/codeyam-cli/src/webserver/build/client/assets/{addon-web-links-Duc5hnl7.js → addon-web-links-C58dYPwR.js} +1 -1
  296. package/codeyam-cli/src/webserver/build/client/assets/{agent-transcripts-Bni3iiUj.js → agent-transcripts-B8NCeOrm.js} +3 -3
  297. package/codeyam-cli/src/webserver/build/client/assets/api.editor-database-verify-l0sNRNKZ.js +1 -0
  298. package/codeyam-cli/src/webserver/build/client/assets/api.editor-github-verify-l0sNRNKZ.js +1 -0
  299. package/codeyam-cli/src/webserver/build/client/assets/api.editor-handoff-l0sNRNKZ.js +1 -0
  300. package/codeyam-cli/src/webserver/build/client/assets/api.editor-hosting-verify-l0sNRNKZ.js +1 -0
  301. package/codeyam-cli/src/webserver/build/client/assets/api.editor-recapture-stale-l0sNRNKZ.js +1 -0
  302. package/codeyam-cli/src/webserver/build/client/assets/api.editor-rename-scenario-l0sNRNKZ.js +1 -0
  303. package/codeyam-cli/src/webserver/build/client/assets/api.editor-roadmap-l0sNRNKZ.js +1 -0
  304. package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-scenario-data-l0sNRNKZ.js +1 -0
  305. package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-seed-state-l0sNRNKZ.js +1 -0
  306. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-prompt-l0sNRNKZ.js +1 -0
  307. package/codeyam-cli/src/webserver/build/client/assets/api.editor-schema-l0sNRNKZ.js +1 -0
  308. package/codeyam-cli/src/webserver/build/client/assets/api.editor-session-l0sNRNKZ.js +1 -0
  309. package/codeyam-cli/src/webserver/build/client/assets/api.editor-verify-routes-l0sNRNKZ.js +1 -0
  310. package/codeyam-cli/src/webserver/build/client/assets/api.interactive-switch-scenario-l0sNRNKZ.js +1 -0
  311. package/codeyam-cli/src/webserver/build/client/assets/{book-open-BYOypzCa.js → book-open-BFSIqZgO.js} +1 -1
  312. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-C_Pmso5S.js → chevron-down-B9fDzFVh.js} +1 -1
  313. package/codeyam-cli/src/webserver/build/client/assets/chunk-UVKPFVEO-Bmq2apuh.js +43 -0
  314. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BVMi9VA5.js → circle-check-DLPObLUx.js} +1 -1
  315. package/codeyam-cli/src/webserver/build/client/assets/{copy-n2FB0_Sw.js → copy-DXEmO0TD.js} +1 -1
  316. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-CC6AbExI.js → createLucideIcon-BwyFiRot.js} +1 -1
  317. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-Coe5NhbS.js +1 -0
  318. package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-CCKUIm0S.svg → cy-logo-cli-DoA97ML3.svg} +2 -2
  319. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-iRhRIFlp.js +1 -0
  320. package/codeyam-cli/src/webserver/build/client/assets/editor._tab-BZPBzV73.js +1 -0
  321. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-DhtVC4aI.js +161 -0
  322. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-C6fEYHrh.js +41 -0
  323. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BF4oLwaE.js → entity._sha._-pc-vc6wO.js} +13 -12
  324. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-C8AyYgYT.js +6 -0
  325. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DziaVQX1.js +6 -0
  326. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-BTcpgIpC.js +6 -0
  327. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-BMvVHNXU.js → entity._sha_.edit._scenarioId-D_O_ajfZ.js} +2 -2
  328. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-DTvKq3TY.js → entry.client-j1Vi0bco.js} +6 -6
  329. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-Daa96Fr1.js +1 -0
  330. package/codeyam-cli/src/webserver/build/client/assets/files-kuny2Q_s.js +1 -0
  331. package/codeyam-cli/src/webserver/build/client/assets/git-DgCZPMie.js +1 -0
  332. package/codeyam-cli/src/webserver/build/client/assets/globals-L-aUIeux.css +1 -0
  333. package/codeyam-cli/src/webserver/build/client/assets/{index-BcvgDzbZ.js → index-BliGSSpl.js} +1 -1
  334. package/codeyam-cli/src/webserver/build/client/assets/{index-yHOVb4rc.js → index-SqjQKTdH.js} +1 -1
  335. package/codeyam-cli/src/webserver/build/client/assets/{index-10oVnAAH.js → index-vyrZD2g4.js} +1 -1
  336. package/codeyam-cli/src/webserver/build/client/assets/jsx-runtime-D_zvdyIk.js +9 -0
  337. package/codeyam-cli/src/webserver/build/client/assets/labs-c3yLxSEp.js +1 -0
  338. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-DaAZ_H2w.js → loader-circle-D-q28GLF.js} +1 -1
  339. package/codeyam-cli/src/webserver/build/client/assets/manifest-b0d69c06.js +1 -0
  340. package/codeyam-cli/src/webserver/build/client/assets/{memory-9gnxSZlb.js → memory-CEWIUC4t.js} +2 -2
  341. package/codeyam-cli/src/webserver/build/client/assets/{pause-f5-1lKBt.js → pause-BP6fitdh.js} +1 -1
  342. package/codeyam-cli/src/webserver/build/client/assets/root-CLedrjXQ.js +80 -0
  343. package/codeyam-cli/src/webserver/build/client/assets/{search-Di64LWVb.js → search-BooqacKS.js} +1 -1
  344. package/codeyam-cli/src/webserver/build/client/assets/settings-BM0nbryO.js +1 -0
  345. package/codeyam-cli/src/webserver/build/client/assets/simulations-ovy6FjRY.js +1 -0
  346. package/codeyam-cli/src/webserver/build/client/assets/{terminal-Br7MOqts.js → terminal-DHemCJIs.js} +1 -1
  347. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BLdiCuG-.js → triangle-alert-D87ekDl8.js} +1 -1
  348. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-Dk0Tciqg.js +1 -0
  349. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C8QvIe05.js +2 -0
  350. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-jkCytuYz.js +1 -0
  351. package/codeyam-cli/src/webserver/build/client/assets/useToast-BgqkixU9.js +1 -0
  352. package/codeyam-cli/src/webserver/build/client/sound-test.html +98 -0
  353. package/codeyam-cli/src/webserver/build/server/assets/analysisRunner-DPUEhrWo.js +16 -0
  354. package/codeyam-cli/src/webserver/build/server/assets/{index-BWoRb5RY.js → index-oF2amaGI.js} +1 -1
  355. package/codeyam-cli/src/webserver/build/server/assets/init-C42BvUGp.js +14 -0
  356. package/codeyam-cli/src/webserver/build/server/assets/progress-CHTtrxFG.js +1 -0
  357. package/codeyam-cli/src/webserver/build/server/assets/server-build-DiCdDL5d.js +853 -0
  358. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  359. package/codeyam-cli/src/webserver/build-info.json +5 -5
  360. package/codeyam-cli/src/webserver/editorProxy.js +443 -35
  361. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
  362. package/codeyam-cli/src/webserver/idleDetector.js +130 -0
  363. package/codeyam-cli/src/webserver/idleDetector.js.map +1 -0
  364. package/codeyam-cli/src/webserver/mockStateEvents.js +28 -0
  365. package/codeyam-cli/src/webserver/mockStateEvents.js.map +1 -0
  366. package/codeyam-cli/src/webserver/public/sound-test.html +98 -0
  367. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +53 -0
  368. package/codeyam-cli/src/webserver/server.js +192 -4
  369. package/codeyam-cli/src/webserver/server.js.map +1 -1
  370. package/codeyam-cli/src/webserver/terminalServer.js +369 -52
  371. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
  372. package/codeyam-cli/templates/__tests__/editor-step-hook.prompt-capture.test.ts +118 -0
  373. package/codeyam-cli/templates/codeyam-editor-claude.md +3 -1
  374. package/codeyam-cli/templates/codeyam-editor-codex.md +61 -0
  375. package/codeyam-cli/templates/codeyam-editor-gemini.md +59 -0
  376. package/codeyam-cli/templates/codeyam-editor-reference.md +216 -0
  377. package/codeyam-cli/templates/design-systems/clean-dashboard-design-system.md +255 -0
  378. package/codeyam-cli/templates/design-systems/editorial-design-system.md +267 -0
  379. package/codeyam-cli/templates/design-systems/mono-brutalist-design-system.md +256 -0
  380. package/codeyam-cli/templates/design-systems/neo-brutalist-design-system.md +294 -0
  381. package/codeyam-cli/templates/editor-step-hook.py +193 -56
  382. package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +204 -5
  383. package/codeyam-cli/templates/expo-react-native/__tests__/.gitkeep +0 -0
  384. package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +6 -3
  385. package/codeyam-cli/templates/expo-react-native/app/index.tsx +36 -0
  386. package/codeyam-cli/templates/expo-react-native/app.json +11 -0
  387. package/codeyam-cli/templates/expo-react-native/babel.config.js +1 -0
  388. package/codeyam-cli/templates/expo-react-native/gitignore +2 -0
  389. package/codeyam-cli/templates/expo-react-native/global.css +7 -0
  390. package/codeyam-cli/templates/expo-react-native/lib/theme.ts +73 -0
  391. package/codeyam-cli/templates/expo-react-native/package.json +32 -16
  392. package/codeyam-cli/templates/expo-react-native/patches/expo-modules-autolinking+3.0.24.patch +29 -0
  393. package/codeyam-cli/templates/isolation-route/expo-router.tsx.template +54 -0
  394. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +1 -0
  395. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +1 -1
  396. package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +88 -40
  397. package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +1 -1
  398. package/codeyam-cli/templates/seed-adapters/supabase.ts +475 -0
  399. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +106 -10
  400. package/package.json +2 -1
  401. package/packages/ai/src/lib/astScopes/methodSemantics.js +99 -0
  402. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  403. package/packages/ai/src/lib/astScopes/nodeToSource.js +16 -0
  404. package/packages/ai/src/lib/astScopes/nodeToSource.js.map +1 -1
  405. package/packages/ai/src/lib/astScopes/paths.js +12 -3
  406. package/packages/ai/src/lib/astScopes/paths.js.map +1 -1
  407. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +27 -10
  408. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  409. package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js +9 -2
  410. package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js.map +1 -1
  411. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +14 -4
  412. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  413. package/packages/analyze/index.js +1 -1
  414. package/packages/analyze/index.js.map +1 -1
  415. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +16 -2
  416. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  417. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +6 -26
  418. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  419. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +3 -2
  420. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  421. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +9 -7
  422. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
  423. package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js +14 -0
  424. package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js.map +1 -1
  425. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +44 -11
  426. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
  427. package/packages/analyze/src/lib/files/analyzeChange.js +1 -0
  428. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  429. package/packages/analyze/src/lib/files/analyzeInitial.js +1 -0
  430. package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
  431. package/packages/analyze/src/lib/files/analyzeNextRoute.js +5 -1
  432. package/packages/analyze/src/lib/files/analyzeNextRoute.js.map +1 -1
  433. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +120 -28
  434. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  435. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +1368 -1193
  436. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  437. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +79 -6
  438. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
  439. package/packages/database/src/lib/loadAnalysis.js +7 -1
  440. package/packages/database/src/lib/loadAnalysis.js.map +1 -1
  441. package/packages/database/src/lib/loadEntity.js +5 -5
  442. package/packages/database/src/lib/loadEntity.js.map +1 -1
  443. package/packages/utils/src/lib/fs/rsyncCopy.js +22 -1
  444. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  445. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-BPXZwM4t.js +0 -1
  446. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-g3saevPb.js +0 -1
  447. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +0 -1
  448. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-DYFW3lDD.js +0 -25
  449. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-DLeucoVX.js +0 -3
  450. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BED4B6sP.js +0 -1
  451. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +0 -34
  452. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-C8OKAR5x.js +0 -1
  453. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-oAf2Kqsf.js +0 -1
  454. package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-C4pqxYJB.js +0 -51
  455. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +0 -1
  456. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-Csi0_PMl.js +0 -1
  457. package/codeyam-cli/src/webserver/build/client/assets/editor-BBAGP_mE.js +0 -10
  458. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-BLQMSKZa.js +0 -41
  459. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-C7YX6r3H.js +0 -6
  460. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CF164ouH.js +0 -6
  461. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +0 -6
  462. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-cPo8LiG3.js +0 -1
  463. package/codeyam-cli/src/webserver/build/client/assets/files-BZrlFE1F.js +0 -1
  464. package/codeyam-cli/src/webserver/build/client/assets/git-DdZcvjGh.js +0 -1
  465. package/codeyam-cli/src/webserver/build/client/assets/globals-COUSHTyZ.css +0 -1
  466. package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +0 -1
  467. package/codeyam-cli/src/webserver/build/client/assets/manifest-9c70d1f3.js +0 -1
  468. package/codeyam-cli/src/webserver/build/client/assets/root-CHOdrM6Y.js +0 -67
  469. package/codeyam-cli/src/webserver/build/client/assets/settings-0OrEMU6J.js +0 -1
  470. package/codeyam-cli/src/webserver/build/client/assets/simulations-DWT-CvLy.js +0 -1
  471. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-CrAK28Bc.js +0 -1
  472. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +0 -2
  473. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-O-jkvSPx.js +0 -1
  474. package/codeyam-cli/src/webserver/build/client/assets/useToast-9FIWuYfK.js +0 -1
  475. package/codeyam-cli/src/webserver/build/server/assets/init-DbChSUQP.js +0 -10
  476. package/codeyam-cli/src/webserver/build/server/assets/server-build-BtbLQkKd.js +0 -433
  477. package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +0 -33
  478. package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +0 -12
  479. package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +0 -12
@@ -0,0 +1,810 @@
1
+ /**
2
+ * Generates a self-contained HTML page that showcases standard UI components
3
+ * styled with CSS custom properties extracted from a design system markdown file.
4
+ */
5
+ import fs from 'fs';
6
+ import path from 'path';
7
+ /**
8
+ * Extract all CSS code blocks from the design system markdown,
9
+ * preserving their selectors (or using :root as default).
10
+ */
11
+ function extractCssFromMarkdown(markdown) {
12
+ const blocks = [];
13
+ const regex = /```css\n([\s\S]*?)```/g;
14
+ let match;
15
+ while ((match = regex.exec(markdown)) !== null) {
16
+ const raw = match[1].trim();
17
+ // Check if the block has a selector wrapper like [data-theme='light'] { ... }
18
+ const selectorMatch = raw.match(/^([^\n{]+?)\s*\{([\s\S]*)\}\s*$/);
19
+ if (selectorMatch) {
20
+ blocks.push({
21
+ selector: selectorMatch[1].trim(),
22
+ content: selectorMatch[2].trim(),
23
+ });
24
+ }
25
+ else {
26
+ // No selector wrapper — treat as :root declarations
27
+ // Only include lines that look like CSS variable declarations or comments
28
+ const cssLines = raw
29
+ .split('\n')
30
+ .filter((line) => line.trim().startsWith('--') ||
31
+ line.trim().startsWith('/*') ||
32
+ line.trim().startsWith('*'))
33
+ .join('\n');
34
+ if (cssLines.trim()) {
35
+ blocks.push({ selector: ':root', content: cssLines });
36
+ }
37
+ }
38
+ }
39
+ return blocks;
40
+ }
41
+ /**
42
+ * Extract the font stack from the markdown Typography section.
43
+ */
44
+ function extractFontInfo(markdown) {
45
+ const fontMatch = markdown.match(/\*\*Font stack:\*\*\s*`([^`]+)`(?:[^`]*`([^`]+)`)?(?:[^`]*`([^`]+)`)?/);
46
+ if (!fontMatch)
47
+ return { fontFamilies: [], googleFontsUrl: null };
48
+ const allFamilies = [];
49
+ for (let i = 1; i <= 3; i++) {
50
+ if (fontMatch[i]) {
51
+ const name = fontMatch[i].split(',')[0].trim().replace(/'/g, '');
52
+ if (name && !isSystemFont(name)) {
53
+ allFamilies.push(name);
54
+ }
55
+ }
56
+ }
57
+ // Build Google Fonts URL for non-system fonts
58
+ const googleFonts = allFamilies.filter((f) => !isSystemFont(f));
59
+ const googleFontsUrl = googleFonts.length > 0
60
+ ? `https://fonts.googleapis.com/css2?${googleFonts.map((f) => `family=${f.replace(/ /g, '+')}:ital,wght@0,300;0,400;0,500;0,600;0,700;0,900;1,400`).join('&')}&display=swap`
61
+ : null;
62
+ return { fontFamilies: allFamilies, googleFontsUrl };
63
+ }
64
+ function isSystemFont(name) {
65
+ const systemFonts = [
66
+ 'sans-serif',
67
+ 'serif',
68
+ 'monospace',
69
+ 'system-ui',
70
+ '-apple-system',
71
+ 'Georgia',
72
+ 'Courier',
73
+ 'Courier New',
74
+ 'Arial',
75
+ 'Helvetica',
76
+ ];
77
+ return systemFonts.includes(name);
78
+ }
79
+ /**
80
+ * Check if the design system has dark mode support.
81
+ */
82
+ function hasDarkMode(markdown) {
83
+ return (markdown.includes("[data-theme='dark']") ||
84
+ markdown.includes('[data-theme="dark"]'));
85
+ }
86
+ /**
87
+ * Extract the design system name from the markdown.
88
+ */
89
+ function extractName(markdown) {
90
+ const match = markdown.match(/^# (.+)$/m);
91
+ return match ? match[1].trim() : 'Design System';
92
+ }
93
+ // ── HTML Generation ────────────────────────────────────────────────────
94
+ /**
95
+ * Build the complete showcase HTML page from a design system markdown file.
96
+ */
97
+ export function buildShowcaseHtml(markdown) {
98
+ const cssBlocks = extractCssFromMarkdown(markdown);
99
+ const { googleFontsUrl } = extractFontInfo(markdown);
100
+ const supportsDarkMode = hasDarkMode(markdown);
101
+ const name = extractName(markdown);
102
+ // Build CSS variable declarations
103
+ const cssVars = cssBlocks
104
+ .map((block) => `${block.selector} {\n ${block.content}\n}`)
105
+ .join('\n\n');
106
+ return `<!DOCTYPE html>
107
+ <html data-theme="light" lang="en">
108
+ <head>
109
+ <meta charset="UTF-8">
110
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
111
+ <title>${name} — Component Showcase</title>
112
+ ${googleFontsUrl ? `<link rel="stylesheet" href="${googleFontsUrl}">` : ''}
113
+ <style>
114
+ /* Design System Tokens */
115
+ ${cssVars}
116
+
117
+ /* Showcase Base Styles */
118
+ * { margin: 0; padding: 0; box-sizing: border-box; }
119
+
120
+ body {
121
+ background: var(--bg-base, #f7f8fa);
122
+ color: var(--text-primary, #1a1b25);
123
+ font-family: var(--font-body, system-ui, -apple-system, sans-serif);
124
+ font-size: 14px;
125
+ line-height: 1.6;
126
+ padding: 32px;
127
+ transition: background 0.2s, color 0.2s;
128
+ }
129
+
130
+ .showcase-header {
131
+ display: flex;
132
+ align-items: center;
133
+ justify-content: space-between;
134
+ margin-bottom: 40px;
135
+ padding-bottom: 20px;
136
+ border-bottom: 1px solid var(--border, #e8e9ed);
137
+ }
138
+
139
+ .showcase-title {
140
+ font-size: 24px;
141
+ font-weight: 600;
142
+ letter-spacing: -0.02em;
143
+ }
144
+
145
+ .theme-toggle {
146
+ display: flex;
147
+ gap: 4px;
148
+ background: var(--bg-muted, #f2f3f7);
149
+ border-radius: 8px;
150
+ padding: 3px;
151
+ border: 1px solid var(--border, #e8e9ed);
152
+ }
153
+
154
+ .theme-toggle button {
155
+ padding: 6px 14px;
156
+ border: none;
157
+ background: transparent;
158
+ border-radius: 6px;
159
+ font-size: 12px;
160
+ font-weight: 500;
161
+ cursor: pointer;
162
+ color: var(--text-secondary, #6b7280);
163
+ transition: all 0.15s ease;
164
+ }
165
+
166
+ .theme-toggle button.active {
167
+ background: var(--bg-surface, #ffffff);
168
+ color: var(--text-primary, #1a1b25);
169
+ box-shadow: 0 1px 3px rgba(0,0,0,0.08);
170
+ }
171
+
172
+ .showcase-section {
173
+ margin-bottom: 48px;
174
+ }
175
+
176
+ .section-label {
177
+ font-size: 10px;
178
+ font-weight: 600;
179
+ text-transform: uppercase;
180
+ letter-spacing: 0.12em;
181
+ color: var(--text-muted, var(--text-tertiary, #9ca3af));
182
+ margin-bottom: 16px;
183
+ }
184
+
185
+ /* Color Palette */
186
+ .color-grid {
187
+ display: grid;
188
+ grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
189
+ gap: 12px;
190
+ }
191
+
192
+ .color-swatch {
193
+ display: flex;
194
+ flex-direction: column;
195
+ gap: 6px;
196
+ }
197
+
198
+ .color-swatch .swatch {
199
+ width: 100%;
200
+ height: 48px;
201
+ border-radius: var(--radius-md, 8px);
202
+ border: 1px solid var(--border, #e8e9ed);
203
+ }
204
+
205
+ .color-swatch .swatch-name {
206
+ font-size: 10px;
207
+ font-family: monospace;
208
+ color: var(--text-secondary, #6b7280);
209
+ word-break: break-all;
210
+ }
211
+
212
+ .color-swatch .swatch-value {
213
+ font-size: 10px;
214
+ font-family: monospace;
215
+ color: var(--text-muted, var(--text-tertiary, #9ca3af));
216
+ }
217
+
218
+ /* Typography */
219
+ .type-scale {
220
+ display: flex;
221
+ flex-direction: column;
222
+ gap: 16px;
223
+ }
224
+
225
+ .type-sample {
226
+ padding: 12px 0;
227
+ border-bottom: 1px solid var(--border, #e8e9ed);
228
+ }
229
+
230
+ .type-sample .sample-text {
231
+ margin-bottom: 4px;
232
+ }
233
+
234
+ .type-sample .sample-meta {
235
+ font-size: 11px;
236
+ font-family: monospace;
237
+ color: var(--text-muted, var(--text-tertiary, #9ca3af));
238
+ }
239
+
240
+ /* Cards */
241
+ .card-grid {
242
+ display: grid;
243
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
244
+ gap: 16px;
245
+ }
246
+
247
+ .showcase-card {
248
+ background: var(--bg-surface, #ffffff);
249
+ border: 1px solid var(--border, #e8e9ed);
250
+ border-radius: var(--radius-lg, 12px);
251
+ padding: 20px 24px;
252
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0,0,0,0.06));
253
+ }
254
+
255
+ .showcase-card h3 {
256
+ font-size: 18px;
257
+ font-weight: 600;
258
+ margin-bottom: 8px;
259
+ }
260
+
261
+ .showcase-card p {
262
+ font-size: 14px;
263
+ color: var(--text-secondary, #6b7280);
264
+ line-height: 1.5;
265
+ }
266
+
267
+ /* Value Cards */
268
+ .value-card {
269
+ background: var(--bg-surface, #ffffff);
270
+ border: 1px solid var(--border, #e8e9ed);
271
+ border-radius: var(--radius-lg, 12px);
272
+ padding: 20px 24px;
273
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0,0,0,0.06));
274
+ }
275
+
276
+ .value-card .value-label {
277
+ font-size: 12px;
278
+ font-weight: 500;
279
+ color: var(--text-secondary, #6b7280);
280
+ text-transform: uppercase;
281
+ letter-spacing: 0.06em;
282
+ margin-bottom: 8px;
283
+ }
284
+
285
+ .value-card .value-number {
286
+ font-size: 36px;
287
+ font-weight: 600;
288
+ letter-spacing: -0.02em;
289
+ line-height: 1;
290
+ margin-bottom: 8px;
291
+ }
292
+
293
+ .value-card .value-trend {
294
+ font-size: 13px;
295
+ font-weight: 500;
296
+ }
297
+
298
+ .value-card .value-trend.positive {
299
+ color: var(--green-a, var(--sage, var(--teal, var(--accent, #34d399))));
300
+ }
301
+
302
+ .value-card .value-trend.negative {
303
+ color: var(--red, var(--burgundy, var(--danger-text, #f87171)));
304
+ }
305
+
306
+ /* Buttons */
307
+ .button-row {
308
+ display: flex;
309
+ gap: 12px;
310
+ flex-wrap: wrap;
311
+ align-items: center;
312
+ }
313
+
314
+ .btn {
315
+ padding: 8px 16px;
316
+ border-radius: var(--radius-md, 8px);
317
+ font-weight: 500;
318
+ font-size: 14px;
319
+ border: none;
320
+ cursor: pointer;
321
+ transition: all 0.15s ease;
322
+ text-decoration: none;
323
+ display: inline-flex;
324
+ align-items: center;
325
+ gap: 6px;
326
+ }
327
+
328
+ .btn-primary {
329
+ background: var(--text-primary, #1a1b25);
330
+ color: var(--bg-base, #f7f8fa);
331
+ }
332
+
333
+ .btn-secondary {
334
+ background: var(--bg-muted, #f2f3f7);
335
+ color: var(--text-primary, #1a1b25);
336
+ }
337
+
338
+ .btn-outline {
339
+ background: transparent;
340
+ color: var(--text-primary, #1a1b25);
341
+ border: 1px solid var(--border-strong, var(--border, #d1d3db));
342
+ }
343
+
344
+ .btn-ghost {
345
+ background: transparent;
346
+ color: var(--text-secondary, #6b7280);
347
+ }
348
+
349
+ .btn-sm { padding: 6px 12px; font-size: 12px; }
350
+ .btn-lg { padding: 12px 24px; font-size: 16px; }
351
+
352
+ /* Badges */
353
+ .badge-row {
354
+ display: flex;
355
+ gap: 8px;
356
+ flex-wrap: wrap;
357
+ }
358
+
359
+ .badge {
360
+ padding: 3px 10px;
361
+ border-radius: var(--radius-sm, 6px);
362
+ font-size: 12px;
363
+ font-weight: 500;
364
+ }
365
+
366
+ .badge-default {
367
+ background: var(--bg-muted, #f2f3f7);
368
+ color: var(--text-secondary, #6b7280);
369
+ }
370
+
371
+ .badge-success {
372
+ background: var(--success-bg, var(--green-b, #d1fae5));
373
+ color: var(--success-text, #065f46);
374
+ }
375
+
376
+ .badge-danger {
377
+ background: var(--danger-bg, #fee2e2);
378
+ color: var(--danger-text, #991b1b);
379
+ }
380
+
381
+ .badge-warning {
382
+ background: var(--warning-bg, #fef9c3);
383
+ color: var(--warning-text, #854d0e);
384
+ }
385
+
386
+ .badge-pill {
387
+ border-radius: 999px;
388
+ }
389
+
390
+ /* Inputs */
391
+ .input-group {
392
+ display: flex;
393
+ flex-direction: column;
394
+ gap: 16px;
395
+ max-width: 400px;
396
+ }
397
+
398
+ .input-field {
399
+ display: flex;
400
+ flex-direction: column;
401
+ gap: 6px;
402
+ }
403
+
404
+ .input-field label {
405
+ font-size: 13px;
406
+ font-weight: 500;
407
+ color: var(--text-secondary, #6b7280);
408
+ }
409
+
410
+ .input-field input,
411
+ .input-field textarea {
412
+ padding: 10px 14px;
413
+ border: 1px solid var(--border, #e8e9ed);
414
+ border-radius: var(--radius-md, 8px);
415
+ font-size: 14px;
416
+ background: var(--bg-surface, #ffffff);
417
+ color: var(--text-primary, #1a1b25);
418
+ outline: none;
419
+ transition: border-color 0.15s ease;
420
+ }
421
+
422
+ .input-field input:focus,
423
+ .input-field textarea:focus {
424
+ border-color: var(--border-strong, var(--border, #d1d3db));
425
+ }
426
+
427
+ .input-field input::placeholder {
428
+ color: var(--text-muted, var(--text-tertiary, #9ca3af));
429
+ }
430
+
431
+ /* Table */
432
+ .showcase-table {
433
+ width: 100%;
434
+ border-collapse: collapse;
435
+ background: var(--bg-surface, #ffffff);
436
+ border: 1px solid var(--border, #e8e9ed);
437
+ border-radius: var(--radius-lg, 12px);
438
+ overflow: hidden;
439
+ }
440
+
441
+ .showcase-table th {
442
+ text-align: left;
443
+ padding: 12px 16px;
444
+ font-size: 12px;
445
+ font-weight: 600;
446
+ text-transform: uppercase;
447
+ letter-spacing: 0.06em;
448
+ color: var(--text-secondary, #6b7280);
449
+ background: var(--bg-muted, #f2f3f7);
450
+ border-bottom: 1px solid var(--border, #e8e9ed);
451
+ }
452
+
453
+ .showcase-table td {
454
+ padding: 12px 16px;
455
+ font-size: 14px;
456
+ border-bottom: 1px solid var(--border, #e8e9ed);
457
+ color: var(--text-secondary, #6b7280);
458
+ }
459
+
460
+ .showcase-table tr:last-child td {
461
+ border-bottom: none;
462
+ }
463
+
464
+ .showcase-table td:first-child {
465
+ color: var(--text-primary, #1a1b25);
466
+ font-weight: 500;
467
+ }
468
+
469
+ /* Header / Nav Bar */
470
+ .showcase-navbar {
471
+ background: var(--bg-surface, #ffffff);
472
+ border: 1px solid var(--border, #e8e9ed);
473
+ border-radius: var(--radius-lg, 12px);
474
+ padding: 12px 20px;
475
+ display: flex;
476
+ align-items: center;
477
+ justify-content: space-between;
478
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0,0,0,0.06));
479
+ }
480
+
481
+ .navbar-brand {
482
+ font-size: 16px;
483
+ font-weight: 700;
484
+ display: flex;
485
+ align-items: center;
486
+ gap: 8px;
487
+ }
488
+
489
+ .navbar-brand .brand-dot {
490
+ width: 10px;
491
+ height: 10px;
492
+ border-radius: 50%;
493
+ background: var(--green-a, var(--accent, var(--pink, var(--burgundy, #34d399))));
494
+ }
495
+
496
+ .navbar-links {
497
+ display: flex;
498
+ gap: 4px;
499
+ }
500
+
501
+ .navbar-links a {
502
+ padding: 6px 14px;
503
+ border-radius: var(--radius-md, 8px);
504
+ font-size: 13px;
505
+ font-weight: 500;
506
+ color: var(--text-secondary, #6b7280);
507
+ text-decoration: none;
508
+ transition: all 0.15s ease;
509
+ }
510
+
511
+ .navbar-links a.active {
512
+ background: var(--bg-active, var(--bg-muted, #eef2ff));
513
+ color: var(--text-primary, #1a1b25);
514
+ }
515
+
516
+ /* Progress Bar */
517
+ .progress-track {
518
+ height: 8px;
519
+ background: var(--bg-muted, #f2f3f7);
520
+ border-radius: 999px;
521
+ overflow: hidden;
522
+ max-width: 300px;
523
+ }
524
+
525
+ .progress-fill {
526
+ height: 100%;
527
+ border-radius: 999px;
528
+ background: var(--green-a, var(--accent, var(--pink, #34d399)));
529
+ transition: width 0.6s ease;
530
+ }
531
+ </style>
532
+ </head>
533
+ <body>
534
+ <div class="showcase-header">
535
+ <div class="showcase-title">${name}</div>
536
+ ${supportsDarkMode
537
+ ? `<div class="theme-toggle">
538
+ <button class="active" onclick="setTheme('light')">Light</button>
539
+ <button onclick="setTheme('dark')">Dark</button>
540
+ </div>`
541
+ : ''}
542
+ </div>
543
+
544
+ <!-- Navigation Bar -->
545
+ <div class="showcase-section">
546
+ <div class="section-label">Navigation</div>
547
+ <div class="showcase-navbar">
548
+ <div class="navbar-brand">
549
+ <span class="brand-dot"></span>
550
+ Acme App
551
+ </div>
552
+ <div class="navbar-links">
553
+ <a href="#" class="active">Dashboard</a>
554
+ <a href="#">Projects</a>
555
+ <a href="#">Settings</a>
556
+ </div>
557
+ </div>
558
+ </div>
559
+
560
+ <!-- Value Cards -->
561
+ <div class="showcase-section">
562
+ <div class="section-label">Value Cards</div>
563
+ <div class="card-grid">
564
+ <div class="value-card">
565
+ <div class="value-label">Total Revenue</div>
566
+ <div class="value-number">$48,290</div>
567
+ <div class="value-trend positive">&#8599; +12.5% from last month</div>
568
+ </div>
569
+ <div class="value-card">
570
+ <div class="value-label">Active Users</div>
571
+ <div class="value-number">2,847</div>
572
+ <div class="value-trend positive">&#8599; +8.2% from last week</div>
573
+ </div>
574
+ <div class="value-card">
575
+ <div class="value-label">Bounce Rate</div>
576
+ <div class="value-number">24.3%</div>
577
+ <div class="value-trend negative">&#8600; -3.1% from yesterday</div>
578
+ </div>
579
+ </div>
580
+ </div>
581
+
582
+ <!-- Cards -->
583
+ <div class="showcase-section">
584
+ <div class="section-label">Cards</div>
585
+ <div class="card-grid">
586
+ <div class="showcase-card">
587
+ <h3>Project Alpha</h3>
588
+ <p>A dashboard for monitoring real-time analytics and performance metrics across distributed systems.</p>
589
+ </div>
590
+ <div class="showcase-card">
591
+ <h3>Design Tokens</h3>
592
+ <p>Centralized design token management with automatic code generation for multiple platforms.</p>
593
+ </div>
594
+ <div class="showcase-card">
595
+ <h3>API Gateway</h3>
596
+ <p>Unified API gateway with rate limiting, authentication, and request transformation.</p>
597
+ </div>
598
+ </div>
599
+ </div>
600
+
601
+ <!-- Buttons -->
602
+ <div class="showcase-section">
603
+ <div class="section-label">Buttons</div>
604
+ <div class="button-row" style="margin-bottom: 12px;">
605
+ <button class="btn btn-primary">Primary</button>
606
+ <button class="btn btn-secondary">Secondary</button>
607
+ <button class="btn btn-outline">Outline</button>
608
+ <button class="btn btn-ghost">Ghost</button>
609
+ </div>
610
+ <div class="button-row">
611
+ <button class="btn btn-primary btn-sm">Small</button>
612
+ <button class="btn btn-primary">Medium</button>
613
+ <button class="btn btn-primary btn-lg">Large</button>
614
+ </div>
615
+ </div>
616
+
617
+ <!-- Badges -->
618
+ <div class="showcase-section">
619
+ <div class="section-label">Badges</div>
620
+ <div class="badge-row" style="margin-bottom: 12px;">
621
+ <span class="badge badge-default">Default</span>
622
+ <span class="badge badge-success">Success</span>
623
+ <span class="badge badge-danger">Error</span>
624
+ <span class="badge badge-warning">Warning</span>
625
+ </div>
626
+ <div class="badge-row">
627
+ <span class="badge badge-default badge-pill">Default</span>
628
+ <span class="badge badge-success badge-pill">Active</span>
629
+ <span class="badge badge-danger badge-pill">Critical</span>
630
+ <span class="badge badge-warning badge-pill">Pending</span>
631
+ </div>
632
+ </div>
633
+
634
+ <!-- Form Inputs -->
635
+ <div class="showcase-section">
636
+ <div class="section-label">Form Inputs</div>
637
+ <div class="input-group">
638
+ <div class="input-field">
639
+ <label>Project Name</label>
640
+ <input type="text" placeholder="Enter project name..." value="Acme Dashboard">
641
+ </div>
642
+ <div class="input-field">
643
+ <label>Description</label>
644
+ <textarea rows="3" placeholder="Describe your project...">A modern analytics dashboard for tracking key metrics and user engagement.</textarea>
645
+ </div>
646
+ </div>
647
+ </div>
648
+
649
+ <!-- Table -->
650
+ <div class="showcase-section">
651
+ <div class="section-label">Data Table</div>
652
+ <table class="showcase-table">
653
+ <thead>
654
+ <tr>
655
+ <th>Name</th>
656
+ <th>Status</th>
657
+ <th>Role</th>
658
+ <th>Last Active</th>
659
+ </tr>
660
+ </thead>
661
+ <tbody>
662
+ <tr>
663
+ <td>Alice Chen</td>
664
+ <td><span class="badge badge-success">Active</span></td>
665
+ <td>Engineer</td>
666
+ <td>2 min ago</td>
667
+ </tr>
668
+ <tr>
669
+ <td>Bob Martinez</td>
670
+ <td><span class="badge badge-warning">Away</span></td>
671
+ <td>Designer</td>
672
+ <td>1 hour ago</td>
673
+ </tr>
674
+ <tr>
675
+ <td>Carol Davis</td>
676
+ <td><span class="badge badge-default">Offline</span></td>
677
+ <td>Product</td>
678
+ <td>Yesterday</td>
679
+ </tr>
680
+ <tr>
681
+ <td>Dave Kim</td>
682
+ <td><span class="badge badge-success">Active</span></td>
683
+ <td>Engineer</td>
684
+ <td>Just now</td>
685
+ </tr>
686
+ </tbody>
687
+ </table>
688
+ </div>
689
+
690
+ <!-- Typography Scale -->
691
+ <div class="showcase-section">
692
+ <div class="section-label">Typography</div>
693
+ <div class="type-scale">
694
+ <div class="type-sample">
695
+ <div class="sample-text" style="font-size: 36px; font-weight: 600; letter-spacing: -0.02em; line-height: 1.1;">Display Heading</div>
696
+ <div class="sample-meta">Display — 36px / 600</div>
697
+ </div>
698
+ <div class="type-sample">
699
+ <div class="sample-text" style="font-size: 24px; font-weight: 600;">Section Heading</div>
700
+ <div class="sample-meta">2XL — 24px / 600</div>
701
+ </div>
702
+ <div class="type-sample">
703
+ <div class="sample-text" style="font-size: 18px; font-weight: 600;">Card Title</div>
704
+ <div class="sample-meta">LG — 18px / 600</div>
705
+ </div>
706
+ <div class="type-sample">
707
+ <div class="sample-text" style="font-size: 14px; font-weight: 400;">Body text for paragraphs and general content. This demonstrates the default reading experience with adequate line height.</div>
708
+ <div class="sample-meta">SM — 14px / 400</div>
709
+ </div>
710
+ <div class="type-sample">
711
+ <div class="sample-text" style="font-size: 12px; font-weight: 400; color: var(--text-secondary, #6b7280);">Caption text, timestamps, and secondary information</div>
712
+ <div class="sample-meta">XS — 12px / 400</div>
713
+ </div>
714
+ </div>
715
+ </div>
716
+
717
+ <!-- Progress -->
718
+ <div class="showcase-section">
719
+ <div class="section-label">Progress</div>
720
+ <div style="display: flex; flex-direction: column; gap: 12px;">
721
+ <div>
722
+ <div style="font-size: 13px; margin-bottom: 6px; color: var(--text-secondary, #6b7280);">Complete — 100%</div>
723
+ <div class="progress-track"><div class="progress-fill" style="width: 100%"></div></div>
724
+ </div>
725
+ <div>
726
+ <div style="font-size: 13px; margin-bottom: 6px; color: var(--text-secondary, #6b7280);">In Progress — 65%</div>
727
+ <div class="progress-track"><div class="progress-fill" style="width: 65%"></div></div>
728
+ </div>
729
+ <div>
730
+ <div style="font-size: 13px; margin-bottom: 6px; color: var(--text-secondary, #6b7280);">Starting — 15%</div>
731
+ <div class="progress-track"><div class="progress-fill" style="width: 15%"></div></div>
732
+ </div>
733
+ </div>
734
+ </div>
735
+
736
+ <!-- Color Palette -->
737
+ <div class="showcase-section">
738
+ <div class="section-label">Color Palette</div>
739
+ <div class="color-grid" id="colorPalette"></div>
740
+ </div>
741
+
742
+ <script>
743
+ // Theme toggle
744
+ function setTheme(theme) {
745
+ document.documentElement.setAttribute('data-theme', theme);
746
+ document.querySelectorAll('.theme-toggle button').forEach(btn => {
747
+ btn.classList.toggle('active', btn.textContent.trim().toLowerCase() === theme);
748
+ });
749
+ // Re-render palette with resolved colors
750
+ renderColorPalette();
751
+ }
752
+
753
+ // Render color palette by reading computed CSS variable values
754
+ function renderColorPalette() {
755
+ const grid = document.getElementById('colorPalette');
756
+ if (!grid) return;
757
+ grid.innerHTML = '';
758
+
759
+ const style = getComputedStyle(document.documentElement);
760
+ const vars = [
761
+ 'bg-base', 'bg-surface', 'bg-muted', 'bg-overlay', 'bg-active', 'bg-inverse',
762
+ 'text-primary', 'text-secondary', 'text-muted', 'text-tertiary', 'text-disabled', 'text-faint',
763
+ 'border', 'border-strong', 'border-light', 'border-dashed',
764
+ ];
765
+
766
+ // Also grab accent and palette colors
767
+ const accentVars = [
768
+ 'green-a', 'green-b', 'red', 'purple-a', 'purple-b', 'blue-a', 'blue-b', 'yellow',
769
+ 'pink', 'pink-light', 'teal', 'teal-light', 'teal-dark', 'orange',
770
+ 'burgundy', 'burgundy-lt', 'sage', 'gold',
771
+ 'accent', 'accent-soft', 'accent-dark',
772
+ 'palette-1', 'palette-2', 'palette-3', 'palette-4', 'palette-5', 'palette-6',
773
+ ];
774
+
775
+ const allVars = [...vars, ...accentVars];
776
+
777
+ for (const v of allVars) {
778
+ const value = style.getPropertyValue('--' + v).trim();
779
+ if (!value || value === 'none') continue;
780
+ // Skip non-color values (shadows, etc.)
781
+ if (value.includes('px') && !value.startsWith('#') && !value.startsWith('rgb')) continue;
782
+
783
+ const swatch = document.createElement('div');
784
+ swatch.className = 'color-swatch';
785
+ swatch.innerHTML =
786
+ '<div class="swatch" style="background:' + value + '"></div>' +
787
+ '<div class="swatch-name">--' + v + '</div>' +
788
+ '<div class="swatch-value">' + value + '</div>';
789
+ grid.appendChild(swatch);
790
+ }
791
+ }
792
+
793
+ // Initial render
794
+ renderColorPalette();
795
+ </script>
796
+ </body>
797
+ </html>`;
798
+ }
799
+ /**
800
+ * Read the design system file and generate the showcase HTML.
801
+ * Returns null if the design system file doesn't exist.
802
+ */
803
+ export function generateShowcase(projectRoot) {
804
+ const dsPath = path.join(projectRoot, '.codeyam', 'design-system.md');
805
+ if (!fs.existsSync(dsPath))
806
+ return null;
807
+ const markdown = fs.readFileSync(dsPath, 'utf8');
808
+ return buildShowcaseHtml(markdown);
809
+ }
810
+ //# sourceMappingURL=designSystemShowcase.js.map