@codeyam/codeyam-cli 0.1.0-staging.09652b8 → 0.1.0-staging.28f73cf

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 (287) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +7 -6
  4. package/analyzer-template/packages/ai/index.ts +2 -0
  5. package/analyzer-template/packages/ai/package.json +2 -2
  6. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +24 -0
  7. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +14 -0
  8. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1402 -546
  9. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/FunctionCallManager.ts +138 -0
  10. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +1 -1
  11. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.ts +139 -0
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/DebugTracer.ts +224 -0
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/PathManager.ts +203 -0
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/README.md +294 -0
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.ts +161 -0
  16. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/VisitedTracker.ts +235 -0
  17. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +2 -0
  18. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/selectBestValue.ts +70 -0
  19. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/uniqueIdUtils.ts +113 -0
  20. package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +36 -0
  21. package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +32 -8
  22. package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +27 -6
  23. package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +42 -4
  24. package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +39 -0
  25. package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +18 -6
  26. package/analyzer-template/packages/analyze/src/lib/asts/nodes/index.ts +2 -1
  27. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +8 -10
  28. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +6 -1
  29. package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +8 -6
  30. package/analyzer-template/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.ts +5 -13
  31. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +34 -15
  32. package/analyzer-template/packages/analyze/src/lib/files/analyzeEntity.ts +17 -3
  33. package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +35 -16
  34. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +7 -1
  35. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +9 -1
  36. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +6 -1
  37. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +9 -1
  38. package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.d.ts +23 -0
  39. package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.d.ts.map +1 -0
  40. package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.js +30 -0
  41. package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.js.map +1 -0
  42. package/analyzer-template/packages/aws/package.json +5 -4
  43. package/analyzer-template/packages/aws/s3/index.ts +4 -0
  44. package/analyzer-template/packages/aws/src/lib/s3/getPresignedUrl.ts +62 -0
  45. package/analyzer-template/packages/generate/src/lib/scenarioComponent.ts +6 -3
  46. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponent.d.ts.map +1 -1
  47. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponent.js +5 -3
  48. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponent.js.map +1 -1
  49. package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.d.ts +2 -0
  50. package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.d.ts.map +1 -1
  51. package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.js +3 -0
  52. package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.js.map +1 -1
  53. package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tableRelations.d.ts +2 -0
  54. package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tableRelations.d.ts.map +1 -1
  55. package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.d.ts +37 -0
  56. package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -0
  57. package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.js +27 -0
  58. package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.js.map +1 -0
  59. package/analyzer-template/packages/github/dist/utils/index.d.ts +1 -0
  60. package/analyzer-template/packages/github/dist/utils/index.d.ts.map +1 -1
  61. package/analyzer-template/packages/github/dist/utils/index.js +1 -0
  62. package/analyzer-template/packages/github/dist/utils/index.js.map +1 -1
  63. package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.d.ts +25 -0
  64. package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.d.ts.map +1 -0
  65. package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.js +40 -0
  66. package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.js.map +1 -0
  67. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getRemixRoutePath.d.ts.map +1 -1
  68. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getRemixRoutePath.js +2 -1
  69. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getRemixRoutePath.js.map +1 -1
  70. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.d.ts.map +1 -1
  71. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js +1 -0
  72. package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js.map +1 -1
  73. package/analyzer-template/packages/supabase/src/lib/kysely/db.ts +6 -0
  74. package/analyzer-template/packages/supabase/src/lib/kysely/tableRelations.ts +3 -0
  75. package/analyzer-template/packages/supabase/src/lib/kysely/tables/debugReportsTable.ts +61 -0
  76. package/analyzer-template/packages/utils/dist/utils/index.d.ts +1 -0
  77. package/analyzer-template/packages/utils/dist/utils/index.d.ts.map +1 -1
  78. package/analyzer-template/packages/utils/dist/utils/index.js +1 -0
  79. package/analyzer-template/packages/utils/dist/utils/index.js.map +1 -1
  80. package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.d.ts +25 -0
  81. package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.d.ts.map +1 -0
  82. package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.js +40 -0
  83. package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.js.map +1 -0
  84. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.d.ts.map +1 -1
  85. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.js +2 -1
  86. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.js.map +1 -1
  87. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.d.ts.map +1 -1
  88. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js +1 -0
  89. package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js.map +1 -1
  90. package/analyzer-template/packages/utils/index.ts +1 -0
  91. package/analyzer-template/packages/utils/src/lib/Semaphore.ts +42 -0
  92. package/analyzer-template/packages/utils/src/lib/frameworks/getRemixRoutePath.ts +2 -1
  93. package/analyzer-template/packages/utils/src/lib/frameworks/remixRouteFileNameToRoute.ts +1 -0
  94. package/analyzer-template/project/constructMockCode.ts +170 -6
  95. package/analyzer-template/project/reconcileMockDataKeys.ts +13 -0
  96. package/analyzer-template/project/start.ts +1 -11
  97. package/analyzer-template/project/writeMockDataTsx.ts +32 -1
  98. package/analyzer-template/project/writeScenarioComponents.ts +164 -18
  99. package/analyzer-template/project/writeUniversalMocks.ts +66 -8
  100. package/background/src/lib/virtualized/project/constructMockCode.js +158 -7
  101. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  102. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +12 -0
  103. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  104. package/background/src/lib/virtualized/project/start.js +1 -8
  105. package/background/src/lib/virtualized/project/start.js.map +1 -1
  106. package/background/src/lib/virtualized/project/writeMockDataTsx.js +25 -1
  107. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  108. package/background/src/lib/virtualized/project/writeScenarioComponents.js +129 -17
  109. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  110. package/background/src/lib/virtualized/project/writeUniversalMocks.js +56 -7
  111. package/background/src/lib/virtualized/project/writeUniversalMocks.js.map +1 -1
  112. package/codeyam-cli/src/cli.js +6 -0
  113. package/codeyam-cli/src/cli.js.map +1 -1
  114. package/codeyam-cli/src/codeyam-cli.js +0 -0
  115. package/codeyam-cli/src/commands/debug.js +221 -0
  116. package/codeyam-cli/src/commands/debug.js.map +1 -0
  117. package/codeyam-cli/src/commands/report.js +102 -0
  118. package/codeyam-cli/src/commands/report.js.map +1 -0
  119. package/codeyam-cli/src/commands/setup-sandbox.js +164 -0
  120. package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -0
  121. package/codeyam-cli/src/utils/__tests__/cleanupAnalysisFiles.test.js +6 -6
  122. package/codeyam-cli/src/utils/__tests__/cleanupAnalysisFiles.test.js.map +1 -1
  123. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +8 -0
  124. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  125. package/codeyam-cli/src/utils/analyzer.js +30 -0
  126. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  127. package/codeyam-cli/src/utils/cleanupAnalysisFiles.js +2 -2
  128. package/codeyam-cli/src/utils/cleanupAnalysisFiles.js.map +1 -1
  129. package/codeyam-cli/src/utils/generateReport.js +219 -0
  130. package/codeyam-cli/src/utils/generateReport.js.map +1 -0
  131. package/codeyam-cli/src/utils/install-skills.js +7 -0
  132. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  133. package/codeyam-cli/src/utils/queue/__tests__/job.pidTracking.test.js +1 -0
  134. package/codeyam-cli/src/utils/queue/__tests__/job.pidTracking.test.js.map +1 -1
  135. package/codeyam-cli/src/utils/queue/job.js +5 -1
  136. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  137. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +4 -0
  138. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  139. package/codeyam-cli/src/webserver/app/lib/database.js +50 -2
  140. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  141. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-D5ZHFomX.js +1 -0
  142. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-CDnfNKKQ.js → InteractivePreview-XDSzQLOY.js} +2 -2
  143. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-DUS-3h7I.js → LibraryFunctionPreview-BYVx9KFp.js} +1 -1
  144. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-TJzDQku1.js → LogViewer-CRcT5fOZ.js} +1 -1
  145. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-BORLgi0X.js +1 -0
  146. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-BgdlWM6p.js → SafeScreenshot-Bual6h18.js} +1 -1
  147. package/codeyam-cli/src/webserver/build/client/assets/ScenarioPreview-Bi-YUMa-.js +6 -0
  148. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-4D2vLLJz.js +5 -0
  149. package/codeyam-cli/src/webserver/build/client/assets/_index-BC200mfN.js +1 -0
  150. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-CxvZPkCv.js +10 -0
  151. package/codeyam-cli/src/webserver/build/client/assets/api.generate-report-l0sNRNKZ.js +1 -0
  152. package/codeyam-cli/src/webserver/build/client/assets/chart-column-B8fb6wnw.js +1 -0
  153. package/codeyam-cli/src/webserver/build/client/assets/{chunk-WWGJGFF6-DvL0YqDJ.js → chunk-WWGJGFF6-De6i8FUT.js} +1 -1
  154. package/codeyam-cli/src/webserver/build/client/assets/circle-alert-IdsgAK39.js +1 -0
  155. package/codeyam-cli/src/webserver/build/client/assets/circle-check-BACUUf75.js +1 -0
  156. package/codeyam-cli/src/webserver/build/client/assets/clock-vWeoCemX.js +1 -0
  157. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CS7XDrKv.js +1 -0
  158. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DIOEw_3i.js +1 -0
  159. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-3bYjyojg.js → entity._sha._-8Els_3Wb.js} +10 -10
  160. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-DtfwpN9J.js → entity._sha_.create-scenario-C3FZJx1w.js} +1 -1
  161. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-YJz_igar.js +5 -0
  162. package/codeyam-cli/src/webserver/build/client/assets/entityStatus-BEqj2qBy.js +1 -0
  163. package/codeyam-cli/src/webserver/build/client/assets/entry.client-DiP0q291.js +5 -0
  164. package/codeyam-cli/src/webserver/build/client/assets/file-text-LM0mgxXE.js +1 -0
  165. package/codeyam-cli/src/webserver/build/client/assets/files-Dxh9CcaV.js +1 -0
  166. package/codeyam-cli/src/webserver/build/client/assets/{git-WoKohOtW.js → git-BXmqrWCH.js} +10 -10
  167. package/codeyam-cli/src/webserver/build/client/assets/globals-BGS74ED-.css +1 -0
  168. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +5 -0
  169. package/codeyam-cli/src/webserver/build/client/assets/{index-Vvbl94Xc.js → index-D-zYbzFZ.js} +2 -2
  170. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-BXPKbHEb.js +1 -0
  171. package/codeyam-cli/src/webserver/build/client/assets/manifest-1af162d4.js +1 -0
  172. package/codeyam-cli/src/webserver/build/client/assets/root-DB7VgjCY.js +16 -0
  173. package/codeyam-cli/src/webserver/build/client/assets/settings-5zF_GOcS.js +1 -0
  174. package/codeyam-cli/src/webserver/build/client/assets/{settings-LuiJ1UIm.js → settings-Dc4MlMpK.js} +1 -1
  175. package/codeyam-cli/src/webserver/build/client/assets/simulations-BQ-02-jB.js +1 -0
  176. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-D7k-ArFa.js +1 -0
  177. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-CpUcCv1V.js → useLastLogLine-AlhS7g5F.js} +1 -1
  178. package/codeyam-cli/src/webserver/build/client/assets/useToast-Ddo4UQv7.js +1 -0
  179. package/codeyam-cli/src/webserver/build/client/assets/zap-_jw-9DCp.js +1 -0
  180. package/codeyam-cli/src/webserver/build/server/assets/{index-DzbqTxoN.js → index-D4JpXSIO.js} +1 -1
  181. package/codeyam-cli/src/webserver/build/server/assets/server-build-vwbN7n65.js +169 -0
  182. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  183. package/codeyam-cli/src/webserver/build-info.json +5 -5
  184. package/codeyam-cli/templates/codeyam-setup-skill.md +65 -85
  185. package/codeyam-cli/templates/debug-command.md +125 -0
  186. package/package.json +4 -6
  187. package/packages/ai/index.js +1 -1
  188. package/packages/ai/index.js.map +1 -1
  189. package/packages/ai/src/lib/analyzeScope.js +13 -0
  190. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  191. package/packages/ai/src/lib/astScopes/processExpression.js +12 -0
  192. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  193. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +1023 -405
  194. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  195. package/packages/ai/src/lib/dataStructure/equivalencyManagers/FunctionCallManager.js +137 -1
  196. package/packages/ai/src/lib/dataStructure/equivalencyManagers/FunctionCallManager.js.map +1 -1
  197. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +1 -1
  198. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
  199. package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js +112 -0
  200. package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js.map +1 -0
  201. package/packages/ai/src/lib/dataStructure/helpers/DebugTracer.js +176 -0
  202. package/packages/ai/src/lib/dataStructure/helpers/DebugTracer.js.map +1 -0
  203. package/packages/ai/src/lib/dataStructure/helpers/PathManager.js +178 -0
  204. package/packages/ai/src/lib/dataStructure/helpers/PathManager.js.map +1 -0
  205. package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js +138 -0
  206. package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js.map +1 -0
  207. package/packages/ai/src/lib/dataStructure/helpers/VisitedTracker.js +199 -0
  208. package/packages/ai/src/lib/dataStructure/helpers/VisitedTracker.js.map +1 -0
  209. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +2 -0
  210. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  211. package/packages/ai/src/lib/dataStructure/helpers/selectBestValue.js +62 -0
  212. package/packages/ai/src/lib/dataStructure/helpers/selectBestValue.js.map +1 -0
  213. package/packages/ai/src/lib/dataStructure/helpers/uniqueIdUtils.js +90 -0
  214. package/packages/ai/src/lib/dataStructure/helpers/uniqueIdUtils.js.map +1 -0
  215. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +22 -0
  216. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +1 -1
  217. package/packages/ai/src/lib/generateEntityKeyAttributes.js +32 -8
  218. package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +1 -1
  219. package/packages/ai/src/lib/getConditionalUsagesFromCode.js +13 -8
  220. package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
  221. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +36 -3
  222. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
  223. package/packages/ai/src/lib/worker/SerializableDataStructure.js +7 -0
  224. package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
  225. package/packages/analyze/src/lib/FileAnalyzer.js +17 -5
  226. package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
  227. package/packages/analyze/src/lib/asts/nodes/index.js +2 -1
  228. package/packages/analyze/src/lib/asts/nodes/index.js.map +1 -1
  229. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +6 -8
  230. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  231. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +5 -1
  232. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  233. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +8 -2
  234. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
  235. package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js +5 -8
  236. package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js.map +1 -1
  237. package/packages/analyze/src/lib/files/analyzeChange.js +21 -9
  238. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  239. package/packages/analyze/src/lib/files/analyzeEntity.js +10 -4
  240. package/packages/analyze/src/lib/files/analyzeEntity.js.map +1 -1
  241. package/packages/analyze/src/lib/files/analyzeInitial.js +21 -9
  242. package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
  243. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +6 -1
  244. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  245. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +9 -1
  246. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +1 -1
  247. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +5 -1
  248. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
  249. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +9 -1
  250. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
  251. package/packages/generate/src/lib/scenarioComponent.js +5 -3
  252. package/packages/generate/src/lib/scenarioComponent.js.map +1 -1
  253. package/packages/supabase/src/lib/kysely/db.js +3 -0
  254. package/packages/supabase/src/lib/kysely/db.js.map +1 -1
  255. package/packages/supabase/src/lib/kysely/tables/debugReportsTable.js +27 -0
  256. package/packages/supabase/src/lib/kysely/tables/debugReportsTable.js.map +1 -0
  257. package/packages/utils/index.js +1 -0
  258. package/packages/utils/index.js.map +1 -1
  259. package/packages/utils/src/lib/Semaphore.js +40 -0
  260. package/packages/utils/src/lib/Semaphore.js.map +1 -0
  261. package/packages/utils/src/lib/frameworks/getRemixRoutePath.js +2 -1
  262. package/packages/utils/src/lib/frameworks/getRemixRoutePath.js.map +1 -1
  263. package/packages/utils/src/lib/frameworks/remixRouteFileNameToRoute.js +1 -0
  264. package/packages/utils/src/lib/frameworks/remixRouteFileNameToRoute.js.map +1 -1
  265. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-B9Sf8e9w.js +0 -1
  266. package/codeyam-cli/src/webserver/build/client/assets/ScenarioPreview-Bl6GY-OE.js +0 -6
  267. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-BDq8RX50.js +0 -5
  268. package/codeyam-cli/src/webserver/build/client/assets/_index-Bh3y3Wsl.js +0 -1
  269. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-tq7Bl6-t.js +0 -10
  270. package/codeyam-cli/src/webserver/build/client/assets/chart-column-q9_nHfwv.js +0 -1
  271. package/codeyam-cli/src/webserver/build/client/assets/circle-alert-CKMpA1v_.js +0 -1
  272. package/codeyam-cli/src/webserver/build/client/assets/clock-Wnfog8Qw.js +0 -1
  273. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C_ixaqqh.js +0 -1
  274. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-QecTs_sq.js +0 -5
  275. package/codeyam-cli/src/webserver/build/client/assets/entry.client-hnkEgHrC.js +0 -5
  276. package/codeyam-cli/src/webserver/build/client/assets/file-text-CvCVdKLW.js +0 -1
  277. package/codeyam-cli/src/webserver/build/client/assets/files-DgUCYhbd.js +0 -1
  278. package/codeyam-cli/src/webserver/build/client/assets/globals-DZfbt0u5.css +0 -1
  279. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-Bxm63UxG.js +0 -1
  280. package/codeyam-cli/src/webserver/build/client/assets/manifest-c90b8608.js +0 -1
  281. package/codeyam-cli/src/webserver/build/client/assets/root-DrVZQamX.js +0 -16
  282. package/codeyam-cli/src/webserver/build/client/assets/search-CJkk16Ct.js +0 -1
  283. package/codeyam-cli/src/webserver/build/client/assets/settings-ConzHeiL.js +0 -1
  284. package/codeyam-cli/src/webserver/build/client/assets/simulations-B9LRwAej.js +0 -1
  285. package/codeyam-cli/src/webserver/build/client/assets/useToast-DOxmMaSg.js +0 -1
  286. package/codeyam-cli/src/webserver/build/client/assets/zap-D5R1FAcH.js +0 -1
  287. package/codeyam-cli/src/webserver/build/server/assets/server-build-DGGis3OZ.js +0 -166
