claude-code-workflow 7.2.9 → 7.2.11
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.
- package/.claude/agents/cli-planning-agent.md +3 -0
- package/.claude/agents/debug-explore-agent.md +1 -0
- package/.claude/agents/tdd-developer.md +1 -0
- package/.claude/agents/team-worker.md +1 -1
- package/.claude/agents/test-action-planning-agent.md +3 -0
- package/.claude/agents/test-context-search-agent.md +1 -0
- package/.claude/agents/test-fix-agent.md +3 -0
- package/.claude/skills/review-code/SKILL.md +2 -0
- package/.claude/skills/review-cycle/SKILL.md +4 -0
- package/.claude/skills/skill-simplify/phases/02-optimize.md +4 -0
- package/.claude/skills/spec-generator/phases/05-epics-stories.md +4 -0
- package/.claude/skills/team-arch-opt/specs/team-config.json +5 -5
- package/.claude/skills/team-frontend-debug/roles/analyzer/role.md +3 -2
- package/.claude/skills/team-perf-opt/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-perf-opt/specs/team-config.json +5 -5
- package/.claude/skills/team-quality-assurance/roles/executor/role.md +2 -1
- package/.claude/skills/team-review/roles/reviewer/role.md +2 -1
- package/.claude/skills/team-tech-debt/roles/scanner/role.md +2 -1
- package/.claude/skills/team-testing/roles/executor/role.md +2 -1
- package/.claude/skills/team-testing/roles/generator/role.md +2 -1
- package/.claude/skills/team-ultra-analyze/roles/explorer/role.md +2 -1
- package/.claude/skills/team-ux-improve/specs/team-config.json +6 -6
- package/.claude/skills/workflow-execute/phases/06-review.md +4 -4
- package/.claude/skills/workflow-lite-test-review/SKILL.md +2 -0
- package/.claude/skills/workflow-plan/phases/05-plan-verify.md +4 -0
- package/.claude/skills/workflow-tdd-plan/phases/02-context-gathering.md +1 -0
- package/.claude/skills/workflow-tdd-plan/phases/05-tdd-task-generation.md +2 -1
- package/.claude/skills/workflow-test-fix/phases/02-test-context-gather.md +1 -0
- package/.claude/skills/workflow-test-fix/phases/05-test-cycle-execute.md +2 -1
- package/.claude/skills/workflow-tune/SKILL.md +487 -0
- package/.claude/skills/workflow-tune/phases/01-setup.md +548 -0
- package/.claude/skills/workflow-tune/phases/02-step-execute.md +197 -0
- package/.claude/skills/workflow-tune/phases/03-step-analyze.md +386 -0
- package/.claude/skills/workflow-tune/phases/04-synthesize.md +257 -0
- package/.claude/skills/workflow-tune/phases/05-optimize-report.md +246 -0
- package/.claude/skills/workflow-tune/specs/workflow-eval-criteria.md +57 -0
- package/.claude/skills/workflow-tune/templates/step-analysis-prompt.md +88 -0
- package/.claude/skills/workflow-tune/templates/synthesis-prompt.md +90 -0
- package/.codex/skills/analyze-with-file/SKILL.md +64 -103
- package/.codex/skills/debug-with-file/SKILL.md +4 -0
- package/.codex/skills/issue-discover/SKILL.md +1 -0
- package/.codex/skills/review-cycle/phases/02-parallel-review.md +3 -0
- package/.codex/skills/roadmap-with-file/SKILL.md +11 -17
- package/.codex/skills/team-designer/agents/validation-reporter.md +186 -0
- package/.codex/skills/team-iterdev/agents/gc-controller.md +193 -0
- package/.codex/skills/team-iterdev/agents/task-analyzer.md +206 -0
- package/.codex/skills/team-lifecycle-v4/agents/quality-gate.md +165 -0
- package/.codex/skills/team-lifecycle-v4/agents/requirement-clarifier.md +163 -0
- package/.codex/skills/team-lifecycle-v4/agents/supervisor.md +182 -0
- package/.codex/skills/team-uidesign/agents/completion-handler.md +177 -0
- package/.codex/skills/team-uidesign/agents/gc-loop-handler.md +162 -0
- package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +4 -0
- package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +2 -0
- package/ccw/dist/commands/spec.d.ts.map +1 -1
- package/ccw/dist/commands/spec.js +9 -4
- package/ccw/dist/commands/spec.js.map +1 -1
- package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/codexlens-routes.js +3 -1
- package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
- package/ccw/dist/tools/spec-index-builder.d.ts +8 -4
- package/ccw/dist/tools/spec-index-builder.d.ts.map +1 -1
- package/ccw/dist/tools/spec-index-builder.js +8 -4
- package/ccw/dist/tools/spec-index-builder.js.map +1 -1
- package/ccw/dist/tools/spec-init.d.ts +1 -1
- package/ccw/dist/tools/spec-init.d.ts.map +1 -1
- package/ccw/dist/tools/spec-init.js +127 -0
- package/ccw/dist/tools/spec-init.js.map +1 -1
- package/ccw/dist/tools/spec-loader.d.ts.map +1 -1
- package/ccw/dist/tools/spec-loader.js +2 -1
- package/ccw/dist/tools/spec-loader.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js → AlertDialog-BW9jiZ-p.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js.map → AlertDialog-BW9jiZ-p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js → AnalysisPage-ds-w_nVO.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js.map → AnalysisPage-ds-w_nVO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-CVK108u2.js → ApiSettingsPage-DlCbXxTz.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-CVK108u2.js.map → ApiSettingsPage-DlCbXxTz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-34Sjwl05.js → CliModeToggle-Dq3nL4fF.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-34Sjwl05.js.map → CliModeToggle-Dq3nL4fF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-bJZAYI38.js → CliSessionSharePage-BNDkEE4u.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-bJZAYI38.js.map → CliSessionSharePage-BNDkEE4u.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-VYnQGjxU.js → CliViewerPage-ChM-uNx_.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-VYnQGjxU.js.map → CliViewerPage-ChM-uNx_.js.map} +1 -1
- package/ccw/frontend/dist/assets/CodexLensPage-DOcsYNQk.js +2 -0
- package/ccw/frontend/dist/assets/CodexLensPage-DOcsYNQk.js.map +1 -0
- package/ccw/frontend/dist/assets/{Collapsible-B_xd1Qbg.js → Collapsible-CRNbykXN.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-B_xd1Qbg.js.map → Collapsible-CRNbykXN.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-Bjx1bPbH.js → CommandsManagerPage-C2JWcemF.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-Bjx1bPbH.js.map → CommandsManagerPage-C2JWcemF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-EgHsHvAH.js → DeepWikiPage-CvleOtJy.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-EgHsHvAH.js.map → DeepWikiPage-CvleOtJy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-CuwpbCzK.js → EndpointsPage-CMOWQG64.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-CuwpbCzK.js.map → EndpointsPage-CMOWQG64.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-cvlx0Zw0.js → ExplorerPage-DaFPRlNo.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-cvlx0Zw0.js.map → ExplorerPage-DaFPRlNo.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-C74-MPza.js → FixSessionPage-CC4p04Az.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-C74-MPza.js.map → FixSessionPage-CC4p04Az.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-x_-6y_n2.js → FloatingFileBrowser-DROn1xZ5.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-x_-6y_n2.js.map → FloatingFileBrowser-DROn1xZ5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-BGwmbJR1.js → FloatingPanel-CmL_yhDv.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-BGwmbJR1.js.map → FloatingPanel-CmL_yhDv.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-Bg5-aQxi.js → GraphExplorerPage-DCV5ybKE.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-Bg5-aQxi.js.map → GraphExplorerPage-DCV5ybKE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-C00fh0HE.js → HistoryPage-D0fYQZgc.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-C00fh0HE.js.map → HistoryPage-D0fYQZgc.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-CtVTB_ae.js → HookManagerPage-D2FuJfsM.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-CtVTB_ae.js.map → HookManagerPage-D2FuJfsM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage-CYuMQDbC.js → InstallationsPage-tjklillZ.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage-CYuMQDbC.js.map → InstallationsPage-tjklillZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-T_VSvUMh.js → IssueHubPage-E4JVrhO1.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-T_VSvUMh.js.map → IssueHubPage-E4JVrhO1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-DmcgvIvi.js → LiteTasksPage-aJuRoyLt.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-DmcgvIvi.js.map → LiteTasksPage-aJuRoyLt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-C_a7QSKz.js → McpManagerPage-BJeuWJv1.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-C_a7QSKz.js.map → McpManagerPage-BJeuWJv1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-CWKmXY5k.js → MemoryPage-BI4FAXhs.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-CWKmXY5k.js.map → MemoryPage-BI4FAXhs.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-B1duXK6r.js → NotFoundPage-DD2svchp.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-B1duXK6r.js.map → NotFoundPage-DD2svchp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-Ib9TM6HE.js → OrchestratorPage-FC__7yYa.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-Ib9TM6HE.js.map → OrchestratorPage-FC__7yYa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-sXSWMbF8.js → ProjectOverviewPage-DBB_-FzV.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-sXSWMbF8.js.map → ProjectOverviewPage-DBB_-FzV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-B6jaqG12.js → PromptHistoryPage-BwOAvCH8.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-B6jaqG12.js.map → PromptHistoryPage-BwOAvCH8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-D5qJyr3s.js → ReviewSessionPage-Dd1-g_gp.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-D5qJyr3s.js.map → ReviewSessionPage-Dd1-g_gp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-DyawK8QE.js → RulesManagerPage-B3RGdsKD.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-DyawK8QE.js.map → RulesManagerPage-B3RGdsKD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-Cym_RvC9.js → SessionDetailPage-DM-W5R8K.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-Cym_RvC9.js.map → SessionDetailPage-DM-W5R8K.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Dkc1Hv8W.js → SessionsPage-BVz1KCc7.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Dkc1Hv8W.js.map → SessionsPage-BVz1KCc7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-Rik9cUIj.js → SettingsPage-ComW7EZS.js} +4 -4
- package/ccw/frontend/dist/assets/{SettingsPage-Rik9cUIj.js.map → SettingsPage-ComW7EZS.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SkillsManagerPage-BGDWYAyI.js → SkillsManagerPage-CKom9XwV.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-BGDWYAyI.js.map → SkillsManagerPage-CKom9XwV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-CTiA1DMP.js → SpecsSettingsPage-DQz7WP2s.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-CTiA1DMP.js.map → SpecsSettingsPage-DQz7WP2s.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BgAFC-Wk.js → Switch-BPMdND9H.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BgAFC-Wk.js.map → Switch-BPMdND9H.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-drSnu5jn.js → TabsNavigation-qqt70VYL.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-drSnu5jn.js.map → TabsNavigation-qqt70VYL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-ePC__6-P.js → TaskDrawer-BqK_qiHX.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-ePC__6-P.js.map → TaskDrawer-BqK_qiHX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-C6bdFWn8.js → TeamPage-u5_i0Rgh.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-C6bdFWn8.js.map → TeamPage-u5_i0Rgh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-Zofi_DZM.js → TerminalDashboardPage-rUtC9e40.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-Zofi_DZM.js.map → TerminalDashboardPage-rUtC9e40.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-Bza1KlB9.js → archive-C3u8YNQF.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-Bza1KlB9.js.map → archive-C3u8YNQF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-CpsDm-cG.js → archive-restore-DfQ998g5.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-CpsDm-cG.js.map → archive-restore-DfQ998g5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-CibG_LVO.js → arrow-right-BshJM9Po.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-CibG_LVO.js.map → arrow-right-BshJM9Po.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-BheO8EgG.js → bookmark-plus-D03qJyOZ.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-BheO8EgG.js.map → bookmark-plus-D03qJyOZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BlhM0Nl0.js → bot-CyzWuwq0.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BlhM0Nl0.js.map → bot-CyzWuwq0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-Dqjg_eCO.js → braces-BPgtyjsG.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-Dqjg_eCO.js.map → braces-BPgtyjsG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-DYZSLYU0.js → circle-stop-Dix1AOmw.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-DYZSLYU0.js.map → circle-stop-Dix1AOmw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-DWCyAOAv.js → cpu-CCQ4Q0Zh.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-DWCyAOAv.js.map → cpu-CCQ4Q0Zh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-DIyoSEHx.js → ellipsis-vertical-BpTysg-Y.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-DIyoSEHx.js.map → ellipsis-vertical-BpTysg-Y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-DUy7aLEx.js → eye-DGY1rAZs.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-DUy7aLEx.js.map → eye-DGY1rAZs.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-CGRUVRDR.js → eye-off-D8t3JfWG.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-CGRUVRDR.js.map → eye-off-D8t3JfWG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-BxLBtU9d.js → file-json-BAdJb0n8.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-BxLBtU9d.js.map → file-json-BAdJb0n8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-BoHsW2es.js → file-text-DrJFiOUB.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-BoHsW2es.js.map → file-text-DrJFiOUB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-B4vOqP6B.js → filter-CKqzYbz7.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-B4vOqP6B.js.map → filter-CKqzYbz7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BKhwCNFG.js → folder-CV8511y9.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BKhwCNFG.js.map → folder-CV8511y9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-Dgf64gkT.js → gauge-XKvmu_uU.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-Dgf64gkT.js.map → gauge-XKvmu_uU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-Cus_S6Ux.js → globe-C56cDUzX.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-Cus_S6Ux.js.map → globe-C56cDUzX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DM08hpAN.js → grid-3x3-Bya-suFW.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DM08hpAN.js.map → grid-3x3-Bya-suFW.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-eCtll84F.js → hard-drive-CmuTZpsB.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-eCtll84F.js.map → hard-drive-CmuTZpsB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Bd1RD285.js → hash-CRPT_tJQ.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Bd1RD285.js.map → hash-CRPT_tJQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-eyyCQA6b.js → history-C1pJZQCL.js} +2 -2
- package/ccw/frontend/dist/assets/{history-eyyCQA6b.js.map → history-C1pJZQCL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-ZnmWxcZg.js → index-B6TpijCe.js} +2 -2
- package/ccw/frontend/dist/assets/{index-ZnmWxcZg.js.map → index-B6TpijCe.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-b2C0iFd1.js → index-Bcq-7r6F.js} +2 -2
- package/ccw/frontend/dist/assets/{index-b2C0iFd1.js.map → index-Bcq-7r6F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Cs2ShCCy.js → index-CI8-rBff.js} +2 -2
- package/ccw/frontend/dist/assets/{index-Cs2ShCCy.js.map → index-CI8-rBff.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CY6Lueph.js → index-Dmt9OiEf.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CY6Lueph.js.map → index-Dmt9OiEf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-DfeBbFXo.js → index-anSMmEF8.js} +2 -2
- package/ccw/frontend/dist/assets/{index-DfeBbFXo.js.map → index-anSMmEF8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B6I7GQC5.js → index-dWT2M6Ef.js} +4 -4
- package/ccw/frontend/dist/assets/{index-B6I7GQC5.js.map → index-dWT2M6Ef.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-ChrTrCby.js → layout-grid-TSO0BFQE.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-ChrTrCby.js.map → layout-grid-TSO0BFQE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-CvXiTlzN.js → lightbulb-Caj6fIQD.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-CvXiTlzN.js.map → lightbulb-Caj6fIQD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-W0Nl17ec.js → link-2-DE9lMxa-.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-W0Nl17ec.js.map → link-2-DE9lMxa-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-CL4JmoHb.js → link-BZtPgLW0.js} +2 -2
- package/ccw/frontend/dist/assets/{link-CL4JmoHb.js.map → link-BZtPgLW0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-CDmYFcio.js → list-DubWyY-U.js} +2 -2
- package/ccw/frontend/dist/assets/{list-CDmYFcio.js.map → list-DubWyY-U.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-0Mfsw_3d.js → map-pin-DwN_48AF.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-0Mfsw_3d.js.map → map-pin-DwN_48AF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-C6h08ple.js → messages-square-bjxvaiM9.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-C6h08ple.js.map → messages-square-bjxvaiM9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-Cbu2yRzi.js → minimize-2-CGfBKD_V.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-Cbu2yRzi.js.map → minimize-2-CGfBKD_V.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-CoLVUZGJ.js → package-nzWY6ilt.js} +2 -2
- package/ccw/frontend/dist/assets/{package-CoLVUZGJ.js.map → package-nzWY6ilt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-BYTYqsw1.js → plug-CiLce49C.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-BYTYqsw1.js.map → plug-CiLce49C.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-DmIojFl-.js → power-CFLmB-U9.js} +2 -2
- package/ccw/frontend/dist/assets/{power-DmIojFl-.js.map → power-CFLmB-U9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-BFa03OnG.js → save-DuO6OF0C.js} +2 -2
- package/ccw/frontend/dist/assets/{save-BFa03OnG.js.map → save-DuO6OF0C.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Vet3sN4J.js → send-CZk9p0mM.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Vet3sN4J.js.map → send-CZk9p0mM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-B9nzZRfE.js → square-check-big-BY_1YQQg.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-B9nzZRfE.js.map → square-check-big-BY_1YQQg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-C7K13x4Z.js → square-pen-CnZgm6g-.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-C7K13x4Z.js.map → square-pen-CnZgm6g-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-BCQHcnSe.js → star-Cn1F0qy7.js} +2 -2
- package/ccw/frontend/dist/assets/{star-BCQHcnSe.js.map → star-Cn1F0qy7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-CJsrp48L.js → style-Dxs1iXCV.js} +2 -2
- package/ccw/frontend/dist/assets/{style-CJsrp48L.js.map → style-Dxs1iXCV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CBzCJCB1.js → target-Bz1fLRKH.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CBzCJCB1.js.map → target-Bz1fLRKH.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-BYTc5mvQ.js → test-tube-C6qCYlDr.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-BYTc5mvQ.js.map → test-tube-C6qCYlDr.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-DzyQj7ib.js → upload-C71kd4Qs.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-DzyQj7ib.js.map → upload-C71kd4Qs.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-CFPww7gU.js → useApiSettings-CqP2BAJ7.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-CFPww7gU.js.map → useApiSettings-CqP2BAJ7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-ByL_a5CD.js → useCli-PCoPoVeM.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-ByL_a5CD.js.map → useCli-PCoPoVeM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-BvKIoOzB.js → useCommands-3OfPQPw4.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-BvKIoOzB.js.map → useCommands-3OfPQPw4.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-CmKmoP7n.js → useDebounce-bXiFhQx9.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-CmKmoP7n.js.map → useDebounce-bXiFhQx9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-G5UoArCU.js → useFileExplorer-DEyUm46_.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-G5UoArCU.js.map → useFileExplorer-DEyUm46_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-D2iHK44M.js → useLocale-sXTrdxcJ.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-D2iHK44M.js.map → useLocale-sXTrdxcJ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-CYU4zqhm.js → useSkills-D0W0kXYm.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-CYU4zqhm.js.map → useSkills-D0W0kXYm.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-JznNpij7.js → useSystemSettings-DZ-8lZsG.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-JznNpij7.js.map → useSystemSettings-DZ-8lZsG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-DqS0VCeN.js → wand-sparkles-83GmAYuw.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-DqS0VCeN.js.map → wand-sparkles-83GmAYuw.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +1 -1
- package/.claude/skills/team-arch-opt/role-specs/analyzer.md +0 -80
- package/.claude/skills/team-arch-opt/role-specs/designer.md +0 -118
- package/.claude/skills/team-arch-opt/role-specs/refactorer.md +0 -106
- package/.claude/skills/team-arch-opt/role-specs/reviewer.md +0 -116
- package/.claude/skills/team-arch-opt/role-specs/validator.md +0 -117
- package/.claude/skills/team-brainstorm/role-specs/challenger.md +0 -63
- package/.claude/skills/team-brainstorm/role-specs/evaluator.md +0 -58
- package/.claude/skills/team-brainstorm/role-specs/ideator.md +0 -71
- package/.claude/skills/team-brainstorm/role-specs/synthesizer.md +0 -59
- package/.claude/skills/team-frontend/role-specs/analyst.md +0 -91
- package/.claude/skills/team-frontend/role-specs/architect.md +0 -85
- package/.claude/skills/team-frontend/role-specs/developer.md +0 -92
- package/.claude/skills/team-frontend/role-specs/qa.md +0 -78
- package/.claude/skills/team-issue/role-specs/explorer.md +0 -95
- package/.claude/skills/team-issue/role-specs/implementer.md +0 -89
- package/.claude/skills/team-issue/role-specs/integrator.md +0 -86
- package/.claude/skills/team-issue/role-specs/planner.md +0 -83
- package/.claude/skills/team-issue/role-specs/reviewer.md +0 -89
- package/.claude/skills/team-iterdev/role-specs/architect.md +0 -64
- package/.claude/skills/team-iterdev/role-specs/developer.md +0 -73
- package/.claude/skills/team-iterdev/role-specs/reviewer.md +0 -65
- package/.claude/skills/team-iterdev/role-specs/tester.md +0 -87
- package/.claude/skills/team-perf-opt/role-specs/benchmarker.md +0 -110
- package/.claude/skills/team-perf-opt/role-specs/optimizer.md +0 -102
- package/.claude/skills/team-perf-opt/role-specs/profiler.md +0 -73
- package/.claude/skills/team-perf-opt/role-specs/reviewer.md +0 -91
- package/.claude/skills/team-perf-opt/role-specs/strategist.md +0 -114
- package/.claude/skills/team-planex/role-specs/executor.md +0 -90
- package/.claude/skills/team-planex/role-specs/planner.md +0 -110
- package/.claude/skills/team-quality-assurance/role-specs/analyst.md +0 -79
- package/.claude/skills/team-quality-assurance/role-specs/executor.md +0 -64
- package/.claude/skills/team-quality-assurance/role-specs/generator.md +0 -67
- package/.claude/skills/team-quality-assurance/role-specs/scout.md +0 -66
- package/.claude/skills/team-quality-assurance/role-specs/strategist.md +0 -70
- package/.claude/skills/team-review/role-specs/fixer.md +0 -75
- package/.claude/skills/team-review/role-specs/reviewer.md +0 -66
- package/.claude/skills/team-review/role-specs/scanner.md +0 -70
- package/.claude/skills/team-roadmap-dev/role-specs/executor.md +0 -71
- package/.claude/skills/team-roadmap-dev/role-specs/planner.md +0 -77
- package/.claude/skills/team-roadmap-dev/role-specs/verifier.md +0 -73
- package/.claude/skills/team-tech-debt/role-specs/assessor.md +0 -70
- package/.claude/skills/team-tech-debt/role-specs/executor.md +0 -80
- package/.claude/skills/team-tech-debt/role-specs/planner.md +0 -71
- package/.claude/skills/team-tech-debt/role-specs/scanner.md +0 -85
- package/.claude/skills/team-tech-debt/role-specs/validator.md +0 -83
- package/.claude/skills/team-testing/role-specs/analyst.md +0 -94
- package/.claude/skills/team-testing/role-specs/executor.md +0 -97
- package/.claude/skills/team-testing/role-specs/generator.md +0 -96
- package/.claude/skills/team-testing/role-specs/strategist.md +0 -82
- package/.claude/skills/team-uidesign/role-specs/designer.md +0 -72
- package/.claude/skills/team-uidesign/role-specs/implementer.md +0 -74
- package/.claude/skills/team-uidesign/role-specs/researcher.md +0 -84
- package/.claude/skills/team-uidesign/role-specs/reviewer.md +0 -70
- package/.claude/skills/team-ux-improve/role-specs/designer.md +0 -191
- package/.claude/skills/team-ux-improve/role-specs/diagnoser.md +0 -110
- package/.claude/skills/team-ux-improve/role-specs/explorer.md +0 -109
- package/.claude/skills/team-ux-improve/role-specs/implementer.md +0 -164
- package/.claude/skills/team-ux-improve/role-specs/scanner.md +0 -117
- package/.claude/skills/team-ux-improve/role-specs/tester.md +0 -163
- package/.codex/skills/analyze-with-file/EXECUTE.md +0 -716
- package/ccw/frontend/dist/assets/CodexLensPage-My6DnfN6.js +0 -2
- package/ccw/frontend/dist/assets/CodexLensPage-My6DnfN6.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-init.js","sourceRoot":"","sources":["../../src/tools/spec-init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spec-init.js","sourceRoot":"","sources":["../../src/tools/spec-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-loader.d.ts","sourceRoot":"","sources":["../../src/tools/spec-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAEL,cAAc,EACd,cAAc,EAGd,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAWjC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,yDAAyD;IACzD,YAAY,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,yEAAyE;IACzE,SAAS,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC9E,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5B,uDAAuD;IACvD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,aAAa,EAAE;QACb,gDAAgD;QAChD,QAAQ,EAAE,MAAM,CAAC;QACjB,yDAAyD;QACzD,KAAK,EAAE,MAAM,CAAC;QACd,6BAA6B;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,oCAAoC;QACpC,SAAS,EAAE,OAAO,CAAC;QACnB,oCAAoC;QACpC,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AA8BD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAwFjF;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,CAAC,EAAE,YAAY,GACtB;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"spec-loader.d.ts","sourceRoot":"","sources":["../../src/tools/spec-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAEL,cAAc,EACd,cAAc,EAGd,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAWjC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,yDAAyD;IACzD,YAAY,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,yEAAyE;IACzE,SAAS,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC9E,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5B,uDAAuD;IACvD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,aAAa,EAAE;QACb,gDAAgD;QAChD,QAAQ,EAAE,MAAM,CAAC;QACjB,yDAAyD;QACzD,KAAK,EAAE,MAAM,CAAC;QACd,6BAA6B;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,oCAAoC;QACpC,SAAS,EAAE,OAAO,CAAC;QACnB,oCAAoC;QACpC,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AA8BD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAwFjF;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,CAAC,EAAE,YAAY,GACtB;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CA0B3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAwB3D"}
|
|
@@ -142,7 +142,8 @@ export function filterSpecs(index, keywords, category) {
|
|
|
142
142
|
const matched = [];
|
|
143
143
|
for (const entry of index.entries) {
|
|
144
144
|
// Category filter: skip if category specified and doesn't match
|
|
145
|
-
|
|
145
|
+
// 'general' category always passes through (applies to all stages)
|
|
146
|
+
if (category && entry.category !== category && entry.category !== 'general') {
|
|
146
147
|
continue;
|
|
147
148
|
}
|
|
148
149
|
if (entry.readMode === 'required') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-loader.js","sourceRoot":"","sources":["../../src/tools/spec-loader.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"spec-loader.js","sourceRoot":"","sources":["../../src/tools/spec-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{j as o,ft as G,fu as m,fv as L,r as s,bw as v,fw as k,fx as B,bB as H,fy as W,fz as Y,fA as A,fB as q,fC as V,fD as J,bG as K,c as n}from"./index-
|
|
1
|
+
import{j as o,ft as G,fu as m,fv as L,r as s,bw as v,fw as k,fx as B,bB as H,fy as W,fz as Y,fA as A,fB as q,fC as V,fD as J,bG as K,c as n}from"./index-dWT2M6Ef.js";var D="AlertDialog",[Q]=K(D,[m]),l=m(),x=e=>{const{__scopeAlertDialog:a,...t}=e,r=l(a);return o.jsx(G,{...r,...t,modal:!0})};x.displayName=D;var U="AlertDialogTrigger",y=s.forwardRef((e,a)=>{const{__scopeAlertDialog:t,...r}=e,i=l(t);return o.jsx(q,{...i,...r,ref:a})});y.displayName=U;var X="AlertDialogPortal",N=e=>{const{__scopeAlertDialog:a,...t}=e,r=l(a);return o.jsx(L,{...r,...t})};N.displayName=X;var Z="AlertDialogOverlay",b=s.forwardRef((e,a)=>{const{__scopeAlertDialog:t,...r}=e,i=l(t);return o.jsx(V,{...i,...r,ref:a})});b.displayName=Z;var c="AlertDialogContent",[ee,ae]=Q(c),te=J("AlertDialogContent"),j=s.forwardRef((e,a)=>{const{__scopeAlertDialog:t,children:r,...i}=e,g=l(t),p=s.useRef(null),F=v(a,p),f=s.useRef(null);return o.jsx(k,{contentName:c,titleName:R,docsSlug:"alert-dialog",children:o.jsx(ee,{scope:t,cancelRef:f,children:o.jsxs(B,{role:"alertdialog",...g,...i,ref:F,onOpenAutoFocus:H(i.onOpenAutoFocus,d=>{var u;d.preventDefault(),(u=f.current)==null||u.focus({preventScroll:!0})}),onPointerDownOutside:d=>d.preventDefault(),onInteractOutside:d=>d.preventDefault(),children:[o.jsx(te,{children:r}),o.jsx(re,{contentRef:p})]})})})});j.displayName=c;var R="AlertDialogTitle",h=s.forwardRef((e,a)=>{const{__scopeAlertDialog:t,...r}=e,i=l(t);return o.jsx(W,{...i,...r,ref:a})});h.displayName=R;var _="AlertDialogDescription",w=s.forwardRef((e,a)=>{const{__scopeAlertDialog:t,...r}=e,i=l(t);return o.jsx(Y,{...i,...r,ref:a})});w.displayName=_;var oe="AlertDialogAction",C=s.forwardRef((e,a)=>{const{__scopeAlertDialog:t,...r}=e,i=l(t);return o.jsx(A,{...i,...r,ref:a})});C.displayName=oe;var E="AlertDialogCancel",P=s.forwardRef((e,a)=>{const{__scopeAlertDialog:t,...r}=e,{cancelRef:i}=ae(E,t),g=l(t),p=v(a,i);return o.jsx(A,{...g,...r,ref:p})});P.displayName=E;var re=({contentRef:e})=>{const a=`\`${c}\` requires a description for the component to be accessible for screen reader users.
|
|
2
2
|
|
|
3
3
|
You can add a description to the \`${c}\` by passing a \`${_}\` component as a child, which also benefits sighted users by adding visible context to the dialog.
|
|
4
4
|
|
|
5
5
|
Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${c}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component.
|
|
6
6
|
|
|
7
7
|
For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return s.useEffect(()=>{var r;document.getElementById((r=e.current)==null?void 0:r.getAttribute("aria-describedby"))||console.warn(a)},[a,e]),null},se=x,ie=y,le=N,S=b,T=j,O=C,$=P,M=h,I=w;const Ae=se,De=ie,ne=le,z=s.forwardRef(({className:e,...a},t)=>o.jsx(S,{className:n("fixed inset-0 z-50 bg-black/60 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...a,ref:t}));z.displayName=S.displayName;const ce=s.forwardRef(({className:e,...a},t)=>o.jsxs(ne,{children:[o.jsx(z,{}),o.jsx(T,{ref:t,className:n("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-card p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...a})]}));ce.displayName=T.displayName;const de=({className:e,...a})=>o.jsx("div",{className:n("flex flex-col space-y-2 text-center sm:text-left",e),...a});de.displayName="AlertDialogHeader";const pe=({className:e,...a})=>o.jsx("div",{className:n("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...a});pe.displayName="AlertDialogFooter";const ge=s.forwardRef(({className:e,...a},t)=>o.jsx(M,{ref:t,className:n("text-lg font-semibold text-foreground",e),...a}));ge.displayName=M.displayName;const fe=s.forwardRef(({className:e,...a},t)=>o.jsx(I,{ref:t,className:n("text-sm text-muted-foreground",e),...a}));fe.displayName=I.displayName;const ue=s.forwardRef(({className:e,...a},t)=>o.jsx(O,{ref:t,className:n("inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2",e),...a}));ue.displayName=O.displayName;const me=s.forwardRef(({className:e,...a},t)=>o.jsx($,{ref:t,className:n("inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 px-4 py-2 mt-2 sm:mt-0",e),...a}));me.displayName=$.displayName;export{Ae as A,ce as a,de as b,ge as c,fe as d,pe as e,me as f,ue as g,De as h};
|
|
8
|
-
//# sourceMappingURL=AlertDialog-
|
|
8
|
+
//# sourceMappingURL=AlertDialog-BW9jiZ-p.js.map
|
package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js.map → AlertDialog-BW9jiZ-p.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlertDialog-gTMl4gSG.js","sources":["../../../../node_modules/@radix-ui/react-alert-dialog/dist/index.mjs","../../src/components/ui/AlertDialog.tsx"],"sourcesContent":["\"use client\";\n\n// src/alert-dialog.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { createDialogScope } from \"@radix-ui/react-dialog\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar ROOT_NAME = \"AlertDialog\";\nvar [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope\n]);\nvar useDialogScope = createDialogScope();\nvar AlertDialog = (props) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...dialogScope, ...alertDialogProps, modal: true });\n};\nAlertDialog.displayName = ROOT_NAME;\nvar TRIGGER_NAME = \"AlertDialogTrigger\";\nvar AlertDialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef });\n }\n);\nAlertDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"AlertDialogPortal\";\nvar AlertDialogPortal = (props) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { ...dialogScope, ...portalProps });\n};\nAlertDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"AlertDialogOverlay\";\nvar AlertDialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef });\n }\n);\nAlertDialogOverlay.displayName = OVERLAY_NAME;\nvar CONTENT_NAME = \"AlertDialogContent\";\nvar [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME);\nvar Slottable = createSlottable(\"AlertDialogContent\");\nvar AlertDialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, children, ...contentProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const cancelRef = React.useRef(null);\n return /* @__PURE__ */ jsx(\n DialogPrimitive.WarningProvider,\n {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"alert-dialog\",\n children: /* @__PURE__ */ jsx(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: /* @__PURE__ */ jsxs(\n DialogPrimitive.Content,\n {\n role: \"alertdialog\",\n ...dialogScope,\n ...contentProps,\n ref: composedRefs,\n onOpenAutoFocus: composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {\n event.preventDefault();\n cancelRef.current?.focus({ preventScroll: true });\n }),\n onPointerDownOutside: (event) => event.preventDefault(),\n onInteractOutside: (event) => event.preventDefault(),\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef })\n ]\n }\n ) })\n }\n );\n }\n);\nAlertDialogContent.displayName = CONTENT_NAME;\nvar TITLE_NAME = \"AlertDialogTitle\";\nvar AlertDialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Title, { ...dialogScope, ...titleProps, ref: forwardedRef });\n }\n);\nAlertDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"AlertDialogDescription\";\nvar AlertDialogDescription = React.forwardRef((props, forwardedRef) => {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef });\n});\nAlertDialogDescription.displayName = DESCRIPTION_NAME;\nvar ACTION_NAME = \"AlertDialogAction\";\nvar AlertDialogAction = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...actionProps, ref: forwardedRef });\n }\n);\nAlertDialogAction.displayName = ACTION_NAME;\nvar CANCEL_NAME = \"AlertDialogCancel\";\nvar AlertDialogCancel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...cancelProps } = props;\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const ref = useComposedRefs(forwardedRef, cancelRef);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...cancelProps, ref });\n }\n);\nAlertDialogCancel.displayName = CANCEL_NAME;\nvar DescriptionWarning = ({ contentRef }) => {\n const MESSAGE = `\\`${CONTENT_NAME}\\` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the \\`${CONTENT_NAME}\\` by passing a \\`${DESCRIPTION_NAME}\\` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an \\`id\\` and passing the same value to the \\`aria-describedby\\` prop in \\`${CONTENT_NAME}\\`. If the description is confusing or duplicative for sighted users, you can use the \\`@radix-ui/react-visually-hidden\\` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;\n React.useEffect(() => {\n const hasDescription = document.getElementById(\n contentRef.current?.getAttribute(\"aria-describedby\")\n );\n if (!hasDescription) console.warn(MESSAGE);\n }, [MESSAGE, contentRef]);\n return null;\n};\nvar Root2 = AlertDialog;\nvar Trigger2 = AlertDialogTrigger;\nvar Portal2 = AlertDialogPortal;\nvar Overlay2 = AlertDialogOverlay;\nvar Content2 = AlertDialogContent;\nvar Action = AlertDialogAction;\nvar Cancel = AlertDialogCancel;\nvar Title2 = AlertDialogTitle;\nvar Description2 = AlertDialogDescription;\nexport {\n Action,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n Cancel,\n Content2 as Content,\n Description2 as Description,\n Overlay2 as Overlay,\n Portal2 as Portal,\n Root2 as Root,\n Title2 as Title,\n Trigger2 as Trigger,\n createAlertDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","// ========================================\r\n// AlertDialog Component\r\n// ========================================\r\n// Dialog component for confirmations and critical actions\r\n\r\nimport * as React from \"react\";\r\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst AlertDialog = AlertDialogPrimitive.Root;\r\n\r\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\r\n\r\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\r\n\r\nconst AlertDialogOverlay = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Overlay\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/60 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n ref={ref}\r\n />\r\n));\r\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\r\n\r\nconst AlertDialogContent = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPortal>\r\n <AlertDialogOverlay />\r\n <AlertDialogPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-card p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </AlertDialogPortal>\r\n));\r\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\r\n\r\nconst AlertDialogHeader = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col space-y-2 text-center sm:text-left\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n);\r\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\r\n\r\nconst AlertDialogFooter = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n);\r\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\r\n\r\nconst AlertDialogTitle = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Title\r\n ref={ref}\r\n className={cn(\"text-lg font-semibold text-foreground\", className)}\r\n {...props}\r\n />\r\n));\r\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\r\n\r\nconst AlertDialogDescription = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Description\r\n ref={ref}\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n));\r\nAlertDialogDescription.displayName =\r\n AlertDialogPrimitive.Description.displayName;\r\n\r\nconst AlertDialogAction = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Action\r\n ref={ref}\r\n className={cn(\r\n \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\r\n\r\nconst AlertDialogCancel = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Cancel\r\n ref={ref}\r\n className={cn(\r\n \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 px-4 py-2 mt-2 sm:mt-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\r\n\r\nexport {\r\n AlertDialog,\r\n AlertDialogPortal,\r\n AlertDialogOverlay,\r\n AlertDialogTrigger,\r\n AlertDialogContent,\r\n AlertDialogHeader,\r\n AlertDialogFooter,\r\n AlertDialogTitle,\r\n AlertDialogDescription,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n};\r\n"],"names":["ROOT_NAME","createAlertDialogContext","createContextScope","createDialogScope","useDialogScope","AlertDialog","props","__scopeAlertDialog","alertDialogProps","dialogScope","jsx","DialogPrimitive.Root","TRIGGER_NAME","AlertDialogTrigger","React.forwardRef","forwardedRef","triggerProps","DialogPrimitive.Trigger","PORTAL_NAME","AlertDialogPortal","portalProps","DialogPrimitive.Portal","OVERLAY_NAME","AlertDialogOverlay","overlayProps","DialogPrimitive.Overlay","CONTENT_NAME","AlertDialogContentProvider","useAlertDialogContentContext","Slottable","createSlottable","AlertDialogContent","children","contentProps","contentRef","React.useRef","composedRefs","useComposedRefs","cancelRef","DialogPrimitive.WarningProvider","TITLE_NAME","jsxs","DialogPrimitive.Content","composeEventHandlers","event","_a","DescriptionWarning","AlertDialogTitle","titleProps","DialogPrimitive.Title","DESCRIPTION_NAME","AlertDialogDescription","descriptionProps","DialogPrimitive.Description","ACTION_NAME","AlertDialogAction","actionProps","DialogPrimitive.Close","CANCEL_NAME","AlertDialogCancel","cancelProps","ref","MESSAGE","React.useEffect","Root2","Trigger2","Portal2","Overlay2","Content2","Action","Cancel","Title2","Description2","AlertDialogPrimitive.Root","AlertDialogPrimitive.Trigger","AlertDialogPrimitive.Portal","className","AlertDialogPrimitive.Overlay","cn","AlertDialogPrimitive.Content","AlertDialogHeader","AlertDialogFooter","AlertDialogPrimitive.Title","AlertDialogPrimitive.Description","AlertDialogPrimitive.Action","AlertDialogPrimitive.Cancel"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"AlertDialog-BW9jiZ-p.js","sources":["../../../../node_modules/@radix-ui/react-alert-dialog/dist/index.mjs","../../src/components/ui/AlertDialog.tsx"],"sourcesContent":["\"use client\";\n\n// src/alert-dialog.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { createDialogScope } from \"@radix-ui/react-dialog\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar ROOT_NAME = \"AlertDialog\";\nvar [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope\n]);\nvar useDialogScope = createDialogScope();\nvar AlertDialog = (props) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...dialogScope, ...alertDialogProps, modal: true });\n};\nAlertDialog.displayName = ROOT_NAME;\nvar TRIGGER_NAME = \"AlertDialogTrigger\";\nvar AlertDialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef });\n }\n);\nAlertDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"AlertDialogPortal\";\nvar AlertDialogPortal = (props) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { ...dialogScope, ...portalProps });\n};\nAlertDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"AlertDialogOverlay\";\nvar AlertDialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef });\n }\n);\nAlertDialogOverlay.displayName = OVERLAY_NAME;\nvar CONTENT_NAME = \"AlertDialogContent\";\nvar [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME);\nvar Slottable = createSlottable(\"AlertDialogContent\");\nvar AlertDialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, children, ...contentProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const cancelRef = React.useRef(null);\n return /* @__PURE__ */ jsx(\n DialogPrimitive.WarningProvider,\n {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"alert-dialog\",\n children: /* @__PURE__ */ jsx(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: /* @__PURE__ */ jsxs(\n DialogPrimitive.Content,\n {\n role: \"alertdialog\",\n ...dialogScope,\n ...contentProps,\n ref: composedRefs,\n onOpenAutoFocus: composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {\n event.preventDefault();\n cancelRef.current?.focus({ preventScroll: true });\n }),\n onPointerDownOutside: (event) => event.preventDefault(),\n onInteractOutside: (event) => event.preventDefault(),\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef })\n ]\n }\n ) })\n }\n );\n }\n);\nAlertDialogContent.displayName = CONTENT_NAME;\nvar TITLE_NAME = \"AlertDialogTitle\";\nvar AlertDialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Title, { ...dialogScope, ...titleProps, ref: forwardedRef });\n }\n);\nAlertDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"AlertDialogDescription\";\nvar AlertDialogDescription = React.forwardRef((props, forwardedRef) => {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef });\n});\nAlertDialogDescription.displayName = DESCRIPTION_NAME;\nvar ACTION_NAME = \"AlertDialogAction\";\nvar AlertDialogAction = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...actionProps, ref: forwardedRef });\n }\n);\nAlertDialogAction.displayName = ACTION_NAME;\nvar CANCEL_NAME = \"AlertDialogCancel\";\nvar AlertDialogCancel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...cancelProps } = props;\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const ref = useComposedRefs(forwardedRef, cancelRef);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...cancelProps, ref });\n }\n);\nAlertDialogCancel.displayName = CANCEL_NAME;\nvar DescriptionWarning = ({ contentRef }) => {\n const MESSAGE = `\\`${CONTENT_NAME}\\` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the \\`${CONTENT_NAME}\\` by passing a \\`${DESCRIPTION_NAME}\\` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an \\`id\\` and passing the same value to the \\`aria-describedby\\` prop in \\`${CONTENT_NAME}\\`. If the description is confusing or duplicative for sighted users, you can use the \\`@radix-ui/react-visually-hidden\\` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;\n React.useEffect(() => {\n const hasDescription = document.getElementById(\n contentRef.current?.getAttribute(\"aria-describedby\")\n );\n if (!hasDescription) console.warn(MESSAGE);\n }, [MESSAGE, contentRef]);\n return null;\n};\nvar Root2 = AlertDialog;\nvar Trigger2 = AlertDialogTrigger;\nvar Portal2 = AlertDialogPortal;\nvar Overlay2 = AlertDialogOverlay;\nvar Content2 = AlertDialogContent;\nvar Action = AlertDialogAction;\nvar Cancel = AlertDialogCancel;\nvar Title2 = AlertDialogTitle;\nvar Description2 = AlertDialogDescription;\nexport {\n Action,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n Cancel,\n Content2 as Content,\n Description2 as Description,\n Overlay2 as Overlay,\n Portal2 as Portal,\n Root2 as Root,\n Title2 as Title,\n Trigger2 as Trigger,\n createAlertDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","// ========================================\r\n// AlertDialog Component\r\n// ========================================\r\n// Dialog component for confirmations and critical actions\r\n\r\nimport * as React from \"react\";\r\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst AlertDialog = AlertDialogPrimitive.Root;\r\n\r\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\r\n\r\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\r\n\r\nconst AlertDialogOverlay = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Overlay\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/60 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n ref={ref}\r\n />\r\n));\r\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\r\n\r\nconst AlertDialogContent = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPortal>\r\n <AlertDialogOverlay />\r\n <AlertDialogPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-card p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </AlertDialogPortal>\r\n));\r\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\r\n\r\nconst AlertDialogHeader = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col space-y-2 text-center sm:text-left\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n);\r\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\r\n\r\nconst AlertDialogFooter = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n);\r\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\r\n\r\nconst AlertDialogTitle = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Title\r\n ref={ref}\r\n className={cn(\"text-lg font-semibold text-foreground\", className)}\r\n {...props}\r\n />\r\n));\r\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\r\n\r\nconst AlertDialogDescription = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Description\r\n ref={ref}\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n));\r\nAlertDialogDescription.displayName =\r\n AlertDialogPrimitive.Description.displayName;\r\n\r\nconst AlertDialogAction = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Action\r\n ref={ref}\r\n className={cn(\r\n \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\r\n\r\nconst AlertDialogCancel = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Cancel\r\n ref={ref}\r\n className={cn(\r\n \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 px-4 py-2 mt-2 sm:mt-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\r\n\r\nexport {\r\n AlertDialog,\r\n AlertDialogPortal,\r\n AlertDialogOverlay,\r\n AlertDialogTrigger,\r\n AlertDialogContent,\r\n AlertDialogHeader,\r\n AlertDialogFooter,\r\n AlertDialogTitle,\r\n AlertDialogDescription,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n};\r\n"],"names":["ROOT_NAME","createAlertDialogContext","createContextScope","createDialogScope","useDialogScope","AlertDialog","props","__scopeAlertDialog","alertDialogProps","dialogScope","jsx","DialogPrimitive.Root","TRIGGER_NAME","AlertDialogTrigger","React.forwardRef","forwardedRef","triggerProps","DialogPrimitive.Trigger","PORTAL_NAME","AlertDialogPortal","portalProps","DialogPrimitive.Portal","OVERLAY_NAME","AlertDialogOverlay","overlayProps","DialogPrimitive.Overlay","CONTENT_NAME","AlertDialogContentProvider","useAlertDialogContentContext","Slottable","createSlottable","AlertDialogContent","children","contentProps","contentRef","React.useRef","composedRefs","useComposedRefs","cancelRef","DialogPrimitive.WarningProvider","TITLE_NAME","jsxs","DialogPrimitive.Content","composeEventHandlers","event","_a","DescriptionWarning","AlertDialogTitle","titleProps","DialogPrimitive.Title","DESCRIPTION_NAME","AlertDialogDescription","descriptionProps","DialogPrimitive.Description","ACTION_NAME","AlertDialogAction","actionProps","DialogPrimitive.Close","CANCEL_NAME","AlertDialogCancel","cancelProps","ref","MESSAGE","React.useEffect","Root2","Trigger2","Portal2","Overlay2","Content2","Action","Cancel","Title2","Description2","AlertDialogPrimitive.Root","AlertDialogPrimitive.Trigger","AlertDialogPrimitive.Portal","className","AlertDialogPrimitive.Overlay","cn","AlertDialogPrimitive.Content","AlertDialogHeader","AlertDialogFooter","AlertDialogPrimitive.Title","AlertDialogPrimitive.Description","AlertDialogPrimitive.Action","AlertDialogPrimitive.Cancel"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e,c as w,r as o,ck as ae,B as b,ap as re,ao as O,C as S,a9 as le,o as E,ab as V,dr as I,e as p,b as ne,I as ie,N as q,m as R,ds as ce,fG as oe,fH as de,fI as me,fJ as xe,fK as ue,X as he,l as _,M as L,aV as fe,aR as pe,fL as je,fM as ge}from"./index-B6I7GQC5.js";import{T as Ne}from"./TabsNavigation-drSnu5jn.js";import{M as ve}from"./index-CY6Lueph.js";import{M as we,a as be}from"./minimize-2-Cbu2yRzi.js";import{F as B}from"./file-text-BoHsW2es.js";import"./braces-Dqjg_eCO.js";import"./index-DfeBbFXo.js";function K(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Q(t){return Array.isArray(t)}function ye(t){return t.replace(/_/g," ").replace(/([A-Z])/g," $1").replace(/^./,a=>a.toUpperCase()).trim()}function W({value:t}){return t==null?e.jsx("span",{className:"text-muted-foreground italic",children:"null"}):typeof t=="boolean"?e.jsx(b,{variant:t?"default":"secondary",children:t?"true":"false"}):typeof t=="number"?e.jsx("span",{className:"text-blue-600 dark:text-blue-400 font-mono",children:t}):typeof t=="string"?t.startsWith("http://")||t.startsWith("https://")?e.jsx("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"text-blue-600 dark:text-blue-400 hover:underline break-all",children:t}):t.length>100?e.jsx("div",{className:"text-sm text-foreground bg-muted/50 p-2 rounded whitespace-pre-wrap break-words",children:t}):e.jsx("span",{className:"text-foreground",children:t}):e.jsx("span",{children:String(t)})}function G({items:t,displayName:a="items"}){const[l,n]=o.useState(!0);return t.length===0?e.jsxs("div",{className:"text-muted-foreground text-sm flex items-center gap-2 p-3 bg-muted/30 rounded-md",children:[e.jsx(ae,{className:"w-4 h-4"}),e.jsxs("span",{children:["No ",a," entries."]})]}):t.every(i=>typeof i!="object"||i===null)?e.jsx("div",{className:"flex flex-wrap gap-1.5",children:t.map((i,d)=>e.jsx(b,{variant:"outline",className:"font-normal",children:String(i)},d))}):e.jsxs("div",{className:"space-y-2",children:[e.jsxs("button",{onClick:()=>n(!l),className:"flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground",children:[l?e.jsx(re,{className:"w-4 h-4"}):e.jsx(O,{className:"w-4 h-4"}),t.length," items"]}),l&&e.jsx("div",{className:"space-y-2 pl-4 border-l-2 border-border",children:t.map((i,d)=>e.jsxs(S,{className:"p-3",children:[e.jsxs("div",{className:"text-xs text-muted-foreground mb-2",children:["#",d+1]}),K(i)?e.jsx(z,{data:i}):e.jsx(W,{value:i})]},d))})]})}function z({data:t,depth:a=0}){const l=Object.entries(t);return l.length===0?e.jsx("div",{className:"text-muted-foreground italic text-sm",children:"Empty object"}):e.jsx("div",{className:"space-y-3",children:l.map(([n,r])=>e.jsx(Ce,{label:n,value:r,depth:a},n))})}function Ce({label:t,value:a,depth:l=0}){const n=ye(t);return K(a)?e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"font-medium text-sm text-foreground",children:n}),e.jsx("div",{className:w("pl-3 border-l-2 border-border",l>1&&"ml-2"),children:e.jsx(z,{data:a,depth:l+1})})]}):Q(a)?e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"font-medium text-sm text-foreground",children:n}),e.jsx(G,{items:a,displayName:n.toLowerCase()})]}):e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("div",{className:"font-medium text-sm text-muted-foreground min-w-[120px] shrink-0",children:n}),e.jsx("div",{className:"flex-1 text-sm",children:e.jsx(W,{value:a})})]})}function T({data:t,className:a}){return t?Q(t)?e.jsx("div",{className:w("space-y-3",a),children:e.jsx(G,{items:t})}):e.jsx("div",{className:w("space-y-4",a),children:e.jsx(z,{data:t})}):e.jsx("div",{className:"text-muted-foreground italic text-sm",children:"No data available"})}const M=16;function Se({session:t,onClick:a,onStatusClick:l,isStatusFiltered:n}){const r=i=>{i.stopPropagation(),l(t.status)};return e.jsxs(S,{className:"p-3 cursor-pointer transition-all hover:shadow-md hover:border-primary/50 h-full flex flex-col",onClick:a,children:[e.jsx("h3",{className:"text-sm font-medium text-foreground line-clamp-2 mb-2 leading-snug",children:t.topic}),e.jsx("p",{className:"text-xs text-muted-foreground truncate mb-2",children:t.id}),e.jsxs("div",{className:"flex items-center justify-between text-xs mt-auto pt-2 border-t",children:[e.jsx(b,{variant:t.status==="completed"?"success":"warning",className:w("text-[10px] px-1.5 py-0 cursor-pointer transition-all",n&&"ring-2 ring-primary ring-offset-1"),onClick:r,children:t.status==="completed"?e.jsxs(e.Fragment,{children:[e.jsx(L,{className:"w-2.5 h-2.5 mr-0.5"}),"完成"]}):e.jsxs(e.Fragment,{children:[e.jsx(_,{className:"w-2.5 h-2.5 mr-0.5"}),"进行中"]})}),e.jsx("span",{className:"text-muted-foreground",children:t.createdAt})]}),t.hasConclusions&&e.jsxs("div",{className:"flex items-center gap-1 text-[10px] text-muted-foreground mt-1",children:[e.jsx(B,{className:"w-2.5 h-2.5"}),e.jsx("span",{children:"有结论"})]})]})}function ke({sessionId:t,projectPath:a}){const[l,n]=o.useState("discussion"),{data:r,isLoading:i,error:d}=V({queryKey:["analysis-detail",t,a],queryFn:()=>je(t,a)});if(i)return e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(q,{className:"w-6 h-6 animate-spin text-muted-foreground"})});if(d)return e.jsx("div",{className:"flex items-center justify-center h-full p-4",children:e.jsxs("div",{className:"flex items-center gap-2 text-destructive",children:[e.jsx(R,{className:"w-5 h-5"}),e.jsxs("span",{children:["加载失败: ",d.message]})]})});if(!r)return null;const c=[{value:"discussion",label:"讨论记录",icon:e.jsx(fe,{className:"w-4 h-4"})},{value:"conclusions",label:"结论",icon:e.jsx(L,{className:"w-4 h-4"})},{value:"explorations",label:"代码探索",icon:e.jsx(pe,{className:"w-4 h-4"})},{value:"perspectives",label:"视角分析",icon:e.jsx(B,{className:"w-4 h-4"})}].filter(m=>{const y=m.value;return r[y]});return!c.find(m=>m.value===l)&&c.length>0&&n(c[0].value),e.jsxs("div",{className:"h-full flex flex-col",children:[e.jsx("div",{className:"px-4 pb-3 border-b shrink-0",children:e.jsxs("div",{className:"min-w-0",children:[e.jsx("h2",{className:"font-semibold truncate",children:r.topic}),e.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[e.jsx(b,{variant:r.status==="completed"?"default":"secondary",className:"text-xs",children:r.status==="completed"?"完成":"进行中"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:r.createdAt})]})]})}),c.length>0?e.jsxs(e.Fragment,{children:[e.jsx(Ne,{value:l,onValueChange:n,tabs:c,className:"px-4"}),e.jsxs("div",{className:"flex-1 overflow-auto min-h-0 p-4",children:[l==="discussion"&&r.discussion&&e.jsx(ve,{content:r.discussion,format:"markdown"}),l==="conclusions"&&r.conclusions&&e.jsx(T,{data:r.conclusions}),l==="explorations"&&r.explorations&&e.jsx(T,{data:r.explorations}),l==="perspectives"&&r.perspectives&&e.jsx(T,{data:r.perspectives})]})]}):e.jsx("div",{className:"flex-1 flex items-center justify-center text-muted-foreground",children:"暂无分析内容"})]})}const Ae=[{value:"all",label:"全部"},{value:"today",label:"今天"},{value:"week",label:"本周"},{value:"month",label:"本月"}],De=[{value:"all",label:"全部",icon:e.jsx(I,{className:"w-4 h-4"})},{value:"in_progress",label:"进行中",icon:e.jsx(_,{className:"w-4 h-4"})},{value:"completed",label:"已完成",icon:e.jsx(L,{className:"w-4 h-4"})}];function Oe(){const t=le(s=>s.projectPath),a=E(s=>s.isImmersiveMode),l=E(s=>s.toggleImmersiveMode),[n,r]=o.useState(""),[i,d]=o.useState(null),[c,h]=o.useState(1),[m,y]=o.useState("all"),[j,k]=o.useState("all"),[g,A]=o.useState(null),{data:C=[],isLoading:H,error:P}=V({queryKey:["analysis-sessions",t],queryFn:()=>ge(t)}),J=o.useMemo(()=>{const s=new Map;return C.forEach(x=>{const f=s.get(x.createdAt)||0;s.set(x.createdAt,f+1)}),Array.from(s.entries()).sort((x,f)=>f[0].localeCompare(x[0])).slice(0,10).map(([x,f])=>({date:x,label:x.slice(5),count:f}))},[C]),N=o.useMemo(()=>{const s=new Date,x=s.toISOString().split("T")[0],f=new Date(s.getTime()-10080*60*1e3).toISOString().split("T")[0],se=new Date(s.getTime()-720*60*60*1e3).toISOString().split("T")[0];return C.filter(u=>{const F=u.topic.toLowerCase().includes(n.toLowerCase())||u.id.toLowerCase().includes(n.toLowerCase()),te=j==="all"||u.status===j;let v=!0;return g?v=u.createdAt===g:m==="today"?v=u.createdAt===x:m==="week"?v=u.createdAt>=f:m==="month"&&(v=u.createdAt>=se),F&&te&&v}).sort((u,F)=>F.createdAt.localeCompare(u.createdAt))},[C,n,m,j,g]),U=s=>{g===s?A(null):(A(s),y("all")),h(1)},Z=s=>{k(j===s?"all":s),h(1)},D=Math.ceil(N.length/M),X=o.useMemo(()=>{const s=(c-1)*M;return N.slice(s,s+M)},[N,c]),$=s=>{r(s),h(1)},Y=s=>{y(s),h(1)},ee=s=>{k(s),A(null),h(1)};return e.jsxs("div",{className:w("h-full flex overflow-hidden",a&&"fixed inset-0 z-50 bg-background"),children:[e.jsxs("div",{className:"flex-1 flex flex-col p-4 space-y-3 overflow-auto",children:[e.jsxs("div",{className:"flex items-center justify-between shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(I,{className:"w-5 h-5 text-primary"}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-xl font-semibold text-foreground",children:"Analysis Viewer"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"查看 /workflow:analyze-with-file 命令的分析结果"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"text-xs text-muted-foreground",children:["共 ",N.length," 个会话"]}),e.jsx(p,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:l,title:a?"退出全屏":"全屏模式",children:a?e.jsx(we,{className:"w-4 h-4"}):e.jsx(be,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[e.jsxs("div",{className:"relative flex-1 max-w-md",children:[e.jsx(ne,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(ie,{placeholder:"搜索分析会话...",value:n,onChange:s=>$(s.target.value),className:"pl-9"})]}),e.jsx("div",{className:"flex items-center gap-1 bg-muted/50 rounded-lg p-1",children:De.map(s=>e.jsxs(p,{variant:j===s.value?"default":"ghost",size:"sm",className:"h-7 px-3 text-xs gap-1",onClick:()=>ee(s.value),children:[s.icon,s.label]},s.value))}),e.jsx("div",{className:"flex items-center gap-1 bg-muted/50 rounded-lg p-1",children:Ae.map(s=>e.jsx(p,{variant:m===s.value?"default":"ghost",size:"sm",className:"h-7 px-3 text-xs",onClick:()=>Y(s.value),children:s.label},s.value))})]}),e.jsx("div",{className:"flex items-center gap-2 flex-wrap shrink-0",children:J.map(s=>e.jsxs(p,{variant:g===s.date?"default":"outline",size:"sm",className:"h-7 px-2 text-xs gap-1",onClick:()=>U(s.date),children:[e.jsx("span",{children:s.label}),e.jsx(b,{variant:"secondary",className:"ml-1 px-1.5 py-0 text-[10px]",children:s.count})]},s.date))}),H?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(q,{className:"w-6 h-6 animate-spin text-muted-foreground"})}):P?e.jsx(S,{className:"p-6",children:e.jsxs("div",{className:"flex items-center gap-2 text-destructive",children:[e.jsx(R,{className:"w-5 h-5"}),e.jsxs("span",{children:["加载失败: ",P.message]})]})}):N.length===0?e.jsxs(S,{className:"p-12 text-center",children:[e.jsx(I,{className:"w-12 h-12 mx-auto text-muted-foreground mb-4"}),e.jsx("p",{className:"text-muted-foreground",children:n?"没有匹配的分析会话":"暂无分析会话"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-2",children:"使用 /workflow:analyze-with-file 命令创建分析"})]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex-1 grid grid-cols-4 gap-3 content-start",children:X.map(s=>e.jsx(Se,{session:s,onClick:()=>d(s.id),onStatusClick:Z,isStatusFiltered:j!=="all"},s.id))}),D>1&&e.jsxs("div",{className:"flex items-center justify-center gap-2 pt-4",children:[e.jsx(p,{variant:"outline",size:"sm",disabled:c===1,onClick:()=>h(s=>s-1),children:e.jsx(ce,{className:"w-4 h-4"})}),e.jsxs("span",{className:"text-sm text-muted-foreground px-3",children:[c," / ",D]}),e.jsx(p,{variant:"outline",size:"sm",disabled:c===D,onClick:()=>h(s=>s+1),children:e.jsx(O,{className:"w-4 h-4"})})]})]})]}),e.jsx(oe,{open:!!i,onOpenChange:s=>!s&&d(null),children:e.jsxs(de,{side:"right",className:"w-1/2 h-full max-w-none",children:[e.jsxs(me,{className:"shrink-0",children:[e.jsx(xe,{children:"分析详情"}),e.jsx(ue,{asChild:!0,children:e.jsx(p,{variant:"ghost",size:"sm",className:"absolute right-4 top-4",children:e.jsx(he,{className:"w-4 h-4"})})})]}),i&&e.jsx(ke,{sessionId:i,projectPath:t})]})})]})}export{Oe as AnalysisPage,Oe as default};
|
|
2
|
-
//# sourceMappingURL=AnalysisPage-
|
|
1
|
+
import{j as e,c as w,r as o,ck as ae,B as b,ap as re,ao as O,C as S,a9 as le,o as E,ab as V,dr as I,e as p,b as ne,I as ie,N as q,m as R,ds as ce,fG as oe,fH as de,fI as me,fJ as xe,fK as ue,X as he,l as _,M as L,aV as fe,aR as pe,fL as je,fM as ge}from"./index-dWT2M6Ef.js";import{T as Ne}from"./TabsNavigation-qqt70VYL.js";import{M as ve}from"./index-Dmt9OiEf.js";import{M as we,a as be}from"./minimize-2-CGfBKD_V.js";import{F as B}from"./file-text-DrJFiOUB.js";import"./braces-BPgtyjsG.js";import"./index-anSMmEF8.js";function K(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Q(t){return Array.isArray(t)}function ye(t){return t.replace(/_/g," ").replace(/([A-Z])/g," $1").replace(/^./,a=>a.toUpperCase()).trim()}function W({value:t}){return t==null?e.jsx("span",{className:"text-muted-foreground italic",children:"null"}):typeof t=="boolean"?e.jsx(b,{variant:t?"default":"secondary",children:t?"true":"false"}):typeof t=="number"?e.jsx("span",{className:"text-blue-600 dark:text-blue-400 font-mono",children:t}):typeof t=="string"?t.startsWith("http://")||t.startsWith("https://")?e.jsx("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"text-blue-600 dark:text-blue-400 hover:underline break-all",children:t}):t.length>100?e.jsx("div",{className:"text-sm text-foreground bg-muted/50 p-2 rounded whitespace-pre-wrap break-words",children:t}):e.jsx("span",{className:"text-foreground",children:t}):e.jsx("span",{children:String(t)})}function G({items:t,displayName:a="items"}){const[l,n]=o.useState(!0);return t.length===0?e.jsxs("div",{className:"text-muted-foreground text-sm flex items-center gap-2 p-3 bg-muted/30 rounded-md",children:[e.jsx(ae,{className:"w-4 h-4"}),e.jsxs("span",{children:["No ",a," entries."]})]}):t.every(i=>typeof i!="object"||i===null)?e.jsx("div",{className:"flex flex-wrap gap-1.5",children:t.map((i,d)=>e.jsx(b,{variant:"outline",className:"font-normal",children:String(i)},d))}):e.jsxs("div",{className:"space-y-2",children:[e.jsxs("button",{onClick:()=>n(!l),className:"flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground",children:[l?e.jsx(re,{className:"w-4 h-4"}):e.jsx(O,{className:"w-4 h-4"}),t.length," items"]}),l&&e.jsx("div",{className:"space-y-2 pl-4 border-l-2 border-border",children:t.map((i,d)=>e.jsxs(S,{className:"p-3",children:[e.jsxs("div",{className:"text-xs text-muted-foreground mb-2",children:["#",d+1]}),K(i)?e.jsx(z,{data:i}):e.jsx(W,{value:i})]},d))})]})}function z({data:t,depth:a=0}){const l=Object.entries(t);return l.length===0?e.jsx("div",{className:"text-muted-foreground italic text-sm",children:"Empty object"}):e.jsx("div",{className:"space-y-3",children:l.map(([n,r])=>e.jsx(Ce,{label:n,value:r,depth:a},n))})}function Ce({label:t,value:a,depth:l=0}){const n=ye(t);return K(a)?e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"font-medium text-sm text-foreground",children:n}),e.jsx("div",{className:w("pl-3 border-l-2 border-border",l>1&&"ml-2"),children:e.jsx(z,{data:a,depth:l+1})})]}):Q(a)?e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"font-medium text-sm text-foreground",children:n}),e.jsx(G,{items:a,displayName:n.toLowerCase()})]}):e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("div",{className:"font-medium text-sm text-muted-foreground min-w-[120px] shrink-0",children:n}),e.jsx("div",{className:"flex-1 text-sm",children:e.jsx(W,{value:a})})]})}function T({data:t,className:a}){return t?Q(t)?e.jsx("div",{className:w("space-y-3",a),children:e.jsx(G,{items:t})}):e.jsx("div",{className:w("space-y-4",a),children:e.jsx(z,{data:t})}):e.jsx("div",{className:"text-muted-foreground italic text-sm",children:"No data available"})}const M=16;function Se({session:t,onClick:a,onStatusClick:l,isStatusFiltered:n}){const r=i=>{i.stopPropagation(),l(t.status)};return e.jsxs(S,{className:"p-3 cursor-pointer transition-all hover:shadow-md hover:border-primary/50 h-full flex flex-col",onClick:a,children:[e.jsx("h3",{className:"text-sm font-medium text-foreground line-clamp-2 mb-2 leading-snug",children:t.topic}),e.jsx("p",{className:"text-xs text-muted-foreground truncate mb-2",children:t.id}),e.jsxs("div",{className:"flex items-center justify-between text-xs mt-auto pt-2 border-t",children:[e.jsx(b,{variant:t.status==="completed"?"success":"warning",className:w("text-[10px] px-1.5 py-0 cursor-pointer transition-all",n&&"ring-2 ring-primary ring-offset-1"),onClick:r,children:t.status==="completed"?e.jsxs(e.Fragment,{children:[e.jsx(L,{className:"w-2.5 h-2.5 mr-0.5"}),"完成"]}):e.jsxs(e.Fragment,{children:[e.jsx(_,{className:"w-2.5 h-2.5 mr-0.5"}),"进行中"]})}),e.jsx("span",{className:"text-muted-foreground",children:t.createdAt})]}),t.hasConclusions&&e.jsxs("div",{className:"flex items-center gap-1 text-[10px] text-muted-foreground mt-1",children:[e.jsx(B,{className:"w-2.5 h-2.5"}),e.jsx("span",{children:"有结论"})]})]})}function ke({sessionId:t,projectPath:a}){const[l,n]=o.useState("discussion"),{data:r,isLoading:i,error:d}=V({queryKey:["analysis-detail",t,a],queryFn:()=>je(t,a)});if(i)return e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(q,{className:"w-6 h-6 animate-spin text-muted-foreground"})});if(d)return e.jsx("div",{className:"flex items-center justify-center h-full p-4",children:e.jsxs("div",{className:"flex items-center gap-2 text-destructive",children:[e.jsx(R,{className:"w-5 h-5"}),e.jsxs("span",{children:["加载失败: ",d.message]})]})});if(!r)return null;const c=[{value:"discussion",label:"讨论记录",icon:e.jsx(fe,{className:"w-4 h-4"})},{value:"conclusions",label:"结论",icon:e.jsx(L,{className:"w-4 h-4"})},{value:"explorations",label:"代码探索",icon:e.jsx(pe,{className:"w-4 h-4"})},{value:"perspectives",label:"视角分析",icon:e.jsx(B,{className:"w-4 h-4"})}].filter(m=>{const y=m.value;return r[y]});return!c.find(m=>m.value===l)&&c.length>0&&n(c[0].value),e.jsxs("div",{className:"h-full flex flex-col",children:[e.jsx("div",{className:"px-4 pb-3 border-b shrink-0",children:e.jsxs("div",{className:"min-w-0",children:[e.jsx("h2",{className:"font-semibold truncate",children:r.topic}),e.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[e.jsx(b,{variant:r.status==="completed"?"default":"secondary",className:"text-xs",children:r.status==="completed"?"完成":"进行中"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:r.createdAt})]})]})}),c.length>0?e.jsxs(e.Fragment,{children:[e.jsx(Ne,{value:l,onValueChange:n,tabs:c,className:"px-4"}),e.jsxs("div",{className:"flex-1 overflow-auto min-h-0 p-4",children:[l==="discussion"&&r.discussion&&e.jsx(ve,{content:r.discussion,format:"markdown"}),l==="conclusions"&&r.conclusions&&e.jsx(T,{data:r.conclusions}),l==="explorations"&&r.explorations&&e.jsx(T,{data:r.explorations}),l==="perspectives"&&r.perspectives&&e.jsx(T,{data:r.perspectives})]})]}):e.jsx("div",{className:"flex-1 flex items-center justify-center text-muted-foreground",children:"暂无分析内容"})]})}const Ae=[{value:"all",label:"全部"},{value:"today",label:"今天"},{value:"week",label:"本周"},{value:"month",label:"本月"}],De=[{value:"all",label:"全部",icon:e.jsx(I,{className:"w-4 h-4"})},{value:"in_progress",label:"进行中",icon:e.jsx(_,{className:"w-4 h-4"})},{value:"completed",label:"已完成",icon:e.jsx(L,{className:"w-4 h-4"})}];function Oe(){const t=le(s=>s.projectPath),a=E(s=>s.isImmersiveMode),l=E(s=>s.toggleImmersiveMode),[n,r]=o.useState(""),[i,d]=o.useState(null),[c,h]=o.useState(1),[m,y]=o.useState("all"),[j,k]=o.useState("all"),[g,A]=o.useState(null),{data:C=[],isLoading:H,error:P}=V({queryKey:["analysis-sessions",t],queryFn:()=>ge(t)}),J=o.useMemo(()=>{const s=new Map;return C.forEach(x=>{const f=s.get(x.createdAt)||0;s.set(x.createdAt,f+1)}),Array.from(s.entries()).sort((x,f)=>f[0].localeCompare(x[0])).slice(0,10).map(([x,f])=>({date:x,label:x.slice(5),count:f}))},[C]),N=o.useMemo(()=>{const s=new Date,x=s.toISOString().split("T")[0],f=new Date(s.getTime()-10080*60*1e3).toISOString().split("T")[0],se=new Date(s.getTime()-720*60*60*1e3).toISOString().split("T")[0];return C.filter(u=>{const F=u.topic.toLowerCase().includes(n.toLowerCase())||u.id.toLowerCase().includes(n.toLowerCase()),te=j==="all"||u.status===j;let v=!0;return g?v=u.createdAt===g:m==="today"?v=u.createdAt===x:m==="week"?v=u.createdAt>=f:m==="month"&&(v=u.createdAt>=se),F&&te&&v}).sort((u,F)=>F.createdAt.localeCompare(u.createdAt))},[C,n,m,j,g]),U=s=>{g===s?A(null):(A(s),y("all")),h(1)},Z=s=>{k(j===s?"all":s),h(1)},D=Math.ceil(N.length/M),X=o.useMemo(()=>{const s=(c-1)*M;return N.slice(s,s+M)},[N,c]),$=s=>{r(s),h(1)},Y=s=>{y(s),h(1)},ee=s=>{k(s),A(null),h(1)};return e.jsxs("div",{className:w("h-full flex overflow-hidden",a&&"fixed inset-0 z-50 bg-background"),children:[e.jsxs("div",{className:"flex-1 flex flex-col p-4 space-y-3 overflow-auto",children:[e.jsxs("div",{className:"flex items-center justify-between shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(I,{className:"w-5 h-5 text-primary"}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-xl font-semibold text-foreground",children:"Analysis Viewer"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"查看 /workflow:analyze-with-file 命令的分析结果"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"text-xs text-muted-foreground",children:["共 ",N.length," 个会话"]}),e.jsx(p,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:l,title:a?"退出全屏":"全屏模式",children:a?e.jsx(we,{className:"w-4 h-4"}):e.jsx(be,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[e.jsxs("div",{className:"relative flex-1 max-w-md",children:[e.jsx(ne,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(ie,{placeholder:"搜索分析会话...",value:n,onChange:s=>$(s.target.value),className:"pl-9"})]}),e.jsx("div",{className:"flex items-center gap-1 bg-muted/50 rounded-lg p-1",children:De.map(s=>e.jsxs(p,{variant:j===s.value?"default":"ghost",size:"sm",className:"h-7 px-3 text-xs gap-1",onClick:()=>ee(s.value),children:[s.icon,s.label]},s.value))}),e.jsx("div",{className:"flex items-center gap-1 bg-muted/50 rounded-lg p-1",children:Ae.map(s=>e.jsx(p,{variant:m===s.value?"default":"ghost",size:"sm",className:"h-7 px-3 text-xs",onClick:()=>Y(s.value),children:s.label},s.value))})]}),e.jsx("div",{className:"flex items-center gap-2 flex-wrap shrink-0",children:J.map(s=>e.jsxs(p,{variant:g===s.date?"default":"outline",size:"sm",className:"h-7 px-2 text-xs gap-1",onClick:()=>U(s.date),children:[e.jsx("span",{children:s.label}),e.jsx(b,{variant:"secondary",className:"ml-1 px-1.5 py-0 text-[10px]",children:s.count})]},s.date))}),H?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(q,{className:"w-6 h-6 animate-spin text-muted-foreground"})}):P?e.jsx(S,{className:"p-6",children:e.jsxs("div",{className:"flex items-center gap-2 text-destructive",children:[e.jsx(R,{className:"w-5 h-5"}),e.jsxs("span",{children:["加载失败: ",P.message]})]})}):N.length===0?e.jsxs(S,{className:"p-12 text-center",children:[e.jsx(I,{className:"w-12 h-12 mx-auto text-muted-foreground mb-4"}),e.jsx("p",{className:"text-muted-foreground",children:n?"没有匹配的分析会话":"暂无分析会话"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-2",children:"使用 /workflow:analyze-with-file 命令创建分析"})]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex-1 grid grid-cols-4 gap-3 content-start",children:X.map(s=>e.jsx(Se,{session:s,onClick:()=>d(s.id),onStatusClick:Z,isStatusFiltered:j!=="all"},s.id))}),D>1&&e.jsxs("div",{className:"flex items-center justify-center gap-2 pt-4",children:[e.jsx(p,{variant:"outline",size:"sm",disabled:c===1,onClick:()=>h(s=>s-1),children:e.jsx(ce,{className:"w-4 h-4"})}),e.jsxs("span",{className:"text-sm text-muted-foreground px-3",children:[c," / ",D]}),e.jsx(p,{variant:"outline",size:"sm",disabled:c===D,onClick:()=>h(s=>s+1),children:e.jsx(O,{className:"w-4 h-4"})})]})]})]}),e.jsx(oe,{open:!!i,onOpenChange:s=>!s&&d(null),children:e.jsxs(de,{side:"right",className:"w-1/2 h-full max-w-none",children:[e.jsxs(me,{className:"shrink-0",children:[e.jsx(xe,{children:"分析详情"}),e.jsx(ue,{asChild:!0,children:e.jsx(p,{variant:"ghost",size:"sm",className:"absolute right-4 top-4",children:e.jsx(he,{className:"w-4 h-4"})})})]}),i&&e.jsx(ke,{sessionId:i,projectPath:t})]})})]})}export{Oe as AnalysisPage,Oe as default};
|
|
2
|
+
//# sourceMappingURL=AnalysisPage-ds-w_nVO.js.map
|
package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js.map → AnalysisPage-ds-w_nVO.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalysisPage-Bc4p4SvJ.js","sources":["../../src/components/shared/JsonCardView.tsx","../../src/pages/AnalysisPage.tsx"],"sourcesContent":["// ========================================\r\n// JsonCardView Component\r\n// ========================================\r\n// Renders JSON data as structured cards for better readability\r\n\r\nimport { useState } from 'react';\r\nimport { ChevronDown, ChevronRight, Database } from 'lucide-react';\r\nimport { cn } from '@/lib/utils';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface JsonCardViewProps {\r\n /** JSON data to render - accepts any object type */\r\n data: object | unknown[] | null;\r\n /** Additional CSS className */\r\n className?: string;\r\n /** Initial expanded state */\r\n defaultExpanded?: boolean;\r\n}\r\n\r\ninterface CardItemProps {\r\n label: string;\r\n value: unknown;\r\n depth?: number;\r\n}\r\n\r\n// ========== Helper Functions ==========\r\n\r\nfunction isObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\r\n}\r\n\r\nfunction isArray(value: unknown): value is unknown[] {\r\n return Array.isArray(value);\r\n}\r\n\r\nfunction formatLabel(key: string): string {\r\n return key\r\n .replace(/_/g, ' ')\r\n .replace(/([A-Z])/g, ' $1')\r\n .replace(/^./, (str) => str.toUpperCase())\r\n .trim();\r\n}\r\n\r\n// ========== Sub Components ==========\r\n\r\nfunction PrimitiveValue({ value }: { value: unknown }) {\r\n if (value === null || value === undefined) {\r\n return <span className=\"text-muted-foreground italic\">null</span>;\r\n }\r\n if (typeof value === 'boolean') {\r\n return (\r\n <Badge variant={value ? 'default' : 'secondary'}>\r\n {value ? 'true' : 'false'}\r\n </Badge>\r\n );\r\n }\r\n if (typeof value === 'number') {\r\n return <span className=\"text-blue-600 dark:text-blue-400 font-mono\">{value}</span>;\r\n }\r\n if (typeof value === 'string') {\r\n // Check if it's a URL\r\n if (value.startsWith('http://') || value.startsWith('https://')) {\r\n return (\r\n <a\r\n href={value}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"text-blue-600 dark:text-blue-400 hover:underline break-all\"\r\n >\r\n {value}\r\n </a>\r\n );\r\n }\r\n // Long text\r\n if (value.length > 100) {\r\n return (\r\n <div className=\"text-sm text-foreground bg-muted/50 p-2 rounded whitespace-pre-wrap break-words\">\r\n {value}\r\n </div>\r\n );\r\n }\r\n return <span className=\"text-foreground\">{value}</span>;\r\n }\r\n return <span>{String(value)}</span>;\r\n}\r\n\r\nfunction ArrayView({ items, displayName = 'items' }: { items: unknown[]; displayName?: string }) {\r\n const [expanded, setExpanded] = useState(true);\r\n\r\n if (items.length === 0) {\r\n return (\r\n <div className=\"text-muted-foreground text-sm flex items-center gap-2 p-3 bg-muted/30 rounded-md\">\r\n <Database className=\"w-4 h-4\" />\r\n <span>No {displayName} entries.</span>\r\n </div>\r\n );\r\n }\r\n\r\n // Simple array of primitives\r\n const allPrimitives = items.every(\r\n (item) => typeof item !== 'object' || item === null\r\n );\r\n\r\n if (allPrimitives) {\r\n return (\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {items.map((item, index) => (\r\n <Badge key={index} variant=\"outline\" className=\"font-normal\">\r\n {String(item)}\r\n </Badge>\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-2\">\r\n <button\r\n onClick={() => setExpanded(!expanded)}\r\n className=\"flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground\"\r\n >\r\n {expanded ? <ChevronDown className=\"w-4 h-4\" /> : <ChevronRight className=\"w-4 h-4\" />}\r\n {items.length} items\r\n </button>\r\n {expanded && (\r\n <div className=\"space-y-2 pl-4 border-l-2 border-border\">\r\n {items.map((item, index) => (\r\n <Card key={index} className=\"p-3\">\r\n <div className=\"text-xs text-muted-foreground mb-2\">#{index + 1}</div>\r\n {isObject(item) ? (\r\n <ObjectView data={item} />\r\n ) : (\r\n <PrimitiveValue value={item} />\r\n )}\r\n </Card>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nfunction ObjectView({ data, depth = 0 }: { data: Record<string, unknown>; depth?: number }) {\r\n const entries = Object.entries(data);\r\n\r\n if (entries.length === 0) {\r\n return <div className=\"text-muted-foreground italic text-sm\">Empty object</div>;\r\n }\r\n\r\n return (\r\n <div className=\"space-y-3\">\r\n {entries.map(([key, value]) => (\r\n <CardItem key={key} label={key} value={value} depth={depth} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nfunction CardItem({ label, value, depth = 0 }: CardItemProps) {\r\n const formattedLabel = formatLabel(label);\r\n\r\n // Nested object\r\n if (isObject(value)) {\r\n return (\r\n <div className=\"space-y-2\">\r\n <div className=\"font-medium text-sm text-foreground\">{formattedLabel}</div>\r\n <div className={cn('pl-3 border-l-2 border-border', depth > 1 && 'ml-2')}>\r\n <ObjectView data={value} depth={depth + 1} />\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Array\r\n if (isArray(value)) {\r\n return (\r\n <div className=\"space-y-2\">\r\n <div className=\"font-medium text-sm text-foreground\">{formattedLabel}</div>\r\n <ArrayView items={value} displayName={formattedLabel.toLowerCase()} />\r\n </div>\r\n );\r\n }\r\n\r\n // Primitive value\r\n return (\r\n <div className=\"flex items-start gap-2\">\r\n <div className=\"font-medium text-sm text-muted-foreground min-w-[120px] shrink-0\">\r\n {formattedLabel}\r\n </div>\r\n <div className=\"flex-1 text-sm\">\r\n <PrimitiveValue value={value} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Main Component ==========\r\n\r\nexport function JsonCardView({ data, className }: JsonCardViewProps) {\r\n if (!data) {\r\n return (\r\n <div className=\"text-muted-foreground italic text-sm\">No data available</div>\r\n );\r\n }\r\n\r\n // Handle array at root level\r\n if (isArray(data)) {\r\n return (\r\n <div className={cn('space-y-3', className)}>\r\n <ArrayView items={data} />\r\n </div>\r\n );\r\n }\r\n\r\n // Handle object\r\n return (\r\n <div className={cn('space-y-4', className)}>\r\n <ObjectView data={data as Record<string, unknown>} />\r\n </div>\r\n );\r\n}\r\n\r\nexport default JsonCardView;\r\n","// ========================================\r\n// Analysis Viewer Page\r\n// ========================================\r\n// View analysis sessions from /workflow:analyze-with-file command\r\n\r\nimport { useState, useMemo } from 'react';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport {\r\n FileSearch,\r\n Search,\r\n CheckCircle,\r\n Clock,\r\n ChevronLeft,\r\n ChevronRight,\r\n Loader2,\r\n AlertCircle,\r\n X,\r\n FileText,\r\n Code,\r\n MessageSquare,\r\n Maximize2,\r\n Minimize2,\r\n} from 'lucide-react';\r\nimport { useWorkflowStore } from '@/stores/workflowStore';\r\nimport { useAppStore } from '@/stores/appStore';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Input } from '@/components/ui/Input';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { TabsNavigation } from '@/components/ui/TabsNavigation';\r\nimport {\r\n Drawer,\r\n DrawerContent,\r\n DrawerHeader,\r\n DrawerTitle,\r\n DrawerClose,\r\n} from '@/components/ui/Drawer';\r\nimport { fetchAnalysisSessions, fetchAnalysisDetail } from '@/lib/api';\r\nimport { MessageRenderer } from '@/components/shared/CliStreamMonitor/MessageRenderer';\r\nimport { JsonCardView } from '@/components/shared/JsonCardView';\r\nimport { cn } from '@/lib/utils';\r\nimport type { AnalysisSessionSummary } from '@/types/analysis';\r\n\r\nconst PAGE_SIZE = 16; // 4 rows × 4 columns\r\n\r\n// ========== Session Card Component (Compact) ==========\r\n\r\ninterface SessionCardProps {\r\n session: AnalysisSessionSummary;\r\n onClick: () => void;\r\n onStatusClick: (status: string) => void;\r\n isStatusFiltered: boolean;\r\n}\r\n\r\nfunction SessionCard({ session, onClick, onStatusClick, isStatusFiltered }: SessionCardProps) {\r\n const handleStatusClick = (e: React.MouseEvent) => {\r\n e.stopPropagation(); // Prevent card click\r\n onStatusClick(session.status);\r\n };\r\n\r\n return (\r\n <Card\r\n className=\"p-3 cursor-pointer transition-all hover:shadow-md hover:border-primary/50 h-full flex flex-col\"\r\n onClick={onClick}\r\n >\r\n {/* Topic - smaller font */}\r\n <h3 className=\"text-sm font-medium text-foreground line-clamp-2 mb-2 leading-snug\">\r\n {session.topic}\r\n </h3>\r\n\r\n {/* Session ID - truncate */}\r\n <p className=\"text-xs text-muted-foreground truncate mb-2\">\r\n {session.id}\r\n </p>\r\n\r\n {/* Status and Date */}\r\n <div className=\"flex items-center justify-between text-xs mt-auto pt-2 border-t\">\r\n <Badge\r\n variant={session.status === 'completed' ? 'success' : 'warning'}\r\n className={cn(\r\n \"text-[10px] px-1.5 py-0 cursor-pointer transition-all\",\r\n isStatusFiltered && \"ring-2 ring-primary ring-offset-1\"\r\n )}\r\n onClick={handleStatusClick}\r\n >\r\n {session.status === 'completed' ? (\r\n <><CheckCircle className=\"w-2.5 h-2.5 mr-0.5\" />完成</>\r\n ) : (\r\n <><Clock className=\"w-2.5 h-2.5 mr-0.5\" />进行中</>\r\n )}\r\n </Badge>\r\n <span className=\"text-muted-foreground\">{session.createdAt}</span>\r\n </div>\r\n\r\n {/* Conclusions indicator */}\r\n {session.hasConclusions && (\r\n <div className=\"flex items-center gap-1 text-[10px] text-muted-foreground mt-1\">\r\n <FileText className=\"w-2.5 h-2.5\" />\r\n <span>有结论</span>\r\n </div>\r\n )}\r\n </Card>\r\n );\r\n}\r\n\r\n// ========== Detail Panel Component ==========\r\n\r\ninterface DetailPanelProps {\r\n sessionId: string;\r\n projectPath: string;\r\n}\r\n\r\nfunction DetailPanel({ sessionId, projectPath }: DetailPanelProps) {\r\n const [activeTab, setActiveTab] = useState('discussion');\r\n\r\n const { data: detail, isLoading, error } = useQuery({\r\n queryKey: ['analysis-detail', sessionId, projectPath],\r\n queryFn: () => fetchAnalysisDetail(sessionId, projectPath),\r\n });\r\n\r\n if (isLoading) {\r\n return (\r\n <div className=\"flex items-center justify-center h-full\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-muted-foreground\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className=\"flex items-center justify-center h-full p-4\">\r\n <div className=\"flex items-center gap-2 text-destructive\">\r\n <AlertCircle className=\"w-5 h-5\" />\r\n <span>加载失败: {(error as Error).message}</span>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (!detail) return null;\r\n\r\n // Build available tabs based on content\r\n const tabs = [\r\n { value: 'discussion', label: '讨论记录', icon: <MessageSquare className=\"w-4 h-4\" /> },\r\n { value: 'conclusions', label: '结论', icon: <CheckCircle className=\"w-4 h-4\" /> },\r\n { value: 'explorations', label: '代码探索', icon: <Code className=\"w-4 h-4\" /> },\r\n { value: 'perspectives', label: '视角分析', icon: <FileText className=\"w-4 h-4\" /> },\r\n ].filter(tab => {\r\n const key = tab.value as keyof typeof detail;\r\n return detail[key];\r\n });\r\n\r\n // Ensure activeTab is valid\r\n const validTab = tabs.find(t => t.value === activeTab);\r\n if (!validTab && tabs.length > 0) {\r\n setActiveTab(tabs[0].value);\r\n }\r\n\r\n return (\r\n <div className=\"h-full flex flex-col\">\r\n {/* Session Info (in drawer, header is already shown) */}\r\n <div className=\"px-4 pb-3 border-b shrink-0\">\r\n <div className=\"min-w-0\">\r\n <h2 className=\"font-semibold truncate\">{detail.topic}</h2>\r\n <div className=\"flex items-center gap-2 mt-1\">\r\n <Badge variant={detail.status === 'completed' ? 'default' : 'secondary'} className=\"text-xs\">\r\n {detail.status === 'completed' ? '完成' : '进行中'}\r\n </Badge>\r\n <span className=\"text-xs text-muted-foreground\">{detail.createdAt}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Tabs Content */}\r\n {tabs.length > 0 ? (\r\n <>\r\n <TabsNavigation\r\n value={activeTab}\r\n onValueChange={setActiveTab}\r\n tabs={tabs}\r\n className=\"px-4\"\r\n />\r\n <div className=\"flex-1 overflow-auto min-h-0 p-4\">\r\n {/* Discussion Tab */}\r\n {activeTab === 'discussion' && detail.discussion && (\r\n <MessageRenderer content={detail.discussion} format=\"markdown\" />\r\n )}\r\n\r\n {/* Conclusions Tab */}\r\n {activeTab === 'conclusions' && detail.conclusions && (\r\n <JsonCardView data={detail.conclusions} />\r\n )}\r\n\r\n {/* Explorations Tab */}\r\n {activeTab === 'explorations' && detail.explorations && (\r\n <JsonCardView data={detail.explorations} />\r\n )}\r\n\r\n {/* Perspectives Tab */}\r\n {activeTab === 'perspectives' && detail.perspectives && (\r\n <JsonCardView data={detail.perspectives} />\r\n )}\r\n </div>\r\n </>\r\n ) : (\r\n <div className=\"flex-1 flex items-center justify-center text-muted-foreground\">\r\n 暂无分析内容\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Main Component ==========\r\n\r\ntype DateFilter = 'all' | 'today' | 'week' | 'month';\r\ntype StatusFilter = 'all' | 'in_progress' | 'completed';\r\n\r\nconst DATE_FILTERS: { value: DateFilter; label: string }[] = [\r\n { value: 'all', label: '全部' },\r\n { value: 'today', label: '今天' },\r\n { value: 'week', label: '本周' },\r\n { value: 'month', label: '本月' },\r\n];\r\n\r\nconst STATUS_FILTERS: { value: StatusFilter; label: string; icon: React.ReactNode }[] = [\r\n { value: 'all', label: '全部', icon: <FileSearch className=\"w-4 h-4\" /> },\r\n { value: 'in_progress', label: '进行中', icon: <Clock className=\"w-4 h-4\" /> },\r\n { value: 'completed', label: '已完成', icon: <CheckCircle className=\"w-4 h-4\" /> },\r\n];\r\n\r\nexport function AnalysisPage() {\r\n const projectPath = useWorkflowStore((state) => state.projectPath);\r\n const isImmersiveMode = useAppStore((s) => s.isImmersiveMode);\r\n const toggleImmersiveMode = useAppStore((s) => s.toggleImmersiveMode);\r\n const [searchQuery, setSearchQuery] = useState('');\r\n const [selectedSession, setSelectedSession] = useState<string | null>(null);\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [dateFilter, setDateFilter] = useState<DateFilter>('all');\r\n const [statusFilter, setStatusFilter] = useState<StatusFilter>('all');\r\n const [selectedDate, setSelectedDate] = useState<string | null>(null);\r\n\r\n const { data: sessions = [], isLoading, error } = useQuery({\r\n queryKey: ['analysis-sessions', projectPath],\r\n queryFn: () => fetchAnalysisSessions(projectPath),\r\n });\r\n\r\n // Get unique dates with counts for quick filter bubbles\r\n const uniqueDates = useMemo(() => {\r\n const dateCounts = new Map<string, number>();\r\n sessions.forEach((session) => {\r\n const count = dateCounts.get(session.createdAt) || 0;\r\n dateCounts.set(session.createdAt, count + 1);\r\n });\r\n // Sort by date descending, show top 10\r\n return Array.from(dateCounts.entries())\r\n .sort((a, b) => b[0].localeCompare(a[0]))\r\n .slice(0, 10)\r\n .map(([date, count]) => ({\r\n date,\r\n label: date.slice(5), // MM-DD format\r\n count,\r\n }));\r\n }, [sessions]);\r\n\r\n // Filter by date, status and search query\r\n const filteredSessions = useMemo(() => {\r\n const now = new Date();\r\n const today = now.toISOString().split('T')[0];\r\n const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];\r\n const monthAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];\r\n\r\n let filtered = sessions.filter((session) => {\r\n // Search filter\r\n const matchesSearch = session.topic.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n session.id.toLowerCase().includes(searchQuery.toLowerCase());\r\n\r\n // Status filter\r\n const matchesStatus = statusFilter === 'all' || session.status === statusFilter;\r\n\r\n // Date filter\r\n let matchesDate = true;\r\n if (selectedDate) {\r\n matchesDate = session.createdAt === selectedDate;\r\n } else if (dateFilter === 'today') {\r\n matchesDate = session.createdAt === today;\r\n } else if (dateFilter === 'week') {\r\n matchesDate = session.createdAt >= weekAgo;\r\n } else if (dateFilter === 'month') {\r\n matchesDate = session.createdAt >= monthAgo;\r\n }\r\n\r\n return matchesSearch && matchesStatus && matchesDate;\r\n });\r\n\r\n // Sort by createdAt descending (newest first)\r\n return filtered.sort((a, b) => b.createdAt.localeCompare(a.createdAt));\r\n }, [sessions, searchQuery, dateFilter, statusFilter, selectedDate]);\r\n\r\n // Handle date select\r\n const handleDateSelect = (date: string) => {\r\n if (selectedDate === date) {\r\n setSelectedDate(null);\r\n } else {\r\n setSelectedDate(date);\r\n setDateFilter('all');\r\n }\r\n setCurrentPage(1);\r\n };\r\n\r\n // Handle status filter from card click\r\n const handleStatusClick = (status: string) => {\r\n if (statusFilter === status) {\r\n setStatusFilter('all');\r\n } else {\r\n setStatusFilter(status as StatusFilter);\r\n }\r\n setCurrentPage(1);\r\n };\r\n\r\n // Pagination\r\n const totalPages = Math.ceil(filteredSessions.length / PAGE_SIZE);\r\n const paginatedSessions = useMemo(() => {\r\n const start = (currentPage - 1) * PAGE_SIZE;\r\n return filteredSessions.slice(start, start + PAGE_SIZE);\r\n }, [filteredSessions, currentPage]);\r\n\r\n // Reset to page 1 when filters change\r\n const handleSearchChange = (value: string) => {\r\n setSearchQuery(value);\r\n setCurrentPage(1);\r\n };\r\n\r\n const handleDateFilterChange = (filter: DateFilter) => {\r\n setDateFilter(filter);\r\n setCurrentPage(1);\r\n };\r\n\r\n const handleStatusFilterChange = (filter: StatusFilter) => {\r\n setStatusFilter(filter);\r\n setSelectedDate(null);\r\n setCurrentPage(1);\r\n };\r\n\r\n return (\r\n <div className={cn(\r\n \"h-full flex overflow-hidden\",\r\n isImmersiveMode && \"fixed inset-0 z-50 bg-background\"\r\n )}>\r\n {/* Main Content - List */}\r\n <div className=\"flex-1 flex flex-col p-4 space-y-3 overflow-auto\">\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between shrink-0\">\r\n <div className=\"flex items-center gap-2\">\r\n <FileSearch className=\"w-5 h-5 text-primary\" />\r\n <div>\r\n <h1 className=\"text-xl font-semibold text-foreground\">\r\n Analysis Viewer\r\n </h1>\r\n <p className=\"text-xs text-muted-foreground mt-0.5\">\r\n 查看 /workflow:analyze-with-file 命令的分析结果\r\n </p>\r\n </div>\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-xs text-muted-foreground\">\r\n 共 {filteredSessions.length} 个会话\r\n </span>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-7 w-7 p-0\"\r\n onClick={toggleImmersiveMode}\r\n title={isImmersiveMode ? '退出全屏' : '全屏模式'}\r\n >\r\n {isImmersiveMode ? (\r\n <Minimize2 className=\"w-4 h-4\" />\r\n ) : (\r\n <Maximize2 className=\"w-4 h-4\" />\r\n )}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Filters */}\r\n <div className=\"flex items-center gap-4 shrink-0\">\r\n {/* Search */}\r\n <div className=\"relative flex-1 max-w-md\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\r\n <Input\r\n placeholder=\"搜索分析会话...\"\r\n value={searchQuery}\r\n onChange={(e) => handleSearchChange(e.target.value)}\r\n className=\"pl-9\"\r\n />\r\n </div>\r\n\r\n {/* Status Filter Tabs */}\r\n <div className=\"flex items-center gap-1 bg-muted/50 rounded-lg p-1\">\r\n {STATUS_FILTERS.map((filter) => (\r\n <Button\r\n key={filter.value}\r\n variant={statusFilter === filter.value ? 'default' : 'ghost'}\r\n size=\"sm\"\r\n className=\"h-7 px-3 text-xs gap-1\"\r\n onClick={() => handleStatusFilterChange(filter.value)}\r\n >\r\n {filter.icon}\r\n {filter.label}\r\n </Button>\r\n ))}\r\n </div>\r\n\r\n {/* Date Filter Tabs */}\r\n <div className=\"flex items-center gap-1 bg-muted/50 rounded-lg p-1\">\r\n {DATE_FILTERS.map((filter) => (\r\n <Button\r\n key={filter.value}\r\n variant={dateFilter === filter.value ? 'default' : 'ghost'}\r\n size=\"sm\"\r\n className=\"h-7 px-3 text-xs\"\r\n onClick={() => handleDateFilterChange(filter.value)}\r\n >\r\n {filter.label}\r\n </Button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Date Quick Filter Bubbles */}\r\n <div className=\"flex items-center gap-2 flex-wrap shrink-0\">\r\n {uniqueDates.map((date) => (\r\n <Button\r\n key={date.date}\r\n variant={selectedDate === date.date ? 'default' : 'outline'}\r\n size=\"sm\"\r\n className=\"h-7 px-2 text-xs gap-1\"\r\n onClick={() => handleDateSelect(date.date)}\r\n >\r\n <span>{date.label}</span>\r\n <Badge variant=\"secondary\" className=\"ml-1 px-1.5 py-0 text-[10px]\">\r\n {date.count}\r\n </Badge>\r\n </Button>\r\n ))}\r\n </div>\r\n\r\n {/* Content */}\r\n {isLoading ? (\r\n <div className=\"flex items-center justify-center py-12\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-muted-foreground\" />\r\n </div>\r\n ) : error ? (\r\n <Card className=\"p-6\">\r\n <div className=\"flex items-center gap-2 text-destructive\">\r\n <AlertCircle className=\"w-5 h-5\" />\r\n <span>加载失败: {(error as Error).message}</span>\r\n </div>\r\n </Card>\r\n ) : filteredSessions.length === 0 ? (\r\n <Card className=\"p-12 text-center\">\r\n <FileSearch className=\"w-12 h-12 mx-auto text-muted-foreground mb-4\" />\r\n <p className=\"text-muted-foreground\">\r\n {searchQuery ? '没有匹配的分析会话' : '暂无分析会话'}\r\n </p>\r\n <p className=\"text-sm text-muted-foreground mt-2\">\r\n 使用 /workflow:analyze-with-file 命令创建分析\r\n </p>\r\n </Card>\r\n ) : (\r\n <>\r\n {/* Grid - flex-1 to fill remaining space */}\r\n <div className=\"flex-1 grid grid-cols-4 gap-3 content-start\">\r\n {paginatedSessions.map((session) => (\r\n <SessionCard\r\n key={session.id}\r\n session={session}\r\n onClick={() => setSelectedSession(session.id)}\r\n onStatusClick={handleStatusClick}\r\n isStatusFiltered={statusFilter !== 'all'}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Pagination */}\r\n {totalPages > 1 && (\r\n <div className=\"flex items-center justify-center gap-2 pt-4\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n disabled={currentPage === 1}\r\n onClick={() => setCurrentPage(p => p - 1)}\r\n >\r\n <ChevronLeft className=\"w-4 h-4\" />\r\n </Button>\r\n <span className=\"text-sm text-muted-foreground px-3\">\r\n {currentPage} / {totalPages}\r\n </span>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n disabled={currentPage === totalPages}\r\n onClick={() => setCurrentPage(p => p + 1)}\r\n >\r\n <ChevronRight className=\"w-4 h-4\" />\r\n </Button>\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n\r\n {/* Detail Drawer */}\r\n <Drawer open={!!selectedSession} onOpenChange={(open) => !open && setSelectedSession(null)}>\r\n <DrawerContent side=\"right\" className=\"w-1/2 h-full max-w-none\">\r\n <DrawerHeader className=\"shrink-0\">\r\n <DrawerTitle>分析详情</DrawerTitle>\r\n <DrawerClose asChild>\r\n <Button variant=\"ghost\" size=\"sm\" className=\"absolute right-4 top-4\">\r\n <X className=\"w-4 h-4\" />\r\n </Button>\r\n </DrawerClose>\r\n </DrawerHeader>\r\n {selectedSession && (\r\n <DetailPanel\r\n sessionId={selectedSession}\r\n projectPath={projectPath}\r\n />\r\n )}\r\n </DrawerContent>\r\n </Drawer>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AnalysisPage;\r\n"],"names":["isObject","value","isArray","formatLabel","key","str","PrimitiveValue","jsx","Badge","ArrayView","items","displayName","expanded","setExpanded","useState","jsxs","Database","item","index","ChevronDown","ChevronRight","Card","ObjectView","data","depth","entries","CardItem","label","formattedLabel","cn","JsonCardView","className","PAGE_SIZE","SessionCard","session","onClick","onStatusClick","isStatusFiltered","handleStatusClick","e","Fragment","CheckCircle","Clock","FileText","DetailPanel","sessionId","projectPath","activeTab","setActiveTab","detail","isLoading","error","useQuery","fetchAnalysisDetail","Loader2","AlertCircle","tabs","MessageSquare","Code","tab","t","TabsNavigation","MessageRenderer","DATE_FILTERS","STATUS_FILTERS","FileSearch","AnalysisPage","useWorkflowStore","state","isImmersiveMode","useAppStore","toggleImmersiveMode","searchQuery","setSearchQuery","selectedSession","setSelectedSession","currentPage","setCurrentPage","dateFilter","setDateFilter","statusFilter","setStatusFilter","selectedDate","setSelectedDate","sessions","fetchAnalysisSessions","uniqueDates","useMemo","dateCounts","count","a","b","date","filteredSessions","now","today","weekAgo","monthAgo","matchesSearch","matchesStatus","matchesDate","handleDateSelect","status","totalPages","paginatedSessions","start","handleSearchChange","handleDateFilterChange","filter","handleStatusFilterChange","Button","Minimize2","Maximize2","Search","Input","p","ChevronLeft","Drawer","open","DrawerContent","DrawerHeader","DrawerTitle","DrawerClose","X"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AnalysisPage-ds-w_nVO.js","sources":["../../src/components/shared/JsonCardView.tsx","../../src/pages/AnalysisPage.tsx"],"sourcesContent":["// ========================================\r\n// JsonCardView Component\r\n// ========================================\r\n// Renders JSON data as structured cards for better readability\r\n\r\nimport { useState } from 'react';\r\nimport { ChevronDown, ChevronRight, Database } from 'lucide-react';\r\nimport { cn } from '@/lib/utils';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface JsonCardViewProps {\r\n /** JSON data to render - accepts any object type */\r\n data: object | unknown[] | null;\r\n /** Additional CSS className */\r\n className?: string;\r\n /** Initial expanded state */\r\n defaultExpanded?: boolean;\r\n}\r\n\r\ninterface CardItemProps {\r\n label: string;\r\n value: unknown;\r\n depth?: number;\r\n}\r\n\r\n// ========== Helper Functions ==========\r\n\r\nfunction isObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\r\n}\r\n\r\nfunction isArray(value: unknown): value is unknown[] {\r\n return Array.isArray(value);\r\n}\r\n\r\nfunction formatLabel(key: string): string {\r\n return key\r\n .replace(/_/g, ' ')\r\n .replace(/([A-Z])/g, ' $1')\r\n .replace(/^./, (str) => str.toUpperCase())\r\n .trim();\r\n}\r\n\r\n// ========== Sub Components ==========\r\n\r\nfunction PrimitiveValue({ value }: { value: unknown }) {\r\n if (value === null || value === undefined) {\r\n return <span className=\"text-muted-foreground italic\">null</span>;\r\n }\r\n if (typeof value === 'boolean') {\r\n return (\r\n <Badge variant={value ? 'default' : 'secondary'}>\r\n {value ? 'true' : 'false'}\r\n </Badge>\r\n );\r\n }\r\n if (typeof value === 'number') {\r\n return <span className=\"text-blue-600 dark:text-blue-400 font-mono\">{value}</span>;\r\n }\r\n if (typeof value === 'string') {\r\n // Check if it's a URL\r\n if (value.startsWith('http://') || value.startsWith('https://')) {\r\n return (\r\n <a\r\n href={value}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"text-blue-600 dark:text-blue-400 hover:underline break-all\"\r\n >\r\n {value}\r\n </a>\r\n );\r\n }\r\n // Long text\r\n if (value.length > 100) {\r\n return (\r\n <div className=\"text-sm text-foreground bg-muted/50 p-2 rounded whitespace-pre-wrap break-words\">\r\n {value}\r\n </div>\r\n );\r\n }\r\n return <span className=\"text-foreground\">{value}</span>;\r\n }\r\n return <span>{String(value)}</span>;\r\n}\r\n\r\nfunction ArrayView({ items, displayName = 'items' }: { items: unknown[]; displayName?: string }) {\r\n const [expanded, setExpanded] = useState(true);\r\n\r\n if (items.length === 0) {\r\n return (\r\n <div className=\"text-muted-foreground text-sm flex items-center gap-2 p-3 bg-muted/30 rounded-md\">\r\n <Database className=\"w-4 h-4\" />\r\n <span>No {displayName} entries.</span>\r\n </div>\r\n );\r\n }\r\n\r\n // Simple array of primitives\r\n const allPrimitives = items.every(\r\n (item) => typeof item !== 'object' || item === null\r\n );\r\n\r\n if (allPrimitives) {\r\n return (\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {items.map((item, index) => (\r\n <Badge key={index} variant=\"outline\" className=\"font-normal\">\r\n {String(item)}\r\n </Badge>\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-2\">\r\n <button\r\n onClick={() => setExpanded(!expanded)}\r\n className=\"flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground\"\r\n >\r\n {expanded ? <ChevronDown className=\"w-4 h-4\" /> : <ChevronRight className=\"w-4 h-4\" />}\r\n {items.length} items\r\n </button>\r\n {expanded && (\r\n <div className=\"space-y-2 pl-4 border-l-2 border-border\">\r\n {items.map((item, index) => (\r\n <Card key={index} className=\"p-3\">\r\n <div className=\"text-xs text-muted-foreground mb-2\">#{index + 1}</div>\r\n {isObject(item) ? (\r\n <ObjectView data={item} />\r\n ) : (\r\n <PrimitiveValue value={item} />\r\n )}\r\n </Card>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nfunction ObjectView({ data, depth = 0 }: { data: Record<string, unknown>; depth?: number }) {\r\n const entries = Object.entries(data);\r\n\r\n if (entries.length === 0) {\r\n return <div className=\"text-muted-foreground italic text-sm\">Empty object</div>;\r\n }\r\n\r\n return (\r\n <div className=\"space-y-3\">\r\n {entries.map(([key, value]) => (\r\n <CardItem key={key} label={key} value={value} depth={depth} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nfunction CardItem({ label, value, depth = 0 }: CardItemProps) {\r\n const formattedLabel = formatLabel(label);\r\n\r\n // Nested object\r\n if (isObject(value)) {\r\n return (\r\n <div className=\"space-y-2\">\r\n <div className=\"font-medium text-sm text-foreground\">{formattedLabel}</div>\r\n <div className={cn('pl-3 border-l-2 border-border', depth > 1 && 'ml-2')}>\r\n <ObjectView data={value} depth={depth + 1} />\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Array\r\n if (isArray(value)) {\r\n return (\r\n <div className=\"space-y-2\">\r\n <div className=\"font-medium text-sm text-foreground\">{formattedLabel}</div>\r\n <ArrayView items={value} displayName={formattedLabel.toLowerCase()} />\r\n </div>\r\n );\r\n }\r\n\r\n // Primitive value\r\n return (\r\n <div className=\"flex items-start gap-2\">\r\n <div className=\"font-medium text-sm text-muted-foreground min-w-[120px] shrink-0\">\r\n {formattedLabel}\r\n </div>\r\n <div className=\"flex-1 text-sm\">\r\n <PrimitiveValue value={value} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Main Component ==========\r\n\r\nexport function JsonCardView({ data, className }: JsonCardViewProps) {\r\n if (!data) {\r\n return (\r\n <div className=\"text-muted-foreground italic text-sm\">No data available</div>\r\n );\r\n }\r\n\r\n // Handle array at root level\r\n if (isArray(data)) {\r\n return (\r\n <div className={cn('space-y-3', className)}>\r\n <ArrayView items={data} />\r\n </div>\r\n );\r\n }\r\n\r\n // Handle object\r\n return (\r\n <div className={cn('space-y-4', className)}>\r\n <ObjectView data={data as Record<string, unknown>} />\r\n </div>\r\n );\r\n}\r\n\r\nexport default JsonCardView;\r\n","// ========================================\r\n// Analysis Viewer Page\r\n// ========================================\r\n// View analysis sessions from /workflow:analyze-with-file command\r\n\r\nimport { useState, useMemo } from 'react';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport {\r\n FileSearch,\r\n Search,\r\n CheckCircle,\r\n Clock,\r\n ChevronLeft,\r\n ChevronRight,\r\n Loader2,\r\n AlertCircle,\r\n X,\r\n FileText,\r\n Code,\r\n MessageSquare,\r\n Maximize2,\r\n Minimize2,\r\n} from 'lucide-react';\r\nimport { useWorkflowStore } from '@/stores/workflowStore';\r\nimport { useAppStore } from '@/stores/appStore';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Input } from '@/components/ui/Input';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { TabsNavigation } from '@/components/ui/TabsNavigation';\r\nimport {\r\n Drawer,\r\n DrawerContent,\r\n DrawerHeader,\r\n DrawerTitle,\r\n DrawerClose,\r\n} from '@/components/ui/Drawer';\r\nimport { fetchAnalysisSessions, fetchAnalysisDetail } from '@/lib/api';\r\nimport { MessageRenderer } from '@/components/shared/CliStreamMonitor/MessageRenderer';\r\nimport { JsonCardView } from '@/components/shared/JsonCardView';\r\nimport { cn } from '@/lib/utils';\r\nimport type { AnalysisSessionSummary } from '@/types/analysis';\r\n\r\nconst PAGE_SIZE = 16; // 4 rows × 4 columns\r\n\r\n// ========== Session Card Component (Compact) ==========\r\n\r\ninterface SessionCardProps {\r\n session: AnalysisSessionSummary;\r\n onClick: () => void;\r\n onStatusClick: (status: string) => void;\r\n isStatusFiltered: boolean;\r\n}\r\n\r\nfunction SessionCard({ session, onClick, onStatusClick, isStatusFiltered }: SessionCardProps) {\r\n const handleStatusClick = (e: React.MouseEvent) => {\r\n e.stopPropagation(); // Prevent card click\r\n onStatusClick(session.status);\r\n };\r\n\r\n return (\r\n <Card\r\n className=\"p-3 cursor-pointer transition-all hover:shadow-md hover:border-primary/50 h-full flex flex-col\"\r\n onClick={onClick}\r\n >\r\n {/* Topic - smaller font */}\r\n <h3 className=\"text-sm font-medium text-foreground line-clamp-2 mb-2 leading-snug\">\r\n {session.topic}\r\n </h3>\r\n\r\n {/* Session ID - truncate */}\r\n <p className=\"text-xs text-muted-foreground truncate mb-2\">\r\n {session.id}\r\n </p>\r\n\r\n {/* Status and Date */}\r\n <div className=\"flex items-center justify-between text-xs mt-auto pt-2 border-t\">\r\n <Badge\r\n variant={session.status === 'completed' ? 'success' : 'warning'}\r\n className={cn(\r\n \"text-[10px] px-1.5 py-0 cursor-pointer transition-all\",\r\n isStatusFiltered && \"ring-2 ring-primary ring-offset-1\"\r\n )}\r\n onClick={handleStatusClick}\r\n >\r\n {session.status === 'completed' ? (\r\n <><CheckCircle className=\"w-2.5 h-2.5 mr-0.5\" />完成</>\r\n ) : (\r\n <><Clock className=\"w-2.5 h-2.5 mr-0.5\" />进行中</>\r\n )}\r\n </Badge>\r\n <span className=\"text-muted-foreground\">{session.createdAt}</span>\r\n </div>\r\n\r\n {/* Conclusions indicator */}\r\n {session.hasConclusions && (\r\n <div className=\"flex items-center gap-1 text-[10px] text-muted-foreground mt-1\">\r\n <FileText className=\"w-2.5 h-2.5\" />\r\n <span>有结论</span>\r\n </div>\r\n )}\r\n </Card>\r\n );\r\n}\r\n\r\n// ========== Detail Panel Component ==========\r\n\r\ninterface DetailPanelProps {\r\n sessionId: string;\r\n projectPath: string;\r\n}\r\n\r\nfunction DetailPanel({ sessionId, projectPath }: DetailPanelProps) {\r\n const [activeTab, setActiveTab] = useState('discussion');\r\n\r\n const { data: detail, isLoading, error } = useQuery({\r\n queryKey: ['analysis-detail', sessionId, projectPath],\r\n queryFn: () => fetchAnalysisDetail(sessionId, projectPath),\r\n });\r\n\r\n if (isLoading) {\r\n return (\r\n <div className=\"flex items-center justify-center h-full\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-muted-foreground\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className=\"flex items-center justify-center h-full p-4\">\r\n <div className=\"flex items-center gap-2 text-destructive\">\r\n <AlertCircle className=\"w-5 h-5\" />\r\n <span>加载失败: {(error as Error).message}</span>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (!detail) return null;\r\n\r\n // Build available tabs based on content\r\n const tabs = [\r\n { value: 'discussion', label: '讨论记录', icon: <MessageSquare className=\"w-4 h-4\" /> },\r\n { value: 'conclusions', label: '结论', icon: <CheckCircle className=\"w-4 h-4\" /> },\r\n { value: 'explorations', label: '代码探索', icon: <Code className=\"w-4 h-4\" /> },\r\n { value: 'perspectives', label: '视角分析', icon: <FileText className=\"w-4 h-4\" /> },\r\n ].filter(tab => {\r\n const key = tab.value as keyof typeof detail;\r\n return detail[key];\r\n });\r\n\r\n // Ensure activeTab is valid\r\n const validTab = tabs.find(t => t.value === activeTab);\r\n if (!validTab && tabs.length > 0) {\r\n setActiveTab(tabs[0].value);\r\n }\r\n\r\n return (\r\n <div className=\"h-full flex flex-col\">\r\n {/* Session Info (in drawer, header is already shown) */}\r\n <div className=\"px-4 pb-3 border-b shrink-0\">\r\n <div className=\"min-w-0\">\r\n <h2 className=\"font-semibold truncate\">{detail.topic}</h2>\r\n <div className=\"flex items-center gap-2 mt-1\">\r\n <Badge variant={detail.status === 'completed' ? 'default' : 'secondary'} className=\"text-xs\">\r\n {detail.status === 'completed' ? '完成' : '进行中'}\r\n </Badge>\r\n <span className=\"text-xs text-muted-foreground\">{detail.createdAt}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Tabs Content */}\r\n {tabs.length > 0 ? (\r\n <>\r\n <TabsNavigation\r\n value={activeTab}\r\n onValueChange={setActiveTab}\r\n tabs={tabs}\r\n className=\"px-4\"\r\n />\r\n <div className=\"flex-1 overflow-auto min-h-0 p-4\">\r\n {/* Discussion Tab */}\r\n {activeTab === 'discussion' && detail.discussion && (\r\n <MessageRenderer content={detail.discussion} format=\"markdown\" />\r\n )}\r\n\r\n {/* Conclusions Tab */}\r\n {activeTab === 'conclusions' && detail.conclusions && (\r\n <JsonCardView data={detail.conclusions} />\r\n )}\r\n\r\n {/* Explorations Tab */}\r\n {activeTab === 'explorations' && detail.explorations && (\r\n <JsonCardView data={detail.explorations} />\r\n )}\r\n\r\n {/* Perspectives Tab */}\r\n {activeTab === 'perspectives' && detail.perspectives && (\r\n <JsonCardView data={detail.perspectives} />\r\n )}\r\n </div>\r\n </>\r\n ) : (\r\n <div className=\"flex-1 flex items-center justify-center text-muted-foreground\">\r\n 暂无分析内容\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Main Component ==========\r\n\r\ntype DateFilter = 'all' | 'today' | 'week' | 'month';\r\ntype StatusFilter = 'all' | 'in_progress' | 'completed';\r\n\r\nconst DATE_FILTERS: { value: DateFilter; label: string }[] = [\r\n { value: 'all', label: '全部' },\r\n { value: 'today', label: '今天' },\r\n { value: 'week', label: '本周' },\r\n { value: 'month', label: '本月' },\r\n];\r\n\r\nconst STATUS_FILTERS: { value: StatusFilter; label: string; icon: React.ReactNode }[] = [\r\n { value: 'all', label: '全部', icon: <FileSearch className=\"w-4 h-4\" /> },\r\n { value: 'in_progress', label: '进行中', icon: <Clock className=\"w-4 h-4\" /> },\r\n { value: 'completed', label: '已完成', icon: <CheckCircle className=\"w-4 h-4\" /> },\r\n];\r\n\r\nexport function AnalysisPage() {\r\n const projectPath = useWorkflowStore((state) => state.projectPath);\r\n const isImmersiveMode = useAppStore((s) => s.isImmersiveMode);\r\n const toggleImmersiveMode = useAppStore((s) => s.toggleImmersiveMode);\r\n const [searchQuery, setSearchQuery] = useState('');\r\n const [selectedSession, setSelectedSession] = useState<string | null>(null);\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [dateFilter, setDateFilter] = useState<DateFilter>('all');\r\n const [statusFilter, setStatusFilter] = useState<StatusFilter>('all');\r\n const [selectedDate, setSelectedDate] = useState<string | null>(null);\r\n\r\n const { data: sessions = [], isLoading, error } = useQuery({\r\n queryKey: ['analysis-sessions', projectPath],\r\n queryFn: () => fetchAnalysisSessions(projectPath),\r\n });\r\n\r\n // Get unique dates with counts for quick filter bubbles\r\n const uniqueDates = useMemo(() => {\r\n const dateCounts = new Map<string, number>();\r\n sessions.forEach((session) => {\r\n const count = dateCounts.get(session.createdAt) || 0;\r\n dateCounts.set(session.createdAt, count + 1);\r\n });\r\n // Sort by date descending, show top 10\r\n return Array.from(dateCounts.entries())\r\n .sort((a, b) => b[0].localeCompare(a[0]))\r\n .slice(0, 10)\r\n .map(([date, count]) => ({\r\n date,\r\n label: date.slice(5), // MM-DD format\r\n count,\r\n }));\r\n }, [sessions]);\r\n\r\n // Filter by date, status and search query\r\n const filteredSessions = useMemo(() => {\r\n const now = new Date();\r\n const today = now.toISOString().split('T')[0];\r\n const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];\r\n const monthAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];\r\n\r\n let filtered = sessions.filter((session) => {\r\n // Search filter\r\n const matchesSearch = session.topic.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n session.id.toLowerCase().includes(searchQuery.toLowerCase());\r\n\r\n // Status filter\r\n const matchesStatus = statusFilter === 'all' || session.status === statusFilter;\r\n\r\n // Date filter\r\n let matchesDate = true;\r\n if (selectedDate) {\r\n matchesDate = session.createdAt === selectedDate;\r\n } else if (dateFilter === 'today') {\r\n matchesDate = session.createdAt === today;\r\n } else if (dateFilter === 'week') {\r\n matchesDate = session.createdAt >= weekAgo;\r\n } else if (dateFilter === 'month') {\r\n matchesDate = session.createdAt >= monthAgo;\r\n }\r\n\r\n return matchesSearch && matchesStatus && matchesDate;\r\n });\r\n\r\n // Sort by createdAt descending (newest first)\r\n return filtered.sort((a, b) => b.createdAt.localeCompare(a.createdAt));\r\n }, [sessions, searchQuery, dateFilter, statusFilter, selectedDate]);\r\n\r\n // Handle date select\r\n const handleDateSelect = (date: string) => {\r\n if (selectedDate === date) {\r\n setSelectedDate(null);\r\n } else {\r\n setSelectedDate(date);\r\n setDateFilter('all');\r\n }\r\n setCurrentPage(1);\r\n };\r\n\r\n // Handle status filter from card click\r\n const handleStatusClick = (status: string) => {\r\n if (statusFilter === status) {\r\n setStatusFilter('all');\r\n } else {\r\n setStatusFilter(status as StatusFilter);\r\n }\r\n setCurrentPage(1);\r\n };\r\n\r\n // Pagination\r\n const totalPages = Math.ceil(filteredSessions.length / PAGE_SIZE);\r\n const paginatedSessions = useMemo(() => {\r\n const start = (currentPage - 1) * PAGE_SIZE;\r\n return filteredSessions.slice(start, start + PAGE_SIZE);\r\n }, [filteredSessions, currentPage]);\r\n\r\n // Reset to page 1 when filters change\r\n const handleSearchChange = (value: string) => {\r\n setSearchQuery(value);\r\n setCurrentPage(1);\r\n };\r\n\r\n const handleDateFilterChange = (filter: DateFilter) => {\r\n setDateFilter(filter);\r\n setCurrentPage(1);\r\n };\r\n\r\n const handleStatusFilterChange = (filter: StatusFilter) => {\r\n setStatusFilter(filter);\r\n setSelectedDate(null);\r\n setCurrentPage(1);\r\n };\r\n\r\n return (\r\n <div className={cn(\r\n \"h-full flex overflow-hidden\",\r\n isImmersiveMode && \"fixed inset-0 z-50 bg-background\"\r\n )}>\r\n {/* Main Content - List */}\r\n <div className=\"flex-1 flex flex-col p-4 space-y-3 overflow-auto\">\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between shrink-0\">\r\n <div className=\"flex items-center gap-2\">\r\n <FileSearch className=\"w-5 h-5 text-primary\" />\r\n <div>\r\n <h1 className=\"text-xl font-semibold text-foreground\">\r\n Analysis Viewer\r\n </h1>\r\n <p className=\"text-xs text-muted-foreground mt-0.5\">\r\n 查看 /workflow:analyze-with-file 命令的分析结果\r\n </p>\r\n </div>\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-xs text-muted-foreground\">\r\n 共 {filteredSessions.length} 个会话\r\n </span>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-7 w-7 p-0\"\r\n onClick={toggleImmersiveMode}\r\n title={isImmersiveMode ? '退出全屏' : '全屏模式'}\r\n >\r\n {isImmersiveMode ? (\r\n <Minimize2 className=\"w-4 h-4\" />\r\n ) : (\r\n <Maximize2 className=\"w-4 h-4\" />\r\n )}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Filters */}\r\n <div className=\"flex items-center gap-4 shrink-0\">\r\n {/* Search */}\r\n <div className=\"relative flex-1 max-w-md\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\r\n <Input\r\n placeholder=\"搜索分析会话...\"\r\n value={searchQuery}\r\n onChange={(e) => handleSearchChange(e.target.value)}\r\n className=\"pl-9\"\r\n />\r\n </div>\r\n\r\n {/* Status Filter Tabs */}\r\n <div className=\"flex items-center gap-1 bg-muted/50 rounded-lg p-1\">\r\n {STATUS_FILTERS.map((filter) => (\r\n <Button\r\n key={filter.value}\r\n variant={statusFilter === filter.value ? 'default' : 'ghost'}\r\n size=\"sm\"\r\n className=\"h-7 px-3 text-xs gap-1\"\r\n onClick={() => handleStatusFilterChange(filter.value)}\r\n >\r\n {filter.icon}\r\n {filter.label}\r\n </Button>\r\n ))}\r\n </div>\r\n\r\n {/* Date Filter Tabs */}\r\n <div className=\"flex items-center gap-1 bg-muted/50 rounded-lg p-1\">\r\n {DATE_FILTERS.map((filter) => (\r\n <Button\r\n key={filter.value}\r\n variant={dateFilter === filter.value ? 'default' : 'ghost'}\r\n size=\"sm\"\r\n className=\"h-7 px-3 text-xs\"\r\n onClick={() => handleDateFilterChange(filter.value)}\r\n >\r\n {filter.label}\r\n </Button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Date Quick Filter Bubbles */}\r\n <div className=\"flex items-center gap-2 flex-wrap shrink-0\">\r\n {uniqueDates.map((date) => (\r\n <Button\r\n key={date.date}\r\n variant={selectedDate === date.date ? 'default' : 'outline'}\r\n size=\"sm\"\r\n className=\"h-7 px-2 text-xs gap-1\"\r\n onClick={() => handleDateSelect(date.date)}\r\n >\r\n <span>{date.label}</span>\r\n <Badge variant=\"secondary\" className=\"ml-1 px-1.5 py-0 text-[10px]\">\r\n {date.count}\r\n </Badge>\r\n </Button>\r\n ))}\r\n </div>\r\n\r\n {/* Content */}\r\n {isLoading ? (\r\n <div className=\"flex items-center justify-center py-12\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-muted-foreground\" />\r\n </div>\r\n ) : error ? (\r\n <Card className=\"p-6\">\r\n <div className=\"flex items-center gap-2 text-destructive\">\r\n <AlertCircle className=\"w-5 h-5\" />\r\n <span>加载失败: {(error as Error).message}</span>\r\n </div>\r\n </Card>\r\n ) : filteredSessions.length === 0 ? (\r\n <Card className=\"p-12 text-center\">\r\n <FileSearch className=\"w-12 h-12 mx-auto text-muted-foreground mb-4\" />\r\n <p className=\"text-muted-foreground\">\r\n {searchQuery ? '没有匹配的分析会话' : '暂无分析会话'}\r\n </p>\r\n <p className=\"text-sm text-muted-foreground mt-2\">\r\n 使用 /workflow:analyze-with-file 命令创建分析\r\n </p>\r\n </Card>\r\n ) : (\r\n <>\r\n {/* Grid - flex-1 to fill remaining space */}\r\n <div className=\"flex-1 grid grid-cols-4 gap-3 content-start\">\r\n {paginatedSessions.map((session) => (\r\n <SessionCard\r\n key={session.id}\r\n session={session}\r\n onClick={() => setSelectedSession(session.id)}\r\n onStatusClick={handleStatusClick}\r\n isStatusFiltered={statusFilter !== 'all'}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Pagination */}\r\n {totalPages > 1 && (\r\n <div className=\"flex items-center justify-center gap-2 pt-4\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n disabled={currentPage === 1}\r\n onClick={() => setCurrentPage(p => p - 1)}\r\n >\r\n <ChevronLeft className=\"w-4 h-4\" />\r\n </Button>\r\n <span className=\"text-sm text-muted-foreground px-3\">\r\n {currentPage} / {totalPages}\r\n </span>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n disabled={currentPage === totalPages}\r\n onClick={() => setCurrentPage(p => p + 1)}\r\n >\r\n <ChevronRight className=\"w-4 h-4\" />\r\n </Button>\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n\r\n {/* Detail Drawer */}\r\n <Drawer open={!!selectedSession} onOpenChange={(open) => !open && setSelectedSession(null)}>\r\n <DrawerContent side=\"right\" className=\"w-1/2 h-full max-w-none\">\r\n <DrawerHeader className=\"shrink-0\">\r\n <DrawerTitle>分析详情</DrawerTitle>\r\n <DrawerClose asChild>\r\n <Button variant=\"ghost\" size=\"sm\" className=\"absolute right-4 top-4\">\r\n <X className=\"w-4 h-4\" />\r\n </Button>\r\n </DrawerClose>\r\n </DrawerHeader>\r\n {selectedSession && (\r\n <DetailPanel\r\n sessionId={selectedSession}\r\n projectPath={projectPath}\r\n />\r\n )}\r\n </DrawerContent>\r\n </Drawer>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AnalysisPage;\r\n"],"names":["isObject","value","isArray","formatLabel","key","str","PrimitiveValue","jsx","Badge","ArrayView","items","displayName","expanded","setExpanded","useState","jsxs","Database","item","index","ChevronDown","ChevronRight","Card","ObjectView","data","depth","entries","CardItem","label","formattedLabel","cn","JsonCardView","className","PAGE_SIZE","SessionCard","session","onClick","onStatusClick","isStatusFiltered","handleStatusClick","e","Fragment","CheckCircle","Clock","FileText","DetailPanel","sessionId","projectPath","activeTab","setActiveTab","detail","isLoading","error","useQuery","fetchAnalysisDetail","Loader2","AlertCircle","tabs","MessageSquare","Code","tab","t","TabsNavigation","MessageRenderer","DATE_FILTERS","STATUS_FILTERS","FileSearch","AnalysisPage","useWorkflowStore","state","isImmersiveMode","useAppStore","toggleImmersiveMode","searchQuery","setSearchQuery","selectedSession","setSelectedSession","currentPage","setCurrentPage","dateFilter","setDateFilter","statusFilter","setStatusFilter","selectedDate","setSelectedDate","sessions","fetchAnalysisSessions","uniqueDates","useMemo","dateCounts","count","a","b","date","filteredSessions","now","today","weekAgo","monthAgo","matchesSearch","matchesStatus","matchesDate","handleDateSelect","status","totalPages","paginatedSessions","start","handleSearchChange","handleDateFilterChange","filter","handleStatusFilterChange","Button","Minimize2","Maximize2","Search","Input","p","ChevronLeft","Drawer","open","DrawerContent","DrawerHeader","DrawerTitle","DrawerClose","X"],"mappings":"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"}
|