claude-code-workflow 7.2.27 → 7.2.28

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 (382) hide show
  1. package/.ccw/specs/architecture-constraints.md +5 -0
  2. package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
  3. package/.claude/skills/investigate/SKILL.md +110 -0
  4. package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
  5. package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
  6. package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
  7. package/.claude/skills/investigate/phases/04-implementation.md +139 -0
  8. package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
  9. package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
  10. package/.claude/skills/investigate/specs/iron-law.md +101 -0
  11. package/.claude/skills/security-audit/SKILL.md +125 -0
  12. package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
  13. package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
  14. package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
  15. package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
  16. package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
  17. package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
  18. package/.claude/skills/ship/SKILL.md +105 -0
  19. package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
  20. package/.claude/skills/ship/phases/02-code-review.md +137 -0
  21. package/.claude/skills/ship/phases/03-version-bump.md +171 -0
  22. package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
  23. package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
  24. package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
  25. package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
  26. package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
  27. package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  28. package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
  29. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  30. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
  31. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
  32. package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
  33. package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  34. package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  35. package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  36. package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
  37. package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
  38. package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  39. package/.claude/skills/team-motion-design/SKILL.md +129 -0
  40. package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
  41. package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
  42. package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  43. package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
  44. package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
  45. package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
  46. package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  47. package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  48. package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  49. package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
  50. package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
  51. package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
  52. package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
  53. package/.claude/skills/team-ui-polish/SKILL.md +127 -0
  54. package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  55. package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
  56. package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
  57. package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
  58. package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
  59. package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
  60. package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
  61. package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
  62. package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  63. package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
  64. package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  65. package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
  66. package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  67. package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
  68. package/.claude/skills/team-uidesign/SKILL.md +6 -1
  69. package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
  70. package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
  71. package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
  72. package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
  73. package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
  74. package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
  75. package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
  76. package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
  77. package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
  78. package/.claude/skills/team-ux-improve/SKILL.md +3 -0
  79. package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
  80. package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
  81. package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
  82. package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
  83. package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
  84. package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
  85. package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
  86. package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
  87. package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
  88. package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
  89. package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
  90. package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  91. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  92. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
  93. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
  94. package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
  95. package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  96. package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  97. package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  98. package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  99. package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  100. package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  101. package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
  102. package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
  103. package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  104. package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  105. package/.codex/skills/investigate/agents/investigator.md +392 -0
  106. package/.codex/skills/investigate/orchestrator.md +362 -0
  107. package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
  108. package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
  109. package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
  110. package/.codex/skills/investigate/phases/04-implementation.md +195 -0
  111. package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
  112. package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
  113. package/.codex/skills/security-audit/orchestrator.md +384 -0
  114. package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
  115. package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
  116. package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
  117. package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
  118. package/.codex/skills/ship/agents/ship-operator.md +318 -0
  119. package/.codex/skills/ship/orchestrator.md +426 -0
  120. package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
  121. package/.codex/skills/ship/phases/02-code-review.md +228 -0
  122. package/.codex/skills/ship/phases/03-version-bump.md +259 -0
  123. package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
  124. package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
  125. package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
  126. package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  127. package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
  128. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  129. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
  130. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
  131. package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
  132. package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  133. package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  134. package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  135. package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
  136. package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
  137. package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  138. package/.codex/skills/team-motion-design/SKILL.md +222 -0
  139. package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
  140. package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
  141. package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  142. package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
  143. package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
  144. package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
  145. package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  146. package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  147. package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  148. package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
  149. package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
  150. package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
  151. package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
  152. package/.codex/skills/team-ui-polish/SKILL.md +218 -0
  153. package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  154. package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
  155. package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
  156. package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
  157. package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
  158. package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
  159. package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
  160. package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
  161. package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  162. package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
  163. package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  164. package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
  165. package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  166. package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
  167. package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
  168. package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  169. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  170. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
  171. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
  172. package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
  173. package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  174. package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  175. package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  176. package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  177. package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  178. package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  179. package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
  180. package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
  181. package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  182. package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  183. package/README.md +8 -0
  184. package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
  185. package/ccw/dist/core/hooks/hook-templates.js +114 -1
  186. package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
  187. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  188. package/ccw/dist/core/routes/cli-routes.js +34 -0
  189. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  190. package/ccw/dist/core/routes/system-routes.js +2 -2
  191. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  192. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
  193. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
  194. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
  195. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
  196. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
  197. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
  198. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
  199. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
  200. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
  201. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
  202. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
  203. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
  204. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
  205. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
  206. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
  207. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
  208. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
  209. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
  210. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
  211. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
  212. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
  213. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
  214. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
  215. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
  216. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
  217. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
  218. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
  219. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
  220. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
  221. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
  222. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
  223. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
  224. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
  225. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
  226. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
  227. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
  228. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
  229. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
  230. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
  231. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
  232. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
  233. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
  234. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
  235. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
  236. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
  237. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
  238. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
  239. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
  240. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
  241. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
  242. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
  243. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
  244. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
  245. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
  246. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
  247. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
  248. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
  249. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
  250. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
  251. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
  252. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
  253. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
  254. package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
  255. package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
  256. package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
  257. package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
  258. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
  259. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
  260. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
  261. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
  262. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
  263. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
  264. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
  265. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
  266. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
  267. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
  268. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
  269. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
  270. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
  271. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
  272. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
  273. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
  274. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
  275. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
  276. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
  277. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
  278. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
  279. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
  280. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
  281. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
  282. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
  283. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
  284. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
  285. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
  286. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
  287. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
  288. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
  289. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
  290. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
  291. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
  292. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
  293. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
  294. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
  295. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
  296. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
  297. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
  298. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
  299. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
  300. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
  301. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
  302. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
  303. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
  304. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
  305. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
  306. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
  307. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
  308. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
  309. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
  310. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
  311. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
  312. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
  313. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
  314. package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
  315. package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
  316. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
  317. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
  318. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
  319. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
  320. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
  321. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
  322. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
  323. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
  324. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
  325. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
  326. package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
  327. package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
  328. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
  329. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
  330. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
  331. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
  332. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
  333. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
  334. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
  335. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
  336. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
  337. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
  338. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
  339. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
  340. package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
  341. package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
  342. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
  343. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
  344. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
  345. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
  346. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
  347. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
  348. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
  349. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
  350. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
  351. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
  352. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
  353. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
  354. package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
  355. package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
  356. package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
  357. package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
  358. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
  359. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
  360. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
  361. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
  362. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
  363. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
  364. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
  365. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
  366. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
  367. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
  368. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
  369. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
  370. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
  371. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
  372. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
  373. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
  374. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
  375. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
  376. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
  377. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
  378. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
  379. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
  380. package/ccw/frontend/dist/index.html +1 -1
  381. package/package.json +105 -105
  382. package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import{O as k,u as te,P as re,Q as ae,r as g,U as ie,Z as ne,V as de,W as le,Y as ce,_ as F,j as e,e as f,$ as oe,C as y,a as w,a0 as xe,B as p,a1 as me,a2 as ue,a3 as pe,a4 as A,a5 as D,a6 as he,X as z,a7 as K,T as $,a8 as ge}from"./index-Dff4bg3u.js";import{L as je}from"./layout-grid-CBdE4K8h.js";import{S as ve}from"./square-pen-Bue1chJR.js";import{S as fe}from"./save-D9-CoT3x.js";import{S as H}from"./square-check-big-Dl5gYkjR.js";import{L as P}from"./lightbulb-B9K6ZgRp.js";/**
1
+ import{O as k,u as te,P as re,Q as ae,r as g,U as ie,Z as ne,V as de,W as le,Y as ce,_ as F,j as e,e as f,$ as oe,C as y,a as w,a0 as xe,B as p,a1 as me,a2 as ue,a3 as pe,a4 as A,a5 as D,a6 as he,X as z,a7 as K,T as $,a8 as ge}from"./index-rLgoBCfV.js";import{L as je}from"./layout-grid-C1niOWJx.js";import{S as ve}from"./square-pen-CgrHgZSl.js";import{S as fe}from"./save-Byxot0YU.js";import{S as H}from"./square-check-big-BbngGB2h.js";import{L as P}from"./lightbulb-BTmI7SUg.js";/**
2
2
  * @license lucide-react v0.460.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -24,4 +24,4 @@ import{O as k,u as te,P as re,Q as ae,r as g,U as ie,Z as ne,V as de,W as le,Y a
24
24
  * This source code is licensed under the ISC license.
25
25
  * See the LICENSE file in the root directory of this source tree.
26
26
  */const U=k("ShieldAlert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);function Ie(){const{formatMessage:r}=te(),{projectOverview:l,isLoading:Q,error:L,refetch:W}=re(),{updateGuidelines:M,isUpdating:I}=ae(),[X,Z]=g.useState("category"),[E,S]=g.useState(!1),[n,o]=g.useState(null);function b(s){if(!s)return"-";try{return new Date(s).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}catch{return"-"}}const N=[{key:"feature",i18nKey:"projectOverview.devIndex.category.features",icon:ie,color:"primary"},{key:"enhancement",i18nKey:"projectOverview.devIndex.category.enhancements",icon:ne,color:"success"},{key:"bugfix",i18nKey:"projectOverview.devIndex.category.bugfixes",icon:de,color:"destructive"},{key:"refactor",i18nKey:"projectOverview.devIndex.category.refactorings",icon:le,color:"warning"},{key:"docs",i18nKey:"projectOverview.devIndex.category.documentation",icon:ce,color:"muted"}],j=g.useMemo(()=>{if(!(l!=null&&l.developmentIndex))return[];const s=[];return N.forEach(a=>{var i;(((i=l.developmentIndex)==null?void 0:i[a.key])||[]).forEach(t=>{s.push({...t,type:a.key,typeLabel:r({id:a.i18nKey}),typeIcon:a.icon,typeColor:a.color,date:t.archivedAt||t.date||t.implemented_at||""})})}),s.sort((a,i)=>new Date(i.date).getTime()-new Date(a.date).getTime())},[l==null?void 0:l.developmentIndex]),q=N.reduce((s,a)=>{var i;return s[a.key]=(((i=l==null?void 0:l.developmentIndex)==null?void 0:i[a.key])||[]).length,s},{}),Y=Object.values(q).reduce((s,a)=>s+a,0),G=N.reduce((s,a)=>s+q[a.key],0),J=g.useCallback(()=>{var a,i,t,d,x,C,v,B;const s=l==null?void 0:l.guidelines;o({conventions:{coding_style:[...((a=s==null?void 0:s.conventions)==null?void 0:a.coding_style)||[]],naming_patterns:[...((i=s==null?void 0:s.conventions)==null?void 0:i.naming_patterns)||[]],file_structure:[...((t=s==null?void 0:s.conventions)==null?void 0:t.file_structure)||[]],documentation:[...((d=s==null?void 0:s.conventions)==null?void 0:d.documentation)||[]]},constraints:{architecture:[...((x=s==null?void 0:s.constraints)==null?void 0:x.architecture)||[]],tech_stack:[...((C=s==null?void 0:s.constraints)==null?void 0:C.tech_stack)||[]],performance:[...((v=s==null?void 0:s.constraints)==null?void 0:v.performance)||[]],security:[...((B=s==null?void 0:s.constraints)==null?void 0:B.security)||[]]},quality_rules:((s==null?void 0:s.quality_rules)||[]).map(T=>({...T})),learnings:((s==null?void 0:s.learnings)||[]).map(T=>({...T}))}),S(!0)},[l==null?void 0:l.guidelines]),ee=g.useCallback(()=>{S(!1),o(null)},[]),se=g.useCallback(async()=>{if(n)try{await M(n),F.success(r({id:"projectOverview.guidelines.saveSuccess"})),S(!1),o(null)}catch{F.error(r({id:"projectOverview.guidelines.saveError"}))}},[n,M,r]);if(Q)return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"h-48 rounded-lg bg-muted animate-pulse"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:Array.from({length:4}).map((s,a)=>e.jsx("div",{className:"h-32 rounded-lg bg-muted animate-pulse"},a))})]});if(L)return e.jsxs("div",{className:"flex items-center gap-2 p-4 rounded-lg bg-destructive/10 border border-destructive/30 text-destructive",children:[e.jsx(R,{className:"h-5 w-5 flex-shrink-0"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm font-medium",children:r({id:"common.errors.loadFailed"})}),e.jsx("p",{className:"text-xs mt-0.5",children:L.message})]}),e.jsx(f,{variant:"outline",size:"sm",onClick:()=>W(),children:r({id:"common.actions.retry"})})]});if(!l)return e.jsxs("div",{className:"flex flex-col items-center justify-center py-16 px-4",children:[e.jsx(oe,{className:"h-12 w-12 text-muted-foreground mb-4"}),e.jsx("h3",{className:"text-lg font-medium text-foreground mb-2",children:r({id:"projectOverview.empty.title"})}),e.jsx("p",{className:"text-sm text-muted-foreground text-center max-w-sm mb-4",children:r({id:"projectOverview.empty.message"})})]});const{technologyStack:c,architecture:u,keyComponents:h,developmentIndex:O,guidelines:m,metadata:_}=l;return e.jsxs("div",{className:"space-y-4",children:[e.jsx(y,{children:e.jsxs(w,{className:"p-4",children:[e.jsxs("div",{className:"flex items-start justify-between mb-4 pb-3 border-b border-border",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-lg font-semibold text-foreground gradient-text mb-1",children:l.projectName}),e.jsx("p",{className:"text-sm text-muted-foreground",children:l.description||r({id:"projectOverview.noDescription"})})]}),e.jsxs("div",{className:"text-sm text-muted-foreground text-right",children:[e.jsxs("div",{children:[r({id:"projectOverview.header.initialized"}),":"," ",b(l.initializedAt)]}),(_==null?void 0:_.analysis_mode)&&e.jsx("div",{className:"mt-1",children:e.jsx("span",{className:"font-mono text-xs px-1.5 py-0.5 bg-muted rounded",children:_.analysis_mode})})]})]}),e.jsxs("h3",{className:"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5",children:[e.jsx(xe,{className:"w-4 h-4"}),r({id:"projectOverview.techStack.title"})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.techStack.languages"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:c!=null&&c.languages&&c.languages.length>0?c.languages.map(s=>e.jsxs("div",{className:`flex items-center gap-1.5 px-2 py-1 bg-background border border-border rounded text-sm ${s.primary?"ring-1 ring-primary":""}`,children:[e.jsx("span",{className:"font-medium text-foreground",children:s.name}),e.jsx("span",{className:"text-xs text-muted-foreground",children:s.file_count}),s.primary&&e.jsx("span",{className:"text-[10px] px-1 py-0.5 bg-primary text-primary-foreground rounded",children:r({id:"projectOverview.techStack.primary"})})]},s.name)):e.jsx("span",{className:"text-muted-foreground text-sm",children:r({id:"projectOverview.techStack.noLanguages"})})})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.techStack.frameworks"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:c!=null&&c.frameworks&&c.frameworks.length>0?c.frameworks.map(s=>e.jsx(p,{variant:"success",className:"px-2 py-0.5 text-xs",children:s},s)):e.jsx("span",{className:"text-muted-foreground text-sm",children:r({id:"projectOverview.techStack.noFrameworks"})})})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.techStack.buildTools"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:c!=null&&c.build_tools&&c.build_tools.length>0?c.build_tools.map(s=>e.jsx(p,{variant:"warning",className:"px-2 py-0.5 text-xs",children:s},s)):e.jsx("span",{className:"text-muted-foreground text-sm",children:"-"})})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.techStack.testFrameworks"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:c!=null&&c.test_frameworks&&c.test_frameworks.length>0?c.test_frameworks.map(s=>e.jsx(p,{variant:"default",className:"px-2 py-0.5 text-xs",children:s},s)):e.jsx("span",{className:"text-muted-foreground text-sm",children:"-"})})]})]})]})}),(u||h&&h.length>0)&&e.jsx(y,{children:e.jsxs(w,{className:"p-4",children:[u&&e.jsxs(e.Fragment,{children:[e.jsxs("h3",{className:"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5",children:[e.jsx(be,{className:"w-4 h-4"}),r({id:"projectOverview.architecture.title"})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.architecture.style"})}),e.jsx("div",{className:"px-2 py-1.5 bg-background border border-border rounded",children:e.jsx("span",{className:"text-foreground font-medium text-sm",children:u.style})})]}),u.layers&&u.layers.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.architecture.layers"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:u.layers.map(s=>e.jsx("span",{className:"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs",children:s},s))})]}),u.patterns&&u.patterns.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.architecture.patterns"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:u.patterns.map(s=>e.jsx("span",{className:"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs",children:s},s))})]})]})]}),u&&h&&h.length>0&&e.jsx("div",{className:"border-t border-border my-4"}),h&&h.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs("h3",{className:"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5",children:[e.jsx(R,{className:"w-4 h-4"}),r({id:"projectOverview.components.title"})]}),e.jsx("div",{className:"space-y-2",children:h.map(s=>{const a=s.importance||"low",i={high:"border-l-2 border-l-destructive bg-destructive/5",medium:"border-l-2 border-l-warning bg-warning/5",low:"border-l-2 border-l-muted-foreground bg-muted"},t={high:e.jsx(p,{variant:"destructive",className:"text-xs px-1.5 py-0",children:r({id:"projectOverview.components.importance.high"})}),medium:e.jsx(p,{variant:"warning",className:"text-xs px-1.5 py-0",children:r({id:"projectOverview.components.importance.medium"})}),low:e.jsx(p,{variant:"secondary",className:"text-xs px-1.5 py-0",children:r({id:"projectOverview.components.importance.low"})})};return e.jsxs("div",{className:`p-2.5 rounded ${i[a]||i.low}`,children:[e.jsxs("div",{className:"flex items-start justify-between mb-1",children:[e.jsx("h4",{className:"font-medium text-foreground text-sm",children:s.name}),t[a]]}),s.description&&e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:s.description}),s.responsibility&&s.responsibility.length>0&&e.jsx("ul",{className:"text-xs text-muted-foreground list-disc list-inside",children:s.responsibility.map((d,x)=>e.jsx("li",{children:d},x))})]},s.name)})})]})]})}),O&&Y>0&&e.jsx(y,{children:e.jsxs(w,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsxs("h3",{className:"text-base font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(me,{className:"w-4 h-4"}),r({id:"projectOverview.devIndex.title"})]}),e.jsx("div",{className:"flex items-center gap-1.5",children:N.map(s=>{const a=q[s.key];if(a===0)return null;const i=s.icon;return e.jsxs(p,{variant:s.color==="primary"?"default":"secondary",className:"text-xs px-1.5 py-0",children:[e.jsx(i,{className:"w-3 h-3 mr-0.5"}),a]},s.key)})})]}),e.jsxs(ue,{value:X,onValueChange:s=>Z(s),children:[e.jsx("div",{className:"flex items-center justify-between mb-3",children:e.jsxs(pe,{className:"h-8",children:[e.jsxs(A,{value:"category",className:"text-sm px-3 py-1 h-7",children:[e.jsx(je,{className:"w-3.5 h-3.5 mr-1"}),r({id:"projectOverview.devIndex.categories"})]}),e.jsxs(A,{value:"timeline",className:"text-sm px-3 py-1 h-7",children:[e.jsx(Ne,{className:"w-3.5 h-3.5 mr-1"}),r({id:"projectOverview.devIndex.timeline"})]})]})}),e.jsx(D,{value:"category",children:e.jsx("div",{className:"space-y-3",children:N.map(s=>{const a=(O==null?void 0:O[s.key])||[];if(a.length===0)return null;const i=s.icon;return e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-2 flex items-center gap-1.5",children:[e.jsx(i,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r({id:s.i18nKey})}),e.jsx(p,{variant:"secondary",className:"text-xs px-1 py-0",children:a.length})]}),e.jsxs("div",{className:"space-y-1.5",children:[a.slice(0,5).map((t,d)=>e.jsxs("div",{className:"p-2 bg-background border border-border rounded hover:shadow-sm transition-shadow",children:[e.jsxs("div",{className:"flex items-start justify-between mb-0.5",children:[e.jsx("h5",{className:"font-medium text-foreground text-sm",children:t.title}),e.jsx("span",{className:"text-xs text-muted-foreground",children:b(t.archivedAt||t.date||t.implemented_at)})]}),t.description&&e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:t.description}),e.jsxs("div",{className:"flex items-center gap-1.5 text-xs flex-wrap",children:[t.sessionId&&e.jsx("span",{className:"px-1.5 py-0.5 bg-primary-light text-primary rounded font-mono",children:t.sessionId}),t.sub_feature&&e.jsx("span",{className:"px-1.5 py-0.5 bg-muted rounded",children:t.sub_feature}),t.status&&e.jsx("span",{className:`px-1.5 py-0.5 rounded ${t.status==="completed"?"bg-success-light text-success":"bg-warning-light text-warning"}`,children:t.status})]})]},d)),a.length>5&&e.jsxs("div",{className:"text-sm text-muted-foreground text-center py-1",children:["... and ",a.length-5," more"]})]})]},s.key)})})}),e.jsx(D,{value:"timeline",children:e.jsxs("div",{className:"space-y-3",children:[j.slice(0,20).map((s,a)=>{const i=s.typeIcon;return e.jsxs("div",{className:"flex gap-3",children:[e.jsxs("div",{className:"flex flex-col items-center",children:[e.jsx("div",{className:`w-6 h-6 rounded-full bg-${s.typeColor}-light text-${s.typeColor} flex items-center justify-center`,children:e.jsx(i,{className:"w-3 h-3"})}),a<Math.min(j.length,20)-1&&e.jsx("div",{className:"w-0.5 flex-1 bg-border mt-1.5"})]}),e.jsxs("div",{className:"flex-1 pb-3",children:[e.jsxs("div",{className:"flex items-start justify-between mb-0.5",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(p,{variant:s.typeColor==="primary"?"default":s.typeColor==="destructive"?"destructive":"secondary",className:"text-xs px-1.5 py-0",children:s.typeLabel}),e.jsx("h5",{className:"font-medium text-foreground text-sm",children:s.title})]}),e.jsx("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:b(s.date)})]}),s.description&&e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:s.description}),e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[s.sessionId&&e.jsx("span",{className:"px-1.5 py-0.5 bg-muted rounded font-mono",children:s.sessionId}),s.sub_feature&&e.jsx("span",{className:"px-1.5 py-0.5 bg-muted rounded",children:s.sub_feature}),s.tags&&s.tags.slice(0,3).map(t=>e.jsx("span",{className:"px-1.5 py-0.5 bg-accent rounded",children:t},t))]})]})]},a)}),j.length>20&&e.jsxs("div",{className:"text-sm text-muted-foreground text-center py-2",children:["... and ",j.length-20," more entries"]})]})})]})]})}),m&&e.jsx(y,{children:e.jsxs(w,{className:"p-6",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-foreground flex items-center gap-2",children:[e.jsx(he,{className:"w-5 h-5"}),r({id:"projectOverview.guidelines.title"})]}),e.jsx("div",{className:"flex gap-2",children:E?e.jsxs(e.Fragment,{children:[e.jsxs(f,{variant:"outline",size:"sm",onClick:ee,disabled:I,children:[e.jsx(z,{className:"w-4 h-4 mr-1"}),r({id:"projectOverview.guidelines.cancel"})]}),e.jsxs(f,{variant:"default",size:"sm",onClick:se,disabled:I,children:[e.jsx(fe,{className:"w-4 h-4 mr-1"}),r(I?{id:"projectOverview.guidelines.saving"}:{id:"projectOverview.guidelines.save"})]})]}):e.jsxs(f,{variant:"outline",size:"sm",onClick:J,children:[e.jsx(ve,{className:"w-4 h-4 mr-1"}),r({id:"projectOverview.guidelines.edit"})]})})]}),e.jsx("div",{className:"space-y-6",children:E?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(V,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.conventions"})})]}),e.jsx("div",{className:"space-y-3",children:Object.entries({coding_style:"codingStyle",naming_patterns:"namingPatterns",file_structure:"fileStructure",documentation:"documentation"}).map(([s,a])=>{var i;return e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-muted-foreground mb-1 block",children:r({id:`projectOverview.guidelines.conventionCategories.${a}`})}),e.jsxs("div",{className:"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]",children:[(((i=n==null?void 0:n.conventions)==null?void 0:i[s])||[]).map((t,d)=>e.jsxs("div",{className:"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm",children:[e.jsx("span",{children:t}),e.jsx("button",{className:"ml-1 text-muted-foreground hover:text-foreground",onClick:()=>{const x={...n};x.conventions[s]=x.conventions[s].filter((C,v)=>v!==d),o(x)},children:e.jsx(z,{className:"w-3 h-3"})})]},d)),e.jsx("input",{type:"text",className:"flex-1 min-w-[120px] bg-transparent outline-none text-sm",placeholder:r({id:"projectOverview.guidelines.placeholders.addItem"}),onKeyDown:t=>{if(t.key==="Enter"&&t.currentTarget.value.trim()){const d={...n};d.conventions[s]=[...d.conventions[s]||[],t.currentTarget.value.trim()],o(d),t.currentTarget.value=""}}})]})]},s)})})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(U,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.constraints"})})]}),e.jsx("div",{className:"space-y-3",children:Object.entries({architecture:"architecture",tech_stack:"techStack",performance:"performance",security:"security"}).map(([s,a])=>{var i;return e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-muted-foreground mb-1 block",children:r({id:`projectOverview.guidelines.constraintCategories.${a}`})}),e.jsxs("div",{className:"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]",children:[(((i=n==null?void 0:n.constraints)==null?void 0:i[s])||[]).map((t,d)=>e.jsxs("div",{className:"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm",children:[e.jsx("span",{children:t}),e.jsx("button",{className:"ml-1 text-muted-foreground hover:text-foreground",onClick:()=>{const x={...n};x.constraints[s]=x.constraints[s].filter((C,v)=>v!==d),o(x)},children:e.jsx(z,{className:"w-3 h-3"})})]},d)),e.jsx("input",{type:"text",className:"flex-1 min-w-[120px] bg-transparent outline-none text-sm",placeholder:r({id:"projectOverview.guidelines.placeholders.addItem"}),onKeyDown:t=>{if(t.key==="Enter"&&t.currentTarget.value.trim()){const d={...n};d.constraints[s]=[...d.constraints[s]||[],t.currentTarget.value.trim()],o(d),t.currentTarget.value=""}}})]})]},s)})})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground flex items-center gap-2",children:[e.jsx(H,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.qualityRules"})})]}),e.jsxs(f,{variant:"ghost",size:"sm",onClick:()=>{const s={...n};s.quality_rules=[...s.quality_rules||[],{rule:"",scope:"",enforced_by:""}],o(s)},children:[e.jsx(K,{className:"w-4 h-4 mr-1"}),r({id:"projectOverview.guidelines.qualityRuleFields.addRule"})]})]}),e.jsx("div",{className:"space-y-2",children:((n==null?void 0:n.quality_rules)||[]).map((s,a)=>e.jsxs("div",{className:"p-3 border border-border rounded-lg space-y-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",className:"flex-1 px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.rule"}),value:s.rule,onChange:i=>{const t={...n};t.quality_rules[a].rule=i.target.value,o(t)}}),e.jsx("button",{className:"text-destructive hover:bg-destructive/10 p-2 rounded",onClick:()=>{const i={...n};i.quality_rules=i.quality_rules.filter((t,d)=>d!==a),o(i)},children:e.jsx($,{className:"w-4 h-4"})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx("input",{type:"text",className:"px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.scope"}),value:s.scope,onChange:i=>{const t={...n};t.quality_rules[a].scope=i.target.value,o(t)}}),e.jsx("input",{type:"text",className:"px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.enforcedBy"}),value:s.enforced_by||"",onChange:i=>{const t={...n};t.quality_rules[a].enforced_by=i.target.value,o(t)}})]})]},a))})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.learnings"})})]}),e.jsxs(f,{variant:"ghost",size:"sm",onClick:()=>{const s={...n};s.learnings=[...s.learnings||[],{insight:"",category:"",session_id:"",context:"",date:new Date().toISOString()}],o(s)},children:[e.jsx(K,{className:"w-4 h-4 mr-1"}),r({id:"projectOverview.guidelines.learningFields.addLearning"})]})]}),e.jsx("div",{className:"space-y-2",children:((n==null?void 0:n.learnings)||[]).map((s,a)=>e.jsxs("div",{className:"p-3 border border-border rounded-lg space-y-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",className:"flex-1 px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.insight"}),value:s.insight,onChange:i=>{const t={...n};t.learnings[a].insight=i.target.value,o(t)}}),e.jsx("button",{className:"text-destructive hover:bg-destructive/10 p-2 rounded",onClick:()=>{const i={...n};i.learnings=i.learnings.filter((t,d)=>d!==a),o(i)},children:e.jsx($,{className:"w-4 h-4"})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx("input",{type:"text",className:"px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.category"}),value:s.category||"",onChange:i=>{const t={...n};t.learnings[a].category=i.target.value,o(t)}}),e.jsx("input",{type:"text",className:"px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.sessionId"}),value:s.session_id||"",onChange:i=>{const t={...n};t.learnings[a].session_id=i.target.value,o(t)}})]}),e.jsx("textarea",{className:"w-full px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.context"}),rows:2,value:s.context||"",onChange:i=>{const t={...n};t.learnings[a].context=i.target.value,o(t)}})]},a))})]})]}):e.jsxs(e.Fragment,{children:[m.conventions&&e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(V,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.conventions"})})]}),e.jsx("div",{className:"space-y-2",children:Object.entries(m.conventions).map(([s,a])=>{const i=Array.isArray(a)?a:[];return i.length===0?null:e.jsx("div",{className:"space-y-1",children:i.map((t,d)=>e.jsxs("div",{className:"flex items-start gap-3 p-3 bg-background border border-border rounded-lg",children:[e.jsx("span",{className:"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded",children:s}),e.jsx("span",{className:"text-sm text-foreground",children:t})]},d))},s)})})]}),m.constraints&&e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(U,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.constraints"})})]}),e.jsx("div",{className:"space-y-2",children:Object.entries(m.constraints).map(([s,a])=>{const i=Array.isArray(a)?a:[];return i.length===0?null:e.jsx("div",{className:"space-y-1",children:i.map((t,d)=>e.jsxs("div",{className:"flex items-start gap-3 p-3 bg-background border border-border rounded-lg",children:[e.jsx("span",{className:"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded",children:s}),e.jsx("span",{className:"text-sm text-foreground",children:t})]},d))},s)})})]}),m.quality_rules&&e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(H,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.qualityRules"})})]}),m.quality_rules.length>0?e.jsx("div",{className:"space-y-2",children:m.quality_rules.map((s,a)=>e.jsxs("div",{className:"p-3 bg-background border border-border rounded-lg",children:[e.jsxs("div",{className:"flex items-start justify-between mb-1",children:[e.jsx("span",{className:"text-sm text-foreground font-medium",children:s.rule}),s.enforced_by&&e.jsx("span",{className:"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded",children:s.enforced_by})]}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[r({id:"projectOverview.guidelines.scope"}),": ",s.scope]})]},a))}):e.jsx("p",{className:"text-sm text-muted-foreground italic",children:r({id:"projectOverview.guidelines.noQualityRules"})||"No quality rules defined yet. Switch to edit mode to add rules."})]}),m.learnings&&e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.learnings"})})]}),m.learnings.length>0?e.jsx("div",{className:"space-y-2",children:m.learnings.map((s,a)=>e.jsxs("div",{className:"p-3 bg-background border border-border rounded-lg border-l-4 border-l-primary",children:[e.jsxs("div",{className:"flex items-start justify-between mb-2",children:[e.jsx("span",{className:"text-sm text-foreground",children:s.insight}),e.jsx("span",{className:"text-xs text-muted-foreground whitespace-nowrap ml-2",children:b(s.date)})]}),e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[s.category&&e.jsx("span",{className:"px-2 py-0.5 bg-muted text-muted-foreground rounded",children:s.category}),s.session_id&&e.jsx("span",{className:"px-2 py-0.5 bg-primary-light text-primary rounded font-mono",children:s.session_id})]}),s.context&&e.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:s.context})]},a))}):e.jsx("p",{className:"text-sm text-muted-foreground italic",children:r({id:"projectOverview.guidelines.noLearnings"})||"No learning summaries yet. Switch to edit mode to add learnings."})]})]})})]})}),e.jsx(y,{children:e.jsxs(w,{className:"p-6",children:[e.jsxs("h3",{className:"text-lg font-semibold text-foreground mb-4 flex items-center gap-2",children:[e.jsx(ge,{className:"w-5 h-5"}),r({id:"projectOverview.stats.title"})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"text-center p-4 bg-background rounded-lg",children:[e.jsx("div",{className:"text-3xl font-bold text-primary mb-1",children:G}),e.jsx("div",{className:"text-sm text-muted-foreground",children:r({id:"projectOverview.stats.totalFeatures"})})]}),e.jsxs("div",{className:"text-center p-4 bg-background rounded-lg",children:[e.jsx("div",{className:"text-sm text-muted-foreground mb-1",children:r({id:"projectOverview.stats.lastUpdated"})}),e.jsx("div",{className:"text-sm font-medium text-foreground",children:j.length>0?b(j[0].date):"-"})]})]})]})})]})}export{Ie as ProjectOverviewPage,Ie as default};