@@ -1 +1 @@
1
- import{w as W,j as e,u as A,a as F,r as o,L as G}from"./chunk-WWGJGFF6-DvL0YqDJ.js";import{W as J,u as M,a as U,I as _}from"./InteractivePreview-CDnfNKKQ.js";import"./useLastLogLine-CpUcCv1V.js";import"./index-Vvbl94Xc.js";const Q=({data:a})=>[{title:a?.entity?`Create Scenario - ${a.entity.name} - CodeYam`:"Create Scenario - CodeYam"},{name:"description",content:"Create a new scenario"}];function H(){const{analysis:a,defaultScenario:s,entity:C,entitySha:c,projectSlug:f}=A(),h=F(),{iframeRef:Y}=M(),[n,N]=o.useState(""),[I,S]=o.useState(!1),[P,w]=o.useState(!1),[y,p]=o.useState(null),[b,r]=o.useState(null),{interactiveServerUrl:d,isStarting:k,isLoading:E,showIframe:D,iframeKey:R,onIframeLoad:T}=U({analysisId:a?.id,scenarioId:s?.id,scenarioName:s?.name,projectSlug:f,enabled:!0}),L=o.useCallback(async()=>{if(!n.trim()){p("Please describe how you want to change the scenario");return}S(!0),p(null),r("Generating scenario with AI...");try{const t=await fetch("/api/generate-scenario-data",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:n,existingScenarios:a.scenarios,scenariosDataStructure:a.metadata?.scenariosDataStructure})}),l=await t.json();if(!t.ok||!l.success)throw new Error(l.error||"Failed to generate scenario data");console.log("[CreateScenario] AI generated scenario:",l.data);const i=l.data;if(!i.name||!i.data)throw new Error("AI response missing required fields (name or data)");r("Saving new scenario..."),w(!0);const O={name:i.name,description:i.description||n,metadata:{data:i.data,interactiveExamplePath:s.metadata?.interactiveExamplePath}},$=[...a.scenarios||[],O],v=await fetch("/api/save-scenarios",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({analysis:a,scenarios:$})}),m=await v.json();if(!v.ok||!m.success)throw new Error(m.error||"Failed to save scenario");console.log("[CreateScenario] Scenario saved:",m);const x=m.analysis?.scenarios?.find(u=>u.name===i.name);if(!x?.id){console.warn("[CreateScenario] Could not find saved scenario ID, navigating to entity page"),r("Scenario created! Redirecting..."),setTimeout(()=>h(`/entity/${c}`),1e3);return}if(d){r("Capturing screenshot...");const u=await fetch("/api/capture-screenshot",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverUrl:d,scenarioId:x.id,projectId:a.projectId,viewportWidth:1440})}),j=await u.json();!u.ok||!j.success?(console.error("[CreateScenario] Capture failed:",j),r("Scenario created! (Screenshot capture failed)")):r("Scenario created and captured!")}else r("Scenario created!");setTimeout(()=>{h(`/entity/${c}/scenarios/${x.id}`)},1e3)}catch(t){console.error("[CreateScenario] Error:",t),p(t instanceof Error?t.message:String(t)),r(null)}finally{S(!1),w(!1)}},[n,a,s,c,d,h]),g=I||P;return e.jsxs("div",{className:"h-screen bg-gray-50 flex flex-col",children:[e.jsxs("header",{className:"bg-white border-b border-gray-200 px-8 py-6 shrink-0",children:[e.jsx("div",{className:"mb-4",children:e.jsxs(G,{to:`/entity/${c}`,className:"text-blue-600 no-underline text-sm font-medium transition-colors hover:text-blue-700 hover:underline",children:["← Back to ",C?.name]})}),e.jsx("h1",{className:"text-[32px] font-bold text-gray-900 m-0 mb-3",children:"Create New Scenario"}),e.jsx("p",{className:"text-gray-600 text-[15px] leading-relaxed m-0",children:"Create a new scenario based on the Default Scenario"})]}),e.jsxs("div",{className:"flex flex-1 gap-0 min-h-0",children:[e.jsxs("aside",{className:"w-[400px] bg-white border-r border-gray-200 overflow-y-auto shrink-0 p-6 flex flex-col",children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h2",{className:"text-lg font-semibold text-gray-900 mb-2",children:"Default Scenario Preview"}),e.jsx("p",{className:"text-sm text-gray-600 leading-relaxed",children:"The preview on the right shows the Default Scenario. Describe how you'd like to change it to create your new scenario."})]}),e.jsxs("div",{className:"flex-1",children:[e.jsx("label",{htmlFor:"prompt",className:"block text-sm font-medium text-gray-700 mb-2",children:"How would you like to change it for your new scenario?"}),e.jsx("textarea",{id:"prompt",value:n,onChange:t=>N(t.target.value),placeholder:"e.g., Show an empty state with no items in the list, or Display an error message when the API fails, or Show a user with admin privileges...",className:"w-full h-40 px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500 text-sm resize-none",disabled:g})]}),e.jsxs("div",{className:"mt-6 space-y-3",children:[e.jsx("button",{onClick:()=>void L(),disabled:g||!n.trim(),className:"w-full px-4 py-2 bg-[#005c75] text-white rounded-md text-sm font-medium hover:bg-[#004a5e] disabled:bg-gray-400 disabled:cursor-not-allowed transition-colors",children:g?"Creating...":"Create Scenario"}),b&&e.jsx("div",{className:"text-sm text-blue-600 bg-blue-50 px-3 py-2 rounded-md",children:b}),y&&e.jsx("div",{className:"text-sm text-red-600 bg-red-50 px-3 py-2 rounded-md",children:y})]})]}),e.jsx("main",{className:"flex-1 bg-gray-100 overflow-auto flex flex-col min-w-0",children:e.jsx(_,{scenarioId:s.id||s.name,scenarioName:s.name,iframeUrl:d,isStarting:k,isLoading:E,showIframe:D,iframeKey:R,onIframeLoad:T,projectSlug:f,defaultWidth:1440,defaultHeight:900})})]})]})}const V=W(function(){return e.jsx(J,{children:e.jsx(H,{})})});export{V as default,Q as meta};
1
+ import{w as W,j as e,u as A,a as F,r as o,L as G}from"./chunk-WWGJGFF6-De6i8FUT.js";import{W as J,u as M,a as U,I as _}from"./InteractivePreview-XDSzQLOY.js";import"./useLastLogLine-AlhS7g5F.js";import"./index-D-zYbzFZ.js";const Q=({data:a})=>[{title:a?.entity?`Create Scenario - ${a.entity.name} - CodeYam`:"Create Scenario - CodeYam"},{name:"description",content:"Create a new scenario"}];function H(){const{analysis:a,defaultScenario:s,entity:C,entitySha:c,projectSlug:f}=A(),h=F(),{iframeRef:Y}=M(),[n,N]=o.useState(""),[I,S]=o.useState(!1),[P,w]=o.useState(!1),[y,p]=o.useState(null),[b,r]=o.useState(null),{interactiveServerUrl:d,isStarting:k,isLoading:E,showIframe:D,iframeKey:R,onIframeLoad:T}=U({analysisId:a?.id,scenarioId:s?.id,scenarioName:s?.name,projectSlug:f,enabled:!0}),L=o.useCallback(async()=>{if(!n.trim()){p("Please describe how you want to change the scenario");return}S(!0),p(null),r("Generating scenario with AI...");try{const t=await fetch("/api/generate-scenario-data",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:n,existingScenarios:a.scenarios,scenariosDataStructure:a.metadata?.scenariosDataStructure})}),l=await t.json();if(!t.ok||!l.success)throw new Error(l.error||"Failed to generate scenario data");console.log("[CreateScenario] AI generated scenario:",l.data);const i=l.data;if(!i.name||!i.data)throw new Error("AI response missing required fields (name or data)");r("Saving new scenario..."),w(!0);const O={name:i.name,description:i.description||n,metadata:{data:i.data,interactiveExamplePath:s.metadata?.interactiveExamplePath}},$=[...a.scenarios||[],O],v=await fetch("/api/save-scenarios",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({analysis:a,scenarios:$})}),m=await v.json();if(!v.ok||!m.success)throw new Error(m.error||"Failed to save scenario");console.log("[CreateScenario] Scenario saved:",m);const x=m.analysis?.scenarios?.find(u=>u.name===i.name);if(!x?.id){console.warn("[CreateScenario] Could not find saved scenario ID, navigating to entity page"),r("Scenario created! Redirecting..."),setTimeout(()=>h(`/entity/${c}`),1e3);return}if(d){r("Capturing screenshot...");const u=await fetch("/api/capture-screenshot",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverUrl:d,scenarioId:x.id,projectId:a.projectId,viewportWidth:1440})}),j=await u.json();!u.ok||!j.success?(console.error("[CreateScenario] Capture failed:",j),r("Scenario created! (Screenshot capture failed)")):r("Scenario created and captured!")}else r("Scenario created!");setTimeout(()=>{h(`/entity/${c}/scenarios/${x.id}`)},1e3)}catch(t){console.error("[CreateScenario] Error:",t),p(t instanceof Error?t.message:String(t)),r(null)}finally{S(!1),w(!1)}},[n,a,s,c,d,h]),g=I||P;return e.jsxs("div",{className:"h-screen bg-gray-50 flex flex-col",children:[e.jsxs("header",{className:"bg-white border-b border-gray-200 px-8 py-6 shrink-0",children:[e.jsx("div",{className:"mb-4",children:e.jsxs(G,{to:`/entity/${c}`,className:"text-blue-600 no-underline text-sm font-medium transition-colors hover:text-blue-700 hover:underline",children:["← Back to ",C?.name]})}),e.jsx("h1",{className:"text-[32px] font-bold text-gray-900 m-0 mb-3",children:"Create New Scenario"}),e.jsx("p",{className:"text-gray-600 text-[15px] leading-relaxed m-0",children:"Create a new scenario based on the Default Scenario"})]}),e.jsxs("div",{className:"flex flex-1 gap-0 min-h-0",children:[e.jsxs("aside",{className:"w-[400px] bg-white border-r border-gray-200 overflow-y-auto shrink-0 p-6 flex flex-col",children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h2",{className:"text-lg font-semibold text-gray-900 mb-2",children:"Default Scenario Preview"}),e.jsx("p",{className:"text-sm text-gray-600 leading-relaxed",children:"The preview on the right shows the Default Scenario. Describe how you'd like to change it to create your new scenario."})]}),e.jsxs("div",{className:"flex-1",children:[e.jsx("label",{htmlFor:"prompt",className:"block text-sm font-medium text-gray-700 mb-2",children:"How would you like to change it for your new scenario?"}),e.jsx("textarea",{id:"prompt",value:n,onChange:t=>N(t.target.value),placeholder:"e.g., Show an empty state with no items in the list, or Display an error message when the API fails, or Show a user with admin privileges...",className:"w-full h-40 px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500 text-sm resize-none",disabled:g})]}),e.jsxs("div",{className:"mt-6 space-y-3",children:[e.jsx("button",{onClick:()=>{L()},disabled:g||!n.trim(),className:"w-full px-4 py-2 bg-[#005c75] text-white rounded-md text-sm font-medium hover:bg-[#004a5e] disabled:bg-gray-400 disabled:cursor-not-allowed transition-colors",children:g?"Creating...":"Create Scenario"}),b&&e.jsx("div",{className:"text-sm text-blue-600 bg-blue-50 px-3 py-2 rounded-md",children:b}),y&&e.jsx("div",{className:"text-sm text-red-600 bg-red-50 px-3 py-2 rounded-md",children:y})]})]}),e.jsx("main",{className:"flex-1 bg-gray-100 overflow-auto flex flex-col min-w-0",children:e.jsx(_,{scenarioId:s.id||s.name,scenarioName:s.name,iframeUrl:d,isStarting:k,isLoading:E,showIframe:D,iframeKey:R,onIframeLoad:T,projectSlug:f,defaultWidth:1440,defaultHeight:900})})]})]})}const V=W(function(){return e.jsx(J,{children:e.jsx(H,{})})});export{V as default,Q as meta};
@@ -0,0 +1,5 @@
1
+ import{j as e,r as l,w as z,u as H,a as V,L as U}from"./chunk-WWGJGFF6-De6i8FUT.js";import{W as Y,u as K,a as Q,I as X}from"./InteractivePreview-XDSzQLOY.js";import"./useLastLogLine-AlhS7g5F.js";import"./index-D-zYbzFZ.js";function W(t,a,r){if(Array.isArray(t)){if(!isNaN(parseInt(a)))return t[parseInt(a)];for(const s of t)if(s.name===a||s.title===a||s.id===a)return s}return t[a]}function J(t){return t&&(typeof t=="object"||Array.isArray(t))}function Z(t){return Array.isArray(t)?t.length:void 0}function ee(t){const{data:a,structure:r}=t;if(!(!a&&!r)){if(Array.isArray(r))return Array.isArray(a)?a.map((s,d)=>d.toString()):[];if(typeof r=="object")return[...new Set([...Object.keys(a),...Object.keys(r)])].sort((d,i)=>{const f=J(a[d]),h=J(a[i]);return f&&!h?1:!f&&h?-1:d.localeCompare(i)});if(typeof a=="object")return Object.keys(a).sort((d,i)=>d.localeCompare(i))}}function te({scenarioFormData:t,handleInputChange:a}){return e.jsxs("div",{className:"p-3 flex flex-col gap-3",children:[e.jsxs("div",{className:"grid w-full max-w-sm items-center gap-1.5",children:[e.jsx("label",{htmlFor:"name",className:"text-sm font-medium text-gray-700",children:"Name"}),e.jsx("input",{type:"text",id:"name",placeholder:"Name",name:"name",value:t.name,onChange:a,required:!0,className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})]}),e.jsxs("div",{className:"grid w-full gap-1.5 pt-2",children:[e.jsx("label",{htmlFor:"description",className:"text-sm font-medium text-gray-700",children:"Description"}),e.jsx("textarea",{placeholder:"Type your message here.",id:"description",name:"description",value:t.description,onChange:a,required:!0,className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 min-h-[100px]"})]}),e.jsx("button",{type:"submit",className:"mt-3 w-full px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 font-medium",children:"Save Name & Description"})]})}function re({path:t,namedPath:a,isArray:r,count:s,onClick:d}){const i=l.useCallback(()=>{d&&d(t)},[d,t]);return e.jsxs("div",{className:"bg-blue-50 p-3 rounded-lg flex items-center justify-between cursor-pointer group hover:bg-blue-100 transition-colors border border-blue-200",onClick:i,children:[e.jsxs("div",{className:"flex items-center gap-3",children:[r&&e.jsx("svg",{className:"w-4 h-4 text-gray-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})}),e.jsxs("div",{className:"capitalize font-medium text-gray-900",children:[a[a.length-1],s!==void 0&&` (${s})`]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[r&&e.jsx("svg",{className:"w-5 h-5 text-red-500 opacity-0 group-hover:opacity-100 transition-opacity",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})}),e.jsx("svg",{className:"w-4 h-4 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})]})]})}var G=(t=>(t.STRING="string",t.NUMBER="number",t.BOOLEAN="boolean",t.UNION="union",t.OBJECT="object",t.ARRAY="array",t))(G||{});const ae=({name:t,value:a,options:r,onChange:s})=>{const d=l.useCallback(i=>{s({target:{name:t,value:i.target.value}})},[t,s]);return e.jsx("select",{name:t,value:a,onChange:d,className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",children:r.map((i,f)=>e.jsx("option",{value:i.trim(),children:i.trim()},f))})},se=({name:t,value:a,onChange:r})=>{const s=l.useCallback(d=>{const i=d.target.checked;r({target:{name:t,value:i}})},[t,r]);return e.jsx("label",{className:"flex items-center gap-2 cursor-pointer",children:e.jsx("input",{type:"checkbox",name:t,checked:a,onChange:s,className:`w-10 h-6 rounded-full appearance-none cursor-pointer transition-colors relative
2
+ bg-gray-300 checked:bg-blue-600
3
+ after:content-[''] after:absolute after:top-1 after:left-1 after:w-4 after:h-4
4
+ after:bg-white after:rounded-full after:transition-transform
5
+ checked:after:translate-x-4`})})};function ne({dataType:t,path:a,value:r,onChange:s}){const d=l.useMemo(()=>a[a.length-1],[a]),i=l.useMemo(()=>a.join("-"),[a]),f=l.useCallback(b=>{s(a,b.target.value)},[s,a]),h=l.useCallback(b=>{s(a,b.target.value)},[s,a]);return e.jsxs("div",{className:"grid w-full max-w-sm items-center gap-1.5",children:[e.jsx("label",{htmlFor:i,className:"capitalize text-sm font-medium text-gray-700",children:d==="~~codeyam-code~~"?"Dynamic Field":d}),t.includes("|")?e.jsx(ae,{name:i,value:r,options:t.split("|"),onChange:f}):t===G.BOOLEAN?e.jsx(se,{name:i,value:r??!1,onChange:h}):e.jsx("input",{id:i,name:i,type:"text",value:JSON.stringify(r??"").replace(/"/g,""),onChange:f,className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"},`Input-${i}`)]})}const oe="Default Scenario";function ie({analysis:t,scenarioName:a,dataItem:r,onResult:s,onGenerateData:d}){const[i,f]=l.useState(!1),[h,b]=l.useState(""),E=l.useCallback(async()=>{if(!d){console.error("onGenerateData prop is required for AI data generation");return}f(!0);try{const u=t.scenarios.find(y=>y.name===a);if(!u)throw new Error("Scenario not found");const D=t.scenarios.find(y=>y.name===oe),S=await d(h,r);if(!S){console.error("Error getting AI guess for scenario data"),f(!1);return}const j=(y,w)=>{const I=Object.assign({},y);return x(y)&&x(w)&&Object.keys(w).forEach(v=>{x(w[v])?v in y?I[v]=j(y[v],w[v]):Object.assign(I,{[v]:w[v]}):Object.assign(I,{[v]:w[v]})}),I},x=y=>y&&typeof y=="object"&&!Array.isArray(y);u.metadata.data=j(j(D?.metadata.data||{},u.metadata.data),S.data||{}),s(u),f(!1),b("")}catch(u){console.error("Error generating AI data:",u),f(!1)}},[t,h,r,a,s,d]),m=l.useCallback(u=>{b(u.target.value)},[]);return e.jsxs("div",{className:"w-full p-3 flex flex-col gap-2 rounded-lg border-2 border-blue-200 text-sm bg-blue-50",children:[e.jsx("div",{className:"font-medium text-gray-700",children:"Describe the data changes to the AI"}),e.jsx("textarea",{className:"peer w-full h-16 p-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:"Type your message here.",onChange:m,value:h}),e.jsx("button",{type:"button",disabled:i,className:`w-full px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-400 disabled:cursor-not-allowed font-medium ${h.length>0?"flex":"hidden peer-focus-within:flex"} items-center justify-center gap-2`,onClick:()=>{E()},children:i?e.jsxs(e.Fragment,{children:[e.jsxs("svg",{className:"animate-spin h-4 w-4 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Please wait"]}):"Generate Data"})]})}function ce({namedPath:t,path:a,last:r,onClick:s}){const d=l.useCallback(()=>s(r?a.slice(0,-1):a),[r,a,s]);return e.jsx("div",{className:"capitalize cursor-pointer hover:text-blue-600 transition-colors",onClick:d,children:t[t.length-1]})}function le({dataItem:t,onClick:a}){const r=l.useCallback(()=>a([]),[a]),s=l.useMemo(()=>t.namedPath.length>=2?t.namedPath.length-2:0,[t]);return e.jsxs("div",{className:"text-sm flex items-center gap-2 py-3 px-2 border-b border-t border-gray-300 bg-gray-50",children:[e.jsx("svg",{className:"w-4 h-4 cursor-pointer hover:text-blue-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",onClick:r,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})}),t.namedPath.length>2&&e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("div",{children:"..."}),e.jsx("svg",{className:"w-3 h-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})]}),t.namedPath.slice(s).map((d,i)=>e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(ce,{namedPath:t.namedPath.slice(0,i+s+1),path:t.path.slice(0,i+s+1),last:i+s===t.namedPath.length-1,onClick:a}),i+s<t.namedPath.length-1&&e.jsx("svg",{className:"w-3 h-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})]},`path-${d}-${i+s}`))]})}function q({analysis:t,scenarioName:a,dataItem:r,onClick:s,onChange:d,onAIResult:i,onGenerateData:f,saveFeedback:h}){const b=l.useMemo(()=>r.data,[r]),E=l.useMemo(()=>ee(r),[r]);return e.jsxs("div",{className:"w-full flex flex-col gap-6 px-3 mt-3",children:[r.path.length>0&&e.jsx(le,{dataItem:r,onClick:s}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(ie,{analysis:t,scenarioName:a,dataItem:r,onResult:i,onGenerateData:f}),E?.map((m,u)=>{if(J(b[m])){let S=m;isNaN(Number(m))||(S=b[m].name??b[m].title??b[m].id??`${r.path[r.path.length-1].replace(/s$/,"")} ${parseInt(m)+1}`);const j=[...r.path,m],x=[...r.namedPath,S];return e.jsx(re,{path:j,namedPath:x,isArray:Array.isArray(b),count:Z(b[m]),onClick:s},`data-${m}-${u}`)}if(m==="id")return null;const D=[...r.path,m];return e.jsx(ne,{dataType:r.structure?.[m]??"string",path:D,value:b[m],onChange:d},`InputField-${D.join("-")}`)})]}),e.jsx("input",{type:"hidden",name:"recapture",id:"recapture-input",value:"false"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{type:"submit",onClick:()=>{const m=document.getElementById("recapture-input");m&&(m.value="false")},disabled:h?.isSaving,className:"flex-1 px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 font-medium disabled:opacity-50 disabled:cursor-not-allowed",children:h?.isSaving?"Saving...":"Save Changes"}),e.jsx("button",{type:"submit",onClick:()=>{const m=document.getElementById("recapture-input");m&&(m.value="true")},disabled:h?.isSaving,className:"flex-1 px-4 py-2 bg-gray-100 text-gray-700 border border-gray-300 rounded-md hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 font-medium disabled:opacity-50 disabled:cursor-not-allowed",children:"Save & Recapture"})]}),h?.message&&!h?.isSaving&&e.jsx("div",{className:`mt-3 p-3 rounded-md text-sm font-medium ${h.isError?"bg-red-50 text-red-700 border border-red-200":"bg-green-50 text-green-700 border border-green-200"}`,children:h.message})]})}function _({title:t,children:a,defaultOpen:r=!1,borderT:s=!1,borderB:d=!1}){const[i,f]=l.useState(r),h=[];return s&&h.push("border-t"),d&&h.push("border-b"),e.jsxs("div",{className:`${h.join(" ")} border-gray-300`,children:[e.jsxs("button",{type:"button",onClick:()=>f(!i),className:"w-full px-4 py-3 flex items-center justify-between bg-gray-50 hover:bg-gray-100 transition-colors text-left font-semibold text-gray-900",children:[e.jsx("span",{children:t}),e.jsx("svg",{className:`transition-transform ${i?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",style:{width:"20px",height:"20px",minWidth:"20px",minHeight:"20px",maxWidth:"20px",maxHeight:"20px",flexShrink:0},children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),i&&e.jsx("div",{className:"px-4 py-3",children:a})]})}const de=({currentScenario:t,defaultScenario:a,dataStructure:r,analysis:s,shouldCreateNewScenario:d,onSave:i,onNavigate:f,iframeRef:h,onGenerateData:b,saveFeedback:E})=>{const m=l.useCallback((n,o)=>{const p=Object.assign({},n),g=c=>c&&typeof c=="object"&&!Array.isArray(c);return g(n)&&g(o)&&Object.keys(o).forEach(c=>{g(o[c])?c in n?p[c]=m(n[c],o[c]):Object.assign(p,{[c]:o[c]}):Object.assign(p,{[c]:o[c]})}),p},[]),[u,D]=l.useState({name:t.name,description:t.description,data:m(a.metadata.data,t.metadata.data)}),[S,j]=l.useState(null),x=l.useMemo(()=>({...u.data}),[u]),y=l.useMemo(()=>({...x.mockData?{"Retrieved Data":x.mockData}:{},...x.argumentsData?{"Function Arguments":x.argumentsData}:{}}),[x]),w=l.useMemo(()=>{const n={...r.arguments?{"Function Arguments":r.arguments}:{},...r.dataForMocks?{"Retrieved Data":r.dataForMocks}:{}};return Object.keys(n).reduce((o,p)=>{if(p.includes(".")){const[g,c]=p.split(".");o[g]||(o[g]={}),o[g][c]=n[p]}else o[p]=n[p];return o},{})},[r]),I=l.useCallback(async n=>{n.preventDefault();const p=n.target.querySelector('input[name="recapture"]')?.value==="true",g={mockData:u.data.mockData??{},argumentsData:u.data.argumentsData??[]};console.log("[ScenarioEditor] Saving scenario data:",{scenarioName:u.name,shouldRecapture:p,dataToSave:g,rawFormData:u.data,iframePayload:{arguments:x.argumentsData??[],...x.mockData??{}}}),console.log("[ScenarioEditor] Full dataToSave JSON:",JSON.stringify(g,null,2).substring(0,1e3));const c=s?.scenarios.map(C=>!d&&C.name===t.name?{...C,name:u.name,description:u.description,metadata:{...C.metadata,data:g}}:C);d&&c.push({name:u.name,description:u.description,metadata:{data:g,interactiveExamplePath:s?.scenarios[0].metadata.interactiveExamplePath}}),console.log("[ScenarioEditor] Updated scenarios to save:",c),i&&await i(c,{recapture:p}),f&&f(u.name)},[s,t.name,u,x,d,i,f]),v=l.useCallback(n=>{D(o=>({...o,[n.target.name]:n.target.value}))},[]),A=l.useCallback(n=>{j(o=>{if(!o)return null;for(const p of[{arguments:n.metadata.data.argumentsData},n.metadata.data.mockData]){let g=p;for(const c of o.path)if(g=W(g,c),!g)break;g&&(o.data=g)}return{...o}}),D({name:n.name,description:n.description,data:n.metadata.data})},[]),T=l.useCallback((n,o)=>{D(p=>{for(const g of[{"Function Arguments":p.data.argumentsData},{"Retrieved Data":p.data.mockData}]){let c=g;for(const C of n.slice(0,-1))if(c=W(c,C),!c)break;if(c){const C=c[n[n.length-1]];j(P=>P?(P.namedPath[P.namedPath.length-1]===C&&(P.namedPath[P.namedPath.length-1]=o.toString()),P.data[n[n.length-1]]=o,{...P}):null),c[n[n.length-1]]=o}}return{...p}})},[]),B=l.useCallback(n=>{if(n.length===0){j(null);return}let o=y;const p=[];let g=w;for(const c of n){if(p.push(isNaN(parseInt(c))?c:o[c]?.name??o[c]?.title??o[c]?.id??c),o=W(o,c),!o){console.log("Data not found",o,c),j(null);return}Array.isArray(g)?g=g[0]:g=g[c]}j({path:n,namedPath:p,data:o,structure:g})},[y,w]);return l.useEffect(()=>{const n=o=>{o.data.type==="codeyam-log"&&o.data.data?.includes("Error")&&console.error("[ScenarioEditor] Error from iframe:",o.data.data)};return window.addEventListener("message",n),()=>window.removeEventListener("message",n)},[]),l.useEffect(()=>{if(h?.current?.contentWindow){const n={arguments:x.argumentsData??[],...x.mockData??{}},o={type:"codeyam-override-data",name:t.name,data:JSON.stringify(n)};console.log("[ScenarioEditor] → SENDING codeyam-override-data:",{type:o.type,name:o.name,dataPreview:JSON.stringify(n).substring(0,200)+"...",fullData:n}),h.current.contentWindow.postMessage(o,"*")}},[x,t,h]),e.jsx("form",{method:"post",onSubmit:n=>{I(n)},children:S?e.jsx(q,{analysis:s,scenarioName:u.name,dataItem:S,onClick:B,onChange:T,onAIResult:A,onGenerateData:b,saveFeedback:E}):e.jsxs(e.Fragment,{children:[e.jsx(_,{title:"Edit Name and Description",borderT:!0,children:e.jsx(te,{scenarioFormData:u,handleInputChange:v})}),t.metadata.data&&e.jsx(_,{title:"Edit Scenario Data",defaultOpen:!0,borderT:!0,borderB:!0,children:e.jsx(q,{analysis:s,scenarioName:u.name,dataItem:{path:[],namedPath:[],data:y,structure:w},onClick:B,onChange:T,onAIResult:A,onGenerateData:b,saveFeedback:E})})]})})},pe=({data:t})=>[{title:t?.scenario?`Edit ${t.scenario.name} - CodeYam`:"Edit Scenario - CodeYam"},{name:"description",content:"Edit scenario data"}];function ue(){const t=H(),a=t.analysis,r=t.scenario,s=t.defaultScenario,d=t.entitySha,i=t.projectSlug,f=V(),{iframeRef:h}=K(),[b,E]=l.useState(!1),[m,u]=l.useState(null),[D,S]=l.useState(null),[j,x]=l.useState(!1),[y,w]=l.useState(!1),[I,v]=l.useState(null),{interactiveServerUrl:A,isStarting:T,isLoading:B,showIframe:n,iframeKey:o,onIframeLoad:p}=Q({analysisId:a?.id,scenarioId:r?.id,scenarioName:r?.name,projectSlug:i,enabled:!0}),g=l.useCallback(async(N,L)=>{E(!0),u(null),S(null),console.log("[EditScenario] Starting save with options:",L),console.log("[EditScenario] Scenarios to save:",N);try{const O={analysis:a,scenarios:N};console.log("[EditScenario] Sending to /api/save-scenarios:",{analysisId:a.id,scenarioCount:N.length,scenarioNames:N.map(M=>M.name)});const R=await fetch("/api/save-scenarios",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(O)}),$=await R.json();if(console.log("[EditScenario] API response:",$),!R.ok||!$.success)throw new Error($.error||"Failed to save scenarios");if(console.log("[EditScenario] Scenarios saved successfully"),L?.recapture&&r.id&&A){console.log("[EditScenario] ========== DIRECT CAPTURE START =========="),console.log("[EditScenario] Taking screenshot from running server",{scenarioId:r.id,projectId:a.projectId,serverUrl:A}),u("Changes saved. Capturing screenshot...");const M={serverUrl:A,scenarioId:r.id,projectId:a.projectId,viewportWidth:1440};console.log("[EditScenario] Capture request body:",M);const F=await fetch("/api/capture-screenshot",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(M)});console.log("[EditScenario] Capture response status:",F.status);const k=await F.json();if(console.log("[EditScenario] Capture response body:",k),!F.ok||!k.success)throw console.error("[EditScenario] Capture failed:",k),new Error(k.error||"Failed to capture screenshot");console.log("[EditScenario] Screenshot captured successfully:",k),console.log("[EditScenario] ========== DIRECT CAPTURE COMPLETE =========="),u("Recapture successful")}else if(L?.recapture&&!A){console.log("[EditScenario] No running server, using queued recapture");const M=new FormData;M.append("analysisId",a.id||""),M.append("scenarioId",r.id||"");const F=await fetch("/api/recapture-scenario",{method:"POST",body:M}),k=await F.json();if(!F.ok||!k.success)throw new Error(k.error||"Failed to trigger recapture");console.log("Recapture queued:",k),S(k.jobId),u("Changes saved. Screenshot recapture queued.")}else u("Changes saved successfully.")}catch(O){console.error("Error saving scenarios:",O),u(`Error: ${O instanceof Error?O.message:String(O)}`)}finally{E(!1)}},[a,r.id,A]),c=l.useCallback(N=>{},[]),C=l.useCallback(async(N,L)=>{const O=await fetch("/api/generate-scenario-data",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:N,existingScenarios:a.scenarios,scenariosDataStructure:a.metadata?.scenariosDataStructure,editingMockName:r.name,editingMockData:L?.data})}),R=await O.json();if(!O.ok||!R.success)throw new Error(R.error||"Failed to generate scenario data");return R.data},[a,r.name]),P=l.useCallback(async()=>{if(!r.id){v("Cannot delete scenario without ID");return}x(!0),v(null);try{const N=await fetch("/api/delete-scenario",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({scenarioId:r.id,screenshotPaths:r.metadata?.screenshotPaths||[]})}),L=await N.json();if(!N.ok||!L.success)throw new Error(L.error||"Failed to delete scenario");f(`/entity/${d}`)}catch(N){console.error("[EditScenario] Error deleting scenario:",N),v(N instanceof Error?N.message:"Failed to delete scenario"),w(!1)}finally{x(!1)}},[r.id,r.metadata?.screenshotPaths,d,f]);return e.jsxs("div",{className:"h-screen bg-gray-50 flex flex-col",children:[e.jsxs("header",{className:"bg-white border-b border-gray-200 px-8 py-6 shrink-0",children:[e.jsx("div",{className:"mb-4",children:e.jsxs(U,{to:`/entity/${d}`,className:"text-blue-600 no-underline text-sm font-medium transition-colors hover:text-blue-700 hover:underline",children:["← Back to ",a.entity?.name]})}),e.jsxs("h1",{className:"text-[32px] font-bold text-gray-900 m-0 mb-3",children:["Edit Scenario: ",r.name]}),r.description&&e.jsx("p",{className:"text-gray-600 text-[15px] leading-relaxed m-0",children:r.description})]}),e.jsxs("div",{className:"flex flex-1 gap-0 min-h-0",children:[e.jsxs("aside",{className:"w-[400px] bg-white border-r border-gray-200 overflow-y-auto shrink-0",children:[e.jsx(de,{currentScenario:r,defaultScenario:s,dataStructure:a.metadata?.scenariosDataStructure||{},analysis:a,shouldCreateNewScenario:!1,onSave:g,onNavigate:c,iframeRef:h,onGenerateData:C,saveFeedback:{isSaving:b,message:m,isError:m?.startsWith("Error")??!1}}),m==="Recapture successful"&&e.jsx("div",{className:"px-4 pb-4",children:e.jsx(U,{to:`/entity/${d}`,className:"text-blue-600 hover:text-blue-700 hover:underline text-sm",children:"View updated screenshot on entity page →"})}),e.jsxs("div",{className:"border-t border-gray-200 p-4 mt-4",children:[e.jsx("div",{className:"text-sm text-gray-600 mb-3",children:"Permanently remove this scenario and its screenshots."}),y?e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"text-sm text-red-600 font-medium",children:['Are you sure you want to delete "',r.name,'"?']}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{onClick:()=>{P()},disabled:j,className:"flex-1 px-4 py-2 bg-red-600 text-white rounded-md text-sm font-medium hover:bg-red-700 disabled:bg-red-400 disabled:cursor-not-allowed transition-colors",children:j?"Deleting...":"Yes, Delete"}),e.jsx("button",{onClick:()=>w(!1),disabled:j,className:"flex-1 px-4 py-2 bg-gray-100 text-gray-700 border border-gray-300 rounded-md text-sm font-medium hover:bg-gray-200 disabled:opacity-50 transition-colors",children:"Cancel"})]})]}):e.jsx("button",{onClick:()=>w(!0),className:"w-full px-4 py-2 bg-red-50 text-red-600 border border-red-200 rounded-md text-sm font-medium hover:bg-red-100 transition-colors",children:"Delete Scenario"}),I&&e.jsx("div",{className:"mt-3 text-sm text-red-600 bg-red-50 px-3 py-2 rounded-md",children:I})]})]}),e.jsx("main",{className:"flex-1 bg-gray-100 overflow-auto flex flex-col min-w-0",children:e.jsx(X,{scenarioId:r.id||r.name,scenarioName:r.name,iframeUrl:A,isStarting:T,isLoading:B,showIframe:n,iframeKey:o,onIframeLoad:p,projectSlug:i,defaultWidth:1440,defaultHeight:900})})]})]})}const xe=z(function(){return e.jsx(Y,{children:e.jsx(ue,{})})});export{xe as default,pe as meta};
@@ -0,0 +1 @@
1
+ import{c as x}from"./createLucideIcon-CS7XDrKv.js";import{j as a}from"./chunk-WWGJGFF6-De6i8FUT.js";import{C}from"./clock-vWeoCemX.js";const z=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],w=x("chevron-down",z),S=()=>a.jsxs("svg",{width:"8",height:"8",viewBox:"0 0 9 9",fill:"none",className:"animate-spin",children:[a.jsx("circle",{cx:"4.5",cy:"4.5",r:"3.5",stroke:"#FFF4FC",strokeWidth:"1",fill:"none"}),a.jsx("path",{d:"M4.5 1C2.57 1 1 2.57 1 4.5C1 5.6 1.5 6.58 2.28 7.23",stroke:"#FF2AB5",strokeWidth:"1",strokeLinecap:"round",fill:"none"})]});function N(o,u,f){const h=o.entityType==="visual"||o.entityType==="library",g=(f?.jobs.some(s=>s.entityShas?.includes(o.sha)||s.type==="analysis"&&s.entityShas&&s.entityShas.length===0)??!1)||(f?.currentlyExecuting?.entityShas?.includes(o.sha)??!1),d=u?.currentEntityShas?.includes(o.sha)??!1,i=o.analyses?.[0],r=!!i,e=(i?.scenarios||[]).length,b=i?.entitySha===o.sha,y=r&&!b,p=i?.status?.scenarios||[],l=p.filter(s=>s.screenshotFinishedAt).length,m=e>0&&l===e,A=p.some(s=>s.screenshotStartedAt&&!s.screenshotFinishedAt),c=e>0&&!m&&b&&(d||A||!!u?.capturePid);let t,n;return g?(t="queued",n={label:"In Queue",color:"text-[#3098b4]",bgColor:"bg-[#cbf3fa]",icon:a.jsx(C,{size:14}),shouldAnimate:!1}):d||c?(t=c?"capturing":"analyzing",n={label:"Analyzing...",subtitle:c&&l>0?`(${l}/${e})`:void 0,color:"text-[#ff2ab5]",bgColor:"bg-[#ffdbf6]",icon:a.jsx(S,{}),shouldAnimate:!0}):y?(t="outdated",n={label:"Out of date",color:"text-[#c69538]",bgColor:"bg-[#fdf9c9]",icon:"⚠",shouldAnimate:!1}):r&&m?(t="up-to-date",n={label:"Up to date",color:"text-[#00925d]",bgColor:"bg-[#e8ffe6]",icon:a.jsx("div",{className:"w-2 h-2 rounded-full bg-[#00925d]"}),shouldAnimate:!1}):r&&e===0?(t="analyzed",n={label:"Analyzed",subtitle:"(no scenarios)",color:"text-[#00925d]",bgColor:"bg-[#e8ffe6]",icon:"✓",shouldAnimate:!1}):h?(t="not-analyzed",n={label:"Not analyzed",color:"text-[#646464]",bgColor:"bg-[#f9f9f9]",icon:a.jsx("div",{className:"w-2 h-2 rounded-full border border-[#646464]"}),shouldAnimate:!1}):(t="not-analyzable",n=null),{isQueued:g,isAnalyzing:d,isCapturing:c,hasAnalysis:r,hasScenarios:e>0,isOutdated:y,canBeAnalyzed:h,scenariosCaptured:l,totalScenarios:e,captureProgress:e>0?Math.round(l/e*100):0,status:t,badge:n}}export{w as C,N as g};
@@ -0,0 +1,5 @@
1
+ import{m as g,s as v,E as _,N as S,R as l,i as D,r as u,g as w,h as b,F as M,k as C,l as P,n as F,o as k,p as L,q as T,t as H,v as I,x as z,y as O,z as N,j as p}from"./chunk-WWGJGFF6-De6i8FUT.js";import{r as E}from"./index-D-zYbzFZ.js";var h={},y;function j(){if(y)return h;y=1;var t=E();return h.createRoot=t.createRoot,h.hydrateRoot=t.hydrateRoot,h}var q=j();[...S];new TextEncoder;(class extends l.Component{constructor(t){super(t),this.state={error:null,location:t.location}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,o){return o.location!==t.location?{error:null,location:t.location}:{error:o.error,location:o.location}}render(){return this.state.error?l.createElement(B,{error:this.state.error,renderAppShell:!0}):this.props.children}});function R({renderAppShell:t,title:o,children:a}){return t?l.createElement("html",{lang:"en"},l.createElement("head",null,l.createElement("meta",{charSet:"utf-8"}),l.createElement("meta",{name:"viewport",content:"width=device-width,initial-scale=1,viewport-fit=cover"}),l.createElement("title",null,o)),l.createElement("body",null,l.createElement("main",{style:{fontFamily:"system-ui, sans-serif",padding:"2rem"}},a))):a}function B({error:t,renderAppShell:o}){console.error(t);let a=l.createElement("script",{dangerouslySetInnerHTML:{__html:`
2
+ console.log(
3
+ "💿 Hey developer 👋. You can provide a way better UX than this when your app throws errors. Check out https://reactrouter.com/how-to/error-boundary for more information."
4
+ );
5
+ `}});if(D(t))return l.createElement(R,{renderAppShell:o,title:"Unhandled Thrown Response!"},l.createElement("h1",{style:{fontSize:"24px"}},t.status," ",t.statusText),a);let n;if(t instanceof Error)n=t;else{let r=t==null?"Unknown Error":typeof t=="object"&&"toString"in t?t.toString():JSON.stringify(t);n=new Error(r)}return l.createElement(R,{renderAppShell:o,title:"Application Error!"},l.createElement("h1",{style:{fontSize:"24px"}},"Application Error"),l.createElement("pre",{style:{padding:"2rem",background:"hsla(10, 50%, 50%, 0.1)",color:"red",overflow:"auto"}},n.stack),a)}function U(t){if(!t)return null;let o=Object.entries(t),a={};for(let[n,r]of o)if(r&&r.__type==="RouteErrorResponse")a[n]=new _(r.status,r.statusText,r.data,r.internal===!0);else if(r&&r.__type==="Error"){if(r.__subType){let i=window[r.__subType];if(typeof i=="function")try{let s=new i(r.message);s.stack=r.stack,a[n]=s}catch{}}if(a[n]==null){let i=new Error(r.message);i.stack=r.stack,a[n]=i}}else a[n]=r;return a}function A({state:t,routes:o,getRouteInfo:a,location:n,basename:r,isSpaMode:i}){let s={...t,loaderData:{...t.loaderData}},c=g(o,n,r);if(c)for(let x of c){let m=x.route.id,d=a(m);v(m,d.clientLoader,d.hasLoader,i)&&(d.hasHydrateFallback||!d.hasLoader)?delete s.loaderData[m]:d.hasLoader||(s.loaderData[m]=null)}return s}var W=E();function Y(t){return u.createElement(P,{flushSync:W.flushSync,...t})}var e=null,f=null;function J(){if(!e&&window.__reactRouterContext&&window.__reactRouterManifest&&window.__reactRouterRouteModules){if(window.__reactRouterManifest.sri===!0){const t=document.querySelector("script[rr-importmap]");if(t?.textContent)try{window.__reactRouterManifest.sri=JSON.parse(t.textContent).integrity}catch(o){console.error("Failed to parse import map",o)}}e={context:window.__reactRouterContext,manifest:window.__reactRouterManifest,routeModules:window.__reactRouterRouteModules,stateDecodingPromise:void 0,router:void 0,routerInitialized:!1}}}function V({getContext:t,unstable_instrumentations:o}){if(J(),!e)throw new Error("You must be using the SSR features of React Router in order to skip passing a `router` prop to `<RouterProvider>`");let a=e;if(!e.stateDecodingPromise){let s=e.context.stream;w(s,"No stream found for single fetch decoding"),e.context.stream=void 0,e.stateDecodingPromise=F(s,window).then(c=>{e.context.state=c.value,a.stateDecodingPromise.value=!0}).catch(c=>{a.stateDecodingPromise.error=c})}if(e.stateDecodingPromise.error)throw e.stateDecodingPromise.error;if(!e.stateDecodingPromise.value)throw e.stateDecodingPromise;let n=k(e.manifest.routes,e.routeModules,e.context.state,e.context.ssr,e.context.isSpaMode),r;if(e.context.isSpaMode){let{loaderData:s}=e.context.state;e.manifest.routes.root?.hasLoader&&s&&"root"in s&&(r={loaderData:{root:s.root}})}else r=A({state:e.context.state,routes:n,getRouteInfo:s=>({clientLoader:e.routeModules[s]?.clientLoader,hasLoader:e.manifest.routes[s]?.hasLoader===!0,hasHydrateFallback:e.routeModules[s]?.HydrateFallback!=null}),location:window.location,basename:window.__reactRouterContext?.basename,isSpaMode:e.context.isSpaMode}),r&&r.errors&&(r.errors=U(r.errors));let i=L({routes:n,history:I(),basename:e.context.basename,getContext:t,hydrationData:r,hydrationRouteProperties:N,unstable_instrumentations:o,mapRouteProperties:O,future:{middleware:e.context.future.v8_middleware},dataStrategy:H(()=>i,e.manifest,e.routeModules,e.context.ssr,e.context.basename),patchRoutesOnNavigation:T(e.manifest,e.routeModules,e.context.ssr,e.context.routeDiscovery,e.context.isSpaMode,e.context.basename)});return e.router=i,i.state.initialized&&(e.routerInitialized=!0,i.initialize()),i.createRoutesForHMR=z,window.__reactRouterDataRouter=i,i}function X(t){f||(f=V({getContext:t.getContext,unstable_instrumentations:t.unstable_instrumentations}));let[o,a]=u.useState(void 0);u.useEffect(()=>{},[]),u.useEffect(()=>{},[o]);let[n,r]=u.useState(f.state.location);return u.useLayoutEffect(()=>{e&&e.router&&!e.routerInitialized&&(e.routerInitialized=!0,e.router.initialize())},[]),u.useLayoutEffect(()=>{if(e&&e.router)return e.router.subscribe(i=>{i.location!==n&&r(i.location)})},[n]),w(e,"ssrInfo unavailable for HydratedRouter"),b(f,e.manifest,e.routeModules,e.context.ssr,e.context.routeDiscovery,e.context.isSpaMode),u.createElement(u.Fragment,null,u.createElement(M.Provider,{value:{manifest:e.manifest,routeModules:e.routeModules,future:e.context.future,criticalCss:o,ssr:e.context.ssr,isSpaMode:e.context.isSpaMode,routeDiscovery:e.context.routeDiscovery}},u.createElement(C,{location:n},u.createElement(Y,{router:f,unstable_useTransitions:t.unstable_useTransitions,unstable_onError:t.unstable_onError}))),u.createElement(u.Fragment,null))}u.startTransition(()=>{q.hydrateRoot(document,p.jsx(u.StrictMode,{children:p.jsx(X,{})}))});
@@ -0,0 +1 @@
1
+ import{c as e}from"./createLucideIcon-CS7XDrKv.js";const a=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],o=e("file-text",a);export{o as F};
@@ -0,0 +1 @@
1
+ import{b as q,r as j,j as e,L as U,e as J,w as K,u as X,d as Z}from"./chunk-WWGJGFF6-De6i8FUT.js";import{E as _}from"./EntityTypeIcon-D5ZHFomX.js";import{s as ee}from"./entityVersioning-Bk_YB1jM.js";import{L as B,g as te}from"./LibraryFunctionPreview-BYVx9KFp.js";import{S as V}from"./SafeScreenshot-Bual6h18.js";import{g as se,C as W}from"./entityStatus-BEqj2qBy.js";import{T as ae}from"./triangle-alert-D7k-ArFa.js";import"./file-text-LM0mgxXE.js";import"./createLucideIcon-CS7XDrKv.js";import"./chart-column-B8fb6wnw.js";import"./clock-vWeoCemX.js";function ne({entity:n,currentRun:c,queueState:v}){const E=q(),w=n.entityType==="visual"||n.entityType==="library",m=se(n,c,v),S=n.analyses?.[0],A=S?.status,P=S?.scenarios||[],F=j.useCallback(()=>{E.submit({entitySha:n.sha,filePath:n.filePath||""},{method:"post",action:"/api/analyze"})},[n,E]),N=ee(n),x=n.metadata?.isSuperseded===!0,h=m.isAnalyzing||m.isCapturing,T=h||m.isQueued;return e.jsxs("div",{className:"flex flex-col gap-1.5 p-3 rounded-lg transition-all bg-white hover:bg-gray-100",children:[e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsxs("div",{className:"flex items-center gap-3 flex-1 overflow-hidden",children:[e.jsx(_,{type:n.entityType}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(U,{to:`/entity/${n.sha}`,className:"font-semibold text-sm text-gray-900 whitespace-nowrap",children:n.name}),e.jsx("div",{className:"px-1 py-0 h-[15px] flex items-center justify-center rounded text-[10px] leading-[15px] uppercase font-semibold",style:{backgroundColor:n.entityType==="visual"?"#f3e8ff":n.entityType==="library"||n.entityType==="type"?"#f9f9f9":n.entityType==="data"?"#dbeafe":n.entityType==="index"?"#f9f9f9":"#f3f4f6",color:n.entityType==="visual"?"#7c3aed":n.entityType==="library"?"#06b6d5":n.entityType==="type"?"#db2627":n.entityType==="data"?"#2563eb":n.entityType==="index"?"#ea580c":"#6b7280"},children:n.entityType||"other"})]}),e.jsx("div",{className:"text-xs text-gray-500 mt-0.5 truncate",children:n.filePath}),n.description&&e.jsx("div",{className:"text-sm text-gray-600 mt-1 italic",children:n.description})]})]}),e.jsx("div",{className:"flex-1 shrink flex justify-end items-center gap-3",children:e.jsxs("div",{className:"flex items-center gap-3",children:[m.badge&&e.jsxs("div",{className:`flex items-center gap-1.5 px-2 py-0 h-[26px] rounded ${m.badge.bgColor}`,children:[typeof m.badge.icon=="string"?e.jsx("span",{className:"text-xs",children:m.badge.icon}):m.badge.icon,e.jsxs("span",{className:`text-[10px] leading-[15px] font-medium ${m.badge.color}`,children:[m.badge.label,m.badge.subtitle&&e.jsx("span",{className:"opacity-75 ml-1",children:m.badge.subtitle})]})]}),w&&!m.isQueued&&!h&&e.jsx("button",{onClick:F,disabled:T,className:`px-[15px] py-0 h-[23px] border-none rounded text-[12px] font-medium transition-all whitespace-nowrap flex items-center justify-center ${T?"cursor-not-allowed opacity-50":"cursor-pointer hover:-translate-y-px"}`,style:{backgroundColor:"#005C75",color:"#ffffff"},onMouseEnter:u=>{T||(u.currentTarget.style.backgroundColor="#004560")},onMouseLeave:u=>{T||(u.currentTarget.style.backgroundColor="#005C75")},title:h?"Analysis in progress":m.isQueued?"Already queued for analysis":"Analyze this entity",children:"Analyze"})]})})]}),P.length>0&&!m.isQueued&&!h&&e.jsx("div",{className:"flex gap-2 flex-wrap px-0 mt-3",children:P.slice(0,5).map((u,C)=>{if(!u.id)return null;if(n.entityType==="library")return e.jsx(B,{scenario:u,entitySha:n.sha,size:"medium",isOutdated:x||N},C);const D=u.metadata?.screenshotPaths?.[0],g=te(u,A,h,n.sha,v);if(g.isCaptured){const k=x||N;return e.jsx(U,{to:`/entity/${n.sha}/scenarios/${u.id}`,className:`relative w-20 h-15 border-2 rounded overflow-hidden cursor-pointer transition-all flex items-center justify-center hover:scale-105 hover:shadow-md ${k?"border-[#c69538] bg-[#fdf9c9] hover:border-[#a07a2d]":"border-gray-200 bg-gray-50 hover:border-blue-600"}`,children:e.jsx(V,{screenshotPath:D,alt:u.name,title:u.name,className:"max-w-full max-h-full object-contain object-center"})},C)}else{const k=g.hasError?"text-red-500":"text-gray-400";return e.jsx(U,{to:`/entity/${n.sha}/scenarios/${u.id}`,className:`w-20 h-15 border-2 border-dashed ${g.borderColor} rounded ${g.bgColor} flex items-center justify-center text-2xl`,title:g.title,children:e.jsx("span",{className:g.shouldSpin?"animate-pulse":k,children:g.icon})},C)}})})]})}function re({entities:n,page:c,itemsPerPage:v=50,currentRun:E,filter:w,entityType:m,queueState:S}){const[A,P]=J(),[F,N]=j.useState(new Set),[x,h]=j.useState(""),[T,u]=j.useState(!1),[C,D]=j.useState("all"),g=m||"all",k=(t,r=[])=>{if(r.some(a=>a.entityShas?.includes(t.sha)))return"analyzing";if(!t.analyses||t.analyses.length===0)return"not-analyzed";const o=t.analyses[0],y=o.createdAt?new Date(o.createdAt).getTime():0,s=t.metadata?.editedAt?new Date(t.metadata.editedAt).getTime():0;return y>=s?"up-to-date":"out-of-date"},z=j.useMemo(()=>{let t=n;return g!=="all"&&(t=t.filter(r=>r.entityType===g)),w==="analyzed"&&(t=t.filter(r=>r.analyses&&r.analyses.length>0)),t},[n,g,w]),M=j.useMemo(()=>{const t=new Map,r=new Map,l=new Map;z.forEach(s=>{const a=`${s.filePath}::${s.name}`,i=r.get(a);if(!i)r.set(a,s),l.set(a,[]);else{const f=i.metadata?.editedAt||i.createdAt||"",d=s.metadata?.editedAt||s.createdAt||"";let p=!1;if(d>f)p=!0;else if(d===f){const b=i.createdAt||"";p=(s.createdAt||"")>b}p?(l.get(a).push(i),r.set(a,s)):l.get(a).push(s)}}),r.forEach((s,a)=>{if(!(s.analyses&&s.analyses.length>0)&&s.metadata?.previousVersionWithAnalyses){const d=(l.get(a)||[]).find(p=>p.sha===s.metadata?.previousVersionWithAnalyses);d&&d.analyses&&d.analyses.length>0&&(s.analyses=d.analyses)}}),Array.from(r.values()).sort((s,a)=>{const i=!s.metadata?.notExported&&!s.metadata?.namedExport,f=!a.metadata?.notExported&&!a.metadata?.namedExport;return i&&!f?-1:!i&&f?1:0}).forEach(s=>{const a=s.filePath??"No File Path";t.has(a)||t.set(a,{filePath:a,entities:[],totalCount:0,uncommittedCount:0,lastUpdated:null,previewScreenshots:[],previewScreenshotErrors:[],previewLibraryScenarios:[],state:"up-to-date",simulationCount:0});const i=t.get(a);i.entities.push(s),i.totalCount++,s.metadata?.isUncommitted&&i.uncommittedCount++;const f=s.analyses?.[0]?.scenarios?.length||0;i.simulationCount+=f;const d=s.metadata?.editedAt||s.updatedAt;d&&(!i.lastUpdated||new Date(d)>new Date(i.lastUpdated))&&(i.lastUpdated=d)});const o=S?.jobs||[];t.forEach(s=>{const a=s.entities.map(i=>k(i,o));a.includes("analyzing")?s.state="analyzing":a.includes("out-of-date")?s.state="out-of-date":a.includes("not-analyzed")?s.state="not-analyzed":s.state="up-to-date"}),t.forEach(s=>{for(const a of s.entities){if(s.previewScreenshots.length+s.previewLibraryScenarios.length>=3)break;const f=a.analyses?.[0]?.scenarios||[];if(a.entityType==="library"){const d=f.find(p=>p.metadata?.executionResult||p.metadata?.error);d&&s.previewLibraryScenarios.push({scenario:d,entitySha:a.sha})}else{const d=f.find(p=>p.metadata?.screenshotPaths?.[0]);if(d){const p=d.metadata?.screenshotPaths?.[0],b=!!d.metadata?.error;p&&!s.previewScreenshots.includes(p)&&(s.previewScreenshots.push(p),s.previewScreenshotErrors.push(b))}}}});const y=Array.from(t.values());return y.sort((s,a)=>{if(w==="analyzed"){const d=Math.max(...s.entities.filter(b=>b.analyses?.[0]?.createdAt).map(b=>new Date(b.analyses[0].createdAt).getTime()),0);return Math.max(...a.entities.filter(b=>b.analyses?.[0]?.createdAt).map(b=>new Date(b.analyses[0].createdAt).getTime()),0)-d}if(s.uncommittedCount>0&&a.uncommittedCount===0)return-1;if(s.uncommittedCount===0&&a.uncommittedCount>0)return 1;const i=s.lastUpdated?new Date(s.lastUpdated).getTime():0;return(a.lastUpdated?new Date(a.lastUpdated).getTime():0)-i}),y},[z,w]),$=j.useMemo(()=>{let t=M;if(C!=="all"&&(t=t.filter(r=>r.state===C)),x.trim()){const r=x.toLowerCase();t=t.filter(l=>l.filePath.toLowerCase().includes(r))}return t},[M,x,C]),I=(c-1)*v,Q=I+v,R=$.slice(I,Q),L=Math.ceil($.length/v),O=t=>{N(r=>{const l=new Set(r);return l.has(t)?l.delete(t):l.add(t),l})},G=()=>{if(T)N(new Set),u(!1);else{const t=new Set(R.map(r=>r.filePath));N(t),u(!0)}},Y=t=>{switch(t){case"analyzing":return{text:"Analyzing...",bgColor:"#ffdbf6",textColor:"#ff2ab5",icon:e.jsxs("svg",{width:"8",height:"8",viewBox:"0 0 9 9",fill:"none",className:"animate-spin",children:[e.jsx("circle",{cx:"4.5",cy:"4.5",r:"3.5",stroke:"#FFF4FC",strokeWidth:"1",fill:"none"}),e.jsx("path",{d:"M4.5 1C2.57 1 1 2.57 1 4.5C1 5.6 1.5 6.58 2.28 7.23",stroke:"#FF2AB5",strokeWidth:"1",strokeLinecap:"round",fill:"none"})]})};case"up-to-date":return{text:"Up to date",bgColor:"#e8ffe6",textColor:"#00925d",icon:null};case"out-of-date":return{text:"Out of date",bgColor:"#fdf9c9",textColor:"#c69538",icon:null};case"not-analyzed":return{text:"Not analyzed",bgColor:"#f9f9f9",textColor:"#646464",icon:null}}},H=t=>{if(!t)return"Never";const r=new Date(t),l=new Date;if(r.getDate()===l.getDate()&&r.getMonth()===l.getMonth()&&r.getFullYear()===l.getFullYear()){const y=r.getHours(),s=r.getMinutes(),a=y>=12?"pm":"am",i=y%12||12,f=s.toString().padStart(2,"0");return`Today, ${i}:${f} ${a}`}return r.toLocaleString("en-US",{month:"numeric",day:"numeric",year:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!0})};return e.jsxs("div",{children:[e.jsxs("div",{className:"bg-white border-b border-gray-200 rounded-t-lg px-5 py-4 mb-6",children:[e.jsx("div",{className:"text-[10px] text-gray-500 mb-2 uppercase",children:"Filters"}),e.jsxs("div",{className:"flex gap-3",children:[e.jsxs("div",{className:"relative w-[130px]",children:[e.jsxs("select",{value:g,onChange:t=>{const r=t.target.value,l=new URLSearchParams(A);r==="all"?l.delete("entityType"):l.set("entityType",r),l.set("page","1"),P(l)},className:"appearance-none bg-gray-50 border border-gray-200 rounded px-[10px] pr-6 text-[12px] h-[39px] w-full cursor-pointer focus:outline-none focus:ring-0 focus:border-2 focus:border-[#005c75] hover:border-gray-300 transition-colors",children:[e.jsx("option",{value:"all",children:"All Types"}),e.jsx("option",{value:"visual",children:"Visual"}),e.jsx("option",{value:"library",children:"Library"})]}),e.jsx(W,{className:"absolute right-2 top-1/2 -translate-y-1/2 w-2 h-2 text-gray-500 pointer-events-none"})]}),e.jsxs("div",{className:"relative w-[130px]",children:[e.jsxs("select",{value:C,onChange:t=>D(t.target.value),className:"appearance-none bg-gray-50 border border-gray-200 rounded px-[10px] pr-6 text-[12px] h-[39px] w-full cursor-pointer focus:outline-none focus:ring-0 focus:border-2 focus:border-[#005c75] hover:border-gray-300 transition-colors",children:[e.jsx("option",{value:"all",children:"All States"}),e.jsx("option",{value:"analyzing",children:"Analyzing..."}),e.jsx("option",{value:"up-to-date",children:"Up to date"}),e.jsx("option",{value:"out-of-date",children:"Out of date"}),e.jsx("option",{value:"not-analyzed",children:"Not analyzed"})]}),e.jsx(W,{className:"absolute right-2 top-1/2 -translate-y-1/2 w-2 h-2 text-gray-500 pointer-events-none"})]}),e.jsxs("div",{className:"flex-1 relative",children:[e.jsx("span",{className:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400",children:"🔎"}),e.jsx("input",{type:"text",placeholder:"Search component",value:x,onChange:t=>h(t.target.value),className:"w-full bg-gray-50 border border-gray-200 rounded pl-9 pr-[10px] text-[12px] h-[39px] placeholder:text-gray-400 focus:outline-none focus:ring-0 focus:border-2 focus:border-[#005c75] transition-colors"})]}),e.jsx("button",{onClick:G,className:"px-[10px] h-[39px] border-none rounded text-[12px] font-medium cursor-pointer transition-colors whitespace-nowrap bg-[#005c75] text-white hover:bg-[#004a5e] disabled:bg-gray-400 disabled:cursor-not-allowed w-[130px]",children:T?"Collapse All":"Expand All"})]})]}),e.jsx("div",{className:"bg-[#f5f5f5] rounded-lg mb-2 text-[10px] font-normal leading-[15px] text-[#3e3e3e] uppercase",children:e.jsxs("div",{className:"flex justify-between items-center px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:[e.jsx("span",{className:"w-4"}),e.jsx("span",{children:"FILE"})]}),e.jsxs("div",{className:"flex items-center gap-3 shrink-0",children:[e.jsx("div",{className:"flex items-center h-[38px]",style:{width:"160px"},children:e.jsx("span",{className:"text-center w-full",children:"SIMULATIONS"})}),e.jsxs("div",{className:"flex gap-4 items-center",children:[e.jsx("span",{className:"text-center",style:{width:"70px"},children:"ENTITIES"}),e.jsx("span",{className:"text-center",style:{width:"127px"},children:"STATE"}),e.jsxs("div",{className:"flex items-center gap-1",style:{width:"116px"},children:[e.jsx("span",{className:"text-left",children:"MODIFIED"}),e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e.jsx("path",{d:"M3 5L6 8L9 5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})]})]})]})]})}),e.jsx("div",{className:"flex flex-col gap-3",children:R.map(t=>{const r=F.has(t.filePath),l=t.uncommittedCount>0;return e.jsxs("div",{className:"bg-white overflow-hidden",style:r?{border:"1px solid #e5e7eb",borderLeft:"4px solid #306AFF",borderRadius:"8px"}:{borderRadius:"8px"},children:[e.jsxs("div",{className:"flex justify-between items-center p-3 cursor-pointer select-none transition-colors hover:bg-gray-200",style:{outlineColor:"#005C75"},onClick:()=>O(t.filePath),role:"button",tabIndex:0,onKeyDown:o=>{(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),O(t.filePath))},children:[e.jsxs("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:[e.jsx("span",{className:"text-xs w-4 inline-flex items-center justify-center shrink-0",style:{color:r?"#3e3e3e":"#c7c7c7",transform:r?"rotate(90deg)":"none"},children:"▶"}),e.jsx("img",{src:"/icons/file-icon.svg",alt:"file",className:"w-4 h-5 shrink-0"}),e.jsx("span",{className:"font-normal text-gray-900 text-[12px] overflow-hidden text-ellipsis whitespace-nowrap",children:t.filePath}),l&&e.jsxs("span",{className:"text-[10px] text-amber-500 font-medium shrink-0 whitespace-nowrap",children:[t.uncommittedCount," uncommitted"]})]}),e.jsxs("div",{className:"flex items-center gap-3 shrink-0",children:[e.jsxs("div",{className:"flex gap-1.5 items-center justify-center h-[38px]",style:{width:"160px"},children:[t.previewScreenshots.map((o,y)=>{const s=t.previewScreenshotErrors[y],a=s?"border-red-400":"border-gray-200";return e.jsxs("div",{className:`relative w-[50px] h-[38px] border ${a} rounded overflow-hidden bg-gray-50 shrink-0 flex items-center justify-center`,children:[e.jsx(V,{screenshotPath:o,alt:`Preview ${y+1}`,className:"max-w-full max-h-full object-contain object-center"}),s&&e.jsx("div",{className:"absolute top-0 right-0 w-4 h-4 bg-red-500 text-white flex items-center justify-center text-[10px] rounded-bl",title:"Error during capture",children:e.jsx(ae,{size:12,color:"white"})})]},`screenshot-${y}`)}),t.previewLibraryScenarios.map((o,y)=>e.jsx(B,{scenario:o.scenario,entitySha:o.entitySha,size:"small",showBorder:!0},`library-${y}`))]}),e.jsxs("div",{className:"flex gap-3 items-center",children:[e.jsx("div",{className:"flex items-center justify-center",style:{minWidth:"70px"},children:e.jsx("div",{className:"bg-[#f9f9f9] flex items-center justify-center px-2 rounded whitespace-nowrap",style:{height:"23px"},children:e.jsxs("span",{className:"text-[12px] text-[#3e3e3e]",children:[t.totalCount," ",t.totalCount===1?"entity":"entities"]})})}),e.jsx("div",{className:"flex items-center justify-center",style:{width:"127px"},children:(()=>{const o=Y(t.state);return e.jsxs("span",{className:"text-[12px] px-2 rounded inline-flex items-center gap-1.5",style:{backgroundColor:o.bgColor,color:o.textColor,height:"23px"},children:[o.icon,o.text]})})()}),e.jsx("span",{className:"text-[11px] text-gray-400",style:{width:"116px",textAlign:"center"},children:H(t.lastUpdated)})]})]})]}),r&&e.jsx("div",{className:"p-2 bg-gray-50 flex flex-col gap-2",children:t.entities.map(o=>e.jsx(ne,{entity:o,currentRun:E,queueState:S},o.sha))})]},t.filePath)})}),L>1&&e.jsxs("div",{className:"flex justify-center items-center gap-4 mt-6 p-4",children:[c>1&&e.jsx("a",{href:`?${new URLSearchParams({...Object.fromEntries(A),page:String(c-1)}).toString()}`,className:"no-underline font-medium hover:underline",style:{color:"#005C75"},children:"← Previous"}),e.jsxs("span",{children:["Page ",c," of ",L]}),c<L&&e.jsx("a",{href:`?${new URLSearchParams({...Object.fromEntries(A),page:String(c+1)}).toString()}`,className:"no-underline font-medium hover:underline",style:{color:"#005C75"},children:"Next →"})]})]})}const ge=()=>[{title:"CodeYam - Files & Entities"},{name:"description",content:"Browse your codebase files and entities"}],be=K(function(){const{entities:c,currentCommit:v,page:E,filter:w,entityType:m,queueState:S}=X(),A=Z(),P=j.useMemo(()=>{if(!c)return[];const x=new Set([]);for(const h of c)x.add(h.filePath??"No File Path");return Array.from(x)},[c]),F=j.useMemo(()=>c?c.sort((x,h)=>x.metadata?.isUncommitted&&!h.metadata?.isUncommitted?-1:!x.metadata?.isUncommitted&&h.metadata?.isUncommitted?1:new Date(h.metadata?.editedAt||0).getTime()-new Date(x.metadata?.editedAt||0).getTime()):[],[c]),N=j.useMemo(()=>{if(!c)return[];const x=new Set([]);for(const h of c)h.metadata?.isUncommitted&&x.add(h.filePath??"No File Path");return Array.from(x)},[c]);return c?e.jsx("div",{className:"bg-[#f9f9f9] min-h-screen",children:e.jsxs("div",{className:"px-36 py-12 font-sans",children:[e.jsxs("div",{className:"mb-8",children:[e.jsx("h1",{className:"text-3xl font-bold text-gray-900",children:"Files & Entities"}),e.jsxs("div",{className:"flex gap-4 text-sm text-gray-500 mt-2",children:[A.state==="loading"&&e.jsx("span",{className:"text-blue-600 font-medium animate-pulse",children:"🔄"}),e.jsxs("span",{children:[P.length," files"]}),e.jsxs("span",{children:[c.length," entities"]}),e.jsxs("span",{className:"text-amber-500 font-medium",children:[N.length," uncommitted files"]})]})]}),e.jsx(re,{entities:F,page:E,itemsPerPage:50,currentRun:v?.metadata?.currentRun,filter:w,entityType:m,queueState:S})]})}):e.jsx("div",{className:"bg-[#f9f9f9] min-h-screen",children:e.jsxs("div",{className:"px-36 py-12 font-sans",children:[e.jsx("h1",{className:"text-3xl font-bold text-gray-900",children:"Error"}),e.jsx("p",{className:"text-base text-gray-500",children:"Unable to retrieve entities"})]})})});export{be as default,ge as meta};