27
- //# sourceMappingURL=ProjectOverviewPage-shTilwiT.js.map
27
+ //# sourceMappingURL=ProjectOverviewPage-Cit0Yq0D.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectOverviewPage-shTilwiT.js","sources":["../../../../node_modules/lucide-react/dist/esm/icons/blocks.js","../../../../node_modules/lucide-react/dist/esm/icons/book-marked.js","../../../../node_modules/lucide-react/dist/esm/icons/component.js","../../../../node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js","../../../../node_modules/lucide-react/dist/esm/icons/shield-alert.js","../../src/pages/ProjectOverviewPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Blocks = createLucideIcon(\"Blocks\", [\n [\"rect\", { width: \"7\", height: \"7\", x: \"14\", y: \"3\", rx: \"1\", key: \"6d4xhi\" }],\n [\n \"path\",\n {\n d: \"M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3\",\n key: \"1fpvtg\"\n }\n ]\n]);\n\nexport { Blocks as default };\n//# sourceMappingURL=blocks.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst BookMarked = createLucideIcon(\"BookMarked\", [\n [\"path\", { d: \"M10 2v8l3-3 3 3V2\", key: \"sqw3rj\" }],\n [\n \"path\",\n {\n d: \"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\",\n key: \"k3hazp\"\n }\n ]\n]);\n\nexport { BookMarked as default };\n//# sourceMappingURL=book-marked.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Component = createLucideIcon(\"Component\", [\n [\n \"path\",\n {\n d: \"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\",\n key: \"1uwlt4\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z\",\n key: \"10291m\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z\",\n key: \"1tqoq1\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\",\n key: \"1x6lto\"\n }\n ]\n]);\n\nexport { Component as default };\n//# sourceMappingURL=component.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst GitCommitHorizontal = createLucideIcon(\"GitCommitHorizontal\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"line\", { x1: \"3\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1dyftd\" }],\n [\"line\", { x1: \"15\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"oup4p8\" }]\n]);\n\nexport { GitCommitHorizontal as default };\n//# sourceMappingURL=git-commit-horizontal.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldAlert = createLucideIcon(\"ShieldAlert\", [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"M12 8v4\", key: \"1got3b\" }],\n [\"path\", { d: \"M12 16h.01\", key: \"1drbdi\" }]\n]);\n\nexport { ShieldAlert as default };\n//# sourceMappingURL=shield-alert.js.map\n","// ========================================\r\n// ProjectOverviewPage Component\r\n// ========================================\r\n// Project overview page displaying architecture, tech stack, and components\r\n\r\nimport * as React from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n Code2,\r\n Blocks,\r\n Component,\r\n GitBranch,\r\n BarChart3,\r\n ScrollText,\r\n ClipboardList,\r\n Sparkles,\r\n Zap,\r\n Bug,\r\n Wrench,\r\n BookOpen,\r\n CheckSquare,\r\n Lightbulb,\r\n BookMarked,\r\n ShieldAlert,\r\n LayoutGrid,\r\n GitCommitHorizontal,\r\n Edit,\r\n Save,\r\n X,\r\n Plus,\r\n Trash2,\r\n} from 'lucide-react';\r\nimport { useProjectOverview, useUpdateGuidelines } from '@/hooks/useProjectOverview';\r\nimport { toast } from 'sonner';\r\nimport type {\r\n KeyComponent,\r\n DevelopmentIndexEntry,\r\n GuidelineEntry,\r\n LearningEntry,\r\n ProjectGuidelines,\r\n} from '@/lib/api';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Card, CardContent } from '@/components/ui/Card';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\r\n\r\ntype DevIndexView = 'category' | 'timeline';\r\n\r\n// Helper function to format date (currently unused but kept for future use)\r\n// @ts-ignore - kept for potential future use\r\nfunction formatDate(dateString: string | undefined): string {\r\n if (!dateString) return '-';\r\n try {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString(undefined, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n } catch {\r\n return '-';\r\n }\r\n}\r\n\r\n/**\r\n * ProjectOverviewPage component - Display project architecture and tech stack\r\n */\r\nexport function ProjectOverviewPage() {\r\n const { formatMessage } = useIntl();\r\n const { projectOverview, isLoading, error, refetch } = useProjectOverview();\r\n const { updateGuidelines, isUpdating } = useUpdateGuidelines();\r\n const [devIndexView, setDevIndexView] = React.useState<DevIndexView>('category');\r\n const [isEditMode, setIsEditMode] = React.useState(false);\r\n const [editedGuidelines, setEditedGuidelines] = React.useState<ProjectGuidelines | null>(null);\r\n\r\n // Helper function to format date\r\n function formatDate(dateString: string | undefined): string {\r\n if (!dateString) return '-';\r\n try {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString(undefined, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n } catch {\r\n return '-';\r\n }\r\n }\r\n\r\n // Define dev index categories (before any conditional logic)\r\n const devIndexCategories = [\r\n { key: 'feature', i18nKey: 'projectOverview.devIndex.category.features', icon: Sparkles, color: 'primary' },\r\n { key: 'enhancement', i18nKey: 'projectOverview.devIndex.category.enhancements', icon: Zap, color: 'success' },\r\n { key: 'bugfix', i18nKey: 'projectOverview.devIndex.category.bugfixes', icon: Bug, color: 'destructive' },\r\n { key: 'refactor', i18nKey: 'projectOverview.devIndex.category.refactorings', icon: Wrench, color: 'warning' },\r\n { key: 'docs', i18nKey: 'projectOverview.devIndex.category.documentation', icon: BookOpen, color: 'muted' },\r\n ];\r\n\r\n // Collect all entries for timeline (compute before any conditional logic)\r\n const allDevEntries = React.useMemo(() => {\r\n if (!projectOverview?.developmentIndex) return [];\r\n\r\n const entries: Array<{\r\n title: string;\r\n description?: string;\r\n type: string;\r\n typeLabel: string;\r\n typeIcon: React.ElementType;\r\n typeColor: string;\r\n date: string;\r\n sessionId?: string;\r\n sub_feature?: string;\r\n tags?: string[];\r\n }> = [];\r\n\r\n devIndexCategories.forEach((cat) => {\r\n (projectOverview.developmentIndex?.[cat.key] || []).forEach((entry: DevelopmentIndexEntry) => {\r\n entries.push({\r\n ...entry,\r\n type: cat.key,\r\n typeLabel: formatMessage({ id: cat.i18nKey }),\r\n typeIcon: cat.icon,\r\n typeColor: cat.color,\r\n date: entry.archivedAt || entry.date || entry.implemented_at || '',\r\n });\r\n });\r\n });\r\n\r\n return entries.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());\r\n }, [projectOverview?.developmentIndex]);\r\n\r\n // Calculate totals for development index\r\n const devIndexTotals = devIndexCategories.reduce((acc, cat) => {\r\n acc[cat.key] = (projectOverview?.developmentIndex?.[cat.key] || []).length;\r\n return acc;\r\n }, {} as Record<string, number>);\r\n\r\n const totalEntries = Object.values(devIndexTotals).reduce((sum, count) => sum + count, 0);\r\n\r\n // Calculate statistics\r\n const totalFeatures = devIndexCategories.reduce((sum, cat) => sum + devIndexTotals[cat.key], 0);\r\n\r\n // Guidelines edit handlers\r\n const handleEditStart = React.useCallback(() => {\r\n const g = projectOverview?.guidelines;\r\n setEditedGuidelines({\r\n conventions: {\r\n coding_style: [...(g?.conventions?.coding_style || [])],\r\n naming_patterns: [...(g?.conventions?.naming_patterns || [])],\r\n file_structure: [...(g?.conventions?.file_structure || [])],\r\n documentation: [...(g?.conventions?.documentation || [])],\r\n },\r\n constraints: {\r\n architecture: [...(g?.constraints?.architecture || [])],\r\n tech_stack: [...(g?.constraints?.tech_stack || [])],\r\n performance: [...(g?.constraints?.performance || [])],\r\n security: [...(g?.constraints?.security || [])],\r\n },\r\n quality_rules: (g?.quality_rules || []).map((r) => ({ ...r })),\r\n learnings: (g?.learnings || []).map((l) => ({ ...l })),\r\n });\r\n setIsEditMode(true);\r\n }, [projectOverview?.guidelines]);\r\n\r\n const handleEditCancel = React.useCallback(() => {\r\n setIsEditMode(false);\r\n setEditedGuidelines(null);\r\n }, []);\r\n\r\n const handleSave = React.useCallback(async () => {\r\n if (!editedGuidelines) return;\r\n try {\r\n await updateGuidelines(editedGuidelines);\r\n toast.success(formatMessage({ id: 'projectOverview.guidelines.saveSuccess' }));\r\n setIsEditMode(false);\r\n setEditedGuidelines(null);\r\n } catch {\r\n toast.error(formatMessage({ id: 'projectOverview.guidelines.saveError' }));\r\n }\r\n }, [editedGuidelines, updateGuidelines, formatMessage]);\r\n\r\n // Render loading state\r\n if (isLoading) {\r\n return (\r\n <div className=\"space-y-6\">\r\n <div className=\"h-48 rounded-lg bg-muted animate-pulse\" />\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {Array.from({ length: 4 }).map((_, i) => (\r\n <div key={i} className=\"h-32 rounded-lg bg-muted animate-pulse\" />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Render error state\r\n if (error) {\r\n return (\r\n <div className=\"flex items-center gap-2 p-4 rounded-lg bg-destructive/10 border border-destructive/30 text-destructive\">\r\n <Component className=\"h-5 w-5 flex-shrink-0\" />\r\n <div className=\"flex-1\">\r\n <p className=\"text-sm font-medium\">{formatMessage({ id: 'common.errors.loadFailed' })}</p>\r\n <p className=\"text-xs mt-0.5\">{error.message}</p>\r\n </div>\r\n <Button variant=\"outline\" size=\"sm\" onClick={() => refetch()}>\r\n {formatMessage({ id: 'common.actions.retry' })}\r\n </Button>\r\n </div>\r\n );\r\n }\r\n\r\n // Render empty state\r\n if (!projectOverview) {\r\n return (\r\n <div className=\"flex flex-col items-center justify-center py-16 px-4\">\r\n <ClipboardList className=\"h-12 w-12 text-muted-foreground mb-4\" />\r\n <h3 className=\"text-lg font-medium text-foreground mb-2\">\r\n {formatMessage({ id: 'projectOverview.empty.title' })}\r\n </h3>\r\n <p className=\"text-sm text-muted-foreground text-center max-w-sm mb-4\">\r\n {formatMessage({ id: 'projectOverview.empty.message' })}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n const { technologyStack, architecture, keyComponents, developmentIndex, guidelines, metadata } = projectOverview;\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n {/* Project Header + Technology Stack - Combined */}\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n {/* Header Row */}\r\n <div className=\"flex items-start justify-between mb-4 pb-3 border-b border-border\">\r\n <div className=\"flex-1\">\r\n <h1 className=\"text-lg font-semibold text-foreground gradient-text mb-1\">\r\n {projectOverview.projectName}\r\n </h1>\r\n <p className=\"text-sm text-muted-foreground\">\r\n {projectOverview.description || formatMessage({ id: 'projectOverview.noDescription' })}\r\n </p>\r\n </div>\r\n <div className=\"text-sm text-muted-foreground text-right\">\r\n <div>\r\n {formatMessage({ id: 'projectOverview.header.initialized' })}:{' '}\r\n {formatDate(projectOverview.initializedAt)}\r\n </div>\r\n {metadata?.analysis_mode && (\r\n <div className=\"mt-1\">\r\n <span className=\"font-mono text-xs px-1.5 py-0.5 bg-muted rounded\">\r\n {metadata.analysis_mode}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Technology Stack */}\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Code2 className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.techStack.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\r\n {/* Languages */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.languages' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.languages && technologyStack.languages.length > 0 ? (\r\n technologyStack.languages.map((lang: { name: string; file_count: number; primary?: boolean }) => (\r\n <div\r\n key={lang.name}\r\n className={`flex items-center gap-1.5 px-2 py-1 bg-background border border-border rounded text-sm ${\r\n lang.primary ? 'ring-1 ring-primary' : ''\r\n }`}\r\n >\r\n <span className=\"font-medium text-foreground\">{lang.name}</span>\r\n <span className=\"text-xs text-muted-foreground\">{lang.file_count}</span>\r\n {lang.primary && (\r\n <span className=\"text-[10px] px-1 py-0.5 bg-primary text-primary-foreground rounded\">\r\n {formatMessage({ id: 'projectOverview.techStack.primary' })}\r\n </span>\r\n )}\r\n </div>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">\r\n {formatMessage({ id: 'projectOverview.techStack.noLanguages' })}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Frameworks */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.frameworks' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.frameworks && technologyStack.frameworks.length > 0 ? (\r\n technologyStack.frameworks.map((fw: string) => (\r\n <Badge key={fw} variant=\"success\" className=\"px-2 py-0.5 text-xs\">\r\n {fw}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">\r\n {formatMessage({ id: 'projectOverview.techStack.noFrameworks' })}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Build Tools */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.buildTools' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.build_tools && technologyStack.build_tools.length > 0 ? (\r\n technologyStack.build_tools.map((tool: string) => (\r\n <Badge key={tool} variant=\"warning\" className=\"px-2 py-0.5 text-xs\">\r\n {tool}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">-</span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Test Frameworks */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.testFrameworks' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.test_frameworks && technologyStack.test_frameworks.length > 0 ? (\r\n technologyStack.test_frameworks.map((fw: string) => (\r\n <Badge key={fw} variant=\"default\" className=\"px-2 py-0.5 text-xs\">\r\n {fw}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">-</span>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n\r\n {/* Architecture & Key Components - Merged */}\r\n {(architecture || (keyComponents && keyComponents.length > 0)) && (\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n {/* Architecture Section */}\r\n {architecture && (\r\n <>\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Blocks className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.architecture.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\r\n {/* Style */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.style' })}\r\n </h4>\r\n <div className=\"px-2 py-1.5 bg-background border border-border rounded\">\r\n <span className=\"text-foreground font-medium text-sm\">{architecture.style}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Layers */}\r\n {architecture.layers && architecture.layers.length > 0 && (\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.layers' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {architecture.layers.map((layer: string) => (\r\n <span key={layer} className=\"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs\">\r\n {layer}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Patterns */}\r\n {architecture.patterns && architecture.patterns.length > 0 && (\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.patterns' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {architecture.patterns.map((pattern: string) => (\r\n <span key={pattern} className=\"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs\">\r\n {pattern}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n\r\n {/* Divider between Architecture and Components */}\r\n {architecture && keyComponents && keyComponents.length > 0 && (\r\n <div className=\"border-t border-border my-4\" />\r\n )}\r\n\r\n {/* Key Components Section */}\r\n {keyComponents && keyComponents.length > 0 && (\r\n <>\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Component className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.components.title' })}\r\n </h3>\r\n\r\n <div className=\"space-y-2\">\r\n {keyComponents.map((comp: KeyComponent) => {\r\n const importance = comp.importance || 'low';\r\n const importanceColors: Record<string, string> = {\r\n high: 'border-l-2 border-l-destructive bg-destructive/5',\r\n medium: 'border-l-2 border-l-warning bg-warning/5',\r\n low: 'border-l-2 border-l-muted-foreground bg-muted',\r\n };\r\n const importanceBadges: Record<string, React.ReactElement> = {\r\n high: (\r\n <Badge variant=\"destructive\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.high' })}\r\n </Badge>\r\n ),\r\n medium: (\r\n <Badge variant=\"warning\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.medium' })}\r\n </Badge>\r\n ),\r\n low: (\r\n <Badge variant=\"secondary\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.low' })}\r\n </Badge>\r\n ),\r\n };\r\n\r\n return (\r\n <div\r\n key={comp.name}\r\n className={`p-2.5 rounded ${importanceColors[importance] || importanceColors.low}`}\r\n >\r\n <div className=\"flex items-start justify-between mb-1\">\r\n <h4 className=\"font-medium text-foreground text-sm\">{comp.name}</h4>\r\n {importanceBadges[importance]}\r\n </div>\r\n {comp.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{comp.description}</p>\r\n )}\r\n {comp.responsibility && comp.responsibility.length > 0 && (\r\n <ul className=\"text-xs text-muted-foreground list-disc list-inside\">\r\n {comp.responsibility.map((resp: string, i: number) => (\r\n <li key={i}>{resp}</li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </>\r\n )}\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Development Index */}\r\n {developmentIndex && totalEntries > 0 && (\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h3 className=\"text-base font-semibold text-foreground flex items-center gap-1.5\">\r\n <GitBranch className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.title' })}\r\n </h3>\r\n <div className=\"flex items-center gap-1.5\">\r\n {devIndexCategories.map((cat) => {\r\n const count = devIndexTotals[cat.key];\r\n if (count === 0) return null;\r\n const Icon = cat.icon;\r\n return (\r\n <Badge key={cat.key} variant={cat.color === 'primary' ? 'default' : 'secondary'} className=\"text-xs px-1.5 py-0\">\r\n <Icon className=\"w-3 h-3 mr-0.5\" />\r\n {count}\r\n </Badge>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n <Tabs value={devIndexView} onValueChange={(v) => setDevIndexView(v as DevIndexView)}>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <TabsList className=\"h-8\">\r\n <TabsTrigger value=\"category\" className=\"text-sm px-3 py-1 h-7\">\r\n <LayoutGrid className=\"w-3.5 h-3.5 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.categories' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"timeline\" className=\"text-sm px-3 py-1 h-7\">\r\n <GitCommitHorizontal className=\"w-3.5 h-3.5 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.timeline' })}\r\n </TabsTrigger>\r\n </TabsList>\r\n </div>\r\n\r\n <TabsContent value=\"category\">\r\n <div className=\"space-y-3\">\r\n {devIndexCategories.map((cat) => {\r\n const entries = developmentIndex?.[cat.key] || [];\r\n if (entries.length === 0) return null;\r\n const Icon = cat.icon;\r\n\r\n return (\r\n <div key={cat.key}>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-1.5\">\r\n <Icon className=\"w-3.5 h-3.5\" />\r\n <span>{formatMessage({ id: cat.i18nKey })}</span>\r\n <Badge variant=\"secondary\" className=\"text-xs px-1 py-0\">{entries.length}</Badge>\r\n </h4>\r\n <div className=\"space-y-1.5\">\r\n {entries.slice(0, 5).map((entry: DevelopmentIndexEntry & { type?: string; typeLabel?: string; typeIcon?: React.ElementType; typeColor?: string; date?: string }, i: number) => (\r\n <div\r\n key={i}\r\n className=\"p-2 bg-background border border-border rounded hover:shadow-sm transition-shadow\"\r\n >\r\n <div className=\"flex items-start justify-between mb-0.5\">\r\n <h5 className=\"font-medium text-foreground text-sm\">{entry.title}</h5>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatDate(entry.archivedAt || entry.date || entry.implemented_at)}\r\n </span>\r\n </div>\r\n {entry.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{entry.description}</p>\r\n )}\r\n <div className=\"flex items-center gap-1.5 text-xs flex-wrap\">\r\n {entry.sessionId && (\r\n <span className=\"px-1.5 py-0.5 bg-primary-light text-primary rounded font-mono\">\r\n {entry.sessionId}\r\n </span>\r\n )}\r\n {entry.sub_feature && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded\">{entry.sub_feature}</span>\r\n )}\r\n {entry.status && (\r\n <span\r\n className={`px-1.5 py-0.5 rounded ${\r\n entry.status === 'completed'\r\n ? 'bg-success-light text-success'\r\n : 'bg-warning-light text-warning'\r\n }`}\r\n >\r\n {entry.status}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n {entries.length > 5 && (\r\n <div className=\"text-sm text-muted-foreground text-center py-1\">\r\n ... and {entries.length - 5} more\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </TabsContent>\r\n\r\n <TabsContent value=\"timeline\">\r\n <div className=\"space-y-3\">\r\n {allDevEntries.slice(0, 20).map((entry, i) => {\r\n const Icon = entry.typeIcon;\r\n return (\r\n <div key={i} className=\"flex gap-3\">\r\n <div className=\"flex flex-col items-center\">\r\n <div\r\n className={`w-6 h-6 rounded-full bg-${entry.typeColor}-light text-${entry.typeColor} flex items-center justify-center`}\r\n >\r\n <Icon className=\"w-3 h-3\" />\r\n </div>\r\n {i < Math.min(allDevEntries.length, 20) - 1 && (\r\n <div className=\"w-0.5 flex-1 bg-border mt-1.5\" />\r\n )}\r\n </div>\r\n <div className=\"flex-1 pb-3\">\r\n <div className=\"flex items-start justify-between mb-0.5\">\r\n <div className=\"flex items-center gap-1.5\">\r\n <Badge\r\n variant={\r\n entry.typeColor === 'primary'\r\n ? 'default'\r\n : entry.typeColor === 'destructive'\r\n ? 'destructive'\r\n : 'secondary'\r\n }\r\n className=\"text-xs px-1.5 py-0\"\r\n >\r\n {entry.typeLabel}\r\n </Badge>\r\n <h5 className=\"font-medium text-foreground text-sm\">{entry.title}</h5>\r\n </div>\r\n <span className=\"text-xs text-muted-foreground whitespace-nowrap\">\r\n {formatDate(entry.date)}\r\n </span>\r\n </div>\r\n {entry.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{entry.description}</p>\r\n )}\r\n <div className=\"flex items-center gap-1.5 text-xs\">\r\n {entry.sessionId && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded font-mono\">\r\n {entry.sessionId}\r\n </span>\r\n )}\r\n {entry.sub_feature && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded\">{entry.sub_feature}</span>\r\n )}\r\n {entry.tags &&\r\n entry.tags.slice(0, 3).map((tag) => (\r\n <span key={tag} className=\"px-1.5 py-0.5 bg-accent rounded\">\r\n {tag}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n {allDevEntries.length > 20 && (\r\n <div className=\"text-sm text-muted-foreground text-center py-2\">\r\n ... and {allDevEntries.length - 20} more entries\r\n </div>\r\n )}\r\n </div>\r\n </TabsContent>\r\n </Tabs>\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Guidelines */}\r\n {guidelines && (\r\n <Card>\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h3 className=\"text-lg font-semibold text-foreground flex items-center gap-2\">\r\n <ScrollText className=\"w-5 h-5\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.title' })}\r\n </h3>\r\n <div className=\"flex gap-2\">\r\n {!isEditMode ? (\r\n <Button variant=\"outline\" size=\"sm\" onClick={handleEditStart}>\r\n <Edit className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.edit' })}\r\n </Button>\r\n ) : (\r\n <>\r\n <Button variant=\"outline\" size=\"sm\" onClick={handleEditCancel} disabled={isUpdating}>\r\n <X className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.cancel' })}\r\n </Button>\r\n <Button variant=\"default\" size=\"sm\" onClick={handleSave} disabled={isUpdating}>\r\n <Save className=\"w-4 h-4 mr-1\" />\r\n {isUpdating ? formatMessage({ id: 'projectOverview.guidelines.saving' }) : formatMessage({ id: 'projectOverview.guidelines.save' })}\r\n </Button>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-6\">\r\n {!isEditMode ? (\r\n <>\r\n {/* Read-only Mode - Conventions */}\r\n {guidelines.conventions && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <BookMarked className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.conventions' })}</span>\r\n </h4>\r\n <div className=\"space-y-2\">\r\n {Object.entries(guidelines.conventions).map(([key, items]) => {\r\n const itemList = Array.isArray(items) ? items : [];\r\n if (itemList.length === 0) return null;\r\n return (\r\n <div key={key} className=\"space-y-1\">\r\n {itemList.map((item: string, i: number) => (\r\n <div\r\n key={i}\r\n className=\"flex items-start gap-3 p-3 bg-background border border-border rounded-lg\"\r\n >\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {key}\r\n </span>\r\n <span className=\"text-sm text-foreground\">{item}</span>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Constraints */}\r\n {guidelines.constraints && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <ShieldAlert className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.constraints' })}</span>\r\n </h4>\r\n <div className=\"space-y-2\">\r\n {Object.entries(guidelines.constraints).map(([key, items]) => {\r\n const itemList = Array.isArray(items) ? items : [];\r\n if (itemList.length === 0) return null;\r\n return (\r\n <div key={key} className=\"space-y-1\">\r\n {itemList.map((item: string, i: number) => (\r\n <div\r\n key={i}\r\n className=\"flex items-start gap-3 p-3 bg-background border border-border rounded-lg\"\r\n >\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {key}\r\n </span>\r\n <span className=\"text-sm text-foreground\">{item}</span>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Quality Rules */}\r\n {guidelines.quality_rules && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <CheckSquare className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.qualityRules' })}</span>\r\n </h4>\r\n {guidelines.quality_rules.length > 0 ? (\r\n <div className=\"space-y-2\">\r\n {guidelines.quality_rules.map((rule: GuidelineEntry, i: number) => (\r\n <div key={i} className=\"p-3 bg-background border border-border rounded-lg\">\r\n <div className=\"flex items-start justify-between mb-1\">\r\n <span className=\"text-sm text-foreground font-medium\">{rule.rule}</span>\r\n {rule.enforced_by && (\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {rule.enforced_by}\r\n </span>\r\n )}\r\n </div>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatMessage({ id: 'projectOverview.guidelines.scope' })}: {rule.scope}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n <p className=\"text-sm text-muted-foreground italic\">\r\n {formatMessage({ id: 'projectOverview.guidelines.noQualityRules' }) || 'No quality rules defined yet. Switch to edit mode to add rules.'}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Learnings */}\r\n {guidelines.learnings && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <Lightbulb className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.learnings' })}</span>\r\n </h4>\r\n {guidelines.learnings.length > 0 ? (\r\n <div className=\"space-y-2\">\r\n {guidelines.learnings.map((learning: LearningEntry, i: number) => (\r\n <div\r\n key={i}\r\n className=\"p-3 bg-background border border-border rounded-lg border-l-4 border-l-primary\"\r\n >\r\n <div className=\"flex items-start justify-between mb-2\">\r\n <span className=\"text-sm text-foreground\">{learning.insight}</span>\r\n <span className=\"text-xs text-muted-foreground whitespace-nowrap ml-2\">\r\n {formatDate(learning.date)}\r\n </span>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-xs\">\r\n {learning.category && (\r\n <span className=\"px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {learning.category}\r\n </span>\r\n )}\r\n {learning.session_id && (\r\n <span className=\"px-2 py-0.5 bg-primary-light text-primary rounded font-mono\">\r\n {learning.session_id}\r\n </span>\r\n )}\r\n </div>\r\n {learning.context && (\r\n <p className=\"text-xs text-muted-foreground mt-2\">{learning.context}</p>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n <p className=\"text-sm text-muted-foreground italic\">\r\n {formatMessage({ id: 'projectOverview.guidelines.noLearnings' }) || 'No learning summaries yet. Switch to edit mode to add learnings.'}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <>\r\n {/* Edit Mode - Conventions */}\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <BookMarked className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.conventions' })}</span>\r\n </h4>\r\n <div className=\"space-y-3\">\r\n {Object.entries({\r\n coding_style: 'codingStyle',\r\n naming_patterns: 'namingPatterns',\r\n file_structure: 'fileStructure',\r\n documentation: 'documentation',\r\n }).map(([key, labelKey]) => (\r\n <div key={key}>\r\n <label className=\"text-xs font-medium text-muted-foreground mb-1 block\">\r\n {formatMessage({ id: `projectOverview.guidelines.conventionCategories.${labelKey}` })}\r\n </label>\r\n <div className=\"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]\">\r\n {((editedGuidelines?.conventions as any)?.[key] || []).map((item: string, idx: number) => (\r\n <div key={idx} className=\"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm\">\r\n <span>{item}</span>\r\n <button\r\n className=\"ml-1 text-muted-foreground hover:text-foreground\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n (updated.conventions as any)[key] = ((updated.conventions as any)[key] as string[]).filter((_: string, i: number) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <X className=\"w-3 h-3\" />\r\n </button>\r\n </div>\r\n ))}\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 min-w-[120px] bg-transparent outline-none text-sm\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.addItem' })}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && e.currentTarget.value.trim()) {\r\n const updated = { ...editedGuidelines };\r\n (updated.conventions as any)[key] = [...((updated.conventions as any)[key] || []), e.currentTarget.value.trim()];\r\n setEditedGuidelines(updated);\r\n e.currentTarget.value = '';\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Constraints */}\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <ShieldAlert className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.constraints' })}</span>\r\n </h4>\r\n <div className=\"space-y-3\">\r\n {Object.entries({\r\n architecture: 'architecture',\r\n tech_stack: 'techStack',\r\n performance: 'performance',\r\n security: 'security',\r\n }).map(([key, labelKey]) => (\r\n <div key={key}>\r\n <label className=\"text-xs font-medium text-muted-foreground mb-1 block\">\r\n {formatMessage({ id: `projectOverview.guidelines.constraintCategories.${labelKey}` })}\r\n </label>\r\n <div className=\"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]\">\r\n {((editedGuidelines?.constraints as any)?.[key] || []).map((item: string, idx: number) => (\r\n <div key={idx} className=\"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm\">\r\n <span>{item}</span>\r\n <button\r\n className=\"ml-1 text-muted-foreground hover:text-foreground\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n (updated.constraints as any)[key] = ((updated.constraints as any)[key] as string[]).filter((_: string, i: number) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <X className=\"w-3 h-3\" />\r\n </button>\r\n </div>\r\n ))}\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 min-w-[120px] bg-transparent outline-none text-sm\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.addItem' })}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && e.currentTarget.value.trim()) {\r\n const updated = { ...editedGuidelines };\r\n (updated.constraints as any)[key] = [...((updated.constraints as any)[key] || []), e.currentTarget.value.trim()];\r\n setEditedGuidelines(updated);\r\n e.currentTarget.value = '';\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Quality Rules */}\r\n <div>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\r\n <CheckSquare className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.qualityRules' })}</span>\r\n </h4>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules = [...(updated.quality_rules || []), { rule: '', scope: '', enforced_by: '' }];\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Plus className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.qualityRuleFields.addRule' })}\r\n </Button>\r\n </div>\r\n <div className=\"space-y-2\">\r\n {(editedGuidelines?.quality_rules || []).map((rule, idx) => (\r\n <div key={idx} className=\"p-3 border border-border rounded-lg space-y-2\">\r\n <div className=\"flex gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.rule' })}\r\n value={rule.rule}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].rule = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <button\r\n className=\"text-destructive hover:bg-destructive/10 p-2 rounded\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules = updated.quality_rules!.filter((_, i) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n <div className=\"grid grid-cols-2 gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.scope' })}\r\n value={rule.scope}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].scope = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.enforcedBy' })}\r\n value={rule.enforced_by || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].enforced_by = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Learnings */}\r\n <div>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\r\n <Lightbulb className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.learnings' })}</span>\r\n </h4>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings = [...(updated.learnings || []), { insight: '', category: '', session_id: '', context: '', date: new Date().toISOString() }];\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Plus className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.learningFields.addLearning' })}\r\n </Button>\r\n </div>\r\n <div className=\"space-y-2\">\r\n {(editedGuidelines?.learnings || []).map((learning, idx) => (\r\n <div key={idx} className=\"p-3 border border-border rounded-lg space-y-2\">\r\n <div className=\"flex gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.insight' })}\r\n value={learning.insight}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].insight = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <button\r\n className=\"text-destructive hover:bg-destructive/10 p-2 rounded\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings = updated.learnings!.filter((_, i) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n <div className=\"grid grid-cols-2 gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.category' })}\r\n value={learning.category || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].category = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.sessionId' })}\r\n value={learning.session_id || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].session_id = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n <textarea\r\n className=\"w-full px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.context' })}\r\n rows={2}\r\n value={learning.context || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].context = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Statistics */}\r\n <Card>\r\n <CardContent className=\"p-6\">\r\n <h3 className=\"text-lg font-semibold text-foreground mb-4 flex items-center gap-2\">\r\n <BarChart3 className=\"w-5 h-5\" />\r\n {formatMessage({ id: 'projectOverview.stats.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\r\n <div className=\"text-center p-4 bg-background rounded-lg\">\r\n <div className=\"text-3xl font-bold text-primary mb-1\">{totalFeatures}</div>\r\n <div className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'projectOverview.stats.totalFeatures' })}\r\n </div>\r\n </div>\r\n <div className=\"text-center p-4 bg-background rounded-lg\">\r\n <div className=\"text-sm text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'projectOverview.stats.lastUpdated' })}\r\n </div>\r\n <div className=\"text-sm font-medium text-foreground\">\r\n {allDevEntries.length > 0 ? formatDate(allDevEntries[0].date) : '-'}\r\n </div>\r\n </div>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ProjectOverviewPage;\r\n"],"names":["Blocks","createLucideIcon","BookMarked","Component","GitCommitHorizontal","ShieldAlert","ProjectOverviewPage","formatMessage","useIntl","projectOverview","isLoading","error","refetch","useProjectOverview","updateGuidelines","isUpdating","useUpdateGuidelines","devIndexView","setDevIndexView","React.useState","isEditMode","setIsEditMode","editedGuidelines","setEditedGuidelines","formatDate","dateString","devIndexCategories","Sparkles","Zap","Bug","Wrench","BookOpen","allDevEntries","React.useMemo","entries","cat","_a","entry","b","devIndexTotals","acc","totalEntries","sum","count","totalFeatures","handleEditStart","React.useCallback","g","_b","_c","_d","_e","_f","_g","_h","r","l","handleEditCancel","handleSave","toast","jsxs","jsx","_","i","Button","ClipboardList","technologyStack","architecture","keyComponents","developmentIndex","guidelines","metadata","Card","CardContent","Code2","lang","fw","Badge","tool","Fragment","layer","pattern","comp","importance","importanceColors","importanceBadges","resp","GitBranch","Icon","Tabs","v","TabsList","TabsTrigger","LayoutGrid","TabsContent","tag","ScrollText","X","Save","Edit","key","labelKey","item","idx","updated","e","CheckSquare","Plus","rule","Trash2","Lightbulb","learning","items","itemList","BarChart3"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
1
+ {"version":3,"file":"ProjectOverviewPage-Cit0Yq0D.js","sources":["../../../../node_modules/lucide-react/dist/esm/icons/blocks.js","../../../../node_modules/lucide-react/dist/esm/icons/book-marked.js","../../../../node_modules/lucide-react/dist/esm/icons/component.js","../../../../node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js","../../../../node_modules/lucide-react/dist/esm/icons/shield-alert.js","../../src/pages/ProjectOverviewPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Blocks = createLucideIcon(\"Blocks\", [\n [\"rect\", { width: \"7\", height: \"7\", x: \"14\", y: \"3\", rx: \"1\", key: \"6d4xhi\" }],\n [\n \"path\",\n {\n d: \"M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3\",\n key: \"1fpvtg\"\n }\n ]\n]);\n\nexport { Blocks as default };\n//# sourceMappingURL=blocks.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst BookMarked = createLucideIcon(\"BookMarked\", [\n [\"path\", { d: \"M10 2v8l3-3 3 3V2\", key: \"sqw3rj\" }],\n [\n \"path\",\n {\n d: \"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\",\n key: \"k3hazp\"\n }\n ]\n]);\n\nexport { BookMarked as default };\n//# sourceMappingURL=book-marked.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Component = createLucideIcon(\"Component\", [\n [\n \"path\",\n {\n d: \"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\",\n key: \"1uwlt4\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z\",\n key: \"10291m\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z\",\n key: \"1tqoq1\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\",\n key: \"1x6lto\"\n }\n ]\n]);\n\nexport { Component as default };\n//# sourceMappingURL=component.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst GitCommitHorizontal = createLucideIcon(\"GitCommitHorizontal\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"line\", { x1: \"3\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1dyftd\" }],\n [\"line\", { x1: \"15\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"oup4p8\" }]\n]);\n\nexport { GitCommitHorizontal as default };\n//# sourceMappingURL=git-commit-horizontal.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldAlert = createLucideIcon(\"ShieldAlert\", [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"M12 8v4\", key: \"1got3b\" }],\n [\"path\", { d: \"M12 16h.01\", key: \"1drbdi\" }]\n]);\n\nexport { ShieldAlert as default };\n//# sourceMappingURL=shield-alert.js.map\n","// ========================================\r\n// ProjectOverviewPage Component\r\n// ========================================\r\n// Project overview page displaying architecture, tech stack, and components\r\n\r\nimport * as React from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n Code2,\r\n Blocks,\r\n Component,\r\n GitBranch,\r\n BarChart3,\r\n ScrollText,\r\n ClipboardList,\r\n Sparkles,\r\n Zap,\r\n Bug,\r\n Wrench,\r\n BookOpen,\r\n CheckSquare,\r\n Lightbulb,\r\n BookMarked,\r\n ShieldAlert,\r\n LayoutGrid,\r\n GitCommitHorizontal,\r\n Edit,\r\n Save,\r\n X,\r\n Plus,\r\n Trash2,\r\n} from 'lucide-react';\r\nimport { useProjectOverview, useUpdateGuidelines } from '@/hooks/useProjectOverview';\r\nimport { toast } from 'sonner';\r\nimport type {\r\n KeyComponent,\r\n DevelopmentIndexEntry,\r\n GuidelineEntry,\r\n LearningEntry,\r\n ProjectGuidelines,\r\n} from '@/lib/api';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Card, CardContent } from '@/components/ui/Card';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\r\n\r\ntype DevIndexView = 'category' | 'timeline';\r\n\r\n// Helper function to format date (currently unused but kept for future use)\r\n// @ts-ignore - kept for potential future use\r\nfunction formatDate(dateString: string | undefined): string {\r\n if (!dateString) return '-';\r\n try {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString(undefined, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n } catch {\r\n return '-';\r\n }\r\n}\r\n\r\n/**\r\n * ProjectOverviewPage component - Display project architecture and tech stack\r\n */\r\nexport function ProjectOverviewPage() {\r\n const { formatMessage } = useIntl();\r\n const { projectOverview, isLoading, error, refetch } = useProjectOverview();\r\n const { updateGuidelines, isUpdating } = useUpdateGuidelines();\r\n const [devIndexView, setDevIndexView] = React.useState<DevIndexView>('category');\r\n const [isEditMode, setIsEditMode] = React.useState(false);\r\n const [editedGuidelines, setEditedGuidelines] = React.useState<ProjectGuidelines | null>(null);\r\n\r\n // Helper function to format date\r\n function formatDate(dateString: string | undefined): string {\r\n if (!dateString) return '-';\r\n try {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString(undefined, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n } catch {\r\n return '-';\r\n }\r\n }\r\n\r\n // Define dev index categories (before any conditional logic)\r\n const devIndexCategories = [\r\n { key: 'feature', i18nKey: 'projectOverview.devIndex.category.features', icon: Sparkles, color: 'primary' },\r\n { key: 'enhancement', i18nKey: 'projectOverview.devIndex.category.enhancements', icon: Zap, color: 'success' },\r\n { key: 'bugfix', i18nKey: 'projectOverview.devIndex.category.bugfixes', icon: Bug, color: 'destructive' },\r\n { key: 'refactor', i18nKey: 'projectOverview.devIndex.category.refactorings', icon: Wrench, color: 'warning' },\r\n { key: 'docs', i18nKey: 'projectOverview.devIndex.category.documentation', icon: BookOpen, color: 'muted' },\r\n ];\r\n\r\n // Collect all entries for timeline (compute before any conditional logic)\r\n const allDevEntries = React.useMemo(() => {\r\n if (!projectOverview?.developmentIndex) return [];\r\n\r\n const entries: Array<{\r\n title: string;\r\n description?: string;\r\n type: string;\r\n typeLabel: string;\r\n typeIcon: React.ElementType;\r\n typeColor: string;\r\n date: string;\r\n sessionId?: string;\r\n sub_feature?: string;\r\n tags?: string[];\r\n }> = [];\r\n\r\n devIndexCategories.forEach((cat) => {\r\n (projectOverview.developmentIndex?.[cat.key] || []).forEach((entry: DevelopmentIndexEntry) => {\r\n entries.push({\r\n ...entry,\r\n type: cat.key,\r\n typeLabel: formatMessage({ id: cat.i18nKey }),\r\n typeIcon: cat.icon,\r\n typeColor: cat.color,\r\n date: entry.archivedAt || entry.date || entry.implemented_at || '',\r\n });\r\n });\r\n });\r\n\r\n return entries.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());\r\n }, [projectOverview?.developmentIndex]);\r\n\r\n // Calculate totals for development index\r\n const devIndexTotals = devIndexCategories.reduce((acc, cat) => {\r\n acc[cat.key] = (projectOverview?.developmentIndex?.[cat.key] || []).length;\r\n return acc;\r\n }, {} as Record<string, number>);\r\n\r\n const totalEntries = Object.values(devIndexTotals).reduce((sum, count) => sum + count, 0);\r\n\r\n // Calculate statistics\r\n const totalFeatures = devIndexCategories.reduce((sum, cat) => sum + devIndexTotals[cat.key], 0);\r\n\r\n // Guidelines edit handlers\r\n const handleEditStart = React.useCallback(() => {\r\n const g = projectOverview?.guidelines;\r\n setEditedGuidelines({\r\n conventions: {\r\n coding_style: [...(g?.conventions?.coding_style || [])],\r\n naming_patterns: [...(g?.conventions?.naming_patterns || [])],\r\n file_structure: [...(g?.conventions?.file_structure || [])],\r\n documentation: [...(g?.conventions?.documentation || [])],\r\n },\r\n constraints: {\r\n architecture: [...(g?.constraints?.architecture || [])],\r\n tech_stack: [...(g?.constraints?.tech_stack || [])],\r\n performance: [...(g?.constraints?.performance || [])],\r\n security: [...(g?.constraints?.security || [])],\r\n },\r\n quality_rules: (g?.quality_rules || []).map((r) => ({ ...r })),\r\n learnings: (g?.learnings || []).map((l) => ({ ...l })),\r\n });\r\n setIsEditMode(true);\r\n }, [projectOverview?.guidelines]);\r\n\r\n const handleEditCancel = React.useCallback(() => {\r\n setIsEditMode(false);\r\n setEditedGuidelines(null);\r\n }, []);\r\n\r\n const handleSave = React.useCallback(async () => {\r\n if (!editedGuidelines) return;\r\n try {\r\n await updateGuidelines(editedGuidelines);\r\n toast.success(formatMessage({ id: 'projectOverview.guidelines.saveSuccess' }));\r\n setIsEditMode(false);\r\n setEditedGuidelines(null);\r\n } catch {\r\n toast.error(formatMessage({ id: 'projectOverview.guidelines.saveError' }));\r\n }\r\n }, [editedGuidelines, updateGuidelines, formatMessage]);\r\n\r\n // Render loading state\r\n if (isLoading) {\r\n return (\r\n <div className=\"space-y-6\">\r\n <div className=\"h-48 rounded-lg bg-muted animate-pulse\" />\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {Array.from({ length: 4 }).map((_, i) => (\r\n <div key={i} className=\"h-32 rounded-lg bg-muted animate-pulse\" />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Render error state\r\n if (error) {\r\n return (\r\n <div className=\"flex items-center gap-2 p-4 rounded-lg bg-destructive/10 border border-destructive/30 text-destructive\">\r\n <Component className=\"h-5 w-5 flex-shrink-0\" />\r\n <div className=\"flex-1\">\r\n <p className=\"text-sm font-medium\">{formatMessage({ id: 'common.errors.loadFailed' })}</p>\r\n <p className=\"text-xs mt-0.5\">{error.message}</p>\r\n </div>\r\n <Button variant=\"outline\" size=\"sm\" onClick={() => refetch()}>\r\n {formatMessage({ id: 'common.actions.retry' })}\r\n </Button>\r\n </div>\r\n );\r\n }\r\n\r\n // Render empty state\r\n if (!projectOverview) {\r\n return (\r\n <div className=\"flex flex-col items-center justify-center py-16 px-4\">\r\n <ClipboardList className=\"h-12 w-12 text-muted-foreground mb-4\" />\r\n <h3 className=\"text-lg font-medium text-foreground mb-2\">\r\n {formatMessage({ id: 'projectOverview.empty.title' })}\r\n </h3>\r\n <p className=\"text-sm text-muted-foreground text-center max-w-sm mb-4\">\r\n {formatMessage({ id: 'projectOverview.empty.message' })}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n const { technologyStack, architecture, keyComponents, developmentIndex, guidelines, metadata } = projectOverview;\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n {/* Project Header + Technology Stack - Combined */}\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n {/* Header Row */}\r\n <div className=\"flex items-start justify-between mb-4 pb-3 border-b border-border\">\r\n <div className=\"flex-1\">\r\n <h1 className=\"text-lg font-semibold text-foreground gradient-text mb-1\">\r\n {projectOverview.projectName}\r\n </h1>\r\n <p className=\"text-sm text-muted-foreground\">\r\n {projectOverview.description || formatMessage({ id: 'projectOverview.noDescription' })}\r\n </p>\r\n </div>\r\n <div className=\"text-sm text-muted-foreground text-right\">\r\n <div>\r\n {formatMessage({ id: 'projectOverview.header.initialized' })}:{' '}\r\n {formatDate(projectOverview.initializedAt)}\r\n </div>\r\n {metadata?.analysis_mode && (\r\n <div className=\"mt-1\">\r\n <span className=\"font-mono text-xs px-1.5 py-0.5 bg-muted rounded\">\r\n {metadata.analysis_mode}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Technology Stack */}\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Code2 className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.techStack.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\r\n {/* Languages */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.languages' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.languages && technologyStack.languages.length > 0 ? (\r\n technologyStack.languages.map((lang: { name: string; file_count: number; primary?: boolean }) => (\r\n <div\r\n key={lang.name}\r\n className={`flex items-center gap-1.5 px-2 py-1 bg-background border border-border rounded text-sm ${\r\n lang.primary ? 'ring-1 ring-primary' : ''\r\n }`}\r\n >\r\n <span className=\"font-medium text-foreground\">{lang.name}</span>\r\n <span className=\"text-xs text-muted-foreground\">{lang.file_count}</span>\r\n {lang.primary && (\r\n <span className=\"text-[10px] px-1 py-0.5 bg-primary text-primary-foreground rounded\">\r\n {formatMessage({ id: 'projectOverview.techStack.primary' })}\r\n </span>\r\n )}\r\n </div>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">\r\n {formatMessage({ id: 'projectOverview.techStack.noLanguages' })}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Frameworks */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.frameworks' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.frameworks && technologyStack.frameworks.length > 0 ? (\r\n technologyStack.frameworks.map((fw: string) => (\r\n <Badge key={fw} variant=\"success\" className=\"px-2 py-0.5 text-xs\">\r\n {fw}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">\r\n {formatMessage({ id: 'projectOverview.techStack.noFrameworks' })}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Build Tools */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.buildTools' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.build_tools && technologyStack.build_tools.length > 0 ? (\r\n technologyStack.build_tools.map((tool: string) => (\r\n <Badge key={tool} variant=\"warning\" className=\"px-2 py-0.5 text-xs\">\r\n {tool}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">-</span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Test Frameworks */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.testFrameworks' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.test_frameworks && technologyStack.test_frameworks.length > 0 ? (\r\n technologyStack.test_frameworks.map((fw: string) => (\r\n <Badge key={fw} variant=\"default\" className=\"px-2 py-0.5 text-xs\">\r\n {fw}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">-</span>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n\r\n {/* Architecture & Key Components - Merged */}\r\n {(architecture || (keyComponents && keyComponents.length > 0)) && (\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n {/* Architecture Section */}\r\n {architecture && (\r\n <>\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Blocks className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.architecture.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\r\n {/* Style */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.style' })}\r\n </h4>\r\n <div className=\"px-2 py-1.5 bg-background border border-border rounded\">\r\n <span className=\"text-foreground font-medium text-sm\">{architecture.style}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Layers */}\r\n {architecture.layers && architecture.layers.length > 0 && (\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.layers' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {architecture.layers.map((layer: string) => (\r\n <span key={layer} className=\"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs\">\r\n {layer}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Patterns */}\r\n {architecture.patterns && architecture.patterns.length > 0 && (\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.patterns' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {architecture.patterns.map((pattern: string) => (\r\n <span key={pattern} className=\"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs\">\r\n {pattern}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n\r\n {/* Divider between Architecture and Components */}\r\n {architecture && keyComponents && keyComponents.length > 0 && (\r\n <div className=\"border-t border-border my-4\" />\r\n )}\r\n\r\n {/* Key Components Section */}\r\n {keyComponents && keyComponents.length > 0 && (\r\n <>\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Component className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.components.title' })}\r\n </h3>\r\n\r\n <div className=\"space-y-2\">\r\n {keyComponents.map((comp: KeyComponent) => {\r\n const importance = comp.importance || 'low';\r\n const importanceColors: Record<string, string> = {\r\n high: 'border-l-2 border-l-destructive bg-destructive/5',\r\n medium: 'border-l-2 border-l-warning bg-warning/5',\r\n low: 'border-l-2 border-l-muted-foreground bg-muted',\r\n };\r\n const importanceBadges: Record<string, React.ReactElement> = {\r\n high: (\r\n <Badge variant=\"destructive\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.high' })}\r\n </Badge>\r\n ),\r\n medium: (\r\n <Badge variant=\"warning\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.medium' })}\r\n </Badge>\r\n ),\r\n low: (\r\n <Badge variant=\"secondary\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.low' })}\r\n </Badge>\r\n ),\r\n };\r\n\r\n return (\r\n <div\r\n key={comp.name}\r\n className={`p-2.5 rounded ${importanceColors[importance] || importanceColors.low}`}\r\n >\r\n <div className=\"flex items-start justify-between mb-1\">\r\n <h4 className=\"font-medium text-foreground text-sm\">{comp.name}</h4>\r\n {importanceBadges[importance]}\r\n </div>\r\n {comp.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{comp.description}</p>\r\n )}\r\n {comp.responsibility && comp.responsibility.length > 0 && (\r\n <ul className=\"text-xs text-muted-foreground list-disc list-inside\">\r\n {comp.responsibility.map((resp: string, i: number) => (\r\n <li key={i}>{resp}</li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </>\r\n )}\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Development Index */}\r\n {developmentIndex && totalEntries > 0 && (\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h3 className=\"text-base font-semibold text-foreground flex items-center gap-1.5\">\r\n <GitBranch className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.title' })}\r\n </h3>\r\n <div className=\"flex items-center gap-1.5\">\r\n {devIndexCategories.map((cat) => {\r\n const count = devIndexTotals[cat.key];\r\n if (count === 0) return null;\r\n const Icon = cat.icon;\r\n return (\r\n <Badge key={cat.key} variant={cat.color === 'primary' ? 'default' : 'secondary'} className=\"text-xs px-1.5 py-0\">\r\n <Icon className=\"w-3 h-3 mr-0.5\" />\r\n {count}\r\n </Badge>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n <Tabs value={devIndexView} onValueChange={(v) => setDevIndexView(v as DevIndexView)}>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <TabsList className=\"h-8\">\r\n <TabsTrigger value=\"category\" className=\"text-sm px-3 py-1 h-7\">\r\n <LayoutGrid className=\"w-3.5 h-3.5 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.categories' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"timeline\" className=\"text-sm px-3 py-1 h-7\">\r\n <GitCommitHorizontal className=\"w-3.5 h-3.5 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.timeline' })}\r\n </TabsTrigger>\r\n </TabsList>\r\n </div>\r\n\r\n <TabsContent value=\"category\">\r\n <div className=\"space-y-3\">\r\n {devIndexCategories.map((cat) => {\r\n const entries = developmentIndex?.[cat.key] || [];\r\n if (entries.length === 0) return null;\r\n const Icon = cat.icon;\r\n\r\n return (\r\n <div key={cat.key}>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-1.5\">\r\n <Icon className=\"w-3.5 h-3.5\" />\r\n <span>{formatMessage({ id: cat.i18nKey })}</span>\r\n <Badge variant=\"secondary\" className=\"text-xs px-1 py-0\">{entries.length}</Badge>\r\n </h4>\r\n <div className=\"space-y-1.5\">\r\n {entries.slice(0, 5).map((entry: DevelopmentIndexEntry & { type?: string; typeLabel?: string; typeIcon?: React.ElementType; typeColor?: string; date?: string }, i: number) => (\r\n <div\r\n key={i}\r\n className=\"p-2 bg-background border border-border rounded hover:shadow-sm transition-shadow\"\r\n >\r\n <div className=\"flex items-start justify-between mb-0.5\">\r\n <h5 className=\"font-medium text-foreground text-sm\">{entry.title}</h5>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatDate(entry.archivedAt || entry.date || entry.implemented_at)}\r\n </span>\r\n </div>\r\n {entry.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{entry.description}</p>\r\n )}\r\n <div className=\"flex items-center gap-1.5 text-xs flex-wrap\">\r\n {entry.sessionId && (\r\n <span className=\"px-1.5 py-0.5 bg-primary-light text-primary rounded font-mono\">\r\n {entry.sessionId}\r\n </span>\r\n )}\r\n {entry.sub_feature && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded\">{entry.sub_feature}</span>\r\n )}\r\n {entry.status && (\r\n <span\r\n className={`px-1.5 py-0.5 rounded ${\r\n entry.status === 'completed'\r\n ? 'bg-success-light text-success'\r\n : 'bg-warning-light text-warning'\r\n }`}\r\n >\r\n {entry.status}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n {entries.length > 5 && (\r\n <div className=\"text-sm text-muted-foreground text-center py-1\">\r\n ... and {entries.length - 5} more\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </TabsContent>\r\n\r\n <TabsContent value=\"timeline\">\r\n <div className=\"space-y-3\">\r\n {allDevEntries.slice(0, 20).map((entry, i) => {\r\n const Icon = entry.typeIcon;\r\n return (\r\n <div key={i} className=\"flex gap-3\">\r\n <div className=\"flex flex-col items-center\">\r\n <div\r\n className={`w-6 h-6 rounded-full bg-${entry.typeColor}-light text-${entry.typeColor} flex items-center justify-center`}\r\n >\r\n <Icon className=\"w-3 h-3\" />\r\n </div>\r\n {i < Math.min(allDevEntries.length, 20) - 1 && (\r\n <div className=\"w-0.5 flex-1 bg-border mt-1.5\" />\r\n )}\r\n </div>\r\n <div className=\"flex-1 pb-3\">\r\n <div className=\"flex items-start justify-between mb-0.5\">\r\n <div className=\"flex items-center gap-1.5\">\r\n <Badge\r\n variant={\r\n entry.typeColor === 'primary'\r\n ? 'default'\r\n : entry.typeColor === 'destructive'\r\n ? 'destructive'\r\n : 'secondary'\r\n }\r\n className=\"text-xs px-1.5 py-0\"\r\n >\r\n {entry.typeLabel}\r\n </Badge>\r\n <h5 className=\"font-medium text-foreground text-sm\">{entry.title}</h5>\r\n </div>\r\n <span className=\"text-xs text-muted-foreground whitespace-nowrap\">\r\n {formatDate(entry.date)}\r\n </span>\r\n </div>\r\n {entry.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{entry.description}</p>\r\n )}\r\n <div className=\"flex items-center gap-1.5 text-xs\">\r\n {entry.sessionId && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded font-mono\">\r\n {entry.sessionId}\r\n </span>\r\n )}\r\n {entry.sub_feature && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded\">{entry.sub_feature}</span>\r\n )}\r\n {entry.tags &&\r\n entry.tags.slice(0, 3).map((tag) => (\r\n <span key={tag} className=\"px-1.5 py-0.5 bg-accent rounded\">\r\n {tag}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n {allDevEntries.length > 20 && (\r\n <div className=\"text-sm text-muted-foreground text-center py-2\">\r\n ... and {allDevEntries.length - 20} more entries\r\n </div>\r\n )}\r\n </div>\r\n </TabsContent>\r\n </Tabs>\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Guidelines */}\r\n {guidelines && (\r\n <Card>\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h3 className=\"text-lg font-semibold text-foreground flex items-center gap-2\">\r\n <ScrollText className=\"w-5 h-5\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.title' })}\r\n </h3>\r\n <div className=\"flex gap-2\">\r\n {!isEditMode ? (\r\n <Button variant=\"outline\" size=\"sm\" onClick={handleEditStart}>\r\n <Edit className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.edit' })}\r\n </Button>\r\n ) : (\r\n <>\r\n <Button variant=\"outline\" size=\"sm\" onClick={handleEditCancel} disabled={isUpdating}>\r\n <X className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.cancel' })}\r\n </Button>\r\n <Button variant=\"default\" size=\"sm\" onClick={handleSave} disabled={isUpdating}>\r\n <Save className=\"w-4 h-4 mr-1\" />\r\n {isUpdating ? formatMessage({ id: 'projectOverview.guidelines.saving' }) : formatMessage({ id: 'projectOverview.guidelines.save' })}\r\n </Button>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-6\">\r\n {!isEditMode ? (\r\n <>\r\n {/* Read-only Mode - Conventions */}\r\n {guidelines.conventions && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <BookMarked className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.conventions' })}</span>\r\n </h4>\r\n <div className=\"space-y-2\">\r\n {Object.entries(guidelines.conventions).map(([key, items]) => {\r\n const itemList = Array.isArray(items) ? items : [];\r\n if (itemList.length === 0) return null;\r\n return (\r\n <div key={key} className=\"space-y-1\">\r\n {itemList.map((item: string, i: number) => (\r\n <div\r\n key={i}\r\n className=\"flex items-start gap-3 p-3 bg-background border border-border rounded-lg\"\r\n >\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {key}\r\n </span>\r\n <span className=\"text-sm text-foreground\">{item}</span>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Constraints */}\r\n {guidelines.constraints && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <ShieldAlert className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.constraints' })}</span>\r\n </h4>\r\n <div className=\"space-y-2\">\r\n {Object.entries(guidelines.constraints).map(([key, items]) => {\r\n const itemList = Array.isArray(items) ? items : [];\r\n if (itemList.length === 0) return null;\r\n return (\r\n <div key={key} className=\"space-y-1\">\r\n {itemList.map((item: string, i: number) => (\r\n <div\r\n key={i}\r\n className=\"flex items-start gap-3 p-3 bg-background border border-border rounded-lg\"\r\n >\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {key}\r\n </span>\r\n <span className=\"text-sm text-foreground\">{item}</span>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Quality Rules */}\r\n {guidelines.quality_rules && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <CheckSquare className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.qualityRules' })}</span>\r\n </h4>\r\n {guidelines.quality_rules.length > 0 ? (\r\n <div className=\"space-y-2\">\r\n {guidelines.quality_rules.map((rule: GuidelineEntry, i: number) => (\r\n <div key={i} className=\"p-3 bg-background border border-border rounded-lg\">\r\n <div className=\"flex items-start justify-between mb-1\">\r\n <span className=\"text-sm text-foreground font-medium\">{rule.rule}</span>\r\n {rule.enforced_by && (\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {rule.enforced_by}\r\n </span>\r\n )}\r\n </div>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatMessage({ id: 'projectOverview.guidelines.scope' })}: {rule.scope}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n <p className=\"text-sm text-muted-foreground italic\">\r\n {formatMessage({ id: 'projectOverview.guidelines.noQualityRules' }) || 'No quality rules defined yet. Switch to edit mode to add rules.'}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Learnings */}\r\n {guidelines.learnings && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <Lightbulb className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.learnings' })}</span>\r\n </h4>\r\n {guidelines.learnings.length > 0 ? (\r\n <div className=\"space-y-2\">\r\n {guidelines.learnings.map((learning: LearningEntry, i: number) => (\r\n <div\r\n key={i}\r\n className=\"p-3 bg-background border border-border rounded-lg border-l-4 border-l-primary\"\r\n >\r\n <div className=\"flex items-start justify-between mb-2\">\r\n <span className=\"text-sm text-foreground\">{learning.insight}</span>\r\n <span className=\"text-xs text-muted-foreground whitespace-nowrap ml-2\">\r\n {formatDate(learning.date)}\r\n </span>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-xs\">\r\n {learning.category && (\r\n <span className=\"px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {learning.category}\r\n </span>\r\n )}\r\n {learning.session_id && (\r\n <span className=\"px-2 py-0.5 bg-primary-light text-primary rounded font-mono\">\r\n {learning.session_id}\r\n </span>\r\n )}\r\n </div>\r\n {learning.context && (\r\n <p className=\"text-xs text-muted-foreground mt-2\">{learning.context}</p>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n <p className=\"text-sm text-muted-foreground italic\">\r\n {formatMessage({ id: 'projectOverview.guidelines.noLearnings' }) || 'No learning summaries yet. Switch to edit mode to add learnings.'}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <>\r\n {/* Edit Mode - Conventions */}\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <BookMarked className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.conventions' })}</span>\r\n </h4>\r\n <div className=\"space-y-3\">\r\n {Object.entries({\r\n coding_style: 'codingStyle',\r\n naming_patterns: 'namingPatterns',\r\n file_structure: 'fileStructure',\r\n documentation: 'documentation',\r\n }).map(([key, labelKey]) => (\r\n <div key={key}>\r\n <label className=\"text-xs font-medium text-muted-foreground mb-1 block\">\r\n {formatMessage({ id: `projectOverview.guidelines.conventionCategories.${labelKey}` })}\r\n </label>\r\n <div className=\"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]\">\r\n {((editedGuidelines?.conventions as any)?.[key] || []).map((item: string, idx: number) => (\r\n <div key={idx} className=\"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm\">\r\n <span>{item}</span>\r\n <button\r\n className=\"ml-1 text-muted-foreground hover:text-foreground\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n (updated.conventions as any)[key] = ((updated.conventions as any)[key] as string[]).filter((_: string, i: number) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <X className=\"w-3 h-3\" />\r\n </button>\r\n </div>\r\n ))}\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 min-w-[120px] bg-transparent outline-none text-sm\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.addItem' })}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && e.currentTarget.value.trim()) {\r\n const updated = { ...editedGuidelines };\r\n (updated.conventions as any)[key] = [...((updated.conventions as any)[key] || []), e.currentTarget.value.trim()];\r\n setEditedGuidelines(updated);\r\n e.currentTarget.value = '';\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Constraints */}\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <ShieldAlert className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.constraints' })}</span>\r\n </h4>\r\n <div className=\"space-y-3\">\r\n {Object.entries({\r\n architecture: 'architecture',\r\n tech_stack: 'techStack',\r\n performance: 'performance',\r\n security: 'security',\r\n }).map(([key, labelKey]) => (\r\n <div key={key}>\r\n <label className=\"text-xs font-medium text-muted-foreground mb-1 block\">\r\n {formatMessage({ id: `projectOverview.guidelines.constraintCategories.${labelKey}` })}\r\n </label>\r\n <div className=\"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]\">\r\n {((editedGuidelines?.constraints as any)?.[key] || []).map((item: string, idx: number) => (\r\n <div key={idx} className=\"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm\">\r\n <span>{item}</span>\r\n <button\r\n className=\"ml-1 text-muted-foreground hover:text-foreground\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n (updated.constraints as any)[key] = ((updated.constraints as any)[key] as string[]).filter((_: string, i: number) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <X className=\"w-3 h-3\" />\r\n </button>\r\n </div>\r\n ))}\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 min-w-[120px] bg-transparent outline-none text-sm\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.addItem' })}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && e.currentTarget.value.trim()) {\r\n const updated = { ...editedGuidelines };\r\n (updated.constraints as any)[key] = [...((updated.constraints as any)[key] || []), e.currentTarget.value.trim()];\r\n setEditedGuidelines(updated);\r\n e.currentTarget.value = '';\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Quality Rules */}\r\n <div>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\r\n <CheckSquare className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.qualityRules' })}</span>\r\n </h4>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules = [...(updated.quality_rules || []), { rule: '', scope: '', enforced_by: '' }];\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Plus className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.qualityRuleFields.addRule' })}\r\n </Button>\r\n </div>\r\n <div className=\"space-y-2\">\r\n {(editedGuidelines?.quality_rules || []).map((rule, idx) => (\r\n <div key={idx} className=\"p-3 border border-border rounded-lg space-y-2\">\r\n <div className=\"flex gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.rule' })}\r\n value={rule.rule}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].rule = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <button\r\n className=\"text-destructive hover:bg-destructive/10 p-2 rounded\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules = updated.quality_rules!.filter((_, i) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n <div className=\"grid grid-cols-2 gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.scope' })}\r\n value={rule.scope}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].scope = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.enforcedBy' })}\r\n value={rule.enforced_by || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].enforced_by = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Learnings */}\r\n <div>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\r\n <Lightbulb className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.learnings' })}</span>\r\n </h4>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings = [...(updated.learnings || []), { insight: '', category: '', session_id: '', context: '', date: new Date().toISOString() }];\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Plus className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.learningFields.addLearning' })}\r\n </Button>\r\n </div>\r\n <div className=\"space-y-2\">\r\n {(editedGuidelines?.learnings || []).map((learning, idx) => (\r\n <div key={idx} className=\"p-3 border border-border rounded-lg space-y-2\">\r\n <div className=\"flex gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.insight' })}\r\n value={learning.insight}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].insight = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <button\r\n className=\"text-destructive hover:bg-destructive/10 p-2 rounded\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings = updated.learnings!.filter((_, i) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n <div className=\"grid grid-cols-2 gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.category' })}\r\n value={learning.category || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].category = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.sessionId' })}\r\n value={learning.session_id || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].session_id = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n <textarea\r\n className=\"w-full px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.context' })}\r\n rows={2}\r\n value={learning.context || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].context = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Statistics */}\r\n <Card>\r\n <CardContent className=\"p-6\">\r\n <h3 className=\"text-lg font-semibold text-foreground mb-4 flex items-center gap-2\">\r\n <BarChart3 className=\"w-5 h-5\" />\r\n {formatMessage({ id: 'projectOverview.stats.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\r\n <div className=\"text-center p-4 bg-background rounded-lg\">\r\n <div className=\"text-3xl font-bold text-primary mb-1\">{totalFeatures}</div>\r\n <div className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'projectOverview.stats.totalFeatures' })}\r\n </div>\r\n </div>\r\n <div className=\"text-center p-4 bg-background rounded-lg\">\r\n <div className=\"text-sm text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'projectOverview.stats.lastUpdated' })}\r\n </div>\r\n <div className=\"text-sm font-medium text-foreground\">\r\n {allDevEntries.length > 0 ? formatDate(allDevEntries[0].date) : '-'}\r\n </div>\r\n </div>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ProjectOverviewPage;\r\n"],"names":["Blocks","createLucideIcon","BookMarked","Component","GitCommitHorizontal","ShieldAlert","ProjectOverviewPage","formatMessage","useIntl","projectOverview","isLoading","error","refetch","useProjectOverview","updateGuidelines","isUpdating","useUpdateGuidelines","devIndexView","setDevIndexView","React.useState","isEditMode","setIsEditMode","editedGuidelines","setEditedGuidelines","formatDate","dateString","devIndexCategories","Sparkles","Zap","Bug","Wrench","BookOpen","allDevEntries","React.useMemo","entries","cat","_a","entry","b","devIndexTotals","acc","totalEntries","sum","count","totalFeatures","handleEditStart","React.useCallback","g","_b","_c","_d","_e","_f","_g","_h","r","l","handleEditCancel","handleSave","toast","jsxs","jsx","_","i","Button","ClipboardList","technologyStack","architecture","keyComponents","developmentIndex","guidelines","metadata","Card","CardContent","Code2","lang","fw","Badge","tool","Fragment","layer","pattern","comp","importance","importanceColors","importanceBadges","resp","GitBranch","Icon","Tabs","v","TabsList","TabsTrigger","LayoutGrid","TabsContent","tag","ScrollText","X","Save","Edit","key","labelKey","item","idx","updated","e","CheckSquare","Plus","rule","Trash2","Lightbulb","learning","items","itemList","BarChart3"],"mappings":"ieAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAASC,EAAiB,SAAU,CACxC,CAAC,OAAQ,CAAE,MAAO,IAAK,OAAQ,IAAK,EAAG,KAAM,EAAG,IAAK,GAAI,IAAK,IAAK,QAAQ,CAAE,EAC7E,CACE,OACA,CACE,EAAG,8FACH,IAAK,QACX,CACA,CACA,CAAC,EClBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMC,EAAaD,EAAiB,aAAc,CAChD,CAAC,OAAQ,CAAE,EAAG,oBAAqB,IAAK,QAAQ,CAAE,EAClD,CACE,OACA,CACE,EAAG,yFACH,IAAK,QACX,CACA,CACA,CAAC,EClBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAME,EAAYF,EAAiB,YAAa,CAC9C,CACE,OACA,CACE,EAAG,+HACH,IAAK,QACX,CACA,EACE,CACE,OACA,CACE,EAAG,6HACH,IAAK,QACX,CACA,EACE,CACE,OACA,CACE,EAAG,8HACH,IAAK,QACX,CACA,EACE,CACE,OACA,CACE,EAAG,6HACH,IAAK,QACX,CACA,CACA,CAAC,ECtCD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMG,GAAsBH,EAAiB,sBAAuB,CAClE,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CAAC,OAAQ,CAAE,GAAI,IAAK,GAAI,IAAK,GAAI,KAAM,GAAI,KAAM,IAAK,QAAQ,CAAE,EAChE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,QAAQ,CAAE,CACpE,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMI,EAAcJ,EAAiB,cAAe,CAClD,CACE,OACA,CACE,EAAG,qKACH,IAAK,QACX,CACA,EACE,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,CAC7C,CAAC,ECgDM,SAASK,IAAsB,CACpC,KAAM,CAAE,cAAAC,CAAA,EAAkBC,GAAA,EACpB,CAAE,gBAAAC,EAAiB,UAAAC,EAAW,MAAAC,EAAO,QAAAC,CAAA,EAAYC,GAAA,EACjD,CAAE,iBAAAC,EAAkB,WAAAC,CAAA,EAAeC,GAAA,EACnC,CAACC,EAAcC,CAAe,EAAIC,EAAAA,SAA6B,UAAU,EACzE,CAACC,EAAYC,CAAa,EAAIF,EAAAA,SAAe,EAAK,EAClD,CAACG,EAAkBC,CAAmB,EAAIJ,EAAAA,SAAyC,IAAI,EAG7F,SAASK,EAAWC,EAAwC,CAC1D,GAAI,CAACA,EAAY,MAAO,IACxB,GAAI,CAEF,OADa,IAAI,KAAKA,CAAU,EACpB,mBAAmB,OAAW,CACxC,KAAM,UACN,MAAO,QACP,IAAK,SAAA,CACN,CACH,MAAQ,CACN,MAAO,GACT,CACF,CAGA,MAAMC,EAAqB,CACzB,CAAE,IAAK,UAAW,QAAS,6CAA8C,KAAMC,GAAU,MAAO,SAAA,EAChG,CAAE,IAAK,cAAe,QAAS,iDAAkD,KAAMC,GAAK,MAAO,SAAA,EACnG,CAAE,IAAK,SAAU,QAAS,6CAA8C,KAAMC,GAAK,MAAO,aAAA,EAC1F,CAAE,IAAK,WAAY,QAAS,iDAAkD,KAAMC,GAAQ,MAAO,SAAA,EACnG,CAAE,IAAK,OAAQ,QAAS,kDAAmD,KAAMC,GAAU,MAAO,OAAA,CAAQ,EAItGC,EAAgBC,EAAAA,QAAc,IAAM,CACxC,GAAI,EAACxB,GAAA,MAAAA,EAAiB,kBAAkB,MAAO,CAAA,EAE/C,MAAMyB,EAWD,CAAA,EAEL,OAAAR,EAAmB,QAASS,GAAQ,UACjCC,EAAA3B,EAAgB,mBAAhB,YAAA2B,EAAmCD,EAAI,OAAQ,IAAI,QAASE,GAAiC,CAC5FH,EAAQ,KAAK,CACX,GAAGG,EACH,KAAMF,EAAI,IACV,UAAW5B,EAAc,CAAE,GAAI4B,EAAI,QAAS,EAC5C,SAAUA,EAAI,KACd,UAAWA,EAAI,MACf,KAAME,EAAM,YAAcA,EAAM,MAAQA,EAAM,gBAAkB,EAAA,CACjE,CACH,CAAC,CACH,CAAC,EAEMH,EAAQ,KAAK,CAAC,EAAGI,IAAM,IAAI,KAAKA,EAAE,IAAI,EAAE,QAAA,EAAY,IAAI,KAAK,EAAE,IAAI,EAAE,SAAS,CACvF,EAAG,CAAC7B,GAAA,YAAAA,EAAiB,gBAAgB,CAAC,EAGhC8B,EAAiBb,EAAmB,OAAO,CAACc,EAAKL,IAAQ,OAC7D,OAAAK,EAAIL,EAAI,GAAG,KAAKC,EAAA3B,GAAA,YAAAA,EAAiB,mBAAjB,YAAA2B,EAAoCD,EAAI,OAAQ,CAAA,GAAI,OAC7DK,CACT,EAAG,CAAA,CAA4B,EAEzBC,EAAe,OAAO,OAAOF,CAAc,EAAE,OAAO,CAACG,EAAKC,IAAUD,EAAMC,EAAO,CAAC,EAGlFC,EAAgBlB,EAAmB,OAAO,CAACgB,EAAKP,IAAQO,EAAMH,EAAeJ,EAAI,GAAG,EAAG,CAAC,EAGxFU,EAAkBC,EAAAA,YAAkB,IAAM,qBAC9C,MAAMC,EAAItC,GAAA,YAAAA,EAAiB,WAC3Bc,EAAoB,CAClB,YAAa,CACX,aAAc,CAAC,KAAIa,EAAAW,GAAA,YAAAA,EAAG,cAAH,YAAAX,EAAgB,eAAgB,CAAA,CAAG,EACtD,gBAAiB,CAAC,KAAIY,EAAAD,GAAA,YAAAA,EAAG,cAAH,YAAAC,EAAgB,kBAAmB,CAAA,CAAG,EAC5D,eAAgB,CAAC,KAAIC,EAAAF,GAAA,YAAAA,EAAG,cAAH,YAAAE,EAAgB,iBAAkB,CAAA,CAAG,EAC1D,cAAe,CAAC,KAAIC,EAAAH,GAAA,YAAAA,EAAG,cAAH,YAAAG,EAAgB,gBAAiB,CAAA,CAAG,CAAA,EAE1D,YAAa,CACX,aAAc,CAAC,KAAIC,EAAAJ,GAAA,YAAAA,EAAG,cAAH,YAAAI,EAAgB,eAAgB,CAAA,CAAG,EACtD,WAAY,CAAC,KAAIC,EAAAL,GAAA,YAAAA,EAAG,cAAH,YAAAK,EAAgB,aAAc,CAAA,CAAG,EAClD,YAAa,CAAC,KAAIC,EAAAN,GAAA,YAAAA,EAAG,cAAH,YAAAM,EAAgB,cAAe,CAAA,CAAG,EACpD,SAAU,CAAC,KAAIC,EAAAP,GAAA,YAAAA,EAAG,cAAH,YAAAO,EAAgB,WAAY,CAAA,CAAG,CAAA,EAEhD,gBAAgBP,GAAA,YAAAA,EAAG,gBAAiB,CAAA,GAAI,IAAKQ,IAAO,CAAE,GAAGA,CAAA,EAAI,EAC7D,YAAYR,GAAA,YAAAA,EAAG,YAAa,CAAA,GAAI,IAAKS,IAAO,CAAE,GAAGA,GAAI,CAAA,CACtD,EACDnC,EAAc,EAAI,CACpB,EAAG,CAACZ,GAAA,YAAAA,EAAiB,UAAU,CAAC,EAE1BgD,GAAmBX,EAAAA,YAAkB,IAAM,CAC/CzB,EAAc,EAAK,EACnBE,EAAoB,IAAI,CAC1B,EAAG,CAAA,CAAE,EAECmC,GAAaZ,EAAAA,YAAkB,SAAY,CAC/C,GAAKxB,EACL,GAAI,CACF,MAAMR,EAAiBQ,CAAgB,EACvCqC,EAAM,QAAQpD,EAAc,CAAE,GAAI,wCAAA,CAA0C,CAAC,EAC7Ec,EAAc,EAAK,EACnBE,EAAoB,IAAI,CAC1B,MAAQ,CACNoC,EAAM,MAAMpD,EAAc,CAAE,GAAI,sCAAA,CAAwC,CAAC,CAC3E,CACF,EAAG,CAACe,EAAkBR,EAAkBP,CAAa,CAAC,EAGtD,GAAIG,EACF,OACEkD,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,wCAAA,CAAyC,EACxDA,MAAC,OAAI,UAAU,wCACZ,eAAM,KAAK,CAAE,OAAQ,CAAA,CAAG,EAAE,IAAI,CAACC,EAAGC,IACjCF,MAAC,OAAY,UAAU,wCAAA,EAAbE,CAAsD,CACjE,CAAA,CACH,CAAA,EACF,EAKJ,GAAIpD,EACF,OACEiD,EAAAA,KAAC,MAAA,CAAI,UAAU,yGACb,SAAA,CAAAC,EAAAA,IAAC1D,EAAA,CAAU,UAAU,uBAAA,CAAwB,EAC7CyD,EAAAA,KAAC,MAAA,CAAI,UAAU,SACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CAAE,UAAU,sBAAuB,SAAAtD,EAAc,CAAE,GAAI,0BAAA,CAA4B,EAAE,EACtFsD,EAAAA,IAAC,IAAA,CAAE,UAAU,iBAAkB,WAAM,OAAA,CAAQ,CAAA,EAC/C,EACAA,EAAAA,IAACG,EAAA,CAAO,QAAQ,UAAU,KAAK,KAAK,QAAS,IAAMpD,EAAA,EAChD,SAAAL,EAAc,CAAE,GAAI,sBAAA,CAAwB,CAAA,CAC/C,CAAA,EACF,EAKJ,GAAI,CAACE,EACH,OACEmD,EAAAA,KAAC,MAAA,CAAI,UAAU,uDACb,SAAA,CAAAC,EAAAA,IAACI,GAAA,CAAc,UAAU,sCAAA,CAAuC,EAChEJ,EAAAA,IAAC,MAAG,UAAU,2CACX,WAAc,CAAE,GAAI,6BAAA,CAA+B,EACtD,EACAA,MAAC,KAAE,UAAU,0DACV,WAAc,CAAE,GAAI,+BAAA,CAAiC,CAAA,CACxD,CAAA,EACF,EAIJ,KAAM,CAAE,gBAAAK,EAAiB,aAAAC,EAAc,cAAAC,EAAe,iBAAAC,EAAkB,WAAAC,EAAY,SAAAC,GAAa9D,EAEjG,OACEmD,EAAAA,KAAC,MAAA,CAAI,UAAU,YAEb,SAAA,CAAAC,MAACW,EAAA,CACC,SAAAZ,EAAAA,KAACa,EAAA,CAAY,UAAU,MAErB,SAAA,CAAAb,EAAAA,KAAC,MAAA,CAAI,UAAU,oEACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,SACb,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,2DACX,SAAApD,EAAgB,YACnB,EACAoD,EAAAA,IAAC,IAAA,CAAE,UAAU,gCACV,SAAApD,EAAgB,aAAeF,EAAc,CAAE,GAAI,+BAAA,CAAiC,CAAA,CACvF,CAAA,EACF,EACAqD,EAAAA,KAAC,MAAA,CAAI,UAAU,2CACb,SAAA,CAAAA,OAAC,MAAA,CACE,SAAA,CAAArD,EAAc,CAAE,GAAI,qCAAsC,EAAE,IAAE,IAC9DiB,EAAWf,EAAgB,aAAa,CAAA,EAC3C,GACC8D,GAAA,YAAAA,EAAU,gBACTV,EAAAA,IAAC,MAAA,CAAI,UAAU,OACb,SAAAA,EAAAA,IAAC,OAAA,CAAK,UAAU,mDACb,SAAAU,EAAS,aAAA,CACZ,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,EACF,EAGAX,EAAAA,KAAC,KAAA,CAAG,UAAU,yEACZ,SAAA,CAAAC,EAAAA,IAACa,GAAA,CAAM,UAAU,SAAA,CAAU,EAC1BnE,EAAc,CAAE,GAAI,iCAAA,CAAmC,CAAA,EAC1D,EAEAqD,EAAAA,KAAC,MAAA,CAAI,UAAU,wCAEb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,2EACX,SAAAtD,EAAc,CAAE,GAAI,qCAAA,CAAuC,EAC9D,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,yBACZ,oBAAiB,WAAaK,EAAgB,UAAU,OAAS,EAChEA,EAAgB,UAAU,IAAKS,GAC7Bf,EAAAA,KAAC,MAAA,CAEC,UAAW,0FACTe,EAAK,QAAU,sBAAwB,EACzC,GAEA,SAAA,CAAAd,EAAAA,IAAC,OAAA,CAAK,UAAU,8BAA+B,SAAAc,EAAK,KAAK,EACzDd,EAAAA,IAAC,OAAA,CAAK,UAAU,gCAAiC,WAAK,WAAW,EAChEc,EAAK,SACJd,MAAC,OAAA,CAAK,UAAU,qEACb,SAAAtD,EAAc,CAAE,GAAI,mCAAA,CAAqC,CAAA,CAC5D,CAAA,CAAA,EAVGoE,EAAK,IAAA,CAab,EAEDd,EAAAA,IAAC,OAAA,CAAK,UAAU,gCACb,SAAAtD,EAAc,CAAE,GAAI,uCAAA,CAAyC,CAAA,CAChE,CAAA,CAEJ,CAAA,EACF,SAGC,MAAA,CACC,SAAA,CAAAsD,EAAAA,IAAC,KAAA,CAAG,UAAU,2EACX,SAAAtD,EAAc,CAAE,GAAI,sCAAA,CAAwC,EAC/D,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,yBACZ,oBAAiB,YAAcK,EAAgB,WAAW,OAAS,EAClEA,EAAgB,WAAW,IAAKU,GAC9Bf,EAAAA,IAACgB,EAAA,CAAe,QAAQ,UAAU,UAAU,sBACzC,SAAAD,CAAA,EADSA,CAEZ,CACD,EAEDf,MAAC,OAAA,CAAK,UAAU,gCACb,WAAc,CAAE,GAAI,wCAAA,CAA0C,EACjE,CAAA,CAEJ,CAAA,EACF,SAGC,MAAA,CACC,SAAA,CAAAA,EAAAA,IAAC,KAAA,CAAG,UAAU,2EACX,SAAAtD,EAAc,CAAE,GAAI,sCAAA,CAAwC,EAC/D,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,yBACZ,SAAAK,GAAA,MAAAA,EAAiB,aAAeA,EAAgB,YAAY,OAAS,EACpEA,EAAgB,YAAY,IAAKY,GAC/BjB,EAAAA,IAACgB,EAAA,CAAiB,QAAQ,UAAU,UAAU,sBAC3C,SAAAC,CAAA,EADSA,CAEZ,CACD,EAEDjB,EAAAA,IAAC,OAAA,CAAK,UAAU,gCAAgC,aAAC,CAAA,CAErD,CAAA,EACF,SAGC,MAAA,CACC,SAAA,CAAAA,EAAAA,IAAC,KAAA,CAAG,UAAU,2EACX,SAAAtD,EAAc,CAAE,GAAI,0CAAA,CAA4C,EACnE,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,yBACZ,SAAAK,GAAA,MAAAA,EAAiB,iBAAmBA,EAAgB,gBAAgB,OAAS,EAC5EA,EAAgB,gBAAgB,IAAKU,GACnCf,EAAAA,IAACgB,EAAA,CAAe,QAAQ,UAAU,UAAU,sBACzC,SAAAD,CAAA,EADSA,CAEZ,CACD,EAEDf,EAAAA,IAAC,OAAA,CAAK,UAAU,gCAAgC,aAAC,CAAA,CAErD,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,GAGEM,GAAiBC,GAAiBA,EAAc,OAAS,UACxDI,EAAA,CACC,SAAAZ,EAAAA,KAACa,EAAA,CAAY,UAAU,MAEpB,SAAA,CAAAN,GACCP,EAAAA,KAAAmB,WAAA,CACE,SAAA,CAAAnB,EAAAA,KAAC,KAAA,CAAG,UAAU,yEACZ,SAAA,CAAAC,EAAAA,IAAC7D,GAAA,CAAO,UAAU,SAAA,CAAU,EAC3BO,EAAc,CAAE,GAAI,oCAAA,CAAsC,CAAA,EAC7D,EAEAqD,EAAAA,KAAC,MAAA,CAAI,UAAU,wCAEb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,2EACX,SAAAtD,EAAc,CAAE,GAAI,oCAAA,CAAsC,EAC7D,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,yDACb,SAAAA,EAAAA,IAAC,QAAK,UAAU,sCAAuC,SAAAM,EAAa,KAAA,CAAM,CAAA,CAC5E,CAAA,EACF,EAGCA,EAAa,QAAUA,EAAa,OAAO,OAAS,UAClD,MAAA,CACC,SAAA,CAAAN,EAAAA,IAAC,KAAA,CAAG,UAAU,2EACX,SAAAtD,EAAc,CAAE,GAAI,qCAAA,CAAuC,EAC9D,QACC,MAAA,CAAI,UAAU,yBACZ,SAAA4D,EAAa,OAAO,IAAKa,GACxBnB,MAAC,QAAiB,UAAU,yDACzB,SAAAmB,CAAA,EADQA,CAEX,CACD,CAAA,CACH,CAAA,EACF,EAIDb,EAAa,UAAYA,EAAa,SAAS,OAAS,UACtD,MAAA,CACC,SAAA,CAAAN,EAAAA,IAAC,KAAA,CAAG,UAAU,2EACX,SAAAtD,EAAc,CAAE,GAAI,uCAAA,CAAyC,EAChE,QACC,MAAA,CAAI,UAAU,yBACZ,SAAA4D,EAAa,SAAS,IAAKc,GAC1BpB,MAAC,QAAmB,UAAU,yDAC3B,SAAAoB,CAAA,EADQA,CAEX,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,EACF,EAIDd,GAAgBC,GAAiBA,EAAc,OAAS,GACvDP,EAAAA,IAAC,MAAA,CAAI,UAAU,8BAA8B,EAI9CO,GAAiBA,EAAc,OAAS,GACvCR,EAAAA,KAAAmB,EAAAA,SAAA,CACE,SAAA,CAAAnB,EAAAA,KAAC,KAAA,CAAG,UAAU,yEACZ,SAAA,CAAAC,EAAAA,IAAC1D,EAAA,CAAU,UAAU,SAAA,CAAU,EAC9BI,EAAc,CAAE,GAAI,kCAAA,CAAoC,CAAA,EAC3D,QAEC,MAAA,CAAI,UAAU,YACZ,SAAA6D,EAAc,IAAKc,GAAuB,CACzC,MAAMC,EAAaD,EAAK,YAAc,MAChCE,EAA2C,CAC/C,KAAM,mDACN,OAAQ,2CACR,IAAK,+CAAA,EAEDC,EAAuD,CAC3D,KACExB,EAAAA,IAACgB,EAAA,CAAM,QAAQ,cAAc,UAAU,sBACpC,SAAAtE,EAAc,CAAE,GAAI,4CAAA,CAA8C,CAAA,CACrE,EAEF,OACEsD,EAAAA,IAACgB,EAAA,CAAM,QAAQ,UAAU,UAAU,sBAChC,SAAAtE,EAAc,CAAE,GAAI,8CAAA,CAAgD,CAAA,CACvE,EAEF,IACEsD,EAAAA,IAACgB,EAAA,CAAM,QAAQ,YAAY,UAAU,sBAClC,SAAAtE,EAAc,CAAE,GAAI,2CAAA,CAA6C,CAAA,CACpE,CAAA,EAIJ,OACEqD,EAAAA,KAAC,MAAA,CAEC,UAAW,iBAAiBwB,EAAiBD,CAAU,GAAKC,EAAiB,GAAG,GAEhF,SAAA,CAAAxB,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,sCAAuC,SAAAqB,EAAK,KAAK,EAC9DG,EAAiBF,CAAU,CAAA,EAC9B,EACCD,EAAK,aACJrB,EAAAA,IAAC,KAAE,UAAU,qCAAsC,WAAK,YAAY,EAErEqB,EAAK,gBAAkBA,EAAK,eAAe,OAAS,GACnDrB,EAAAA,IAAC,MAAG,UAAU,sDACX,WAAK,eAAe,IAAI,CAACyB,EAAcvB,UACrC,KAAA,CAAY,SAAAuB,GAAJvB,CAAS,CACnB,CAAA,CACH,CAAA,CAAA,EAfGmB,EAAK,IAAA,CAmBhB,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CACF,EAIDb,GAAoB5B,EAAe,GAClCoB,EAAAA,IAACW,GACC,SAAAZ,EAAAA,KAACa,EAAA,CAAY,UAAU,MACrB,SAAA,CAAAb,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,oEACZ,SAAA,CAAAC,EAAAA,IAAC0B,GAAA,CAAU,UAAU,SAAA,CAAU,EAC9BhF,EAAc,CAAE,GAAI,gCAAA,CAAkC,CAAA,EACzD,QACC,MAAA,CAAI,UAAU,4BACZ,SAAAmB,EAAmB,IAAKS,GAAQ,CAC/B,MAAMQ,EAAQJ,EAAeJ,EAAI,GAAG,EACpC,GAAIQ,IAAU,EAAG,OAAO,KACxB,MAAM6C,EAAOrD,EAAI,KACjB,OACEyB,OAACiB,GAAoB,QAAS1C,EAAI,QAAU,UAAY,UAAY,YAAa,UAAU,sBACzF,SAAA,CAAA0B,EAAAA,IAAC2B,EAAA,CAAK,UAAU,gBAAA,CAAiB,EAChC7C,CAAA,CAAA,EAFSR,EAAI,GAGhB,CAEJ,CAAC,CAAA,CACH,CAAA,EACF,EAEAyB,EAAAA,KAAC6B,IAAK,MAAOxE,EAAc,cAAgByE,GAAMxE,EAAgBwE,CAAiB,EAChF,SAAA,CAAA7B,EAAAA,IAAC,OAAI,UAAU,yCACb,SAAAD,EAAAA,KAAC+B,GAAA,CAAS,UAAU,MAClB,SAAA,CAAA/B,EAAAA,KAACgC,EAAA,CAAY,MAAM,WAAW,UAAU,wBACtC,SAAA,CAAA/B,EAAAA,IAACgC,GAAA,CAAW,UAAU,kBAAA,CAAmB,EACxCtF,EAAc,CAAE,GAAI,qCAAA,CAAuC,CAAA,EAC9D,EACAqD,EAAAA,KAACgC,EAAA,CAAY,MAAM,WAAW,UAAU,wBACtC,SAAA,CAAA/B,EAAAA,IAACzD,GAAA,CAAoB,UAAU,kBAAA,CAAmB,EACjDG,EAAc,CAAE,GAAI,mCAAA,CAAqC,CAAA,CAAA,CAC5D,CAAA,CAAA,CACF,CAAA,CACF,EAEAsD,EAAAA,IAACiC,EAAA,CAAY,MAAM,WACjB,SAAAjC,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,SAAAnC,EAAmB,IAAKS,GAAQ,CAC/B,MAAMD,GAAUmC,GAAA,YAAAA,EAAmBlC,EAAI,OAAQ,CAAA,EAC/C,GAAID,EAAQ,SAAW,EAAG,OAAO,KACjC,MAAMsD,EAAOrD,EAAI,KAEjB,cACG,MAAA,CACC,SAAA,CAAAyB,EAAAA,KAAC,KAAA,CAAG,UAAU,uEACZ,SAAA,CAAAC,EAAAA,IAAC2B,EAAA,CAAK,UAAU,aAAA,CAAc,EAC9B3B,MAAC,QAAM,SAAAtD,EAAc,CAAE,GAAI4B,EAAI,OAAA,CAAS,EAAE,QACzC0C,EAAA,CAAM,QAAQ,YAAY,UAAU,oBAAqB,WAAQ,MAAA,CAAO,CAAA,EAC3E,EACAjB,EAAAA,KAAC,MAAA,CAAI,UAAU,cACZ,SAAA,CAAA1B,EAAQ,MAAM,EAAG,CAAC,EAAE,IAAI,CAACG,EAAuI0B,IAC/JH,EAAAA,KAAC,MAAA,CAEC,UAAU,mFAEV,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,sCAAuC,SAAAxB,EAAM,MAAM,EACjEwB,EAAAA,IAAC,OAAA,CAAK,UAAU,gCACb,SAAArC,EAAWa,EAAM,YAAcA,EAAM,MAAQA,EAAM,cAAc,CAAA,CACpE,CAAA,EACF,EACCA,EAAM,aACLwB,EAAAA,IAAC,KAAE,UAAU,qCAAsC,WAAM,YAAY,EAEvED,EAAAA,KAAC,MAAA,CAAI,UAAU,8CACZ,SAAA,CAAAvB,EAAM,WACLwB,EAAAA,IAAC,OAAA,CAAK,UAAU,gEACb,WAAM,UACT,EAEDxB,EAAM,aACLwB,EAAAA,IAAC,QAAK,UAAU,iCAAkC,WAAM,YAAY,EAErExB,EAAM,QACLwB,EAAAA,IAAC,OAAA,CACC,UAAW,yBACTxB,EAAM,SAAW,YACb,gCACA,+BACN,GAEC,SAAAA,EAAM,MAAA,CAAA,CACT,CAAA,CAEJ,CAAA,CAAA,EAhCK0B,CAAA,CAkCR,EACA7B,EAAQ,OAAS,GAChB0B,EAAAA,KAAC,MAAA,CAAI,UAAU,iDAAiD,SAAA,CAAA,WACrD1B,EAAQ,OAAS,EAAE,OAAA,CAAA,CAC9B,CAAA,CAAA,CAEJ,CAAA,CAAA,EAjDQC,EAAI,GAkDd,CAEJ,CAAC,EACH,EACF,QAEC2D,EAAA,CAAY,MAAM,WACjB,SAAAlC,EAAAA,KAAC,MAAA,CAAI,UAAU,YACZ,SAAA,CAAA5B,EAAc,MAAM,EAAG,EAAE,EAAE,IAAI,CAACK,EAAO0B,IAAM,CAC5C,MAAMyB,EAAOnD,EAAM,SACnB,OACEuB,EAAAA,KAAC,MAAA,CAAY,UAAU,aACrB,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CACC,UAAW,2BAA2BxB,EAAM,SAAS,eAAeA,EAAM,SAAS,oCAEnF,SAAAwB,EAAAA,IAAC2B,EAAA,CAAK,UAAU,SAAA,CAAU,CAAA,CAAA,EAE3BzB,EAAI,KAAK,IAAI/B,EAAc,OAAQ,EAAE,EAAI,GACxC6B,EAAAA,IAAC,MAAA,CAAI,UAAU,+BAAA,CAAgC,CAAA,EAEnD,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAC,EAAAA,IAACgB,EAAA,CACC,QACExC,EAAM,YAAc,UAChB,UACAA,EAAM,YAAc,cAClB,cACA,YAER,UAAU,sBAET,SAAAA,EAAM,SAAA,CAAA,EAETwB,EAAAA,IAAC,KAAA,CAAG,UAAU,sCAAuC,WAAM,KAAA,CAAM,CAAA,EACnE,EACAA,MAAC,QAAK,UAAU,kDACb,SAAArC,EAAWa,EAAM,IAAI,CAAA,CACxB,CAAA,EACF,EACCA,EAAM,aACLwB,EAAAA,IAAC,KAAE,UAAU,qCAAsC,WAAM,YAAY,EAEvED,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACZ,SAAA,CAAAvB,EAAM,WACLwB,EAAAA,IAAC,OAAA,CAAK,UAAU,2CACb,WAAM,UACT,EAEDxB,EAAM,aACLwB,EAAAA,IAAC,QAAK,UAAU,iCAAkC,WAAM,YAAY,EAErExB,EAAM,MACLA,EAAM,KAAK,MAAM,EAAG,CAAC,EAAE,IAAK0D,GAC1BlC,EAAAA,IAAC,OAAA,CAAe,UAAU,kCACvB,SAAAkC,CAAA,EADQA,CAEX,CACD,CAAA,CAAA,CACL,CAAA,CAAA,CACF,CAAA,CAAA,EAnDQhC,CAoDV,CAEJ,CAAC,EACA/B,EAAc,OAAS,IACtB4B,EAAAA,KAAC,MAAA,CAAI,UAAU,iDAAiD,SAAA,CAAA,WACrD5B,EAAc,OAAS,GAAG,eAAA,CAAA,CACrC,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,EAIDsC,GACCT,EAAAA,IAACW,EAAA,CACC,SAAAZ,OAACa,EAAA,CAAY,UAAU,MACrB,SAAA,CAAAb,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,gEACZ,SAAA,CAAAC,EAAAA,IAACmC,GAAA,CAAW,UAAU,SAAA,CAAU,EAC/BzF,EAAc,CAAE,GAAI,kCAAA,CAAoC,CAAA,EAC3D,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,aACZ,SAACzC,EAMAwC,EAAAA,KAAAmB,EAAAA,SAAA,CACE,SAAA,CAAAnB,EAAAA,KAACI,EAAA,CAAO,QAAQ,UAAU,KAAK,KAAK,QAASP,GAAkB,SAAU1C,EACvE,SAAA,CAAA8C,EAAAA,IAACoC,EAAA,CAAE,UAAU,cAAA,CAAe,EAC3B1F,EAAc,CAAE,GAAI,mCAAA,CAAqC,CAAA,EAC5D,EACAqD,EAAAA,KAACI,GAAO,QAAQ,UAAU,KAAK,KAAK,QAASN,GAAY,SAAU3C,EACjE,SAAA,CAAA8C,EAAAA,IAACqC,GAAA,CAAK,UAAU,cAAA,CAAe,EACjB3F,EAAbQ,EAA2B,CAAE,GAAI,mCAAA,EAAuD,CAAE,GAAI,iCAAA,CAAxB,CAA2D,CAAA,CACpI,CAAA,CAAA,CACF,EAdA6C,EAAAA,KAACI,EAAA,CAAO,QAAQ,UAAU,KAAK,KAAK,QAASnB,EAC3C,SAAA,CAAAgB,EAAAA,IAACsC,GAAA,CAAK,UAAU,cAAA,CAAe,EAC9B5F,EAAc,CAAE,GAAI,iCAAA,CAAmC,CAAA,CAAA,CAC1D,CAWA,CAEJ,CAAA,EACF,QAEC,MAAA,CAAI,UAAU,YACZ,SAACa,EAgJAwC,EAAAA,KAAAmB,EAAAA,SAAA,CAEE,SAAA,CAAAnB,OAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,qEACZ,SAAA,CAAAC,EAAAA,IAAC3D,EAAA,CAAW,UAAU,SAAA,CAAU,QAC/B,OAAA,CAAM,SAAAK,EAAc,CAAE,GAAI,wCAAA,CAA0C,CAAA,CAAE,CAAA,EACzE,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,gBAAO,QAAQ,CACd,aAAc,cACd,gBAAiB,iBACjB,eAAgB,gBAChB,cAAe,eAAA,CAChB,EAAE,IAAI,CAAC,CAACuC,EAAKC,CAAQ,WACpBzC,OAAAA,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAC,EAAAA,IAAC,QAAA,CAAM,UAAU,uDACd,SAAAtD,EAAc,CAAE,GAAI,mDAAmD8F,CAAQ,EAAA,CAAI,CAAA,CACtF,EACAzC,EAAAA,KAAC,MAAA,CAAI,UAAU,sFACV,SAAA,IAAAxB,EAAAd,GAAA,YAAAA,EAAkB,cAAlB,YAAAc,EAAwCgE,KAAQ,CAAA,GAAI,IAAI,CAACE,EAAcC,IACxE3C,EAAAA,KAAC,MAAA,CAAc,UAAU,6DACvB,SAAA,CAAAC,EAAAA,IAAC,QAAM,SAAAyC,CAAA,CAAK,EACZzC,EAAAA,IAAC,SAAA,CACC,UAAU,mDACV,QAAS,IAAM,CACb,MAAM2C,EAAU,CAAE,GAAGlF,CAAA,EACpBkF,EAAQ,YAAoBJ,CAAG,EAAMI,EAAQ,YAAoBJ,CAAG,EAAe,OAAO,CAACtC,EAAWC,IAAcA,IAAMwC,CAAG,EAC9HhF,EAAoBiF,CAAO,CAC7B,EAEA,SAAA3C,EAAAA,IAACoC,EAAA,CAAE,UAAU,SAAA,CAAU,CAAA,CAAA,CACzB,CAAA,EAXQM,CAYV,CACD,EACD1C,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,2DACV,YAAatD,EAAc,CAAE,GAAI,kDAAmD,EACpF,UAAYkG,GAAM,CAChB,GAAIA,EAAE,MAAQ,SAAWA,EAAE,cAAc,MAAM,OAAQ,CACrD,MAAMD,EAAU,CAAE,GAAGlF,CAAA,EACpBkF,EAAQ,YAAoBJ,CAAG,EAAI,CAAC,GAAKI,EAAQ,YAAoBJ,CAAG,GAAK,CAAA,EAAKK,EAAE,cAAc,MAAM,MAAM,EAC/GlF,EAAoBiF,CAAO,EAC3BC,EAAE,cAAc,MAAQ,EAC1B,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,EAjCQL,CAkCV,EACD,CAAA,CACH,CAAA,EACF,SAGC,MAAA,CACC,SAAA,CAAAxC,EAAAA,KAAC,KAAA,CAAG,UAAU,qEACZ,SAAA,CAAAC,EAAAA,IAACxD,EAAA,CAAY,UAAU,SAAA,CAAU,QAChC,OAAA,CAAM,SAAAE,EAAc,CAAE,GAAI,wCAAA,CAA0C,CAAA,CAAE,CAAA,EACzE,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,gBAAO,QAAQ,CACd,aAAc,eACd,WAAY,YACZ,YAAa,cACb,SAAU,UAAA,CACX,EAAE,IAAI,CAAC,CAACuC,EAAKC,CAAQ,WACpBzC,OAAAA,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAC,EAAAA,IAAC,QAAA,CAAM,UAAU,uDACd,SAAAtD,EAAc,CAAE,GAAI,mDAAmD8F,CAAQ,EAAA,CAAI,CAAA,CACtF,EACAzC,EAAAA,KAAC,MAAA,CAAI,UAAU,sFACV,SAAA,IAAAxB,EAAAd,GAAA,YAAAA,EAAkB,cAAlB,YAAAc,EAAwCgE,KAAQ,CAAA,GAAI,IAAI,CAACE,EAAcC,IACxE3C,EAAAA,KAAC,MAAA,CAAc,UAAU,6DACvB,SAAA,CAAAC,EAAAA,IAAC,QAAM,SAAAyC,CAAA,CAAK,EACZzC,EAAAA,IAAC,SAAA,CACC,UAAU,mDACV,QAAS,IAAM,CACb,MAAM2C,EAAU,CAAE,GAAGlF,CAAA,EACpBkF,EAAQ,YAAoBJ,CAAG,EAAMI,EAAQ,YAAoBJ,CAAG,EAAe,OAAO,CAACtC,EAAWC,IAAcA,IAAMwC,CAAG,EAC9HhF,EAAoBiF,CAAO,CAC7B,EAEA,SAAA3C,EAAAA,IAACoC,EAAA,CAAE,UAAU,SAAA,CAAU,CAAA,CAAA,CACzB,CAAA,EAXQM,CAYV,CACD,EACD1C,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,2DACV,YAAatD,EAAc,CAAE,GAAI,kDAAmD,EACpF,UAAYkG,GAAM,CAChB,GAAIA,EAAE,MAAQ,SAAWA,EAAE,cAAc,MAAM,OAAQ,CACrD,MAAMD,EAAU,CAAE,GAAGlF,CAAA,EACpBkF,EAAQ,YAAoBJ,CAAG,EAAI,CAAC,GAAKI,EAAQ,YAAoBJ,CAAG,GAAK,CAAA,EAAKK,EAAE,cAAc,MAAM,MAAM,EAC/GlF,EAAoBiF,CAAO,EAC3BC,EAAE,cAAc,MAAQ,EAC1B,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,EAjCQL,CAkCV,EACD,CAAA,CACH,CAAA,EACF,SAGC,MAAA,CACC,SAAA,CAAAxC,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,gEACZ,SAAA,CAAAC,EAAAA,IAAC6C,EAAA,CAAY,UAAU,SAAA,CAAU,QAChC,OAAA,CAAM,SAAAnG,EAAc,CAAE,GAAI,yCAAA,CAA2C,CAAA,CAAE,CAAA,EAC1E,EACAqD,EAAAA,KAACI,EAAA,CACC,QAAQ,QACR,KAAK,KACL,QAAS,IAAM,CACb,MAAMwC,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,cAAgB,CAAC,GAAIA,EAAQ,eAAiB,CAAA,EAAK,CAAE,KAAM,GAAI,MAAO,GAAI,YAAa,GAAI,EACnGjF,EAAoBiF,CAAO,CAC7B,EAEA,SAAA,CAAA3C,EAAAA,IAAC8C,EAAA,CAAK,UAAU,cAAA,CAAe,EAC9BpG,EAAc,CAAE,GAAI,sDAAA,CAAwD,CAAA,CAAA,CAAA,CAC/E,EACF,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,YACX,4BAAkB,gBAAiB,CAAA,GAAI,IAAI,CAAC+C,EAAML,IAClD3C,EAAAA,KAAC,MAAA,CAAc,UAAU,gDACvB,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAC,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,sEACV,YAAatD,EAAc,CAAE,GAAI,+CAAgD,EACjF,MAAOqG,EAAK,KACZ,SAAWH,GAAM,CACf,MAAMD,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,cAAeD,CAAG,EAAE,KAAOE,EAAE,OAAO,MAC5ClF,EAAoBiF,CAAO,CAC7B,CAAA,CAAA,EAEF3C,EAAAA,IAAC,SAAA,CACC,UAAU,uDACV,QAAS,IAAM,CACb,MAAM2C,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,cAAgBA,EAAQ,cAAe,OAAO,CAAC1C,EAAGC,IAAMA,IAAMwC,CAAG,EACzEhF,EAAoBiF,CAAO,CAC7B,EAEA,SAAA3C,EAAAA,IAACgD,EAAA,CAAO,UAAU,SAAA,CAAU,CAAA,CAAA,CAC9B,EACF,EACAjD,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAC,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,+DACV,YAAatD,EAAc,CAAE,GAAI,gDAAiD,EAClF,MAAOqG,EAAK,MACZ,SAAWH,GAAM,CACf,MAAMD,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,cAAeD,CAAG,EAAE,MAAQE,EAAE,OAAO,MAC7ClF,EAAoBiF,CAAO,CAC7B,CAAA,CAAA,EAEF3C,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,+DACV,YAAatD,EAAc,CAAE,GAAI,qDAAsD,EACvF,MAAOqG,EAAK,aAAe,GAC3B,SAAWH,GAAM,CACf,MAAMD,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,cAAeD,CAAG,EAAE,YAAcE,EAAE,OAAO,MACnDlF,EAAoBiF,CAAO,CAC7B,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,EA/CQD,CAgDV,CACD,CAAA,CACH,CAAA,EACF,SAGC,MAAA,CACC,SAAA,CAAA3C,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,gEACZ,SAAA,CAAAC,EAAAA,IAACiD,EAAA,CAAU,UAAU,SAAA,CAAU,QAC9B,OAAA,CAAM,SAAAvG,EAAc,CAAE,GAAI,sCAAA,CAAwC,CAAA,CAAE,CAAA,EACvE,EACAqD,EAAAA,KAACI,EAAA,CACC,QAAQ,QACR,KAAK,KACL,QAAS,IAAM,CACb,MAAMwC,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,UAAY,CAAC,GAAIA,EAAQ,WAAa,GAAK,CAAE,QAAS,GAAI,SAAU,GAAI,WAAY,GAAI,QAAS,GAAI,SAAU,KAAA,EAAO,YAAA,EAAe,EAC7IjF,EAAoBiF,CAAO,CAC7B,EAEA,SAAA,CAAA3C,EAAAA,IAAC8C,EAAA,CAAK,UAAU,cAAA,CAAe,EAC9BpG,EAAc,CAAE,GAAI,uDAAA,CAAyD,CAAA,CAAA,CAAA,CAChF,EACF,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,YACX,4BAAkB,YAAa,CAAA,GAAI,IAAI,CAACkD,EAAUR,IAClD3C,EAAAA,KAAC,MAAA,CAAc,UAAU,gDACvB,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAC,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,sEACV,YAAatD,EAAc,CAAE,GAAI,kDAAmD,EACpF,MAAOwG,EAAS,QAChB,SAAWN,GAAM,CACf,MAAMD,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,UAAWD,CAAG,EAAE,QAAUE,EAAE,OAAO,MAC3ClF,EAAoBiF,CAAO,CAC7B,CAAA,CAAA,EAEF3C,EAAAA,IAAC,SAAA,CACC,UAAU,uDACV,QAAS,IAAM,CACb,MAAM2C,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,UAAYA,EAAQ,UAAW,OAAO,CAAC1C,EAAGC,IAAMA,IAAMwC,CAAG,EACjEhF,EAAoBiF,CAAO,CAC7B,EAEA,SAAA3C,EAAAA,IAACgD,EAAA,CAAO,UAAU,SAAA,CAAU,CAAA,CAAA,CAC9B,EACF,EACAjD,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAC,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,+DACV,YAAatD,EAAc,CAAE,GAAI,mDAAoD,EACrF,MAAOwG,EAAS,UAAY,GAC5B,SAAWN,GAAM,CACf,MAAMD,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,UAAWD,CAAG,EAAE,SAAWE,EAAE,OAAO,MAC5ClF,EAAoBiF,CAAO,CAC7B,CAAA,CAAA,EAEF3C,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,+DACV,YAAatD,EAAc,CAAE,GAAI,oDAAqD,EACtF,MAAOwG,EAAS,YAAc,GAC9B,SAAWN,GAAM,CACf,MAAMD,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,UAAWD,CAAG,EAAE,WAAaE,EAAE,OAAO,MAC9ClF,EAAoBiF,CAAO,CAC7B,CAAA,CAAA,CACF,EACF,EACA3C,EAAAA,IAAC,WAAA,CACC,UAAU,sEACV,YAAatD,EAAc,CAAE,GAAI,kDAAmD,EACpF,KAAM,EACN,MAAOwG,EAAS,SAAW,GAC3B,SAAWN,GAAM,CACf,MAAMD,EAAU,CAAE,GAAGlF,CAAA,EACrBkF,EAAQ,UAAWD,CAAG,EAAE,QAAUE,EAAE,OAAO,MAC3ClF,EAAoBiF,CAAO,CAC7B,CAAA,CAAA,CACF,CAAA,EA1DQD,CA2DV,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAxZA3C,EAAAA,KAAAmB,WAAA,CAEG,SAAA,CAAAT,EAAW,oBACT,MAAA,CACC,SAAA,CAAAV,EAAAA,KAAC,KAAA,CAAG,UAAU,qEACZ,SAAA,CAAAC,EAAAA,IAAC3D,EAAA,CAAW,UAAU,SAAA,CAAU,QAC/B,OAAA,CAAM,SAAAK,EAAc,CAAE,GAAI,wCAAA,CAA0C,CAAA,CAAE,CAAA,EACzE,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,gBAAO,QAAQS,EAAW,WAAW,EAAE,IAAI,CAAC,CAAC8B,EAAKY,CAAK,IAAM,CAC5D,MAAMC,EAAW,MAAM,QAAQD,CAAK,EAAIA,EAAQ,CAAA,EAChD,OAAIC,EAAS,SAAW,EAAU,KAEhCpD,MAAC,OAAc,UAAU,YACtB,WAAS,IAAI,CAACyC,EAAcvC,IAC3BH,EAAAA,KAAC,MAAA,CAEC,UAAU,2EAEV,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,6DACb,SAAAuC,EACH,EACAvC,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA2B,SAAAyC,CAAA,CAAK,CAAA,CAAA,EAN3CvC,CAAA,CAQR,GAXOqC,CAYV,CAEJ,CAAC,CAAA,CACH,CAAA,EACF,EAID9B,EAAW,aACVV,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,qEACZ,SAAA,CAAAC,EAAAA,IAACxD,EAAA,CAAY,UAAU,SAAA,CAAU,QAChC,OAAA,CAAM,SAAAE,EAAc,CAAE,GAAI,wCAAA,CAA0C,CAAA,CAAE,CAAA,EACzE,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,gBAAO,QAAQS,EAAW,WAAW,EAAE,IAAI,CAAC,CAAC8B,EAAKY,CAAK,IAAM,CAC5D,MAAMC,EAAW,MAAM,QAAQD,CAAK,EAAIA,EAAQ,CAAA,EAChD,OAAIC,EAAS,SAAW,EAAU,KAEhCpD,MAAC,OAAc,UAAU,YACtB,WAAS,IAAI,CAACyC,EAAcvC,IAC3BH,EAAAA,KAAC,MAAA,CAEC,UAAU,2EAEV,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,6DACb,SAAAuC,EACH,EACAvC,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA2B,SAAAyC,CAAA,CAAK,CAAA,CAAA,EAN3CvC,CAAA,CAQR,GAXOqC,CAYV,CAEJ,CAAC,CAAA,CACH,CAAA,EACF,EAID9B,EAAW,eACVV,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,qEACZ,SAAA,CAAAC,EAAAA,IAAC6C,EAAA,CAAY,UAAU,SAAA,CAAU,QAChC,OAAA,CAAM,SAAAnG,EAAc,CAAE,GAAI,yCAAA,CAA2C,CAAA,CAAE,CAAA,EAC1E,EACC+D,EAAW,cAAc,OAAS,EACjCT,EAAAA,IAAC,OAAI,UAAU,YACZ,SAAAS,EAAW,cAAc,IAAI,CAACsC,EAAsB7C,IACnDH,EAAAA,KAAC,MAAA,CAAY,UAAU,oDACrB,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,sCAAuC,SAAA+C,EAAK,KAAK,EAChEA,EAAK,aACJ/C,EAAAA,IAAC,QAAK,UAAU,6DACb,WAAK,WAAA,CACR,CAAA,EAEJ,EACAD,EAAAA,KAAC,OAAA,CAAK,UAAU,gCACb,SAAA,CAAArD,EAAc,CAAE,GAAI,mCAAoC,EAAE,KAAGqG,EAAK,KAAA,CAAA,CACrE,CAAA,CAAA,EAXQ7C,CAYV,CACD,CAAA,CACH,QAEC,IAAA,CAAE,UAAU,uCACV,SAAAxD,EAAc,CAAE,GAAI,2CAAA,CAA6C,GAAK,iEAAA,CACzE,CAAA,EAEJ,EAID+D,EAAW,WACVV,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,qEACZ,SAAA,CAAAC,EAAAA,IAACiD,EAAA,CAAU,UAAU,SAAA,CAAU,QAC9B,OAAA,CAAM,SAAAvG,EAAc,CAAE,GAAI,sCAAA,CAAwC,CAAA,CAAE,CAAA,EACvE,EACC+D,EAAW,UAAU,OAAS,EAC7BT,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,SAAAS,EAAW,UAAU,IAAI,CAACyC,EAAyBhD,IAClDH,EAAAA,KAAC,MAAA,CAEC,UAAU,gFAEV,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA2B,SAAAkD,EAAS,QAAQ,EAC5DlD,MAAC,QAAK,UAAU,uDACb,SAAArC,EAAWuF,EAAS,IAAI,CAAA,CAC3B,CAAA,EACF,EACAnD,EAAAA,KAAC,MAAA,CAAI,UAAU,kCACZ,SAAA,CAAAmD,EAAS,UACRlD,EAAAA,IAAC,OAAA,CAAK,UAAU,qDACb,WAAS,SACZ,EAEDkD,EAAS,YACRlD,EAAAA,IAAC,QAAK,UAAU,8DACb,WAAS,UAAA,CACZ,CAAA,EAEJ,EACCkD,EAAS,SACRlD,EAAAA,IAAC,KAAE,UAAU,qCAAsC,WAAS,OAAA,CAAQ,CAAA,CAAA,EAtBjEE,CAAA,CAyBR,CAAA,CACH,EAEAF,EAAAA,IAAC,IAAA,CAAE,UAAU,uCACV,SAAAtD,EAAc,CAAE,GAAI,wCAAA,CAA0C,GAAK,kEAAA,CACtE,CAAA,CAAA,CAEJ,CAAA,CAAA,CAEJ,CA2QA,CAEJ,CAAA,CAAA,CACF,CAAA,CACF,EAIFsD,MAACW,EAAA,CACC,SAAAZ,EAAAA,KAACa,EAAA,CAAY,UAAU,MACrB,SAAA,CAAAb,EAAAA,KAAC,KAAA,CAAG,UAAU,qEACZ,SAAA,CAAAC,EAAAA,IAACqD,GAAA,CAAU,UAAU,SAAA,CAAU,EAC9B3G,EAAc,CAAE,GAAI,6BAAA,CAA+B,CAAA,EACtD,EAEAqD,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,2CACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,uCAAwC,SAAAjB,EAAc,EACrEiB,MAAC,OAAI,UAAU,gCACZ,WAAc,CAAE,GAAI,qCAAA,CAAuC,CAAA,CAC9D,CAAA,EACF,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,2CACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,qCACZ,SAAAtD,EAAc,CAAE,GAAI,mCAAA,CAAqC,EAC5D,EACAsD,EAAAA,IAAC,MAAA,CAAI,UAAU,sCACZ,SAAA7B,EAAc,OAAS,EAAIR,EAAWQ,EAAc,CAAC,EAAE,IAAI,EAAI,GAAA,CAClE,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ","x_google_ignoreList":[0,1,2,3,4]}