claude-code-workflow 7.2.27 → 7.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ccw/specs/architecture-constraints.md +5 -0
- package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
- package/.claude/skills/investigate/SKILL.md +110 -0
- package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
- package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
- package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
- package/.claude/skills/investigate/phases/04-implementation.md +139 -0
- package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
- package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
- package/.claude/skills/investigate/specs/iron-law.md +101 -0
- package/.claude/skills/security-audit/SKILL.md +125 -0
- package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
- package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
- package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
- package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
- package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
- package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
- package/.claude/skills/ship/SKILL.md +105 -0
- package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
- package/.claude/skills/ship/phases/02-code-review.md +137 -0
- package/.claude/skills/ship/phases/03-version-bump.md +171 -0
- package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
- package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
- package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
- package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
- package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
- package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
- package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.claude/skills/team-motion-design/SKILL.md +129 -0
- package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
- package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
- package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
- package/.claude/skills/team-ui-polish/SKILL.md +127 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
- package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
- package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
- package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
- package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.claude/skills/team-uidesign/SKILL.md +6 -1
- package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
- package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
- package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
- package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
- package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
- package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
- package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
- package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
- package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
- package/.claude/skills/team-ux-improve/SKILL.md +3 -0
- package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
- package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
- package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
- package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
- package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
- package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
- package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
- package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
- package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
- package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
- package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
- package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
- package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/.codex/skills/investigate/agents/investigator.md +392 -0
- package/.codex/skills/investigate/orchestrator.md +362 -0
- package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
- package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
- package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
- package/.codex/skills/investigate/phases/04-implementation.md +195 -0
- package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
- package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
- package/.codex/skills/security-audit/orchestrator.md +384 -0
- package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
- package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
- package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
- package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
- package/.codex/skills/ship/agents/ship-operator.md +318 -0
- package/.codex/skills/ship/orchestrator.md +426 -0
- package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
- package/.codex/skills/ship/phases/02-code-review.md +228 -0
- package/.codex/skills/ship/phases/03-version-bump.md +259 -0
- package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
- package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
- package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
- package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
- package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.codex/skills/team-motion-design/SKILL.md +222 -0
- package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
- package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
- package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
- package/.codex/skills/team-ui-polish/SKILL.md +218 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
- package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
- package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
- package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
- package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/README.md +8 -0
- package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
- package/ccw/dist/core/hooks/hook-templates.js +114 -1
- package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +34 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +2 -2
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +105 -105
- package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IssueHubPage-C_QMpQSR.js","sources":["../../../../node_modules/lucide-react/dist/esm/icons/git-merge.js","../../../../node_modules/lucide-react/dist/esm/icons/github.js","../../../../node_modules/lucide-react/dist/esm/icons/list-todo.js","../../../../node_modules/lucide-react/dist/esm/icons/merge.js","../../../../node_modules/lucide-react/dist/esm/icons/radar.js","../../src/hooks/useCliSessionCore.ts","../../../../node_modules/@babel/runtime/helpers/esm/extends.js","../../src/components/issue/hub/IssueHubHeader.tsx","../../src/components/issue/hub/IssueHubTabs.tsx","../../src/components/shared/IssueCard.tsx","../../src/components/issue/hub/IssueDrawer.tsx","../../../../node_modules/redux/dist/redux.mjs","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js","../../../../node_modules/use-sync-external-store/with-selector.js","../../../../node_modules/react-redux/dist/react-redux.mjs","../../../../node_modules/css-box-model/dist/css-box-model.esm.js","../../../../node_modules/raf-schd/dist/raf-schd.esm.js","../../../../node_modules/@hello-pangea/dnd/dist/dnd.esm.js","../../src/components/shared/KanbanBoard.tsx","../../src/components/issue/hub/IssuesPanel.tsx","../../src/components/issue/queue/ExecutionGroup.tsx","../../src/components/issue/queue/QueueActions.tsx","../../src/components/issue/queue/QueueCard.tsx","../../src/components/issue/queue/QueueBoard.tsx","../../src/components/shared/CliExecutionSettings.tsx","../../src/lib/queue-prompt.ts","../../src/components/issue/queue/QueueItemExecutor.tsx","../../src/components/issue/queue/SolutionDrawer.tsx","../../src/components/issue/hub/QueuePanel.tsx","../../src/components/issue/discovery/DiscoveryCard.tsx","../../src/components/issue/discovery/FindingDrawer.tsx","../../src/components/issue/discovery/FindingList.tsx","../../src/components/issue/discovery/DiscoveryDetail.tsx","../../src/components/issue/hub/DiscoveryPanel.tsx","../../src/pages/IssueHubPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst GitMerge = createLucideIcon(\"GitMerge\", [\n [\"circle\", { cx: \"18\", cy: \"18\", r: \"3\", key: \"1xkwt0\" }],\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"3\", key: \"1lh9wr\" }],\n [\"path\", { d: \"M6 21V9a9 9 0 0 0 9 9\", key: \"7kw0sc\" }]\n]);\n\nexport { GitMerge as default };\n//# sourceMappingURL=git-merge.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Github = createLucideIcon(\"Github\", [\n [\n \"path\",\n {\n d: \"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\",\n key: \"tonef\"\n }\n ],\n [\"path\", { d: \"M9 18c-4.51 2-5-2-7-2\", key: \"9comsn\" }]\n]);\n\nexport { Github as default };\n//# sourceMappingURL=github.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ListTodo = createLucideIcon(\"ListTodo\", [\n [\"rect\", { x: \"3\", y: \"5\", width: \"6\", height: \"6\", rx: \"1\", key: \"1defrl\" }],\n [\"path\", { d: \"m3 17 2 2 4-4\", key: \"1jhpwq\" }],\n [\"path\", { d: \"M13 6h8\", key: \"15sg57\" }],\n [\"path\", { d: \"M13 12h8\", key: \"h98zly\" }],\n [\"path\", { d: \"M13 18h8\", key: \"oe0vm4\" }]\n]);\n\nexport { ListTodo as default };\n//# sourceMappingURL=list-todo.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Merge = createLucideIcon(\"Merge\", [\n [\"path\", { d: \"m8 6 4-4 4 4\", key: \"ybng9g\" }],\n [\"path\", { d: \"M12 2v10.3a4 4 0 0 1-1.172 2.872L4 22\", key: \"1hyw0i\" }],\n [\"path\", { d: \"m20 22-5-5\", key: \"1m27yz\" }]\n]);\n\nexport { Merge as default };\n//# sourceMappingURL=merge.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Radar = createLucideIcon(\"Radar\", [\n [\"path\", { d: \"M19.07 4.93A10 10 0 0 0 6.99 3.34\", key: \"z3du51\" }],\n [\"path\", { d: \"M4 6h.01\", key: \"oypzma\" }],\n [\"path\", { d: \"M2.29 9.62A10 10 0 1 0 21.31 8.35\", key: \"qzzz0\" }],\n [\"path\", { d: \"M16.24 7.76A6 6 0 1 0 8.23 16.67\", key: \"1yjesh\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }],\n [\"path\", { d: \"M17.99 11.66A6 6 0 0 1 15.77 16.67\", key: \"1u2y91\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"2\", key: \"1c9p78\" }],\n [\"path\", { d: \"m13.41 10.59 5.66-5.66\", key: \"mhq4k0\" }]\n]);\n\nexport { Radar as default };\n//# sourceMappingURL=radar.js.map\n","// ========================================\n// useCliSessionCore Hook\n// ========================================\n// Shared CLI session lifecycle management extracted from\n// QueueExecuteInSession, QueueSendToOrchestrator, and IssueTerminalTab.\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n createCliSession,\n fetchCliSessions,\n type CliSession,\n} from '@/lib/api';\nimport { useCliSessionStore } from '@/stores/cliSessionStore';\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface UseCliSessionCoreOptions {\n /** When true, auto-select the most recent session on load. Defaults to true. */\n autoSelectLast?: boolean;\n /** Default resumeKey used when creating sessions via ensureSession/handleCreateSession. */\n resumeKey?: string;\n /** Shell to use when creating new sessions. Defaults to 'bash'. */\n preferredShell?: 'bash' | 'pwsh';\n /** Additional createCliSession fields (cols, rows, tool, model). */\n createSessionDefaults?: {\n cols?: number;\n rows?: number;\n tool?: string;\n model?: string;\n };\n}\n\nexport interface UseCliSessionCoreReturn {\n /** Sorted list of CLI sessions (oldest first). */\n sessions: CliSession[];\n /** Currently selected session key. */\n selectedSessionKey: string;\n /** Setter for selected session key. */\n setSelectedSessionKey: (key: string) => void;\n /** Refresh sessions from the backend. */\n refreshSessions: () => Promise<void>;\n /** Return the current session key, creating one if none is selected. */\n ensureSession: () => Promise<string>;\n /** Explicitly create a new session and select it. */\n handleCreateSession: () => Promise<void>;\n /** True while sessions are being fetched. */\n isLoading: boolean;\n /** Last error message, or null. */\n error: string | null;\n /** Clear the current error. */\n clearError: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\nexport function useCliSessionCore(options: UseCliSessionCoreOptions = {}): UseCliSessionCoreReturn {\n const {\n autoSelectLast = true,\n resumeKey,\n preferredShell = 'bash',\n createSessionDefaults,\n } = options;\n\n const projectPath = useWorkflowStore(selectProjectPath);\n\n // Store selectors\n const sessionsByKey = useCliSessionStore((s) => s.sessions);\n const setSessions = useCliSessionStore((s) => s.setSessions);\n const upsertSession = useCliSessionStore((s) => s.upsertSession);\n\n // Derived sorted list (oldest first)\n const sessions = useMemo(\n () =>\n Object.values(sessionsByKey).sort((a, b) =>\n a.createdAt.localeCompare(b.createdAt)\n ),\n [sessionsByKey]\n );\n\n // Local state\n const [selectedSessionKey, setSelectedSessionKey] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const clearError = useCallback(() => setError(null), []);\n\n // ------- refreshSessions -------\n const refreshSessions = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const r = await fetchCliSessions(projectPath || undefined);\n setSessions(r.sessions);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n } finally {\n setIsLoading(false);\n }\n }, [projectPath, setSessions]);\n\n // Fetch on mount / when projectPath changes\n useEffect(() => {\n void refreshSessions();\n }, [refreshSessions]);\n\n // Auto-select the last (most recent) session\n useEffect(() => {\n if (!autoSelectLast) return;\n if (selectedSessionKey) return;\n if (sessions.length === 0) return;\n setSelectedSessionKey(sessions[sessions.length - 1]?.sessionKey ?? '');\n }, [sessions, selectedSessionKey, autoSelectLast]);\n\n // ------- ensureSession -------\n const ensureSession = useCallback(async (): Promise<string> => {\n if (selectedSessionKey) return selectedSessionKey;\n if (!projectPath) throw new Error('No project path selected');\n const created = await createCliSession(\n {\n workingDir: projectPath,\n preferredShell,\n resumeKey,\n ...createSessionDefaults,\n },\n projectPath\n );\n upsertSession(created.session);\n setSelectedSessionKey(created.session.sessionKey);\n return created.session.sessionKey;\n }, [selectedSessionKey, projectPath, resumeKey, preferredShell, createSessionDefaults, upsertSession]);\n\n // ------- handleCreateSession -------\n const handleCreateSession = useCallback(async () => {\n setError(null);\n try {\n if (!projectPath) throw new Error('No project path selected');\n const created = await createCliSession(\n {\n workingDir: projectPath,\n preferredShell,\n resumeKey,\n ...createSessionDefaults,\n },\n projectPath\n );\n upsertSession(created.session);\n setSelectedSessionKey(created.session.sessionKey);\n // Refresh full list so store stays consistent\n const r = await fetchCliSessions(projectPath || undefined);\n setSessions(r.sessions);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n }\n }, [projectPath, resumeKey, preferredShell, createSessionDefaults, upsertSession, setSessions]);\n\n return {\n sessions,\n selectedSessionKey,\n setSelectedSessionKey,\n refreshSessions,\n ensureSession,\n handleCreateSession,\n isLoading,\n error,\n clearError,\n };\n}\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","// ========================================\n// Issue Hub Header\n// ========================================\n// Dynamic header component for IssueHub\n\nimport { useIntl } from 'react-intl';\nimport { AlertCircle, Radar, ListTodo, LayoutGrid } from 'lucide-react';\nimport type { IssueTab } from './IssueHubTabs';\n\ninterface IssueHubHeaderProps {\n currentTab: IssueTab;\n}\n\nexport function IssueHubHeader({ currentTab }: IssueHubHeaderProps) {\n const { formatMessage } = useIntl();\n\n // Tab configuration with icons and labels\n const tabConfig = {\n issues: {\n icon: <AlertCircle className=\"w-6 h-6 text-primary\" />,\n title: formatMessage({ id: 'issues.title' }),\n description: formatMessage({ id: 'issues.description' }),\n },\n board: {\n icon: <LayoutGrid className=\"w-6 h-6 text-primary\" />,\n title: formatMessage({ id: 'issues.board.pageTitle' }),\n description: formatMessage({ id: 'issues.board.description' }),\n },\n queue: {\n icon: <ListTodo className=\"w-6 h-6 text-primary\" />,\n title: formatMessage({ id: 'issues.queue.pageTitle' }),\n description: formatMessage({ id: 'issues.queue.description' }),\n },\n discovery: {\n icon: <Radar className=\"w-6 h-6 text-primary\" />,\n title: formatMessage({ id: 'issues.discovery.pageTitle' }),\n description: formatMessage({ id: 'issues.discovery.description' }),\n },\n };\n\n const config = tabConfig[currentTab] || tabConfig.issues;\n\n return (\n <div className=\"flex items-center gap-2\">\n {config.icon}\n <div>\n <h1 className=\"text-2xl font-bold text-foreground\">\n {config.title}\n </h1>\n <p className=\"text-muted-foreground text-sm mt-1\">\n {config.description}\n </p>\n </div>\n </div>\n );\n}\n","// ========================================\n// Issue Hub Tabs\n// ========================================\n// Tab navigation for IssueHub\n\nimport { useIntl } from 'react-intl';\nimport { Button } from '@/components/ui/Button';\nimport { cn } from '@/lib/utils';\n\n// Keep in sync with IssueHubHeader/IssueHubPage\nexport type IssueTab = 'issues' | 'queue' | 'discovery';\n\ninterface IssueHubTabsProps {\n currentTab: IssueTab;\n onTabChange: (tab: IssueTab) => void;\n}\n\nexport function IssueHubTabs({ currentTab, onTabChange }: IssueHubTabsProps) {\n const { formatMessage } = useIntl();\n\n const tabs: Array<{ value: IssueTab; label: string }> = [\n { value: 'issues', label: formatMessage({ id: 'issues.hub.tabs.issues' }) },\n { value: 'queue', label: formatMessage({ id: 'issues.hub.tabs.queue' }) },\n { value: 'discovery', label: formatMessage({ id: 'issues.hub.tabs.discovery' }) },\n ];\n\n return (\n <div className=\"flex gap-2 border-b border-border\">\n {tabs.map((tab) => (\n <Button\n key={tab.value}\n variant=\"ghost\"\n className={cn(\n \"border-b-2 rounded-none h-11 px-4\",\n currentTab === tab.value\n ? \"border-primary text-primary\"\n : \"border-transparent text-muted-foreground hover:text-foreground\"\n )}\n onClick={() => onTabChange(tab.value)}\n >\n {tab.label}\n </Button>\n ))}\n </div>\n );\n}\n","// ========================================\r\n// IssueCard Component\r\n// ========================================\r\n// Card component for displaying issues with actions\r\n\r\nimport { useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n AlertCircle,\r\n AlertTriangle,\r\n Info,\r\n MoreVertical,\r\n Edit,\r\n Trash2,\r\n ExternalLink,\r\n CheckCircle,\r\n Clock,\r\n XCircle,\r\n Loader2,\r\n} from 'lucide-react';\r\nimport { cn } from '@/lib/utils';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@/components/ui/Dropdown';\r\nimport type { DraggableProvidedDragHandleProps, DraggableProvidedDraggableProps } from '@hello-pangea/dnd';\r\nimport type { Issue } from '@/lib/api';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface IssueCardProps {\r\n issue: Issue;\r\n onEdit?: (issue: Issue) => void;\r\n onDelete?: (issue: Issue) => void;\r\n onClick?: (issue: Issue) => void;\r\n onStatusChange?: (issue: Issue, status: Issue['status']) => void;\r\n className?: string;\r\n compact?: boolean;\r\n showActions?: boolean;\r\n draggableProps?: DraggableProvidedDraggableProps;\r\n dragHandleProps?: DraggableProvidedDragHandleProps | null;\r\n innerRef?: React.Ref<HTMLDivElement>;\r\n}\r\n\r\n// ========== Priority Helpers ==========\r\n\r\n// Priority icon and color configuration (without labels for i18n)\r\nconst priorityVariantConfig: Record<Issue['priority'], { icon: React.ElementType; color: string }> = {\r\n critical: { icon: AlertCircle, color: 'destructive' },\r\n high: { icon: AlertTriangle, color: 'warning' },\r\n medium: { icon: Info, color: 'info' },\r\n low: { icon: Info, color: 'secondary' },\r\n};\r\n\r\n// Priority label keys for i18n\r\nconst priorityLabelKeys: Record<Issue['priority'], string> = {\r\n critical: 'issues.priority.critical',\r\n high: 'issues.priority.high',\r\n medium: 'issues.priority.medium',\r\n low: 'issues.priority.low',\r\n};\r\n\r\n// Status icon and color configuration (without labels for i18n)\r\nconst statusVariantConfig: Record<Issue['status'], { icon: React.ElementType; color: string }> = {\r\n registered: { icon: AlertCircle, color: 'info' },\r\n planning: { icon: Clock, color: 'warning' },\r\n planned: { icon: Clock, color: 'warning' },\r\n queued: { icon: Clock, color: 'warning' },\r\n executing: { icon: Loader2, color: 'warning' },\r\n completed: { icon: CheckCircle, color: 'success' },\r\n failed: { icon: XCircle, color: 'destructive' },\r\n paused: { icon: Clock, color: 'muted' },\r\n};\r\n\r\n// Status label keys for i18n\r\nconst statusLabelKeys: Record<Issue['status'], string> = {\r\n registered: 'issues.status.registered',\r\n planning: 'issues.status.planning',\r\n planned: 'issues.status.planned',\r\n queued: 'issues.status.queued',\r\n executing: 'issues.status.executing',\r\n completed: 'issues.status.completed',\r\n failed: 'issues.status.failed',\r\n paused: 'issues.status.paused',\r\n};\r\n\r\n// ========== Priority Badge ==========\r\n\r\nexport function PriorityBadge({ priority }: { priority: Issue['priority'] }) {\r\n const { formatMessage } = useIntl();\r\n const config = priorityVariantConfig[priority];\r\n\r\n // Defensive check: handle unknown priority values\r\n if (!config) {\r\n return (\r\n <Badge variant=\"secondary\" className=\"gap-1\">\r\n {priority}\r\n </Badge>\r\n );\r\n }\r\n\r\n const Icon = config.icon;\r\n const label = priorityLabelKeys[priority]\r\n ? formatMessage({ id: priorityLabelKeys[priority] })\r\n : priority;\r\n\r\n return (\r\n <Badge variant={config.color as 'default' | 'secondary' | 'destructive' | 'outline'} className=\"gap-1\">\r\n <Icon className=\"w-3 h-3\" />\r\n {label}\r\n </Badge>\r\n );\r\n}\r\n\r\n// ========== Status Badge ==========\r\n\r\nexport function StatusBadge({ status }: { status: Issue['status'] }) {\r\n const { formatMessage } = useIntl();\r\n const config = statusVariantConfig[status];\r\n\r\n // Defensive check: handle unknown status values\r\n if (!config) {\r\n return (\r\n <Badge variant=\"outline\" className=\"gap-1\">\r\n {status}\r\n </Badge>\r\n );\r\n }\r\n\r\n const Icon = config.icon;\r\n const label = statusLabelKeys[status]\r\n ? formatMessage({ id: statusLabelKeys[status] })\r\n : status;\r\n\r\n return (\r\n <Badge variant=\"outline\" className=\"gap-1\">\r\n <Icon className=\"w-3 h-3\" />\r\n {label}\r\n </Badge>\r\n );\r\n}\r\n\r\n// ========== Main IssueCard Component ==========\r\n\r\nexport function IssueCard({\r\n issue,\r\n onEdit,\r\n onDelete,\r\n onClick,\r\n onStatusChange,\r\n className,\r\n compact = false,\r\n showActions = true,\r\n draggableProps,\r\n dragHandleProps,\r\n innerRef,\r\n}: IssueCardProps) {\r\n const { formatMessage } = useIntl();\r\n const [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\r\n const handleClick = () => {\r\n if (!isMenuOpen) {\r\n onClick?.(issue);\r\n }\r\n };\r\n\r\n const handleEdit = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n setIsMenuOpen(false);\r\n onEdit?.(issue);\r\n };\r\n\r\n const handleDelete = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n setIsMenuOpen(false);\r\n onDelete?.(issue);\r\n };\r\n\r\n if (compact) {\r\n return (\r\n <div\r\n ref={innerRef}\r\n {...draggableProps}\r\n {...dragHandleProps}\r\n onClick={handleClick}\r\n className={cn(\r\n 'p-3 bg-card border border-border rounded-lg cursor-pointer',\r\n 'hover:shadow-md hover:border-primary/50 transition-all hover-glow',\r\n className\r\n )}\r\n >\r\n <div className=\"flex items-start justify-between gap-2\">\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium text-foreground truncate\">{issue.title}</p>\r\n <p className=\"text-xs text-muted-foreground mt-0.5\">#{issue.id}</p>\r\n </div>\r\n <PriorityBadge priority={issue.priority} />\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <Card\r\n ref={innerRef}\r\n {...draggableProps}\r\n onClick={handleClick}\r\n className={cn(\r\n 'p-4 cursor-pointer hover:shadow-md hover:border-primary/50 transition-all hover-glow',\r\n className\r\n )}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-start justify-between gap-2\">\r\n <div className=\"flex-1 min-w-0\" {...dragHandleProps}>\r\n <h3 className=\"text-sm font-medium text-foreground line-clamp-2\">\r\n {issue.title}\r\n </h3>\r\n <p className=\"text-xs text-muted-foreground mt-1\">#{issue.id}</p>\r\n </div>\r\n {showActions && (\r\n <DropdownMenu open={isMenuOpen} onOpenChange={setIsMenuOpen}>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-8 w-8 p-0\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <MoreVertical className=\"w-4 h-4\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\">\r\n <DropdownMenuItem onClick={handleEdit}>\r\n <Edit className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.actions.edit' })}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onStatusChange?.(issue, 'executing')}>\r\n <Clock className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.actions.startProgress' })}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onStatusChange?.(issue, 'completed')}>\r\n <CheckCircle className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.actions.markResolved' })}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={handleDelete} className=\"text-destructive\">\r\n <Trash2 className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.actions.delete' })}\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n )}\r\n </div>\r\n\r\n {/* Context Preview */}\r\n {issue.context && (\r\n <p className=\"text-sm text-muted-foreground mt-2 line-clamp-2\">\r\n {issue.context}\r\n </p>\r\n )}\r\n\r\n {/* Labels */}\r\n {issue.labels && issue.labels.length > 0 && (\r\n <div className=\"flex flex-wrap gap-1 mt-2\">\r\n {issue.labels.slice(0, 3).map((label) => (\r\n <Badge key={label} variant=\"outline\" className=\"text-xs\">\r\n {label}\r\n </Badge>\r\n ))}\r\n {issue.labels.length > 3 && (\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n +{issue.labels.length - 3}\r\n </Badge>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Footer */}\r\n <div className=\"flex items-center justify-between mt-3 pt-3 border-t border-border\">\r\n <PriorityBadge priority={issue.priority} />\r\n <StatusBadge status={issue.status} />\r\n </div>\r\n\r\n {/* Solutions Count */}\r\n {issue.solutions && issue.solutions.length > 0 && (\r\n <div className=\"flex items-center gap-1 mt-2 text-xs text-muted-foreground\">\r\n <ExternalLink className=\"w-3 h-3\" />\r\n {issue.solutions.length} {formatMessage(\r\n { id: 'issues.card.solutions' },\r\n { count: issue.solutions.length }\r\n )}\r\n </div>\r\n )}\r\n </Card>\r\n );\r\n}\r\n\r\nexport default IssueCard;\r\n","// ========================================\r\n// IssueDrawer Component\r\n// ========================================\r\n// Right-side issue detail drawer with Overview/Solutions/History tabs\r\n\r\nimport { useEffect, useState, useCallback } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { X, FileText, CheckCircle, Circle, Loader2, Tag, History, Hash, Terminal, Play } from 'lucide-react';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\r\nimport { cn } from '@/lib/utils';\r\nimport type { Issue } from '@/lib/api';\r\nimport { createCliSession } from '@/lib/api';\r\nimport { useOpenTerminalPanel } from '@/stores/terminalPanelStore';\r\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\r\n\r\n// ========== Types ==========\r\nexport interface IssueDrawerProps {\r\n issue: Issue | null;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n initialTab?: TabValue;\r\n}\r\n\r\ntype TabValue = 'overview' | 'solutions' | 'history' | 'terminal' | 'json';\r\n\r\n// ========== Status Configuration ==========\r\nconst statusConfig: Record<string, { label: string; variant: 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'info'; icon: React.ComponentType<{ className?: string }> }> = {\r\n open: { label: 'issues.status.open', variant: 'info', icon: Circle },\r\n in_progress: { label: 'issues.status.inProgress', variant: 'warning', icon: Loader2 },\r\n resolved: { label: 'issues.status.resolved', variant: 'success', icon: CheckCircle },\r\n closed: { label: 'issues.status.closed', variant: 'secondary', icon: Circle },\r\n completed: { label: 'issues.status.completed', variant: 'success', icon: CheckCircle },\r\n};\r\n\r\nconst priorityConfig: Record<string, { label: string; variant: 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'info' }> = {\r\n low: { label: 'issues.priority.low', variant: 'secondary' },\r\n medium: { label: 'issues.priority.medium', variant: 'default' },\r\n high: { label: 'issues.priority.high', variant: 'warning' },\r\n critical: { label: 'issues.priority.critical', variant: 'destructive' },\r\n};\r\n\r\n// ========== Component ==========\r\n\r\nexport function IssueDrawer({ issue, isOpen, onClose, initialTab = 'overview' }: IssueDrawerProps) {\r\n const { formatMessage } = useIntl();\r\n const openTerminal = useOpenTerminalPanel();\r\n const projectPath = useWorkflowStore(selectProjectPath);\r\n const [activeTab, setActiveTab] = useState<TabValue>(initialTab);\r\n\r\n // Execution binding state\r\n const CLI_TOOLS = ['claude', 'gemini', 'qwen', 'codex', 'opencode'] as const;\r\n const [selectedTool, setSelectedTool] = useState<string>('claude');\r\n const [selectedMode, setSelectedMode] = useState<'analysis' | 'write'>('analysis');\r\n const [isLaunching, setIsLaunching] = useState(false);\r\n\r\n // Reset to initial tab when opening/switching issues\r\n useEffect(() => {\r\n if (!isOpen || !issue) return;\r\n setActiveTab(initialTab);\r\n }, [initialTab, isOpen, issue?.id]);\r\n\r\n // ESC key to close\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n const handleEsc = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') onClose();\r\n };\r\n window.addEventListener('keydown', handleEsc);\r\n return () => window.removeEventListener('keydown', handleEsc);\r\n }, [isOpen, onClose]);\r\n\r\n const handleLaunchSession = useCallback(async () => {\r\n if (!projectPath || !issue || isLaunching) return;\r\n setIsLaunching(true);\r\n try {\r\n const created = await createCliSession(\r\n { workingDir: projectPath, tool: selectedTool },\r\n projectPath\r\n );\r\n openTerminal(created.session.sessionKey);\r\n onClose();\r\n } catch (err) {\r\n console.error('[IssueDrawer] createCliSession failed:', err);\r\n } finally {\r\n setIsLaunching(false);\r\n }\r\n }, [projectPath, issue, isLaunching, selectedTool, openTerminal, onClose]);\r\n\r\n if (!issue || !isOpen) {\r\n return null;\r\n }\r\n\r\n const status = statusConfig[issue.status] || statusConfig.open;\r\n const priority = priorityConfig[issue.priority] || priorityConfig.medium;\r\n\r\n return (\r\n <>\r\n {/* Overlay */}\r\n <div\r\n className={cn(\r\n 'fixed inset-0 bg-black/40 transition-opacity z-40',\r\n isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'\r\n )}\r\n onClick={onClose}\r\n aria-hidden=\"true\"\r\n />\r\n\r\n {/* Drawer */}\r\n <div\r\n className={cn(\r\n 'fixed top-0 right-0 h-full w-1/2 bg-background border-l border-border shadow-2xl z-50 flex flex-col transition-transform duration-300 ease-in-out',\r\n isOpen ? 'translate-x-0' : 'translate-x-full'\r\n )}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n style={{ minWidth: '400px', maxWidth: '800px' }}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-start justify-between p-6 border-b border-border bg-card\">\r\n <div className=\"flex-1 min-w-0 mr-4\">\r\n <div className=\"flex items-center gap-2 mb-2 flex-wrap\">\r\n <span className=\"text-xs font-mono text-muted-foreground\">{issue.id}</span>\r\n <Badge variant={status.variant} className=\"gap-1\">\r\n <status.icon className=\"h-3 w-3\" />\r\n {formatMessage({ id: status.label })}\r\n </Badge>\r\n <Badge variant={priority.variant}>\r\n {formatMessage({ id: priority.label })}\r\n </Badge>\r\n </div>\r\n <h2 className=\"text-lg font-semibold text-foreground\">\r\n {issue.title}\r\n </h2>\r\n </div>\r\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose} className=\"flex-shrink-0 hover:bg-secondary\">\r\n <X className=\"h-5 w-5\" />\r\n </Button>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div className=\"px-6 pt-4 bg-card\">\r\n <Tabs value={activeTab} onValueChange={(v) => setActiveTab(v as TabValue)} className=\"w-full\">\r\n <TabsList className=\"w-full\">\r\n <TabsTrigger value=\"overview\" className=\"flex-1\">\r\n <FileText className=\"h-4 w-4 mr-2\" />\r\n {formatMessage({ id: 'issues.detail.tabs.overview' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"solutions\" className=\"flex-1\">\r\n <CheckCircle className=\"h-4 w-4 mr-2\" />\r\n {formatMessage({ id: 'issues.detail.tabs.solutions' })}\r\n {issue.solutions && issue.solutions.length > 0 && (\r\n <Badge variant=\"secondary\" className=\"ml-1\">\r\n {issue.solutions.length}\r\n </Badge>\r\n )}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"history\" className=\"flex-1\">\r\n <History className=\"h-4 w-4 mr-2\" />\r\n {formatMessage({ id: 'issues.detail.tabs.history' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"terminal\" className=\"flex-1\">\r\n <Terminal className=\"h-4 w-4 mr-2\" />\r\n {formatMessage({ id: 'issues.detail.tabs.terminal' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"json\" className=\"flex-1\">\r\n <Hash className=\"h-4 w-4 mr-2\" />\r\n JSON\r\n </TabsTrigger>\r\n </TabsList>\r\n\r\n {/* Tab Content */}\r\n <div className=\"overflow-y-auto pr-2\" style={{ height: 'calc(100vh - 200px)' }}>\r\n {/* Overview Tab */}\r\n <TabsContent value=\"overview\" className=\"mt-4 pb-6 focus-visible:outline-none\">\r\n <div className=\"space-y-6\">\r\n {/* Context */}\r\n {issue.context && (\r\n <div>\r\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\r\n {formatMessage({ id: 'issues.detail.overview.context' })}\r\n </h3>\r\n <p className=\"text-sm text-muted-foreground whitespace-pre-wrap\">\r\n {issue.context}\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* Labels */}\r\n {issue.labels && issue.labels.length > 0 && (\r\n <div>\r\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\r\n {formatMessage({ id: 'issues.detail.overview.labels' })}\r\n </h3>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {issue.labels.map((label, index) => (\r\n <Badge key={index} variant=\"outline\" className=\"gap-1\">\r\n <Tag className=\"h-3 w-3\" />\r\n {label}\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Meta Info */}\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n <div className=\"p-3 bg-muted/50 rounded-md\">\r\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.detail.overview.createdAt' })}</p>\r\n <p className=\"text-sm\">{new Date(issue.createdAt).toLocaleString()}</p>\r\n </div>\r\n {issue.updatedAt && (\r\n <div className=\"p-3 bg-muted/50 rounded-md\">\r\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.detail.overview.updatedAt' })}</p>\r\n <p className=\"text-sm\">{new Date(issue.updatedAt).toLocaleString()}</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </TabsContent>\r\n\r\n {/* Solutions Tab */}\r\n <TabsContent value=\"solutions\" className=\"mt-4 pb-6 focus-visible:outline-none\">\r\n {!issue.solutions || issue.solutions.length === 0 ? (\r\n <div className=\"text-center py-12 text-muted-foreground\">\r\n <CheckCircle className=\"h-12 w-12 mx-auto mb-4 opacity-50\" />\r\n <p className=\"text-sm\">{formatMessage({ id: 'issues.detail.solutions.empty' })}</p>\r\n </div>\r\n ) : (\r\n <div className=\"space-y-4\">\r\n {issue.solutions.map((solution, index) => (\r\n <div key={solution.id || index} className=\"p-4 bg-muted/50 rounded-md border border-border\">\r\n <div className=\"flex items-center justify-between mb-2\">\r\n <Badge variant={solution.status === 'completed' ? 'success' : 'secondary'}>\r\n {solution.status}\r\n </Badge>\r\n {solution.estimatedEffort && (\r\n <span className=\"text-xs text-muted-foreground\">\r\n {solution.estimatedEffort}\r\n </span>\r\n )}\r\n </div>\r\n <p className=\"text-sm font-medium mb-1\">{solution.description}</p>\r\n {solution.approach && (\r\n <p className=\"text-xs text-muted-foreground\">{solution.approach}</p>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </TabsContent>\r\n\r\n {/* Terminal Tab - Execution Binding */}\r\n <TabsContent value=\"terminal\" className=\"mt-4 pb-6 focus-visible:outline-none\">\r\n <div className=\"space-y-5\">\r\n {/* Tool Selection */}\r\n <div>\r\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\r\n {formatMessage({ id: 'issues.terminal.exec.tool' })}\r\n </h3>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {CLI_TOOLS.map((t) => (\r\n <Button\r\n key={t}\r\n variant={selectedTool === t ? 'default' : 'outline'}\r\n size=\"sm\"\r\n onClick={() => setSelectedTool(t)}\r\n >\r\n {t}\r\n </Button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Mode Selection */}\r\n <div>\r\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\r\n {formatMessage({ id: 'issues.terminal.exec.mode' })}\r\n </h3>\r\n <div className=\"flex gap-2\">\r\n {(['analysis', 'write'] as const).map((m) => (\r\n <Button\r\n key={m}\r\n variant={selectedMode === m ? 'default' : 'outline'}\r\n size=\"sm\"\r\n onClick={() => setSelectedMode(m)}\r\n >\r\n {m}\r\n </Button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Launch Action */}\r\n <div className=\"pt-2 space-y-2\">\r\n <Button\r\n className=\"w-full gap-2\"\r\n disabled={isLaunching || !projectPath}\r\n onClick={handleLaunchSession}\r\n >\r\n {isLaunching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Play className=\"h-4 w-4\" />}\r\n {formatMessage({ id: 'issues.terminal.launch' })}\r\n </Button>\r\n\r\n <Button\r\n variant=\"outline\"\r\n className=\"w-full gap-2\"\r\n onClick={() => {\r\n openTerminal(issue.id);\r\n onClose();\r\n }}\r\n >\r\n <Terminal className=\"h-4 w-4\" />\r\n {formatMessage({ id: 'home.terminalPanel.openInPanel' })}\r\n </Button>\r\n </div>\r\n </div>\r\n </TabsContent>\r\n\r\n {/* History Tab */}\r\n <TabsContent value=\"history\" className=\"mt-4 pb-6 focus-visible:outline-none\">\r\n <div className=\"text-center py-12 text-muted-foreground\">\r\n <History className=\"h-12 w-12 mx-auto mb-4 opacity-50\" />\r\n <p className=\"text-sm\">{formatMessage({ id: 'issues.detail.history.empty' })}</p>\r\n </div>\r\n </TabsContent>\r\n\r\n {/* JSON Tab */}\r\n <TabsContent value=\"json\" className=\"mt-4 pb-6 focus-visible:outline-none\">\r\n <pre className=\"p-4 bg-muted rounded-md overflow-x-auto text-xs\">\r\n {JSON.stringify(issue, null, 2)}\r\n </pre>\r\n </TabsContent>\r\n </div>\r\n </Tabs>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport default IssueDrawer;\r\n","// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === \"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes = {\n INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null)\n return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n if (val === void 0)\n return \"undefined\";\n if (val === null)\n return \"null\";\n const type = typeof val;\n switch (type) {\n case \"boolean\":\n case \"string\":\n case \"number\":\n case \"symbol\":\n case \"function\": {\n return type;\n }\n }\n if (Array.isArray(val))\n return \"array\";\n if (isDate(val))\n return \"date\";\n if (isError(val))\n return \"error\";\n const constructorName = ctorName(val);\n switch (constructorName) {\n case \"Symbol\":\n case \"Promise\":\n case \"WeakMap\":\n case \"WeakSet\":\n case \"Map\":\n case \"Set\":\n return constructorName;\n }\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction ctorName(val) {\n return typeof val.constructor === \"function\" ? val.constructor.name : null;\n}\nfunction isError(val) {\n return val instanceof Error || typeof val.message === \"string\" && val.constructor && typeof val.constructor.stackTraceLimit === \"number\";\n}\nfunction isDate(val) {\n if (val instanceof Date)\n return true;\n return typeof val.toDateString === \"function\" && typeof val.getDate === \"function\" && typeof val.setDate === \"function\";\n}\nfunction kindOf(val) {\n let typeOfVal = typeof val;\n if (process.env.NODE_ENV !== \"production\") {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n if (typeof reducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"function\" || typeof enhancer === \"function\" && typeof arguments[3] === \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"undefined\") {\n enhancer = preloadedState;\n preloadedState = void 0;\n }\n if (typeof enhancer !== \"undefined\") {\n if (typeof enhancer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, preloadedState);\n }\n let currentReducer = reducer;\n let currentState = preloadedState;\n let currentListeners = /* @__PURE__ */ new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = /* @__PURE__ */ new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n }\n return currentState;\n }\n function subscribe(listener) {\n if (typeof listener !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== \"string\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : \"Reducers may not dispatch actions.\");\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach((listener) => {\n listener();\n });\n return action;\n }\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = nextReducer;\n dispatch({\n type: actionTypes_default.REPLACE\n });\n }\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer) {\n if (typeof observer !== \"object\" || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = observer;\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [symbol_observable_default]() {\n return this;\n }\n };\n }\n dispatch({\n type: actionTypes_default.INIT\n });\n const store = {\n dispatch,\n subscribe,\n getState,\n replaceReducer,\n [symbol_observable_default]: observable\n };\n return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n if (reducerKeys.length === 0) {\n return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach((key) => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === actionTypes_default.REPLACE)\n return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? \"keys\" : \"key\"} \"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead: \"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach((key) => {\n const reducer = reducers[key];\n const initialState = reducer(void 0, {\n type: actionTypes_default.INIT\n });\n if (typeof initialState === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n }\n if (typeof reducer(void 0, {\n type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n }) === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\nfunction combineReducers(reducers) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof reducers[key] === \"undefined\") {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === \"function\") {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n let unexpectedKeyCache;\n if (process.env.NODE_ENV !== \"production\") {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state = {}, action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== \"production\") {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === \"undefined\") {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : \"(unknown type)\"}, the slice reducer for key \"${key}\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n return function(...args) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === \"function\") {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== \"object\" || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n }\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === \"function\") {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n if (funcs.length === 0) {\n return (arg) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n return (createStore2) => (reducer, preloadedState) => {\n const store = createStore2(reducer, preloadedState);\n let dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n };\n const middlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n dispatch = compose(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}\n\n// src/utils/isAction.ts\nfunction isAction(action) {\n return isPlainObject(action) && \"type\" in action && typeof action.type === \"string\";\n}\nexport {\n actionTypes_default as __DO_NOT_USE__ActionTypes,\n applyMiddleware,\n bindActionCreators,\n combineReducers,\n compose,\n createStore,\n isAction,\n isPlainObject,\n legacy_createStore\n};\n//# sourceMappingURL=redux.mjs.map","/**\n * @license React\n * use-sync-external-store-with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = React.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/use-sync-external-store-with-selector.production.js');\n} else {\n module.exports = require('./cjs/use-sync-external-store-with-selector.development.js');\n}\n","// src/utils/react.ts\nimport * as React from \"react\";\n\n// src/utils/react-is.ts\nvar IS_REACT_19 = /* @__PURE__ */ React.version.startsWith(\"19\");\nvar REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(\n IS_REACT_19 ? \"react.transitional.element\" : \"react.element\"\n);\nvar REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for(\"react.portal\");\nvar REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for(\"react.fragment\");\nvar REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for(\"react.strict_mode\");\nvar REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for(\"react.profiler\");\nvar REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for(\"react.consumer\");\nvar REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for(\"react.context\");\nvar REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for(\"react.forward_ref\");\nvar REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for(\"react.suspense\");\nvar REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(\n \"react.suspense_list\"\n);\nvar REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for(\"react.memo\");\nvar REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for(\"react.lazy\");\nvar REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for(\"react.offscreen\");\nvar REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(\n \"react.client.reference\"\n);\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nfunction isValidElementType(type) {\n return typeof type === \"string\" || typeof type === \"function\" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === \"object\" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE || type.getModuleId !== void 0) ? true : false;\n}\nfunction typeOf(object) {\n if (typeof object === \"object\" && object !== null) {\n const { $$typeof } = object;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (object = object.type, object) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return object;\n default:\n switch (object = object && object.$$typeof, object) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n}\nfunction isContextConsumer(object) {\n return IS_REACT_19 ? typeOf(object) === REACT_CONSUMER_TYPE : typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/connect/verifySubselectors.ts\nfunction verify(selector, methodName) {\n if (!selector) {\n throw new Error(`Unexpected value for ${methodName} in connect.`);\n } else if (methodName === \"mapStateToProps\" || methodName === \"mapDispatchToProps\") {\n if (!Object.prototype.hasOwnProperty.call(selector, \"dependsOnOwnProps\")) {\n warning(\n `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`\n );\n }\n }\n}\nfunction verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) {\n verify(mapStateToProps, \"mapStateToProps\");\n verify(mapDispatchToProps, \"mapDispatchToProps\");\n verify(mergeProps, \"mergeProps\");\n}\n\n// src/connect/selectorFactory.ts\nfunction pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, {\n areStatesEqual,\n areOwnPropsEqual,\n areStatePropsEqual\n}) {\n let hasRunAtLeastOnce = false;\n let state;\n let ownProps;\n let stateProps;\n let dispatchProps;\n let mergedProps;\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps)\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps)\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps)\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n function handleNewState() {\n const nextStateProps = mapStateToProps(state, ownProps);\n const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged)\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n function handleSubsequentCalls(nextState, nextOwnProps) {\n const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n const stateChanged = !areStatesEqual(\n nextState,\n state,\n nextOwnProps,\n ownProps\n );\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n}\nfunction finalPropsSelectorFactory(dispatch, {\n initMapStateToProps,\n initMapDispatchToProps,\n initMergeProps,\n ...options\n}) {\n const mapStateToProps = initMapStateToProps(dispatch, options);\n const mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n const mergeProps = initMergeProps(dispatch, options);\n if (process.env.NODE_ENV !== \"production\") {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps);\n }\n return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}\n\n// src/utils/bindActionCreators.ts\nfunction bindActionCreators(actionCreators, dispatch) {\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === \"function\") {\n boundActionCreators[key] = (...args) => dispatch(actionCreator(...args));\n }\n }\n return boundActionCreators;\n}\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null) return false;\n const proto = Object.getPrototypeOf(obj);\n if (proto === null) return true;\n let baseProto = proto;\n while (Object.getPrototypeOf(baseProto) !== null) {\n baseProto = Object.getPrototypeOf(baseProto);\n }\n return proto === baseProto;\n}\n\n// src/utils/verifyPlainObject.ts\nfunction verifyPlainObject(value, displayName, methodName) {\n if (!isPlainObject(value)) {\n warning(\n `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`\n );\n }\n}\n\n// src/connect/wrapMapToProps.ts\nfunction wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch) {\n const constant = getConstant(dispatch);\n function constantSelector() {\n return constant;\n }\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n}\nfunction getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n}\nfunction wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, { displayName }) {\n const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, void 0);\n };\n proxy.dependsOnOwnProps = true;\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n let props = proxy(stateOrDispatch, ownProps);\n if (typeof props === \"function\") {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n if (process.env.NODE_ENV !== \"production\")\n verifyPlainObject(props, displayName, methodName);\n return props;\n };\n return proxy;\n };\n}\n\n// src/connect/invalidArgFactory.ts\nfunction createInvalidArgFactory(arg, name) {\n return (dispatch, options) => {\n throw new Error(\n `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`\n );\n };\n}\n\n// src/connect/mapDispatchToProps.ts\nfunction mapDispatchToPropsFactory(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === \"object\" ? wrapMapToPropsConstant(\n (dispatch) => (\n // @ts-ignore\n bindActionCreators(mapDispatchToProps, dispatch)\n )\n ) : !mapDispatchToProps ? wrapMapToPropsConstant((dispatch) => ({\n dispatch\n })) : typeof mapDispatchToProps === \"function\" ? (\n // @ts-ignore\n wrapMapToPropsFunc(mapDispatchToProps, \"mapDispatchToProps\")\n ) : createInvalidArgFactory(mapDispatchToProps, \"mapDispatchToProps\");\n}\n\n// src/connect/mapStateToProps.ts\nfunction mapStateToPropsFactory(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === \"function\" ? (\n // @ts-ignore\n wrapMapToPropsFunc(mapStateToProps, \"mapStateToProps\")\n ) : createInvalidArgFactory(mapStateToProps, \"mapStateToProps\");\n}\n\n// src/connect/mergeProps.ts\nfunction defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return { ...ownProps, ...stateProps, ...dispatchProps };\n}\nfunction wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, { displayName, areMergedPropsEqual }) {\n let hasRunOnce = false;\n let mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n if (hasRunOnce) {\n if (!areMergedPropsEqual(nextMergedProps, mergedProps))\n mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (process.env.NODE_ENV !== \"production\")\n verifyPlainObject(mergedProps, displayName, \"mergeProps\");\n }\n return mergedProps;\n };\n };\n}\nfunction mergePropsFactory(mergeProps) {\n return !mergeProps ? () => defaultMergeProps : typeof mergeProps === \"function\" ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, \"mergeProps\");\n}\n\n// src/utils/batch.ts\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\n// src/utils/Subscription.ts\nfunction createListenerCollection() {\n let first = null;\n let last = null;\n return {\n clear() {\n first = null;\n last = null;\n },\n notify() {\n defaultNoopBatch(() => {\n let listener = first;\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n get() {\n const listeners = [];\n let listener = first;\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n return listeners;\n },\n subscribe(callback) {\n let isSubscribed = true;\n const listener = last = {\n callback,\n next: null,\n prev: last\n };\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n return function unsubscribe() {\n if (!isSubscribed || first === null) return;\n isSubscribed = false;\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n };\n}\nvar nullListeners = {\n notify() {\n },\n get: () => []\n};\nfunction createSubscription(store, parentSub) {\n let unsubscribe;\n let listeners = nullListeners;\n let subscriptionsAmount = 0;\n let selfSubscribed = false;\n function addNestedSub(listener) {\n trySubscribe();\n const cleanupListener = listeners.subscribe(listener);\n let removed = false;\n return () => {\n if (!removed) {\n removed = true;\n cleanupListener();\n tryUnsubscribe();\n }\n };\n }\n function notifyNestedSubs() {\n listeners.notify();\n }\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n function isSubscribed() {\n return selfSubscribed;\n }\n function trySubscribe() {\n subscriptionsAmount++;\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n function tryUnsubscribe() {\n subscriptionsAmount--;\n if (unsubscribe && subscriptionsAmount === 0) {\n unsubscribe();\n unsubscribe = void 0;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n function trySubscribeSelf() {\n if (!selfSubscribed) {\n selfSubscribed = true;\n trySubscribe();\n }\n }\n function tryUnsubscribeSelf() {\n if (selfSubscribed) {\n selfSubscribed = false;\n tryUnsubscribe();\n }\n }\n const subscription = {\n addNestedSub,\n notifyNestedSubs,\n handleChangeWrapper,\n isSubscribed,\n trySubscribe: trySubscribeSelf,\n tryUnsubscribe: tryUnsubscribeSelf,\n getListeners: () => listeners\n };\n return subscription;\n}\n\n// src/utils/useIsomorphicLayoutEffect.ts\nvar canUseDOM = () => !!(typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\");\nvar isDOM = /* @__PURE__ */ canUseDOM();\nvar isRunningInReactNative = () => typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\";\nvar isReactNative = /* @__PURE__ */ isRunningInReactNative();\nvar getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? React.useLayoutEffect : React.useEffect;\nvar useIsomorphicLayoutEffect = /* @__PURE__ */ getUseIsomorphicLayoutEffect();\n\n// src/utils/shallowEqual.ts\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n for (let i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n return true;\n}\n\n// src/utils/hoistStatics.ts\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n $$typeof: true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n $$typeof: true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {\n [ForwardRef]: FORWARD_REF_STATICS,\n [Memo]: MEMO_STATICS\n};\nfunction getStatics(component) {\n if (isMemo(component)) {\n return MEMO_STATICS;\n }\n return TYPE_STATICS[component[\"$$typeof\"]] || REACT_STATICS;\n}\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent) {\n if (typeof sourceComponent !== \"string\") {\n if (objectPrototype) {\n const inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent);\n }\n }\n let keys = getOwnPropertyNames(sourceComponent);\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n const targetStatics = getStatics(targetComponent);\n const sourceStatics = getStatics(sourceComponent);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!KNOWN_STATICS[key] && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n const descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n try {\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {\n }\n }\n }\n }\n return targetComponent;\n}\n\n// src/components/Context.ts\nvar ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`);\nvar gT = typeof globalThis !== \"undefined\" ? globalThis : (\n /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */\n {}\n);\nfunction getContext() {\n if (!React.createContext) return {};\n const contextMap = gT[ContextKey] ??= /* @__PURE__ */ new Map();\n let realContext = contextMap.get(React.createContext);\n if (!realContext) {\n realContext = React.createContext(\n null\n );\n if (process.env.NODE_ENV !== \"production\") {\n realContext.displayName = \"ReactRedux\";\n }\n contextMap.set(React.createContext, realContext);\n }\n return realContext;\n}\nvar ReactReduxContext = /* @__PURE__ */ getContext();\n\n// src/components/connect.tsx\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\nvar stringifyComponent = (Comp) => {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);\n}\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n lastWrapperProps.current = wrapperProps;\n renderIsScheduled.current = false;\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n}\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, additionalSubscribeListener) {\n if (!shouldHandleStateChanges) return () => {\n };\n let didUnsubscribe = false;\n let lastThrownError = null;\n const checkForUpdates = () => {\n if (didUnsubscribe || !isMounted.current) {\n return;\n }\n const latestStoreState = store.getState();\n let newChildProps, error;\n try {\n newChildProps = childPropsSelector(\n latestStoreState,\n lastWrapperProps.current\n );\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n if (!error) {\n lastThrownError = null;\n }\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true;\n additionalSubscribeListener();\n }\n };\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe();\n checkForUpdates();\n const unsubscribeWrapper = () => {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n if (lastThrownError) {\n throw lastThrownError;\n }\n };\n return unsubscribeWrapper;\n}\nfunction strictEqual(a, b) {\n return a === b;\n}\nvar hasWarnedAboutDeprecatedPureOption = false;\nfunction connect(mapStateToProps, mapDispatchToProps, mergeProps, {\n // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n // @ts-ignore\n pure,\n areStatesEqual = strictEqual,\n areOwnPropsEqual = shallowEqual,\n areStatePropsEqual = shallowEqual,\n areMergedPropsEqual = shallowEqual,\n // use React's forwardRef to expose a ref of the wrapped component\n forwardRef = false,\n // the context consumer to use\n context = ReactReduxContext\n} = {}) {\n if (process.env.NODE_ENV !== \"production\") {\n if (pure !== void 0 && !hasWarnedAboutDeprecatedPureOption) {\n hasWarnedAboutDeprecatedPureOption = true;\n warning(\n 'The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component'\n );\n }\n }\n const Context = context;\n const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);\n const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);\n const initMergeProps = mergePropsFactory(mergeProps);\n const shouldHandleStateChanges = Boolean(mapStateToProps);\n const wrapWithConnect = (WrappedComponent) => {\n if (process.env.NODE_ENV !== \"production\") {\n const isValid = /* @__PURE__ */ isValidElementType(WrappedComponent);\n if (!isValid)\n throw new Error(\n `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(\n WrappedComponent\n )}`\n );\n }\n const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || \"Component\";\n const displayName = `Connect(${wrappedComponentName})`;\n const selectorFactoryOptions = {\n shouldHandleStateChanges,\n displayName,\n wrappedComponentName,\n WrappedComponent,\n // @ts-ignore\n initMapStateToProps,\n initMapDispatchToProps,\n initMergeProps,\n areStatesEqual,\n areStatePropsEqual,\n areOwnPropsEqual,\n areMergedPropsEqual\n };\n function ConnectFunction(props) {\n const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {\n const { reactReduxForwardedRef: reactReduxForwardedRef2, ...wrapperProps2 } = props;\n return [props.context, reactReduxForwardedRef2, wrapperProps2];\n }, [props]);\n const ContextToUse = React.useMemo(() => {\n let ResultContext = Context;\n if (propsContext?.Consumer) {\n if (process.env.NODE_ENV !== \"production\") {\n const isValid = /* @__PURE__ */ isContextConsumer(\n // @ts-ignore\n /* @__PURE__ */ React.createElement(propsContext.Consumer, null)\n );\n if (!isValid) {\n throw new Error(\n \"You must pass a valid React context consumer as `props.context`\"\n );\n }\n ResultContext = propsContext;\n }\n }\n return ResultContext;\n }, [propsContext, Context]);\n const contextValue = React.useContext(ContextToUse);\n const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n if (process.env.NODE_ENV !== \"production\" && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(\n `Could not find \"store\" in the context of \"${displayName}\". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to ${displayName} in connect options.`\n );\n }\n const store = didStoreComeFromProps ? props.store : contextValue.store;\n const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;\n const childPropsSelector = React.useMemo(() => {\n return finalPropsSelectorFactory(store.dispatch, selectorFactoryOptions);\n }, [store]);\n const [subscription, notifyNestedSubs] = React.useMemo(() => {\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY;\n const subscription2 = createSubscription(\n store,\n didStoreComeFromProps ? void 0 : contextValue.subscription\n );\n const notifyNestedSubs2 = subscription2.notifyNestedSubs.bind(subscription2);\n return [subscription2, notifyNestedSubs2];\n }, [store, didStoreComeFromProps, contextValue]);\n const overriddenContextValue = React.useMemo(() => {\n if (didStoreComeFromProps) {\n return contextValue;\n }\n return {\n ...contextValue,\n subscription\n };\n }, [didStoreComeFromProps, contextValue, subscription]);\n const lastChildProps = React.useRef(void 0);\n const lastWrapperProps = React.useRef(wrapperProps);\n const childPropsFromStoreUpdate = React.useRef(void 0);\n const renderIsScheduled = React.useRef(false);\n const isMounted = React.useRef(false);\n const latestSubscriptionCallbackError = React.useRef(\n void 0\n );\n useIsomorphicLayoutEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n const actualChildPropsSelector = React.useMemo(() => {\n const selector = () => {\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n }\n return childPropsSelector(store.getState(), wrapperProps);\n };\n return selector;\n }, [store, wrapperProps]);\n const subscribeForReact = React.useMemo(() => {\n const subscribe = (reactListener) => {\n if (!subscription) {\n return () => {\n };\n }\n return subscribeUpdates(\n shouldHandleStateChanges,\n store,\n subscription,\n // @ts-ignore\n childPropsSelector,\n lastWrapperProps,\n lastChildProps,\n renderIsScheduled,\n isMounted,\n childPropsFromStoreUpdate,\n notifyNestedSubs,\n reactListener\n );\n };\n return subscribe;\n }, [subscription]);\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [\n lastWrapperProps,\n lastChildProps,\n renderIsScheduled,\n wrapperProps,\n childPropsFromStoreUpdate,\n notifyNestedSubs\n ]);\n let actualChildProps;\n try {\n actualChildProps = React.useSyncExternalStore(\n // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n subscribeForReact,\n // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n actualChildPropsSelector,\n getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector\n );\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n ;\n err.message += `\nThe error may be correlated with this previous error:\n${latestSubscriptionCallbackError.current.stack}\n\n`;\n }\n throw err;\n }\n useIsomorphicLayoutEffect(() => {\n latestSubscriptionCallbackError.current = void 0;\n childPropsFromStoreUpdate.current = void 0;\n lastChildProps.current = actualChildProps;\n });\n const renderedWrappedComponent = React.useMemo(() => {\n return (\n // @ts-ignore\n /* @__PURE__ */ React.createElement(\n WrappedComponent,\n {\n ...actualChildProps,\n ref: reactReduxForwardedRef\n }\n )\n );\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]);\n const renderedChild = React.useMemo(() => {\n if (shouldHandleStateChanges) {\n return /* @__PURE__ */ React.createElement(ContextToUse.Provider, { value: overriddenContextValue }, renderedWrappedComponent);\n }\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n }\n const _Connect = React.memo(ConnectFunction);\n const Connect = _Connect;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n if (forwardRef) {\n const _forwarded = React.forwardRef(\n function forwardConnectRef(props, ref) {\n return /* @__PURE__ */ React.createElement(Connect, { ...props, reactReduxForwardedRef: ref });\n }\n );\n const forwarded = _forwarded;\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return /* @__PURE__ */ hoistNonReactStatics(forwarded, WrappedComponent);\n }\n return /* @__PURE__ */ hoistNonReactStatics(Connect, WrappedComponent);\n };\n return wrapWithConnect;\n}\nvar connect_default = connect;\n\n// src/components/Provider.tsx\nfunction Provider(providerProps) {\n const { children, context, serverState, store } = providerProps;\n const contextValue = React.useMemo(() => {\n const subscription = createSubscription(store);\n const baseContextValue = {\n store,\n subscription,\n getServerState: serverState ? () => serverState : void 0\n };\n if (process.env.NODE_ENV === \"production\") {\n return baseContextValue;\n } else {\n const { identityFunctionCheck = \"once\", stabilityCheck = \"once\" } = providerProps;\n return /* @__PURE__ */ Object.assign(baseContextValue, {\n stabilityCheck,\n identityFunctionCheck\n });\n }\n }, [store, serverState]);\n const previousState = React.useMemo(() => store.getState(), [store]);\n useIsomorphicLayoutEffect(() => {\n const { subscription } = contextValue;\n subscription.onStateChange = subscription.notifyNestedSubs;\n subscription.trySubscribe();\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n return () => {\n subscription.tryUnsubscribe();\n subscription.onStateChange = void 0;\n };\n }, [contextValue, previousState]);\n const Context = context || ReactReduxContext;\n return /* @__PURE__ */ React.createElement(Context.Provider, { value: contextValue }, children);\n}\nvar Provider_default = Provider;\n\n// src/hooks/useReduxContext.ts\nfunction createReduxContextHook(context = ReactReduxContext) {\n return function useReduxContext2() {\n const contextValue = React.useContext(context);\n if (process.env.NODE_ENV !== \"production\" && !contextValue) {\n throw new Error(\n \"could not find react-redux context value; please ensure the component is wrapped in a <Provider>\"\n );\n }\n return contextValue;\n };\n}\nvar useReduxContext = /* @__PURE__ */ createReduxContextHook();\n\n// src/hooks/useStore.ts\nfunction createStoreHook(context = ReactReduxContext) {\n const useReduxContext2 = context === ReactReduxContext ? useReduxContext : (\n // @ts-ignore\n createReduxContextHook(context)\n );\n const useStore2 = () => {\n const { store } = useReduxContext2();\n return store;\n };\n Object.assign(useStore2, {\n withTypes: () => useStore2\n });\n return useStore2;\n}\nvar useStore = /* @__PURE__ */ createStoreHook();\n\n// src/hooks/useDispatch.ts\nfunction createDispatchHook(context = ReactReduxContext) {\n const useStore2 = context === ReactReduxContext ? useStore : createStoreHook(context);\n const useDispatch2 = () => {\n const store = useStore2();\n return store.dispatch;\n };\n Object.assign(useDispatch2, {\n withTypes: () => useDispatch2\n });\n return useDispatch2;\n}\nvar useDispatch = /* @__PURE__ */ createDispatchHook();\n\n// src/hooks/useSelector.ts\nimport { useSyncExternalStoreWithSelector } from \"use-sync-external-store/with-selector.js\";\nvar refEquality = (a, b) => a === b;\nfunction createSelectorHook(context = ReactReduxContext) {\n const useReduxContext2 = context === ReactReduxContext ? useReduxContext : createReduxContextHook(context);\n const useSelector2 = (selector, equalityFnOrOptions = {}) => {\n const { equalityFn = refEquality } = typeof equalityFnOrOptions === \"function\" ? { equalityFn: equalityFnOrOptions } : equalityFnOrOptions;\n if (process.env.NODE_ENV !== \"production\") {\n if (!selector) {\n throw new Error(`You must pass a selector to useSelector`);\n }\n if (typeof selector !== \"function\") {\n throw new Error(`You must pass a function as a selector to useSelector`);\n }\n if (typeof equalityFn !== \"function\") {\n throw new Error(\n `You must pass a function as an equality function to useSelector`\n );\n }\n }\n const reduxContext = useReduxContext2();\n const { store, subscription, getServerState } = reduxContext;\n const firstRun = React.useRef(true);\n const wrappedSelector = React.useCallback(\n {\n [selector.name](state) {\n const selected = selector(state);\n if (process.env.NODE_ENV !== \"production\") {\n const { devModeChecks = {} } = typeof equalityFnOrOptions === \"function\" ? {} : equalityFnOrOptions;\n const { identityFunctionCheck, stabilityCheck } = reduxContext;\n const {\n identityFunctionCheck: finalIdentityFunctionCheck,\n stabilityCheck: finalStabilityCheck\n } = {\n stabilityCheck,\n identityFunctionCheck,\n ...devModeChecks\n };\n if (finalStabilityCheck === \"always\" || finalStabilityCheck === \"once\" && firstRun.current) {\n const toCompare = selector(state);\n if (!equalityFn(selected, toCompare)) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"Selector \" + (selector.name || \"unknown\") + \" returned a different result when called with the same parameters. This can lead to unnecessary rerenders.\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization\",\n {\n state,\n selected,\n selected2: toCompare,\n stack\n }\n );\n }\n }\n if (finalIdentityFunctionCheck === \"always\" || finalIdentityFunctionCheck === \"once\" && firstRun.current) {\n if (selected === state) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"Selector \" + (selector.name || \"unknown\") + \" returned the root state when called. This can lead to unnecessary rerenders.\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.\",\n { stack }\n );\n }\n }\n if (firstRun.current) firstRun.current = false;\n }\n return selected;\n }\n }[selector.name],\n [selector]\n );\n const selectedState = useSyncExternalStoreWithSelector(\n subscription.addNestedSub,\n store.getState,\n getServerState || store.getState,\n wrappedSelector,\n equalityFn\n );\n React.useDebugValue(selectedState);\n return selectedState;\n };\n Object.assign(useSelector2, {\n withTypes: () => useSelector2\n });\n return useSelector2;\n}\nvar useSelector = /* @__PURE__ */ createSelectorHook();\n\n// src/exports.ts\nvar batch = defaultNoopBatch;\nexport {\n Provider_default as Provider,\n ReactReduxContext,\n batch,\n connect_default as connect,\n createDispatchHook,\n createSelectorHook,\n createStoreHook,\n shallowEqual,\n useDispatch,\n useSelector,\n useStore\n};\n//# sourceMappingURL=react-redux.mjs.map","import invariant from 'tiny-invariant';\n\nvar getRect = function getRect(_ref) {\n var top = _ref.top,\n right = _ref.right,\n bottom = _ref.bottom,\n left = _ref.left;\n var width = right - left;\n var height = bottom - top;\n var rect = {\n top: top,\n right: right,\n bottom: bottom,\n left: left,\n width: width,\n height: height,\n x: left,\n y: top,\n center: {\n x: (right + left) / 2,\n y: (bottom + top) / 2\n }\n };\n return rect;\n};\nvar expand = function expand(target, expandBy) {\n return {\n top: target.top - expandBy.top,\n left: target.left - expandBy.left,\n bottom: target.bottom + expandBy.bottom,\n right: target.right + expandBy.right\n };\n};\nvar shrink = function shrink(target, shrinkBy) {\n return {\n top: target.top + shrinkBy.top,\n left: target.left + shrinkBy.left,\n bottom: target.bottom - shrinkBy.bottom,\n right: target.right - shrinkBy.right\n };\n};\n\nvar shift = function shift(target, shiftBy) {\n return {\n top: target.top + shiftBy.y,\n left: target.left + shiftBy.x,\n bottom: target.bottom + shiftBy.y,\n right: target.right + shiftBy.x\n };\n};\n\nvar noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\nvar createBox = function createBox(_ref2) {\n var borderBox = _ref2.borderBox,\n _ref2$margin = _ref2.margin,\n margin = _ref2$margin === void 0 ? noSpacing : _ref2$margin,\n _ref2$border = _ref2.border,\n border = _ref2$border === void 0 ? noSpacing : _ref2$border,\n _ref2$padding = _ref2.padding,\n padding = _ref2$padding === void 0 ? noSpacing : _ref2$padding;\n var marginBox = getRect(expand(borderBox, margin));\n var paddingBox = getRect(shrink(borderBox, border));\n var contentBox = getRect(shrink(paddingBox, padding));\n return {\n marginBox: marginBox,\n borderBox: getRect(borderBox),\n paddingBox: paddingBox,\n contentBox: contentBox,\n margin: margin,\n border: border,\n padding: padding\n };\n};\n\nvar parse = function parse(raw) {\n var value = raw.slice(0, -2);\n var suffix = raw.slice(-2);\n\n if (suffix !== 'px') {\n return 0;\n }\n\n var result = Number(value);\n !!isNaN(result) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Could not parse value [raw: \" + raw + \", without suffix: \" + value + \"]\") : invariant(false) : void 0;\n return result;\n};\n\nvar getWindowScroll = function getWindowScroll() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n};\n\nvar offset = function offset(original, change) {\n var borderBox = original.borderBox,\n border = original.border,\n margin = original.margin,\n padding = original.padding;\n var shifted = shift(borderBox, change);\n return createBox({\n borderBox: shifted,\n border: border,\n margin: margin,\n padding: padding\n });\n};\nvar withScroll = function withScroll(original, scroll) {\n if (scroll === void 0) {\n scroll = getWindowScroll();\n }\n\n return offset(original, scroll);\n};\nvar calculateBox = function calculateBox(borderBox, styles) {\n var margin = {\n top: parse(styles.marginTop),\n right: parse(styles.marginRight),\n bottom: parse(styles.marginBottom),\n left: parse(styles.marginLeft)\n };\n var padding = {\n top: parse(styles.paddingTop),\n right: parse(styles.paddingRight),\n bottom: parse(styles.paddingBottom),\n left: parse(styles.paddingLeft)\n };\n var border = {\n top: parse(styles.borderTopWidth),\n right: parse(styles.borderRightWidth),\n bottom: parse(styles.borderBottomWidth),\n left: parse(styles.borderLeftWidth)\n };\n return createBox({\n borderBox: borderBox,\n margin: margin,\n padding: padding,\n border: border\n });\n};\nvar getBox = function getBox(el) {\n var borderBox = el.getBoundingClientRect();\n var styles = window.getComputedStyle(el);\n return calculateBox(borderBox, styles);\n};\n\nexport { calculateBox, createBox, expand, getBox, getRect, offset, shrink, withScroll };\n","var rafSchd = function rafSchd(fn) {\n var lastArgs = [];\n var frameId = null;\n\n var wrapperFn = function wrapperFn() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n\n if (frameId) {\n return;\n }\n\n frameId = requestAnimationFrame(function () {\n frameId = null;\n fn.apply(void 0, lastArgs);\n });\n };\n\n wrapperFn.cancel = function () {\n if (!frameId) {\n return;\n }\n\n cancelAnimationFrame(frameId);\n frameId = null;\n };\n\n return wrapperFn;\n};\n\nexport default rafSchd;\n","import React, { useState, useRef, useEffect, useLayoutEffect, useContext } from 'react';\nimport ReactDOM, { flushSync } from 'react-dom';\nimport { createStore as createStore$1, compose, applyMiddleware, bindActionCreators } from 'redux';\nimport { Provider, connect } from 'react-redux';\nimport { getRect, expand, offset, withScroll, calculateBox, getBox, createBox } from 'css-box-model';\nimport rafSchd from 'raf-schd';\nimport _extends from '@babel/runtime/helpers/esm/extends';\n\nconst isProduction$1 = process.env.NODE_ENV === 'production';\nconst spacesAndTabs = /[ \\t]{2,}/g;\nconst lineStartWithSpaces = /^[ \\t]*/gm;\nconst clean$2 = value => value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();\nconst getDevMessage = message => clean$2(`\n %c@hello-pangea/dnd\n\n %c${clean$2(message)}\n\n %c👷 This is a development only message. It will be removed in production builds.\n`);\nconst getFormattedMessage = message => [getDevMessage(message), 'color: #00C584; font-size: 1.2em; font-weight: bold;', 'line-height: 1.5', 'color: #723874;'];\nconst isDisabledFlag = '__@hello-pangea/dnd-disable-dev-warnings';\nfunction log(type, message) {\n if (isProduction$1) {\n return;\n }\n if (typeof window !== 'undefined' && window[isDisabledFlag]) {\n return;\n }\n console[type](...getFormattedMessage(message));\n}\nconst warning = log.bind(null, 'warn');\nconst error = log.bind(null, 'error');\n\nfunction noop$2() {}\n\nfunction getOptions(shared, fromBinding) {\n return {\n ...shared,\n ...fromBinding\n };\n}\nfunction bindEvents(el, bindings, sharedOptions) {\n const unbindings = bindings.map(binding => {\n const options = getOptions(sharedOptions, binding.options);\n el.addEventListener(binding.eventName, binding.fn, options);\n return function unbind() {\n el.removeEventListener(binding.eventName, binding.fn, options);\n };\n });\n return function unbindAll() {\n unbindings.forEach(unbind => {\n unbind();\n });\n };\n}\n\nconst isProduction = process.env.NODE_ENV === 'production';\nconst prefix$1 = 'Invariant failed';\nclass RbdInvariant extends Error {}\nRbdInvariant.prototype.toString = function toString() {\n return this.message;\n};\nfunction invariant(condition, message) {\n if (isProduction) {\n throw new RbdInvariant(prefix$1);\n } else {\n throw new RbdInvariant(`${prefix$1}: ${message || ''}`);\n }\n}\n\nclass ErrorBoundary extends React.Component {\n constructor(...args) {\n super(...args);\n this.callbacks = null;\n this.unbind = noop$2;\n this.onWindowError = event => {\n const callbacks = this.getCallbacks();\n if (callbacks.isDragging()) {\n callbacks.tryAbort();\n process.env.NODE_ENV !== \"production\" ? warning(`\n An error was caught by our window 'error' event listener while a drag was occurring.\n The active drag has been aborted.\n `) : void 0;\n }\n const err = event.error;\n if (err instanceof RbdInvariant) {\n event.preventDefault();\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n }\n };\n this.getCallbacks = () => {\n if (!this.callbacks) {\n throw new Error('Unable to find AppCallbacks in <ErrorBoundary/>');\n }\n return this.callbacks;\n };\n this.setCallbacks = callbacks => {\n this.callbacks = callbacks;\n };\n }\n componentDidMount() {\n this.unbind = bindEvents(window, [{\n eventName: 'error',\n fn: this.onWindowError\n }]);\n }\n componentDidCatch(err) {\n if (err instanceof RbdInvariant) {\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n this.setState({});\n return;\n }\n throw err;\n }\n componentWillUnmount() {\n this.unbind();\n }\n render() {\n return this.props.children(this.setCallbacks);\n }\n}\n\nconst dragHandleUsageInstructions = `\n Press space bar to start a drag.\n When dragging you can use the arrow keys to move the item around and escape to cancel.\n Some screen readers may require you to be in focus mode or to use your pass through key\n`;\nconst position = index => index + 1;\nconst onDragStart = start => `\n You have lifted an item in position ${position(start.source.index)}\n`;\nconst withLocation = (source, destination) => {\n const isInHomeList = source.droppableId === destination.droppableId;\n const startPosition = position(source.index);\n const endPosition = position(destination.index);\n if (isInHomeList) {\n return `\n You have moved the item from position ${startPosition}\n to position ${endPosition}\n `;\n }\n return `\n You have moved the item from position ${startPosition}\n in list ${source.droppableId}\n to list ${destination.droppableId}\n in position ${endPosition}\n `;\n};\nconst withCombine = (id, source, combine) => {\n const inHomeList = source.droppableId === combine.droppableId;\n if (inHomeList) {\n return `\n The item ${id}\n has been combined with ${combine.draggableId}`;\n }\n return `\n The item ${id}\n in list ${source.droppableId}\n has been combined with ${combine.draggableId}\n in list ${combine.droppableId}\n `;\n};\nconst onDragUpdate = update => {\n const location = update.destination;\n if (location) {\n return withLocation(update.source, location);\n }\n const combine = update.combine;\n if (combine) {\n return withCombine(update.draggableId, update.source, combine);\n }\n return 'You are over an area that cannot be dropped on';\n};\nconst returnedToStart = source => `\n The item has returned to its starting position\n of ${position(source.index)}\n`;\nconst onDragEnd = result => {\n if (result.reason === 'CANCEL') {\n return `\n Movement cancelled.\n ${returnedToStart(result.source)}\n `;\n }\n const location = result.destination;\n const combine = result.combine;\n if (location) {\n return `\n You have dropped the item.\n ${withLocation(result.source, location)}\n `;\n }\n if (combine) {\n return `\n You have dropped the item.\n ${withCombine(result.draggableId, result.source, combine)}\n `;\n }\n return `\n The item has been dropped while not over a drop area.\n ${returnedToStart(result.source)}\n `;\n};\nconst preset = {\n dragHandleUsageInstructions,\n onDragStart,\n onDragUpdate,\n onDragEnd\n};\n\nfunction isEqual$2(first, second) {\n if (first === second) {\n return true;\n }\n if (Number.isNaN(first) && Number.isNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (let i = 0; i < newInputs.length; i++) {\n if (!isEqual$2(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction useMemo(getResult, inputs) {\n const initial = useState(() => ({\n inputs,\n result: getResult()\n }))[0];\n const isFirstRun = useRef(true);\n const committed = useRef(initial);\n const useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));\n const cache = useCache ? committed.current : {\n inputs,\n result: getResult()\n };\n useEffect(() => {\n isFirstRun.current = false;\n committed.current = cache;\n }, [cache]);\n return cache.result;\n}\nfunction useCallback(callback, inputs) {\n return useMemo(() => callback, inputs);\n}\n\nconst origin = {\n x: 0,\n y: 0\n};\nconst add = (point1, point2) => ({\n x: point1.x + point2.x,\n y: point1.y + point2.y\n});\nconst subtract = (point1, point2) => ({\n x: point1.x - point2.x,\n y: point1.y - point2.y\n});\nconst isEqual$1 = (point1, point2) => point1.x === point2.x && point1.y === point2.y;\nconst negate = point => ({\n x: point.x !== 0 ? -point.x : 0,\n y: point.y !== 0 ? -point.y : 0\n});\nconst patch = (line, value, otherValue = 0) => {\n if (line === 'x') {\n return {\n x: value,\n y: otherValue\n };\n }\n return {\n x: otherValue,\n y: value\n };\n};\nconst distance = (point1, point2) => Math.sqrt((point2.x - point1.x) ** 2 + (point2.y - point1.y) ** 2);\nconst closest$1 = (target, points) => Math.min(...points.map(point => distance(target, point)));\nconst apply = fn => point => ({\n x: fn(point.x),\n y: fn(point.y)\n});\n\nvar executeClip = (frame, subject) => {\n const result = getRect({\n top: Math.max(subject.top, frame.top),\n right: Math.min(subject.right, frame.right),\n bottom: Math.min(subject.bottom, frame.bottom),\n left: Math.max(subject.left, frame.left)\n });\n if (result.width <= 0 || result.height <= 0) {\n return null;\n }\n return result;\n};\n\nconst offsetByPosition = (spacing, point) => ({\n top: spacing.top + point.y,\n left: spacing.left + point.x,\n bottom: spacing.bottom + point.y,\n right: spacing.right + point.x\n});\nconst getCorners = spacing => [{\n x: spacing.left,\n y: spacing.top\n}, {\n x: spacing.right,\n y: spacing.top\n}, {\n x: spacing.left,\n y: spacing.bottom\n}, {\n x: spacing.right,\n y: spacing.bottom\n}];\nconst noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\n\nconst scroll$1 = (target, frame) => {\n if (!frame) {\n return target;\n }\n return offsetByPosition(target, frame.scroll.diff.displacement);\n};\nconst increase = (target, axis, withPlaceholder) => {\n if (withPlaceholder && withPlaceholder.increasedBy) {\n return {\n ...target,\n [axis.end]: target[axis.end] + withPlaceholder.increasedBy[axis.line]\n };\n }\n return target;\n};\nconst clip = (target, frame) => {\n if (frame && frame.shouldClipSubject) {\n return executeClip(frame.pageMarginBox, target);\n }\n return getRect(target);\n};\nvar getSubject = ({\n page,\n withPlaceholder,\n axis,\n frame\n}) => {\n const scrolled = scroll$1(page.marginBox, frame);\n const increased = increase(scrolled, axis, withPlaceholder);\n const clipped = clip(increased, frame);\n return {\n page,\n withPlaceholder,\n active: clipped\n };\n};\n\nvar scrollDroppable = (droppable, newScroll) => {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const scrollable = droppable.frame;\n const scrollDiff = subtract(newScroll, scrollable.scroll.initial);\n const scrollDisplacement = negate(scrollDiff);\n const frame = {\n ...scrollable,\n scroll: {\n initial: scrollable.scroll.initial,\n current: newScroll,\n diff: {\n value: scrollDiff,\n displacement: scrollDisplacement\n },\n max: scrollable.scroll.max\n }\n };\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: droppable.subject.withPlaceholder,\n axis: droppable.axis,\n frame\n });\n const result = {\n ...droppable,\n frame,\n subject\n };\n return result;\n};\n\nfunction memoizeOne(resultFn, isEqual = areInputsEqual) {\n let cache = null;\n function memoized(...newArgs) {\n if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n const lastResult = resultFn.apply(this, newArgs);\n cache = {\n lastResult,\n lastArgs: newArgs,\n lastThis: this\n };\n return lastResult;\n }\n memoized.clear = function clear() {\n cache = null;\n };\n return memoized;\n}\n\nconst toDroppableMap = memoizeOne(droppables => droppables.reduce((previous, current) => {\n previous[current.descriptor.id] = current;\n return previous;\n}, {}));\nconst toDraggableMap = memoizeOne(draggables => draggables.reduce((previous, current) => {\n previous[current.descriptor.id] = current;\n return previous;\n}, {}));\nconst toDroppableList = memoizeOne(droppables => Object.values(droppables));\nconst toDraggableList = memoizeOne(draggables => Object.values(draggables));\n\nvar getDraggablesInsideDroppable = memoizeOne((droppableId, draggables) => {\n const result = toDraggableList(draggables).filter(draggable => droppableId === draggable.descriptor.droppableId).sort((a, b) => a.descriptor.index - b.descriptor.index);\n return result;\n});\n\nfunction tryGetDestination(impact) {\n if (impact.at && impact.at.type === 'REORDER') {\n return impact.at.destination;\n }\n return null;\n}\nfunction tryGetCombine(impact) {\n if (impact.at && impact.at.type === 'COMBINE') {\n return impact.at.combine;\n }\n return null;\n}\n\nvar removeDraggableFromList = memoizeOne((remove, list) => list.filter(item => item.descriptor.id !== remove.descriptor.id));\n\nvar moveToNextCombine = ({\n isMovingForward,\n draggable,\n destination,\n insideDestination,\n previousImpact\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const location = tryGetDestination(previousImpact);\n if (!location) {\n return null;\n }\n function getImpact(target) {\n const at = {\n type: 'COMBINE',\n combine: {\n draggableId: target,\n droppableId: destination.descriptor.id\n }\n };\n return {\n ...previousImpact,\n at\n };\n }\n const all = previousImpact.displaced.all;\n const closestId = all.length ? all[0] : null;\n if (isMovingForward) {\n return closestId ? getImpact(closestId) : null;\n }\n const withoutDraggable = removeDraggableFromList(draggable, insideDestination);\n if (!closestId) {\n if (!withoutDraggable.length) {\n return null;\n }\n const last = withoutDraggable[withoutDraggable.length - 1];\n return getImpact(last.descriptor.id);\n }\n const indexOfClosest = withoutDraggable.findIndex(d => d.descriptor.id === closestId);\n !(indexOfClosest !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find displaced item in set') : invariant() : void 0;\n const proposedIndex = indexOfClosest - 1;\n if (proposedIndex < 0) {\n return null;\n }\n const before = withoutDraggable[proposedIndex];\n return getImpact(before.descriptor.id);\n};\n\nvar isHomeOf = (draggable, destination) => draggable.descriptor.droppableId === destination.descriptor.id;\n\nconst noDisplacedBy = {\n point: origin,\n value: 0\n};\nconst emptyGroups = {\n invisible: {},\n visible: {},\n all: []\n};\nconst noImpact = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: null\n};\n\nvar isWithin = (lowerBound, upperBound) => value => lowerBound <= value && value <= upperBound;\n\nvar isPartiallyVisibleThroughFrame = frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n if (isContained) {\n return true;\n }\n const isPartiallyVisibleVertically = isWithinVertical(subject.top) || isWithinVertical(subject.bottom);\n const isPartiallyVisibleHorizontally = isWithinHorizontal(subject.left) || isWithinHorizontal(subject.right);\n const isPartiallyContained = isPartiallyVisibleVertically && isPartiallyVisibleHorizontally;\n if (isPartiallyContained) {\n return true;\n }\n const isBiggerVertically = subject.top < frame.top && subject.bottom > frame.bottom;\n const isBiggerHorizontally = subject.left < frame.left && subject.right > frame.right;\n const isTargetBiggerThanFrame = isBiggerVertically && isBiggerHorizontally;\n if (isTargetBiggerThanFrame) {\n return true;\n }\n const isTargetBiggerOnOneAxis = isBiggerVertically && isPartiallyVisibleHorizontally || isBiggerHorizontally && isPartiallyVisibleVertically;\n return isTargetBiggerOnOneAxis;\n };\n};\n\nvar isTotallyVisibleThroughFrame = frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n return isContained;\n };\n};\n\nconst vertical = {\n direction: 'vertical',\n line: 'y',\n crossAxisLine: 'x',\n start: 'top',\n end: 'bottom',\n size: 'height',\n crossAxisStart: 'left',\n crossAxisEnd: 'right',\n crossAxisSize: 'width'\n};\nconst horizontal = {\n direction: 'horizontal',\n line: 'x',\n crossAxisLine: 'y',\n start: 'left',\n end: 'right',\n size: 'width',\n crossAxisStart: 'top',\n crossAxisEnd: 'bottom',\n crossAxisSize: 'height'\n};\n\nvar isTotallyVisibleThroughFrameOnAxis = axis => frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n if (axis === vertical) {\n return isWithinVertical(subject.top) && isWithinVertical(subject.bottom);\n }\n return isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n };\n};\n\nconst getDroppableDisplaced = (target, destination) => {\n const displacement = destination.frame ? destination.frame.scroll.diff.displacement : origin;\n return offsetByPosition(target, displacement);\n};\nconst isVisibleInDroppable = (target, destination, isVisibleThroughFrameFn) => {\n if (!destination.subject.active) {\n return false;\n }\n return isVisibleThroughFrameFn(destination.subject.active)(target);\n};\nconst isVisibleInViewport = (target, viewport, isVisibleThroughFrameFn) => isVisibleThroughFrameFn(viewport)(target);\nconst isVisible$1 = ({\n target: toBeDisplaced,\n destination,\n viewport,\n withDroppableDisplacement,\n isVisibleThroughFrameFn\n}) => {\n const displacedTarget = withDroppableDisplacement ? getDroppableDisplaced(toBeDisplaced, destination) : toBeDisplaced;\n return isVisibleInDroppable(displacedTarget, destination, isVisibleThroughFrameFn) && isVisibleInViewport(displacedTarget, viewport, isVisibleThroughFrameFn);\n};\nconst isPartiallyVisible = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isPartiallyVisibleThroughFrame\n});\nconst isTotallyVisible = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrame\n});\nconst isTotallyVisibleOnAxis = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrameOnAxis(args.destination.axis)\n});\n\nconst getShouldAnimate = (id, last, forceShouldAnimate) => {\n if (typeof forceShouldAnimate === 'boolean') {\n return forceShouldAnimate;\n }\n if (!last) {\n return true;\n }\n const {\n invisible,\n visible\n } = last;\n if (invisible[id]) {\n return false;\n }\n const previous = visible[id];\n return previous ? previous.shouldAnimate : true;\n};\nfunction getTarget(draggable, displacedBy) {\n const marginBox = draggable.page.marginBox;\n const expandBy = {\n top: displacedBy.point.y,\n right: 0,\n bottom: 0,\n left: displacedBy.point.x\n };\n return getRect(expand(marginBox, expandBy));\n}\nfunction getDisplacementGroups({\n afterDragging,\n destination,\n displacedBy,\n viewport,\n forceShouldAnimate,\n last\n}) {\n return afterDragging.reduce(function process(groups, draggable) {\n const target = getTarget(draggable, displacedBy);\n const id = draggable.descriptor.id;\n groups.all.push(id);\n const isVisible = isPartiallyVisible({\n target,\n destination,\n viewport,\n withDroppableDisplacement: true\n });\n if (!isVisible) {\n groups.invisible[draggable.descriptor.id] = true;\n return groups;\n }\n const shouldAnimate = getShouldAnimate(id, last, forceShouldAnimate);\n const displacement = {\n draggableId: id,\n shouldAnimate\n };\n groups.visible[id] = displacement;\n return groups;\n }, {\n all: [],\n visible: {},\n invisible: {}\n });\n}\n\nfunction getIndexOfLastItem(draggables, options) {\n if (!draggables.length) {\n return 0;\n }\n const indexOfLastItem = draggables[draggables.length - 1].descriptor.index;\n return options.inHomeList ? indexOfLastItem : indexOfLastItem + 1;\n}\nfunction goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n}) {\n const newIndex = getIndexOfLastItem(insideDestination, {\n inHomeList\n });\n return {\n displaced: emptyGroups,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: newIndex\n }\n }\n };\n}\nfunction calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n displacedBy,\n last,\n index,\n forceShouldAnimate\n}) {\n const inHomeList = isHomeOf(draggable, destination);\n if (index == null) {\n return goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n });\n }\n const match = insideDestination.find(item => item.descriptor.index === index);\n if (!match) {\n return goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n });\n }\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const sliceFrom = insideDestination.indexOf(match);\n const impacted = withoutDragging.slice(sliceFrom);\n const displaced = getDisplacementGroups({\n afterDragging: impacted,\n destination,\n displacedBy,\n last,\n viewport: viewport.frame,\n forceShouldAnimate\n });\n return {\n displaced,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index\n }\n }\n };\n}\n\nfunction didStartAfterCritical(draggableId, afterCritical) {\n return Boolean(afterCritical.effected[draggableId]);\n}\n\nvar fromCombine = ({\n isMovingForward,\n destination,\n draggables,\n combine,\n afterCritical\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const combineId = combine.draggableId;\n const combineWith = draggables[combineId];\n const combineWithIndex = combineWith.descriptor.index;\n const didCombineWithStartAfterCritical = didStartAfterCritical(combineId, afterCritical);\n if (didCombineWithStartAfterCritical) {\n if (isMovingForward) {\n return combineWithIndex;\n }\n return combineWithIndex - 1;\n }\n if (isMovingForward) {\n return combineWithIndex + 1;\n }\n return combineWithIndex;\n};\n\nvar fromReorder = ({\n isMovingForward,\n isInHomeList,\n insideDestination,\n location\n}) => {\n if (!insideDestination.length) {\n return null;\n }\n const currentIndex = location.index;\n const proposedIndex = isMovingForward ? currentIndex + 1 : currentIndex - 1;\n const firstIndex = insideDestination[0].descriptor.index;\n const lastIndex = insideDestination[insideDestination.length - 1].descriptor.index;\n const upperBound = isInHomeList ? lastIndex : lastIndex + 1;\n if (proposedIndex < firstIndex) {\n return null;\n }\n if (proposedIndex > upperBound) {\n return null;\n }\n return proposedIndex;\n};\n\nvar moveToNextIndex = ({\n isMovingForward,\n isInHomeList,\n draggable,\n draggables,\n destination,\n insideDestination,\n previousImpact,\n viewport,\n afterCritical\n}) => {\n const wasAt = previousImpact.at;\n !wasAt ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot move in direction without previous impact location') : invariant() : void 0;\n if (wasAt.type === 'REORDER') {\n const newIndex = fromReorder({\n isMovingForward,\n isInHomeList,\n location: wasAt.destination,\n insideDestination\n });\n if (newIndex == null) {\n return null;\n }\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n }\n const newIndex = fromCombine({\n isMovingForward,\n destination,\n displaced: previousImpact.displaced,\n draggables,\n combine: wasAt.combine,\n afterCritical\n });\n if (newIndex == null) {\n return null;\n }\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n};\n\nvar getCombinedItemDisplacement = ({\n displaced,\n afterCritical,\n combineWith,\n displacedBy\n}) => {\n const isDisplaced = Boolean(displaced.visible[combineWith] || displaced.invisible[combineWith]);\n if (didStartAfterCritical(combineWith, afterCritical)) {\n return isDisplaced ? origin : negate(displacedBy.point);\n }\n return isDisplaced ? displacedBy.point : origin;\n};\n\nvar whenCombining = ({\n afterCritical,\n impact,\n draggables\n}) => {\n const combine = tryGetCombine(impact);\n !combine ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const combineWith = combine.draggableId;\n const center = draggables[combineWith].page.borderBox.center;\n const displaceBy = getCombinedItemDisplacement({\n displaced: impact.displaced,\n afterCritical,\n combineWith,\n displacedBy: impact.displacedBy\n });\n return add(center, displaceBy);\n};\n\nconst distanceFromStartToBorderBoxCenter = (axis, box) => box.margin[axis.start] + box.borderBox[axis.size] / 2;\nconst distanceFromEndToBorderBoxCenter = (axis, box) => box.margin[axis.end] + box.borderBox[axis.size] / 2;\nconst getCrossAxisBorderBoxCenter = (axis, target, isMoving) => target[axis.crossAxisStart] + isMoving.margin[axis.crossAxisStart] + isMoving.borderBox[axis.crossAxisSize] / 2;\nconst goAfter = ({\n axis,\n moveRelativeTo,\n isMoving\n}) => patch(axis.line, moveRelativeTo.marginBox[axis.end] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\nconst goBefore = ({\n axis,\n moveRelativeTo,\n isMoving\n}) => patch(axis.line, moveRelativeTo.marginBox[axis.start] - distanceFromEndToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\nconst goIntoStart = ({\n axis,\n moveInto,\n isMoving\n}) => patch(axis.line, moveInto.contentBox[axis.start] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveInto.contentBox, isMoving));\n\nvar whenReordering = ({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n}) => {\n const insideDestination = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n const draggablePage = draggable.page;\n const axis = droppable.axis;\n if (!insideDestination.length) {\n return goIntoStart({\n axis,\n moveInto: droppable.page,\n isMoving: draggablePage\n });\n }\n const {\n displaced,\n displacedBy\n } = impact;\n const closestAfter = displaced.all[0];\n if (closestAfter) {\n const closest = draggables[closestAfter];\n if (didStartAfterCritical(closestAfter, afterCritical)) {\n return goBefore({\n axis,\n moveRelativeTo: closest.page,\n isMoving: draggablePage\n });\n }\n const withDisplacement = offset(closest.page, displacedBy.point);\n return goBefore({\n axis,\n moveRelativeTo: withDisplacement,\n isMoving: draggablePage\n });\n }\n const last = insideDestination[insideDestination.length - 1];\n if (last.descriptor.id === draggable.descriptor.id) {\n return draggablePage.borderBox.center;\n }\n if (didStartAfterCritical(last.descriptor.id, afterCritical)) {\n const page = offset(last.page, negate(afterCritical.displacedBy.point));\n return goAfter({\n axis,\n moveRelativeTo: page,\n isMoving: draggablePage\n });\n }\n return goAfter({\n axis,\n moveRelativeTo: last.page,\n isMoving: draggablePage\n });\n};\n\nvar withDroppableDisplacement = (droppable, point) => {\n const frame = droppable.frame;\n if (!frame) {\n return point;\n }\n return add(point, frame.scroll.diff.displacement);\n};\n\nconst getResultWithoutDroppableDisplacement = ({\n impact,\n draggable,\n droppable,\n draggables,\n afterCritical\n}) => {\n const original = draggable.page.borderBox.center;\n const at = impact.at;\n if (!droppable) {\n return original;\n }\n if (!at) {\n return original;\n }\n if (at.type === 'REORDER') {\n return whenReordering({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n });\n }\n return whenCombining({\n impact,\n draggables,\n afterCritical\n });\n};\nvar getPageBorderBoxCenterFromImpact = args => {\n const withoutDisplacement = getResultWithoutDroppableDisplacement(args);\n const droppable = args.droppable;\n const withDisplacement = droppable ? withDroppableDisplacement(droppable, withoutDisplacement) : withoutDisplacement;\n return withDisplacement;\n};\n\nvar scrollViewport = (viewport, newScroll) => {\n const diff = subtract(newScroll, viewport.scroll.initial);\n const displacement = negate(diff);\n const frame = getRect({\n top: newScroll.y,\n bottom: newScroll.y + viewport.frame.height,\n left: newScroll.x,\n right: newScroll.x + viewport.frame.width\n });\n const updated = {\n frame,\n scroll: {\n initial: viewport.scroll.initial,\n max: viewport.scroll.max,\n current: newScroll,\n diff: {\n value: diff,\n displacement\n }\n }\n };\n return updated;\n};\n\nfunction getDraggables$1(ids, draggables) {\n return ids.map(id => draggables[id]);\n}\nfunction tryGetVisible(id, groups) {\n for (let i = 0; i < groups.length; i++) {\n const displacement = groups[i].visible[id];\n if (displacement) {\n return displacement;\n }\n }\n return null;\n}\nvar speculativelyIncrease = ({\n impact,\n viewport,\n destination,\n draggables,\n maxScrollChange\n}) => {\n const scrolledViewport = scrollViewport(viewport, add(viewport.scroll.current, maxScrollChange));\n const scrolledDroppable = destination.frame ? scrollDroppable(destination, add(destination.frame.scroll.current, maxScrollChange)) : destination;\n const last = impact.displaced;\n const withViewportScroll = getDisplacementGroups({\n afterDragging: getDraggables$1(last.all, draggables),\n destination,\n displacedBy: impact.displacedBy,\n viewport: scrolledViewport.frame,\n last,\n forceShouldAnimate: false\n });\n const withDroppableScroll = getDisplacementGroups({\n afterDragging: getDraggables$1(last.all, draggables),\n destination: scrolledDroppable,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n last,\n forceShouldAnimate: false\n });\n const invisible = {};\n const visible = {};\n const groups = [last, withViewportScroll, withDroppableScroll];\n last.all.forEach(id => {\n const displacement = tryGetVisible(id, groups);\n if (displacement) {\n visible[id] = displacement;\n return;\n }\n invisible[id] = true;\n });\n const newImpact = {\n ...impact,\n displaced: {\n all: last.all,\n invisible,\n visible\n }\n };\n return newImpact;\n};\n\nvar withViewportDisplacement = (viewport, point) => add(viewport.scroll.diff.displacement, point);\n\nvar getClientFromPageBorderBoxCenter = ({\n pageBorderBoxCenter,\n draggable,\n viewport\n}) => {\n const withoutPageScrollChange = withViewportDisplacement(viewport, pageBorderBoxCenter);\n const offset = subtract(withoutPageScrollChange, draggable.page.borderBox.center);\n return add(draggable.client.borderBox.center, offset);\n};\n\nvar isTotallyVisibleInNewLocation = ({\n draggable,\n destination,\n newPageBorderBoxCenter,\n viewport,\n withDroppableDisplacement,\n onlyOnMainAxis = false\n}) => {\n const changeNeeded = subtract(newPageBorderBoxCenter, draggable.page.borderBox.center);\n const shifted = offsetByPosition(draggable.page.borderBox, changeNeeded);\n const args = {\n target: shifted,\n destination,\n withDroppableDisplacement,\n viewport\n };\n return onlyOnMainAxis ? isTotallyVisibleOnAxis(args) : isTotallyVisible(args);\n};\n\nvar moveToNextPlace = ({\n isMovingForward,\n draggable,\n destination,\n draggables,\n previousImpact,\n viewport,\n previousPageBorderBoxCenter,\n previousClientSelection,\n afterCritical\n}) => {\n if (!destination.isEnabled) {\n return null;\n }\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const isInHomeList = isHomeOf(draggable, destination);\n const impact = moveToNextCombine({\n isMovingForward,\n draggable,\n destination,\n insideDestination,\n previousImpact\n }) || moveToNextIndex({\n isMovingForward,\n isInHomeList,\n draggable,\n draggables,\n destination,\n insideDestination,\n previousImpact,\n viewport,\n afterCritical\n });\n if (!impact) {\n return null;\n }\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable,\n destination,\n newPageBorderBoxCenter: pageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n if (isVisibleInNewLocation) {\n const clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n return {\n clientSelection,\n impact,\n scrollJumpRequest: null\n };\n }\n const distance = subtract(pageBorderBoxCenter, previousPageBorderBoxCenter);\n const cautious = speculativelyIncrease({\n impact,\n viewport,\n destination,\n draggables,\n maxScrollChange: distance\n });\n return {\n clientSelection: previousClientSelection,\n impact: cautious,\n scrollJumpRequest: distance\n };\n};\n\nconst getKnownActive = droppable => {\n const rect = droppable.subject.active;\n !rect ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get clipped area from droppable') : invariant() : void 0;\n return rect;\n};\nvar getBestCrossAxisDroppable = ({\n isMovingForward,\n pageBorderBoxCenter,\n source,\n droppables,\n viewport\n}) => {\n const active = source.subject.active;\n if (!active) {\n return null;\n }\n const axis = source.axis;\n const isBetweenSourceClipped = isWithin(active[axis.start], active[axis.end]);\n const candidates = toDroppableList(droppables).filter(droppable => droppable !== source).filter(droppable => droppable.isEnabled).filter(droppable => Boolean(droppable.subject.active)).filter(droppable => isPartiallyVisibleThroughFrame(viewport.frame)(getKnownActive(droppable))).filter(droppable => {\n const activeOfTarget = getKnownActive(droppable);\n if (isMovingForward) {\n return active[axis.crossAxisEnd] < activeOfTarget[axis.crossAxisEnd];\n }\n return activeOfTarget[axis.crossAxisStart] < active[axis.crossAxisStart];\n }).filter(droppable => {\n const activeOfTarget = getKnownActive(droppable);\n const isBetweenDestinationClipped = isWithin(activeOfTarget[axis.start], activeOfTarget[axis.end]);\n return isBetweenSourceClipped(activeOfTarget[axis.start]) || isBetweenSourceClipped(activeOfTarget[axis.end]) || isBetweenDestinationClipped(active[axis.start]) || isBetweenDestinationClipped(active[axis.end]);\n }).sort((a, b) => {\n const first = getKnownActive(a)[axis.crossAxisStart];\n const second = getKnownActive(b)[axis.crossAxisStart];\n if (isMovingForward) {\n return first - second;\n }\n return second - first;\n }).filter((droppable, index, array) => getKnownActive(droppable)[axis.crossAxisStart] === getKnownActive(array[0])[axis.crossAxisStart]);\n if (!candidates.length) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0];\n }\n const contains = candidates.filter(droppable => {\n const isWithinDroppable = isWithin(getKnownActive(droppable)[axis.start], getKnownActive(droppable)[axis.end]);\n return isWithinDroppable(pageBorderBoxCenter[axis.line]);\n });\n if (contains.length === 1) {\n return contains[0];\n }\n if (contains.length > 1) {\n return contains.sort((a, b) => getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start])[0];\n }\n return candidates.sort((a, b) => {\n const first = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(a)));\n const second = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(b)));\n if (first !== second) {\n return first - second;\n }\n return getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start];\n })[0];\n};\n\nconst getCurrentPageBorderBoxCenter = (draggable, afterCritical) => {\n const original = draggable.page.borderBox.center;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? subtract(original, afterCritical.displacedBy.point) : original;\n};\nconst getCurrentPageBorderBox = (draggable, afterCritical) => {\n const original = draggable.page.borderBox;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? offsetByPosition(original, negate(afterCritical.displacedBy.point)) : original;\n};\n\nvar getClosestDraggable = ({\n pageBorderBoxCenter,\n viewport,\n destination,\n insideDestination,\n afterCritical\n}) => {\n const sorted = insideDestination.filter(draggable => isTotallyVisible({\n target: getCurrentPageBorderBox(draggable, afterCritical),\n destination,\n viewport: viewport.frame,\n withDroppableDisplacement: true\n })).sort((a, b) => {\n const distanceToA = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(a, afterCritical)));\n const distanceToB = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(b, afterCritical)));\n if (distanceToA < distanceToB) {\n return -1;\n }\n if (distanceToB < distanceToA) {\n return 1;\n }\n return a.descriptor.index - b.descriptor.index;\n });\n return sorted[0] || null;\n};\n\nvar getDisplacedBy = memoizeOne(function getDisplacedBy(axis, displaceBy) {\n const displacement = displaceBy[axis.line];\n return {\n value: displacement,\n point: patch(axis.line, displacement)\n };\n});\n\nconst getRequiredGrowthForPlaceholder = (droppable, placeholderSize, draggables) => {\n const axis = droppable.axis;\n if (droppable.descriptor.mode === 'virtual') {\n return patch(axis.line, placeholderSize[axis.line]);\n }\n const availableSpace = droppable.subject.page.contentBox[axis.size];\n const insideDroppable = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n const spaceUsed = insideDroppable.reduce((sum, dimension) => sum + dimension.client.marginBox[axis.size], 0);\n const requiredSpace = spaceUsed + placeholderSize[axis.line];\n const needsToGrowBy = requiredSpace - availableSpace;\n if (needsToGrowBy <= 0) {\n return null;\n }\n return patch(axis.line, needsToGrowBy);\n};\nconst withMaxScroll = (frame, max) => ({\n ...frame,\n scroll: {\n ...frame.scroll,\n max\n }\n});\nconst addPlaceholder = (droppable, draggable, draggables) => {\n const frame = droppable.frame;\n !!isHomeOf(draggable, droppable) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should not add placeholder space to home list') : invariant() : void 0;\n !!droppable.subject.withPlaceholder ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot add placeholder size to a subject when it already has one') : invariant() : void 0;\n const placeholderSize = getDisplacedBy(droppable.axis, draggable.displaceBy).point;\n const requiredGrowth = getRequiredGrowthForPlaceholder(droppable, placeholderSize, draggables);\n const added = {\n placeholderSize,\n increasedBy: requiredGrowth,\n oldFrameMaxScroll: droppable.frame ? droppable.frame.scroll.max : null\n };\n if (!frame) {\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: droppable.frame\n });\n return {\n ...droppable,\n subject\n };\n }\n const maxScroll = requiredGrowth ? add(frame.scroll.max, requiredGrowth) : frame.scroll.max;\n const newFrame = withMaxScroll(frame, maxScroll);\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: newFrame\n });\n return {\n ...droppable,\n subject,\n frame: newFrame\n };\n};\nconst removePlaceholder = droppable => {\n const added = droppable.subject.withPlaceholder;\n !added ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot remove placeholder form subject when there was none') : invariant() : void 0;\n const frame = droppable.frame;\n if (!frame) {\n const subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: null,\n withPlaceholder: null\n });\n return {\n ...droppable,\n subject\n };\n }\n const oldMaxScroll = added.oldFrameMaxScroll;\n !oldMaxScroll ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected droppable with frame to have old max frame scroll when removing placeholder') : invariant() : void 0;\n const newFrame = withMaxScroll(frame, oldMaxScroll);\n const subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: newFrame,\n withPlaceholder: null\n });\n return {\n ...droppable,\n subject,\n frame: newFrame\n };\n};\n\nvar moveToNewDroppable = ({\n previousPageBorderBoxCenter,\n moveRelativeTo,\n insideDestination,\n draggable,\n draggables,\n destination,\n viewport,\n afterCritical\n}) => {\n if (!moveRelativeTo) {\n if (insideDestination.length) {\n return null;\n }\n const proposed = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: 0\n }\n }\n };\n const proposedPageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact: proposed,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const withPlaceholder = isHomeOf(draggable, destination) ? destination : addPlaceholder(destination, draggable, draggables);\n const isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable,\n destination: withPlaceholder,\n newPageBorderBoxCenter: proposedPageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n return isVisibleInNewLocation ? proposed : null;\n }\n const isGoingBeforeTarget = Boolean(previousPageBorderBoxCenter[destination.axis.line] <= moveRelativeTo.page.borderBox.center[destination.axis.line]);\n const proposedIndex = (() => {\n const relativeTo = moveRelativeTo.descriptor.index;\n if (moveRelativeTo.descriptor.id === draggable.descriptor.id) {\n return relativeTo;\n }\n if (isGoingBeforeTarget) {\n return relativeTo;\n }\n return relativeTo + 1;\n })();\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n displacedBy,\n last: emptyGroups,\n index: proposedIndex\n });\n};\n\nvar moveCrossAxis = ({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n isOver,\n draggables,\n droppables,\n viewport,\n afterCritical\n}) => {\n const destination = getBestCrossAxisDroppable({\n isMovingForward,\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n source: isOver,\n droppables,\n viewport\n });\n if (!destination) {\n return null;\n }\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const moveRelativeTo = getClosestDraggable({\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n viewport,\n destination,\n insideDestination,\n afterCritical\n });\n const impact = moveToNewDroppable({\n previousPageBorderBoxCenter,\n destination,\n draggable,\n draggables,\n moveRelativeTo,\n insideDestination,\n viewport,\n afterCritical\n });\n if (!impact) {\n return null;\n }\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n return {\n clientSelection,\n impact,\n scrollJumpRequest: null\n };\n};\n\nvar whatIsDraggedOver = impact => {\n const at = impact.at;\n if (!at) {\n return null;\n }\n if (at.type === 'REORDER') {\n return at.destination.droppableId;\n }\n return at.combine.droppableId;\n};\n\nconst getDroppableOver$1 = (impact, droppables) => {\n const id = whatIsDraggedOver(impact);\n return id ? droppables[id] : null;\n};\nvar moveInDirection = ({\n state,\n type\n}) => {\n const isActuallyOver = getDroppableOver$1(state.impact, state.dimensions.droppables);\n const isMainAxisMovementAllowed = Boolean(isActuallyOver);\n const home = state.dimensions.droppables[state.critical.droppable.id];\n const isOver = isActuallyOver || home;\n const direction = isOver.axis.direction;\n const isMovingOnMainAxis = direction === 'vertical' && (type === 'MOVE_UP' || type === 'MOVE_DOWN') || direction === 'horizontal' && (type === 'MOVE_LEFT' || type === 'MOVE_RIGHT');\n if (isMovingOnMainAxis && !isMainAxisMovementAllowed) {\n return null;\n }\n const isMovingForward = type === 'MOVE_DOWN' || type === 'MOVE_RIGHT';\n const draggable = state.dimensions.draggables[state.critical.draggable.id];\n const previousPageBorderBoxCenter = state.current.page.borderBoxCenter;\n const {\n draggables,\n droppables\n } = state.dimensions;\n return isMovingOnMainAxis ? moveToNextPlace({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n destination: isOver,\n draggables,\n viewport: state.viewport,\n previousClientSelection: state.current.client.selection,\n previousImpact: state.impact,\n afterCritical: state.afterCritical\n }) : moveCrossAxis({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n isOver,\n draggables,\n droppables,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n};\n\nfunction isMovementAllowed(state) {\n return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';\n}\n\nfunction isPositionInFrame(frame) {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return function run(point) {\n return isWithinVertical(point.y) && isWithinHorizontal(point.x);\n };\n}\n\nfunction getHasOverlap(first, second) {\n return first.left < second.right && first.right > second.left && first.top < second.bottom && first.bottom > second.top;\n}\nfunction getFurthestAway({\n pageBorderBox,\n draggable,\n candidates\n}) {\n const startCenter = draggable.page.borderBox.center;\n const sorted = candidates.map(candidate => {\n const axis = candidate.axis;\n const target = patch(candidate.axis.line, pageBorderBox.center[axis.line], candidate.page.borderBox.center[axis.crossAxisLine]);\n return {\n id: candidate.descriptor.id,\n distance: distance(startCenter, target)\n };\n }).sort((a, b) => b.distance - a.distance);\n return sorted[0] ? sorted[0].id : null;\n}\nfunction getDroppableOver({\n pageBorderBox,\n draggable,\n droppables\n}) {\n const candidates = toDroppableList(droppables).filter(item => {\n if (!item.isEnabled) {\n return false;\n }\n const active = item.subject.active;\n if (!active) {\n return false;\n }\n if (!getHasOverlap(pageBorderBox, active)) {\n return false;\n }\n if (isPositionInFrame(active)(pageBorderBox.center)) {\n return true;\n }\n const axis = item.axis;\n const childCenter = active.center[axis.crossAxisLine];\n const crossAxisStart = pageBorderBox[axis.crossAxisStart];\n const crossAxisEnd = pageBorderBox[axis.crossAxisEnd];\n const isContained = isWithin(active[axis.crossAxisStart], active[axis.crossAxisEnd]);\n const isStartContained = isContained(crossAxisStart);\n const isEndContained = isContained(crossAxisEnd);\n if (!isStartContained && !isEndContained) {\n return true;\n }\n if (isStartContained) {\n return crossAxisStart < childCenter;\n }\n return crossAxisEnd > childCenter;\n });\n if (!candidates.length) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0].descriptor.id;\n }\n return getFurthestAway({\n pageBorderBox,\n draggable,\n candidates\n });\n}\n\nconst offsetRectByPosition = (rect, point) => getRect(offsetByPosition(rect, point));\n\nvar withDroppableScroll = (droppable, area) => {\n const frame = droppable.frame;\n if (!frame) {\n return area;\n }\n return offsetRectByPosition(area, frame.scroll.diff.value);\n};\n\nfunction getIsDisplaced({\n displaced,\n id\n}) {\n return Boolean(displaced.visible[id] || displaced.invisible[id]);\n}\n\nfunction atIndex({\n draggable,\n closest,\n inHomeList\n}) {\n if (!closest) {\n return null;\n }\n if (!inHomeList) {\n return closest.descriptor.index;\n }\n if (closest.descriptor.index > draggable.descriptor.index) {\n return closest.descriptor.index - 1;\n }\n return closest.descriptor.index;\n}\nvar getReorderImpact = ({\n pageBorderBoxWithDroppableScroll: targetRect,\n draggable,\n destination,\n insideDestination,\n last,\n viewport,\n afterCritical\n}) => {\n const axis = destination.axis;\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n const displacement = displacedBy.value;\n const targetStart = targetRect[axis.start];\n const targetEnd = targetRect[axis.end];\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const closest = withoutDragging.find(child => {\n const id = child.descriptor.id;\n const childCenter = child.page.borderBox.center[axis.line];\n const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n const isDisplaced = getIsDisplaced({\n displaced: last,\n id\n });\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd <= childCenter;\n }\n return targetStart < childCenter - displacement;\n }\n if (isDisplaced) {\n return targetEnd <= childCenter + displacement;\n }\n return targetStart < childCenter;\n }) || null;\n const newIndex = atIndex({\n draggable,\n closest,\n inHomeList: isHomeOf(draggable, destination)\n });\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last,\n displacedBy,\n index: newIndex\n });\n};\n\nconst combineThresholdDivisor = 4;\nvar getCombineImpact = ({\n draggable,\n pageBorderBoxWithDroppableScroll: targetRect,\n previousImpact,\n destination,\n insideDestination,\n afterCritical\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const axis = destination.axis;\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n const displacement = displacedBy.value;\n const targetStart = targetRect[axis.start];\n const targetEnd = targetRect[axis.end];\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const combineWith = withoutDragging.find(child => {\n const id = child.descriptor.id;\n const childRect = child.page.borderBox;\n const childSize = childRect[axis.size];\n const threshold = childSize / combineThresholdDivisor;\n const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n const isDisplaced = getIsDisplaced({\n displaced: previousImpact.displaced,\n id\n });\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + threshold && targetEnd < childRect[axis.end] - threshold;\n }\n return targetStart > childRect[axis.start] - displacement + threshold && targetStart < childRect[axis.end] - displacement - threshold;\n }\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + displacement + threshold && targetEnd < childRect[axis.end] + displacement - threshold;\n }\n return targetStart > childRect[axis.start] + threshold && targetStart < childRect[axis.end] - threshold;\n });\n if (!combineWith) {\n return null;\n }\n const impact = {\n displacedBy,\n displaced: previousImpact.displaced,\n at: {\n type: 'COMBINE',\n combine: {\n draggableId: combineWith.descriptor.id,\n droppableId: destination.descriptor.id\n }\n }\n };\n return impact;\n};\n\nvar getDragImpact = ({\n pageOffset,\n draggable,\n draggables,\n droppables,\n previousImpact,\n viewport,\n afterCritical\n}) => {\n const pageBorderBox = offsetRectByPosition(draggable.page.borderBox, pageOffset);\n const destinationId = getDroppableOver({\n pageBorderBox,\n draggable,\n droppables\n });\n if (!destinationId) {\n return noImpact;\n }\n const destination = droppables[destinationId];\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const pageBorderBoxWithDroppableScroll = withDroppableScroll(destination, pageBorderBox);\n return getCombineImpact({\n pageBorderBoxWithDroppableScroll,\n draggable,\n previousImpact,\n destination,\n insideDestination,\n afterCritical\n }) || getReorderImpact({\n pageBorderBoxWithDroppableScroll,\n draggable,\n destination,\n insideDestination,\n last: previousImpact.displaced,\n viewport,\n afterCritical\n });\n};\n\nvar patchDroppableMap = (droppables, updated) => ({\n ...droppables,\n [updated.descriptor.id]: updated\n});\n\nconst clearUnusedPlaceholder = ({\n previousImpact,\n impact,\n droppables\n}) => {\n const last = whatIsDraggedOver(previousImpact);\n const now = whatIsDraggedOver(impact);\n if (!last) {\n return droppables;\n }\n if (last === now) {\n return droppables;\n }\n const lastDroppable = droppables[last];\n if (!lastDroppable.subject.withPlaceholder) {\n return droppables;\n }\n const updated = removePlaceholder(lastDroppable);\n return patchDroppableMap(droppables, updated);\n};\nvar recomputePlaceholders = ({\n draggable,\n draggables,\n droppables,\n previousImpact,\n impact\n}) => {\n const cleaned = clearUnusedPlaceholder({\n previousImpact,\n impact,\n droppables\n });\n const isOver = whatIsDraggedOver(impact);\n if (!isOver) {\n return cleaned;\n }\n const droppable = droppables[isOver];\n if (isHomeOf(draggable, droppable)) {\n return cleaned;\n }\n if (droppable.subject.withPlaceholder) {\n return cleaned;\n }\n const patched = addPlaceholder(droppable, draggable, draggables);\n return patchDroppableMap(cleaned, patched);\n};\n\nvar update = ({\n state,\n clientSelection: forcedClientSelection,\n dimensions: forcedDimensions,\n viewport: forcedViewport,\n impact: forcedImpact,\n scrollJumpRequest\n}) => {\n const viewport = forcedViewport || state.viewport;\n const dimensions = forcedDimensions || state.dimensions;\n const clientSelection = forcedClientSelection || state.current.client.selection;\n const offset = subtract(clientSelection, state.initial.client.selection);\n const client = {\n offset,\n selection: clientSelection,\n borderBoxCenter: add(state.initial.client.borderBoxCenter, offset)\n };\n const page = {\n selection: add(client.selection, viewport.scroll.current),\n borderBoxCenter: add(client.borderBoxCenter, viewport.scroll.current),\n offset: add(client.offset, viewport.scroll.diff.value)\n };\n const current = {\n client,\n page\n };\n if (state.phase === 'COLLECTING') {\n return {\n ...state,\n dimensions,\n viewport,\n current\n };\n }\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const newImpact = forcedImpact || getDragImpact({\n pageOffset: page.offset,\n draggable,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact: state.impact,\n viewport,\n afterCritical: state.afterCritical\n });\n const withUpdatedPlaceholders = recomputePlaceholders({\n draggable,\n impact: newImpact,\n previousImpact: state.impact,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables\n });\n const result = {\n ...state,\n current,\n dimensions: {\n draggables: dimensions.draggables,\n droppables: withUpdatedPlaceholders\n },\n impact: newImpact,\n viewport,\n scrollJumpRequest: scrollJumpRequest || null,\n forceShouldAnimate: scrollJumpRequest ? false : null\n };\n return result;\n};\n\nfunction getDraggables(ids, draggables) {\n return ids.map(id => draggables[id]);\n}\nvar recompute = ({\n impact,\n viewport,\n draggables,\n destination,\n forceShouldAnimate\n}) => {\n const last = impact.displaced;\n const afterDragging = getDraggables(last.all, draggables);\n const displaced = getDisplacementGroups({\n afterDragging,\n destination,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n forceShouldAnimate,\n last\n });\n return {\n ...impact,\n displaced\n };\n};\n\nvar getClientBorderBoxCenter = ({\n impact,\n draggable,\n droppable,\n draggables,\n viewport,\n afterCritical\n}) => {\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n });\n return getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n};\n\nvar refreshSnap = ({\n state,\n dimensions: forcedDimensions,\n viewport: forcedViewport\n}) => {\n !(state.movementMode === 'SNAP') ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const needsVisibilityCheck = state.impact;\n const viewport = forcedViewport || state.viewport;\n const dimensions = forcedDimensions || state.dimensions;\n const {\n draggables,\n droppables\n } = dimensions;\n const draggable = draggables[state.critical.draggable.id];\n const isOver = whatIsDraggedOver(needsVisibilityCheck);\n !isOver ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must be over a destination in SNAP movement mode') : invariant() : void 0;\n const destination = droppables[isOver];\n const impact = recompute({\n impact: needsVisibilityCheck,\n viewport,\n destination,\n draggables\n });\n const clientSelection = getClientBorderBoxCenter({\n impact,\n draggable,\n droppable: destination,\n draggables,\n viewport,\n afterCritical: state.afterCritical\n });\n return update({\n impact,\n clientSelection,\n state,\n dimensions,\n viewport\n });\n};\n\nvar getHomeLocation = descriptor => ({\n index: descriptor.index,\n droppableId: descriptor.droppableId\n});\n\nvar getLiftEffect = ({\n draggable,\n home,\n draggables,\n viewport\n}) => {\n const displacedBy = getDisplacedBy(home.axis, draggable.displaceBy);\n const insideHome = getDraggablesInsideDroppable(home.descriptor.id, draggables);\n const rawIndex = insideHome.indexOf(draggable);\n !(rawIndex !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected draggable to be inside home list') : invariant() : void 0;\n const afterDragging = insideHome.slice(rawIndex + 1);\n const effected = afterDragging.reduce((previous, item) => {\n previous[item.descriptor.id] = true;\n return previous;\n }, {});\n const afterCritical = {\n inVirtualList: home.descriptor.mode === 'virtual',\n displacedBy,\n effected\n };\n const displaced = getDisplacementGroups({\n afterDragging,\n destination: home,\n displacedBy,\n last: null,\n viewport: viewport.frame,\n forceShouldAnimate: false\n });\n const impact = {\n displaced,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: getHomeLocation(draggable.descriptor)\n }\n };\n return {\n impact,\n afterCritical\n };\n};\n\nvar patchDimensionMap = (dimensions, updated) => ({\n draggables: dimensions.draggables,\n droppables: patchDroppableMap(dimensions.droppables, updated)\n});\n\nconst start = key => {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\nconst finish = key => {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\n\nvar offsetDraggable = ({\n draggable,\n offset: offset$1,\n initialWindowScroll\n}) => {\n const client = offset(draggable.client, offset$1);\n const page = withScroll(client, initialWindowScroll);\n const moved = {\n ...draggable,\n placeholder: {\n ...draggable.placeholder,\n client\n },\n client,\n page\n };\n return moved;\n};\n\nvar getFrame = droppable => {\n const frame = droppable.frame;\n !frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected Droppable to have a frame') : invariant() : void 0;\n return frame;\n};\n\nvar adjustAdditionsForScrollChanges = ({\n additions,\n updatedDroppables,\n viewport\n}) => {\n const windowScrollChange = viewport.scroll.diff.value;\n return additions.map(draggable => {\n const droppableId = draggable.descriptor.droppableId;\n const modified = updatedDroppables[droppableId];\n const frame = getFrame(modified);\n const droppableScrollChange = frame.scroll.diff.value;\n const totalChange = add(windowScrollChange, droppableScrollChange);\n const moved = offsetDraggable({\n draggable,\n offset: totalChange,\n initialWindowScroll: viewport.scroll.initial\n });\n return moved;\n });\n};\n\nvar publishWhileDraggingInVirtual = ({\n state,\n published\n}) => {\n start();\n const withScrollChange = published.modified.map(update => {\n const existing = state.dimensions.droppables[update.droppableId];\n const scrolled = scrollDroppable(existing, update.scroll);\n return scrolled;\n });\n const droppables = {\n ...state.dimensions.droppables,\n ...toDroppableMap(withScrollChange)\n };\n const updatedAdditions = toDraggableMap(adjustAdditionsForScrollChanges({\n additions: published.additions,\n updatedDroppables: droppables,\n viewport: state.viewport\n }));\n const draggables = {\n ...state.dimensions.draggables,\n ...updatedAdditions\n };\n published.removals.forEach(id => {\n delete draggables[id];\n });\n const dimensions = {\n droppables,\n draggables\n };\n const wasOverId = whatIsDraggedOver(state.impact);\n const wasOver = wasOverId ? dimensions.droppables[wasOverId] : null;\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const home = dimensions.droppables[state.critical.droppable.id];\n const {\n impact: onLiftImpact,\n afterCritical\n } = getLiftEffect({\n draggable,\n home,\n draggables,\n viewport: state.viewport\n });\n const previousImpact = wasOver && wasOver.isCombineEnabled ? state.impact : onLiftImpact;\n const impact = getDragImpact({\n pageOffset: state.current.page.offset,\n draggable: dimensions.draggables[state.critical.draggable.id],\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact,\n viewport: state.viewport,\n afterCritical\n });\n finish();\n const draggingState = {\n ...state,\n phase: 'DRAGGING',\n impact,\n onLiftImpact,\n dimensions,\n afterCritical,\n forceShouldAnimate: false\n };\n if (state.phase === 'COLLECTING') {\n return draggingState;\n }\n const dropPending = {\n ...draggingState,\n phase: 'DROP_PENDING',\n reason: state.reason,\n isWaiting: false\n };\n return dropPending;\n};\n\nconst isSnapping = state => state.movementMode === 'SNAP';\nconst postDroppableChange = (state, updated, isEnabledChanging) => {\n const dimensions = patchDimensionMap(state.dimensions, updated);\n if (!isSnapping(state) || isEnabledChanging) {\n return update({\n state,\n dimensions\n });\n }\n return refreshSnap({\n state,\n dimensions\n });\n};\nfunction removeScrollJumpRequest(state) {\n if (state.isDragging && state.movementMode === 'SNAP') {\n return {\n ...state,\n scrollJumpRequest: null\n };\n }\n return state;\n}\nconst idle$2 = {\n phase: 'IDLE',\n completed: null,\n shouldFlush: false\n};\nvar reducer = (state = idle$2, action) => {\n if (action.type === 'FLUSH') {\n return {\n ...idle$2,\n shouldFlush: true\n };\n }\n if (action.type === 'INITIAL_PUBLISH') {\n !(state.phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'INITIAL_PUBLISH must come after a IDLE phase') : invariant() : void 0;\n const {\n critical,\n clientSelection,\n viewport,\n dimensions,\n movementMode\n } = action.payload;\n const draggable = dimensions.draggables[critical.draggable.id];\n const home = dimensions.droppables[critical.droppable.id];\n const client = {\n selection: clientSelection,\n borderBoxCenter: draggable.client.borderBox.center,\n offset: origin\n };\n const initial = {\n client,\n page: {\n selection: add(client.selection, viewport.scroll.initial),\n borderBoxCenter: add(client.selection, viewport.scroll.initial),\n offset: add(client.selection, viewport.scroll.diff.value)\n }\n };\n const isWindowScrollAllowed = toDroppableList(dimensions.droppables).every(item => !item.isFixedOnPage);\n const {\n impact,\n afterCritical\n } = getLiftEffect({\n draggable,\n home,\n draggables: dimensions.draggables,\n viewport\n });\n const result = {\n phase: 'DRAGGING',\n isDragging: true,\n critical,\n movementMode,\n dimensions,\n initial,\n current: initial,\n isWindowScrollAllowed,\n impact,\n afterCritical,\n onLiftImpact: impact,\n viewport,\n scrollJumpRequest: null,\n forceShouldAnimate: null\n };\n return result;\n }\n if (action.type === 'COLLECTION_STARTING') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Collection cannot start from phase ${state.phase}`) : invariant() : void 0;\n const result = {\n ...state,\n phase: 'COLLECTING'\n };\n return result;\n }\n if (action.type === 'PUBLISH_WHILE_DRAGGING') {\n !(state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unexpected ${action.type} received in phase ${state.phase}`) : invariant() : void 0;\n return publishWhileDraggingInVirtual({\n state,\n published: action.payload\n });\n }\n if (action.type === 'MOVE') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : invariant() : void 0;\n const {\n client: clientSelection\n } = action.payload;\n if (isEqual$1(clientSelection, state.current.client.selection)) {\n return state;\n }\n return update({\n state,\n clientSelection,\n impact: isSnapping(state) ? state.impact : null\n });\n }\n if (action.type === 'UPDATE_DROPPABLE_SCROLL') {\n if (state.phase === 'DROP_PENDING') {\n return removeScrollJumpRequest(state);\n }\n if (state.phase === 'COLLECTING') {\n return removeScrollJumpRequest(state);\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n newScroll\n } = action.payload;\n const target = state.dimensions.droppables[id];\n if (!target) {\n return state;\n }\n const scrolled = scrollDroppable(target, newScroll);\n return postDroppableChange(state, scrolled, false);\n }\n if (action.type === 'UPDATE_DROPPABLE_IS_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n isEnabled\n } = action.payload;\n const target = state.dimensions.droppables[id];\n !target ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its enabled state`) : invariant() : void 0;\n !(target.isEnabled !== isEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Trying to set droppable isEnabled to ${String(isEnabled)}\n but it is already ${String(target.isEnabled)}`) : invariant() : void 0;\n const updated = {\n ...target,\n isEnabled\n };\n return postDroppableChange(state, updated, true);\n }\n if (action.type === 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n isCombineEnabled\n } = action.payload;\n const target = state.dimensions.droppables[id];\n !target ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its isCombineEnabled state`) : invariant() : void 0;\n !(target.isCombineEnabled !== isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Trying to set droppable isCombineEnabled to ${String(isCombineEnabled)}\n but it is already ${String(target.isCombineEnabled)}`) : invariant() : void 0;\n const updated = {\n ...target,\n isCombineEnabled\n };\n return postDroppableChange(state, updated, true);\n }\n if (action.type === 'MOVE_BY_WINDOW_SCROLL') {\n if (state.phase === 'DROP_PENDING' || state.phase === 'DROP_ANIMATING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot move by window in phase ${state.phase}`) : invariant() : void 0;\n !state.isWindowScrollAllowed ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Window scrolling is currently not supported for fixed lists') : invariant() : void 0;\n const newScroll = action.payload.newScroll;\n if (isEqual$1(state.viewport.scroll.current, newScroll)) {\n return removeScrollJumpRequest(state);\n }\n const viewport = scrollViewport(state.viewport, newScroll);\n if (isSnapping(state)) {\n return refreshSnap({\n state,\n viewport\n });\n }\n return update({\n state,\n viewport\n });\n }\n if (action.type === 'UPDATE_VIEWPORT_MAX_SCROLL') {\n if (!isMovementAllowed(state)) {\n return state;\n }\n const maxScroll = action.payload.maxScroll;\n if (isEqual$1(maxScroll, state.viewport.scroll.max)) {\n return state;\n }\n const withMaxScroll = {\n ...state.viewport,\n scroll: {\n ...state.viewport.scroll,\n max: maxScroll\n }\n };\n return {\n ...state,\n viewport: withMaxScroll\n };\n }\n if (action.type === 'MOVE_UP' || action.type === 'MOVE_DOWN' || action.type === 'MOVE_LEFT' || action.type === 'MOVE_RIGHT') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} received while not in DRAGGING phase`) : invariant() : void 0;\n const result = moveInDirection({\n state,\n type: action.type\n });\n if (!result) {\n return state;\n }\n return update({\n state,\n impact: result.impact,\n clientSelection: result.clientSelection,\n scrollJumpRequest: result.scrollJumpRequest\n });\n }\n if (action.type === 'DROP_PENDING') {\n const reason = action.payload.reason;\n !(state.phase === 'COLLECTING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only move into the DROP_PENDING phase from the COLLECTING phase') : invariant() : void 0;\n const newState = {\n ...state,\n phase: 'DROP_PENDING',\n isWaiting: true,\n reason\n };\n return newState;\n }\n if (action.type === 'DROP_ANIMATE') {\n const {\n completed,\n dropDuration,\n newHomeClientOffset\n } = action.payload;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot animate drop from phase ${state.phase}`) : invariant() : void 0;\n const result = {\n phase: 'DROP_ANIMATING',\n completed,\n dropDuration,\n newHomeClientOffset,\n dimensions: state.dimensions\n };\n return result;\n }\n if (action.type === 'DROP_COMPLETE') {\n const {\n completed\n } = action.payload;\n return {\n phase: 'IDLE',\n completed,\n shouldFlush: false\n };\n }\n return state;\n};\n\nfunction guard(action, predicate) {\n return action instanceof Object && 'type' in action && action.type === predicate;\n}\nconst beforeInitialCapture = args => ({\n type: 'BEFORE_INITIAL_CAPTURE',\n payload: args\n});\nconst lift$1 = args => ({\n type: 'LIFT',\n payload: args\n});\nconst initialPublish = args => ({\n type: 'INITIAL_PUBLISH',\n payload: args\n});\nconst publishWhileDragging = args => ({\n type: 'PUBLISH_WHILE_DRAGGING',\n payload: args\n});\nconst collectionStarting = () => ({\n type: 'COLLECTION_STARTING',\n payload: null\n});\nconst updateDroppableScroll = args => ({\n type: 'UPDATE_DROPPABLE_SCROLL',\n payload: args\n});\nconst updateDroppableIsEnabled = args => ({\n type: 'UPDATE_DROPPABLE_IS_ENABLED',\n payload: args\n});\nconst updateDroppableIsCombineEnabled = args => ({\n type: 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED',\n payload: args\n});\nconst move = args => ({\n type: 'MOVE',\n payload: args\n});\nconst moveByWindowScroll = args => ({\n type: 'MOVE_BY_WINDOW_SCROLL',\n payload: args\n});\nconst updateViewportMaxScroll = args => ({\n type: 'UPDATE_VIEWPORT_MAX_SCROLL',\n payload: args\n});\nconst moveUp = () => ({\n type: 'MOVE_UP',\n payload: null\n});\nconst moveDown = () => ({\n type: 'MOVE_DOWN',\n payload: null\n});\nconst moveRight = () => ({\n type: 'MOVE_RIGHT',\n payload: null\n});\nconst moveLeft = () => ({\n type: 'MOVE_LEFT',\n payload: null\n});\nconst flush = () => ({\n type: 'FLUSH',\n payload: null\n});\nconst animateDrop = args => ({\n type: 'DROP_ANIMATE',\n payload: args\n});\nconst completeDrop = args => ({\n type: 'DROP_COMPLETE',\n payload: args\n});\nconst drop = args => ({\n type: 'DROP',\n payload: args\n});\nconst dropPending = args => ({\n type: 'DROP_PENDING',\n payload: args\n});\nconst dropAnimationFinished = () => ({\n type: 'DROP_ANIMATION_FINISHED',\n payload: null\n});\n\nfunction checkIndexes(insideDestination) {\n if (insideDestination.length <= 1) {\n return;\n }\n const indexes = insideDestination.map(d => d.descriptor.index);\n const errors = {};\n for (let i = 1; i < indexes.length; i++) {\n const current = indexes[i];\n const previous = indexes[i - 1];\n if (current !== previous + 1) {\n errors[current] = true;\n }\n }\n if (!Object.keys(errors).length) {\n return;\n }\n const formatted = indexes.map(index => {\n const hasError = Boolean(errors[index]);\n return hasError ? `[🔥${index}]` : `${index}`;\n }).join(', ');\n process.env.NODE_ENV !== \"production\" ? warning(`\n Detected non-consecutive <Draggable /> indexes.\n\n (This can cause unexpected bugs)\n\n ${formatted}\n `) : void 0;\n}\nfunction validateDimensions(critical, dimensions) {\n if (process.env.NODE_ENV !== 'production') {\n const insideDestination = getDraggablesInsideDroppable(critical.droppable.id, dimensions.draggables);\n checkIndexes(insideDestination);\n }\n}\n\nvar lift = marshal => ({\n getState,\n dispatch\n}) => next => action => {\n if (!guard(action, 'LIFT')) {\n next(action);\n return;\n }\n const {\n id,\n clientSelection,\n movementMode\n } = action.payload;\n const initial = getState();\n if (initial.phase === 'DROP_ANIMATING') {\n dispatch(completeDrop({\n completed: initial.completed\n }));\n }\n !(getState().phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase to start a drag') : invariant() : void 0;\n dispatch(flush());\n dispatch(beforeInitialCapture({\n draggableId: id,\n movementMode\n }));\n const scrollOptions = {\n shouldPublishImmediately: movementMode === 'SNAP'\n };\n const request = {\n draggableId: id,\n scrollOptions\n };\n const {\n critical,\n dimensions,\n viewport\n } = marshal.startPublishing(request);\n validateDimensions(critical, dimensions);\n dispatch(initialPublish({\n critical,\n dimensions,\n clientSelection,\n movementMode,\n viewport\n }));\n};\n\nvar style = marshal => () => next => action => {\n if (guard(action, 'INITIAL_PUBLISH')) {\n marshal.dragging();\n }\n if (guard(action, 'DROP_ANIMATE')) {\n marshal.dropping(action.payload.completed.result.reason);\n }\n if (guard(action, 'FLUSH') || guard(action, 'DROP_COMPLETE')) {\n marshal.resting();\n }\n next(action);\n};\n\nconst curves = {\n outOfTheWay: 'cubic-bezier(0.2, 0, 0, 1)',\n drop: 'cubic-bezier(.2,1,.1,1)'\n};\nconst combine = {\n opacity: {\n drop: 0,\n combining: 0.7\n },\n scale: {\n drop: 0.75\n }\n};\nconst timings = {\n outOfTheWay: 0.2,\n minDropTime: 0.33,\n maxDropTime: 0.55\n};\nconst outOfTheWayTiming = `${timings.outOfTheWay}s ${curves.outOfTheWay}`;\nconst transitions = {\n fluid: `opacity ${outOfTheWayTiming}`,\n snap: `transform ${outOfTheWayTiming}, opacity ${outOfTheWayTiming}`,\n drop: duration => {\n const timing = `${duration}s ${curves.drop}`;\n return `transform ${timing}, opacity ${timing}`;\n },\n outOfTheWay: `transform ${outOfTheWayTiming}`,\n placeholder: `height ${outOfTheWayTiming}, width ${outOfTheWayTiming}, margin ${outOfTheWayTiming}`\n};\nconst moveTo = offset => isEqual$1(offset, origin) ? undefined : `translate(${offset.x}px, ${offset.y}px)`;\nconst transforms = {\n moveTo,\n drop: (offset, isCombining) => {\n const translate = moveTo(offset);\n if (!translate) {\n return undefined;\n }\n if (!isCombining) {\n return translate;\n }\n return `${translate} scale(${combine.scale.drop})`;\n }\n};\n\nconst {\n minDropTime,\n maxDropTime\n} = timings;\nconst dropTimeRange = maxDropTime - minDropTime;\nconst maxDropTimeAtDistance = 1500;\nconst cancelDropModifier = 0.6;\nvar getDropDuration = ({\n current,\n destination,\n reason\n}) => {\n const distance$1 = distance(current, destination);\n if (distance$1 <= 0) {\n return minDropTime;\n }\n if (distance$1 >= maxDropTimeAtDistance) {\n return maxDropTime;\n }\n const percentage = distance$1 / maxDropTimeAtDistance;\n const duration = minDropTime + dropTimeRange * percentage;\n const withDuration = reason === 'CANCEL' ? duration * cancelDropModifier : duration;\n return Number(withDuration.toFixed(2));\n};\n\nvar getNewHomeClientOffset = ({\n impact,\n draggable,\n dimensions,\n viewport,\n afterCritical\n}) => {\n const {\n draggables,\n droppables\n } = dimensions;\n const droppableId = whatIsDraggedOver(impact);\n const destination = droppableId ? droppables[droppableId] : null;\n const home = droppables[draggable.descriptor.droppableId];\n const newClientCenter = getClientBorderBoxCenter({\n impact,\n draggable,\n draggables,\n afterCritical,\n droppable: destination || home,\n viewport\n });\n const offset = subtract(newClientCenter, draggable.client.borderBox.center);\n return offset;\n};\n\nvar getDropImpact = ({\n draggables,\n reason,\n lastImpact,\n home,\n viewport,\n onLiftImpact\n}) => {\n if (!lastImpact.at || reason !== 'DROP') {\n const recomputedHomeImpact = recompute({\n draggables,\n impact: onLiftImpact,\n destination: home,\n viewport,\n forceShouldAnimate: true\n });\n return {\n impact: recomputedHomeImpact,\n didDropInsideDroppable: false\n };\n }\n if (lastImpact.at.type === 'REORDER') {\n return {\n impact: lastImpact,\n didDropInsideDroppable: true\n };\n }\n const withoutMovement = {\n ...lastImpact,\n displaced: emptyGroups\n };\n return {\n impact: withoutMovement,\n didDropInsideDroppable: true\n };\n};\n\nconst dropMiddleware = ({\n getState,\n dispatch\n}) => next => action => {\n if (!guard(action, 'DROP')) {\n next(action);\n return;\n }\n const state = getState();\n const reason = action.payload.reason;\n if (state.phase === 'COLLECTING') {\n dispatch(dropPending({\n reason\n }));\n return;\n }\n if (state.phase === 'IDLE') {\n return;\n }\n const isWaitingForDrop = state.phase === 'DROP_PENDING' && state.isWaiting;\n !!isWaitingForDrop ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A DROP action occurred while DROP_PENDING and still waiting') : invariant() : void 0;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot drop in phase: ${state.phase}`) : invariant() : void 0;\n const critical = state.critical;\n const dimensions = state.dimensions;\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const {\n impact,\n didDropInsideDroppable\n } = getDropImpact({\n reason,\n lastImpact: state.impact,\n afterCritical: state.afterCritical,\n onLiftImpact: state.onLiftImpact,\n home: state.dimensions.droppables[state.critical.droppable.id],\n viewport: state.viewport,\n draggables: state.dimensions.draggables\n });\n const destination = didDropInsideDroppable ? tryGetDestination(impact) : null;\n const combine = didDropInsideDroppable ? tryGetCombine(impact) : null;\n const source = {\n index: critical.draggable.index,\n droppableId: critical.droppable.id\n };\n const result = {\n draggableId: draggable.descriptor.id,\n type: draggable.descriptor.type,\n source,\n reason,\n mode: state.movementMode,\n destination,\n combine\n };\n const newHomeClientOffset = getNewHomeClientOffset({\n impact,\n draggable,\n dimensions,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n const completed = {\n critical: state.critical,\n afterCritical: state.afterCritical,\n result,\n impact\n };\n const isAnimationRequired = !isEqual$1(state.current.client.offset, newHomeClientOffset) || Boolean(result.combine);\n if (!isAnimationRequired) {\n dispatch(completeDrop({\n completed\n }));\n return;\n }\n const dropDuration = getDropDuration({\n current: state.current.client.offset,\n destination: newHomeClientOffset,\n reason\n });\n const args = {\n newHomeClientOffset,\n dropDuration,\n completed\n };\n dispatch(animateDrop(args));\n};\n\nvar getWindowScroll = () => ({\n x: window.pageXOffset,\n y: window.pageYOffset\n});\n\nfunction getWindowScrollBinding(update) {\n return {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: event => {\n if (event.target !== window && event.target !== window.document) {\n return;\n }\n update();\n }\n };\n}\nfunction getScrollListener({\n onWindowScroll\n}) {\n function updateScroll() {\n onWindowScroll(getWindowScroll());\n }\n const scheduled = rafSchd(updateScroll);\n const binding = getWindowScrollBinding(scheduled);\n let unbind = noop$2;\n function isActive() {\n return unbind !== noop$2;\n }\n function start() {\n !!isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start scroll listener when already active') : invariant() : void 0;\n unbind = bindEvents(window, [binding]);\n }\n function stop() {\n !isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop scroll listener when not active') : invariant() : void 0;\n scheduled.cancel();\n unbind();\n unbind = noop$2;\n }\n return {\n start,\n stop,\n isActive\n };\n}\n\nconst shouldStop$1 = action => guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATE') || guard(action, 'FLUSH');\nconst scrollListener = store => {\n const listener = getScrollListener({\n onWindowScroll: newScroll => {\n store.dispatch(moveByWindowScroll({\n newScroll\n }));\n }\n });\n return next => action => {\n if (!listener.isActive() && guard(action, 'INITIAL_PUBLISH')) {\n listener.start();\n }\n if (listener.isActive() && shouldStop$1(action)) {\n listener.stop();\n }\n next(action);\n };\n};\n\nvar getExpiringAnnounce = announce => {\n let wasCalled = false;\n let isExpired = false;\n const timeoutId = setTimeout(() => {\n isExpired = true;\n });\n const result = message => {\n if (wasCalled) {\n process.env.NODE_ENV !== \"production\" ? warning('Announcement already made. Not making a second announcement') : void 0;\n return;\n }\n if (isExpired) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Announcements cannot be made asynchronously.\n Default message has already been announced.\n `) : void 0;\n return;\n }\n wasCalled = true;\n announce(message);\n clearTimeout(timeoutId);\n };\n result.wasCalled = () => wasCalled;\n return result;\n};\n\nvar getAsyncMarshal = () => {\n const entries = [];\n const execute = timerId => {\n const index = entries.findIndex(item => item.timerId === timerId);\n !(index !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find timer') : invariant() : void 0;\n const [entry] = entries.splice(index, 1);\n entry.callback();\n };\n const add = fn => {\n const timerId = setTimeout(() => execute(timerId));\n const entry = {\n timerId,\n callback: fn\n };\n entries.push(entry);\n };\n const flush = () => {\n if (!entries.length) {\n return;\n }\n const shallow = [...entries];\n entries.length = 0;\n shallow.forEach(entry => {\n clearTimeout(entry.timerId);\n entry.callback();\n });\n };\n return {\n add,\n flush\n };\n};\n\nconst areLocationsEqual = (first, second) => {\n if (first == null && second == null) {\n return true;\n }\n if (first == null || second == null) {\n return false;\n }\n return first.droppableId === second.droppableId && first.index === second.index;\n};\nconst isCombineEqual = (first, second) => {\n if (first == null && second == null) {\n return true;\n }\n if (first == null || second == null) {\n return false;\n }\n return first.draggableId === second.draggableId && first.droppableId === second.droppableId;\n};\nconst isCriticalEqual = (first, second) => {\n if (first === second) {\n return true;\n }\n const isDraggableEqual = first.draggable.id === second.draggable.id && first.draggable.droppableId === second.draggable.droppableId && first.draggable.type === second.draggable.type && first.draggable.index === second.draggable.index;\n const isDroppableEqual = first.droppable.id === second.droppable.id && first.droppable.type === second.droppable.type;\n return isDraggableEqual && isDroppableEqual;\n};\n\nconst withTimings = (key, fn) => {\n start();\n fn();\n finish();\n};\nconst getDragStart = (critical, mode) => ({\n draggableId: critical.draggable.id,\n type: critical.droppable.type,\n source: {\n droppableId: critical.droppable.id,\n index: critical.draggable.index\n },\n mode\n});\nfunction execute(responder, data, announce, getDefaultMessage) {\n if (!responder) {\n announce(getDefaultMessage(data));\n return;\n }\n const willExpire = getExpiringAnnounce(announce);\n const provided = {\n announce: willExpire\n };\n responder(data, provided);\n if (!willExpire.wasCalled()) {\n announce(getDefaultMessage(data));\n }\n}\nvar getPublisher = (getResponders, announce) => {\n const asyncMarshal = getAsyncMarshal();\n let dragging = null;\n const beforeCapture = (draggableId, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeCapture as a drag start has already been published') : invariant() : void 0;\n withTimings('onBeforeCapture', () => {\n const fn = getResponders().onBeforeCapture;\n if (fn) {\n const before = {\n draggableId,\n mode\n };\n fn(before);\n }\n });\n };\n const beforeStart = (critical, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant() : void 0;\n withTimings('onBeforeDragStart', () => {\n const fn = getResponders().onBeforeDragStart;\n if (fn) {\n fn(getDragStart(critical, mode));\n }\n });\n };\n const start = (critical, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant() : void 0;\n const data = getDragStart(critical, mode);\n dragging = {\n mode,\n lastCritical: critical,\n lastLocation: data.source,\n lastCombine: null\n };\n asyncMarshal.add(() => {\n withTimings('onDragStart', () => execute(getResponders().onDragStart, data, announce, preset.onDragStart));\n });\n };\n const update = (critical, impact) => {\n const location = tryGetDestination(impact);\n const combine = tryGetCombine(impact);\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragMove when onDragStart has not been called') : invariant() : void 0;\n const hasCriticalChanged = !isCriticalEqual(critical, dragging.lastCritical);\n if (hasCriticalChanged) {\n dragging.lastCritical = critical;\n }\n const hasLocationChanged = !areLocationsEqual(dragging.lastLocation, location);\n if (hasLocationChanged) {\n dragging.lastLocation = location;\n }\n const hasGroupingChanged = !isCombineEqual(dragging.lastCombine, combine);\n if (hasGroupingChanged) {\n dragging.lastCombine = combine;\n }\n if (!hasCriticalChanged && !hasLocationChanged && !hasGroupingChanged) {\n return;\n }\n const data = {\n ...getDragStart(critical, dragging.mode),\n combine,\n destination: location\n };\n asyncMarshal.add(() => {\n withTimings('onDragUpdate', () => execute(getResponders().onDragUpdate, data, announce, preset.onDragUpdate));\n });\n };\n const flush = () => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only flush responders while dragging') : invariant() : void 0;\n asyncMarshal.flush();\n };\n const drop = result => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragEnd when there is no matching onDragStart') : invariant() : void 0;\n dragging = null;\n withTimings('onDragEnd', () => execute(getResponders().onDragEnd, result, announce, preset.onDragEnd));\n };\n const abort = () => {\n if (!dragging) {\n return;\n }\n const result = {\n ...getDragStart(dragging.lastCritical, dragging.mode),\n combine: null,\n destination: null,\n reason: 'CANCEL'\n };\n drop(result);\n };\n return {\n beforeCapture,\n beforeStart,\n start,\n update,\n flush,\n drop,\n abort\n };\n};\n\nvar responders = (getResponders, announce) => {\n const publisher = getPublisher(getResponders, announce);\n return store => next => action => {\n if (guard(action, 'BEFORE_INITIAL_CAPTURE')) {\n publisher.beforeCapture(action.payload.draggableId, action.payload.movementMode);\n return;\n }\n if (guard(action, 'INITIAL_PUBLISH')) {\n const critical = action.payload.critical;\n publisher.beforeStart(critical, action.payload.movementMode);\n next(action);\n publisher.start(critical, action.payload.movementMode);\n return;\n }\n if (guard(action, 'DROP_COMPLETE')) {\n const result = action.payload.completed.result;\n publisher.flush();\n next(action);\n publisher.drop(result);\n return;\n }\n next(action);\n if (guard(action, 'FLUSH')) {\n publisher.abort();\n return;\n }\n const state = store.getState();\n if (state.phase === 'DRAGGING') {\n publisher.update(state.critical, state.impact);\n }\n };\n};\n\nconst dropAnimationFinishMiddleware = store => next => action => {\n if (!guard(action, 'DROP_ANIMATION_FINISHED')) {\n next(action);\n return;\n }\n const state = store.getState();\n !(state.phase === 'DROP_ANIMATING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot finish a drop animating when no drop is occurring') : invariant() : void 0;\n store.dispatch(completeDrop({\n completed: state.completed\n }));\n};\n\nconst dropAnimationFlushOnScrollMiddleware = store => {\n let unbind = null;\n let frameId = null;\n function clear() {\n if (frameId) {\n cancelAnimationFrame(frameId);\n frameId = null;\n }\n if (unbind) {\n unbind();\n unbind = null;\n }\n }\n return next => action => {\n if (guard(action, 'FLUSH') || guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATION_FINISHED')) {\n clear();\n }\n next(action);\n if (!guard(action, 'DROP_ANIMATE')) {\n return;\n }\n const binding = {\n eventName: 'scroll',\n options: {\n capture: true,\n passive: false,\n once: true\n },\n fn: function flushDropAnimation() {\n const state = store.getState();\n if (state.phase === 'DROP_ANIMATING') {\n store.dispatch(dropAnimationFinished());\n }\n }\n };\n frameId = requestAnimationFrame(() => {\n frameId = null;\n unbind = bindEvents(window, [binding]);\n });\n };\n};\n\nvar dimensionMarshalStopper = marshal => () => next => action => {\n if (guard(action, 'DROP_COMPLETE') || guard(action, 'FLUSH') || guard(action, 'DROP_ANIMATE')) {\n marshal.stopPublishing();\n }\n next(action);\n};\n\nvar focus = marshal => {\n let isWatching = false;\n return () => next => action => {\n if (guard(action, 'INITIAL_PUBLISH')) {\n isWatching = true;\n marshal.tryRecordFocus(action.payload.critical.draggable.id);\n next(action);\n marshal.tryRestoreFocusRecorded();\n return;\n }\n next(action);\n if (!isWatching) {\n return;\n }\n if (guard(action, 'FLUSH')) {\n isWatching = false;\n marshal.tryRestoreFocusRecorded();\n return;\n }\n if (guard(action, 'DROP_COMPLETE')) {\n isWatching = false;\n const result = action.payload.completed.result;\n if (result.combine) {\n marshal.tryShiftRecord(result.draggableId, result.combine.draggableId);\n }\n marshal.tryRestoreFocusRecorded();\n }\n };\n};\n\nconst shouldStop = action => guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATE') || guard(action, 'FLUSH');\nvar autoScroll = autoScroller => store => next => action => {\n if (shouldStop(action)) {\n autoScroller.stop();\n next(action);\n return;\n }\n if (guard(action, 'INITIAL_PUBLISH')) {\n next(action);\n const state = store.getState();\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected phase to be DRAGGING after INITIAL_PUBLISH') : invariant() : void 0;\n autoScroller.start(state);\n return;\n }\n next(action);\n autoScroller.scroll(store.getState());\n};\n\nconst pendingDrop = store => next => action => {\n next(action);\n if (!guard(action, 'PUBLISH_WHILE_DRAGGING')) {\n return;\n }\n const postActionState = store.getState();\n if (postActionState.phase !== 'DROP_PENDING') {\n return;\n }\n if (postActionState.isWaiting) {\n return;\n }\n store.dispatch(drop({\n reason: postActionState.reason\n }));\n};\n\nconst composeEnhancers = process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n name: '@hello-pangea/dnd'\n}) : compose;\nvar createStore = ({\n dimensionMarshal,\n focusMarshal,\n styleMarshal,\n getResponders,\n announce,\n autoScroller\n}) => createStore$1(reducer, composeEnhancers(applyMiddleware(style(styleMarshal), dimensionMarshalStopper(dimensionMarshal), lift(dimensionMarshal), dropMiddleware, dropAnimationFinishMiddleware, dropAnimationFlushOnScrollMiddleware, pendingDrop, autoScroll(autoScroller), scrollListener, focus(focusMarshal), responders(getResponders, announce))));\n\nconst clean$1 = () => ({\n additions: {},\n removals: {},\n modified: {}\n});\nfunction createPublisher({\n registry,\n callbacks\n}) {\n let staging = clean$1();\n let frameId = null;\n const collect = () => {\n if (frameId) {\n return;\n }\n callbacks.collectionStarting();\n frameId = requestAnimationFrame(() => {\n frameId = null;\n start();\n const {\n additions,\n removals,\n modified\n } = staging;\n const added = Object.keys(additions).map(id => registry.draggable.getById(id).getDimension(origin)).sort((a, b) => a.descriptor.index - b.descriptor.index);\n const updated = Object.keys(modified).map(id => {\n const entry = registry.droppable.getById(id);\n const scroll = entry.callbacks.getScrollWhileDragging();\n return {\n droppableId: id,\n scroll\n };\n });\n const result = {\n additions: added,\n removals: Object.keys(removals),\n modified: updated\n };\n staging = clean$1();\n finish();\n callbacks.publish(result);\n });\n };\n const add = entry => {\n const id = entry.descriptor.id;\n staging.additions[id] = entry;\n staging.modified[entry.descriptor.droppableId] = true;\n if (staging.removals[id]) {\n delete staging.removals[id];\n }\n collect();\n };\n const remove = entry => {\n const descriptor = entry.descriptor;\n staging.removals[descriptor.id] = true;\n staging.modified[descriptor.droppableId] = true;\n if (staging.additions[descriptor.id]) {\n delete staging.additions[descriptor.id];\n }\n collect();\n };\n const stop = () => {\n if (!frameId) {\n return;\n }\n cancelAnimationFrame(frameId);\n frameId = null;\n staging = clean$1();\n };\n return {\n add,\n remove,\n stop\n };\n}\n\nvar getMaxScroll = ({\n scrollHeight,\n scrollWidth,\n height,\n width\n}) => {\n const maxScroll = subtract({\n x: scrollWidth,\n y: scrollHeight\n }, {\n x: width,\n y: height\n });\n const adjustedMaxScroll = {\n x: Math.max(0, maxScroll.x),\n y: Math.max(0, maxScroll.y)\n };\n return adjustedMaxScroll;\n};\n\nvar getDocumentElement = () => {\n const doc = document.documentElement;\n !doc ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.documentElement') : invariant() : void 0;\n return doc;\n};\n\nvar getMaxWindowScroll = () => {\n const doc = getDocumentElement();\n const maxScroll = getMaxScroll({\n scrollHeight: doc.scrollHeight,\n scrollWidth: doc.scrollWidth,\n width: doc.clientWidth,\n height: doc.clientHeight\n });\n return maxScroll;\n};\n\nvar getViewport = () => {\n const scroll = getWindowScroll();\n const maxScroll = getMaxWindowScroll();\n const top = scroll.y;\n const left = scroll.x;\n const doc = getDocumentElement();\n const width = doc.clientWidth;\n const height = doc.clientHeight;\n const right = left + width;\n const bottom = top + height;\n const frame = getRect({\n top,\n left,\n right,\n bottom\n });\n const viewport = {\n frame,\n scroll: {\n initial: scroll,\n current: scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n return viewport;\n};\n\nvar getInitialPublish = ({\n critical,\n scrollOptions,\n registry\n}) => {\n start();\n const viewport = getViewport();\n const windowScroll = viewport.scroll.current;\n const home = critical.droppable;\n const droppables = registry.droppable.getAllByType(home.type).map(entry => entry.callbacks.getDimensionAndWatchScroll(windowScroll, scrollOptions));\n const draggables = registry.draggable.getAllByType(critical.draggable.type).map(entry => entry.getDimension(windowScroll));\n const dimensions = {\n draggables: toDraggableMap(draggables),\n droppables: toDroppableMap(droppables)\n };\n finish();\n const result = {\n dimensions,\n critical,\n viewport\n };\n return result;\n};\n\nfunction shouldPublishUpdate(registry, dragging, entry) {\n if (entry.descriptor.id === dragging.id) {\n return false;\n }\n if (entry.descriptor.type !== dragging.type) {\n return false;\n }\n const home = registry.droppable.getById(entry.descriptor.droppableId);\n if (home.descriptor.mode !== 'virtual') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n You are attempting to add or remove a Draggable [id: ${entry.descriptor.id}]\n while a drag is occurring. This is only supported for virtual lists.\n\n See https://github.com/hello-pangea/dnd/blob/main/docs/patterns/virtual-lists.md\n `) : void 0;\n return false;\n }\n return true;\n}\nvar createDimensionMarshal = (registry, callbacks) => {\n let collection = null;\n const publisher = createPublisher({\n callbacks: {\n publish: callbacks.publishWhileDragging,\n collectionStarting: callbacks.collectionStarting\n },\n registry\n });\n const updateDroppableIsEnabled = (id, isEnabled) => {\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update is enabled flag of Droppable ${id} as it is not registered`) : invariant() : void 0;\n if (!collection) {\n return;\n }\n callbacks.updateDroppableIsEnabled({\n id,\n isEnabled\n });\n };\n const updateDroppableIsCombineEnabled = (id, isCombineEnabled) => {\n if (!collection) {\n return;\n }\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update isCombineEnabled flag of Droppable ${id} as it is not registered`) : invariant() : void 0;\n callbacks.updateDroppableIsCombineEnabled({\n id,\n isCombineEnabled\n });\n };\n const updateDroppableScroll = (id, newScroll) => {\n if (!collection) {\n return;\n }\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update the scroll on Droppable ${id} as it is not registered`) : invariant() : void 0;\n callbacks.updateDroppableScroll({\n id,\n newScroll\n });\n };\n const scrollDroppable = (id, change) => {\n if (!collection) {\n return;\n }\n registry.droppable.getById(id).callbacks.scroll(change);\n };\n const stopPublishing = () => {\n if (!collection) {\n return;\n }\n publisher.stop();\n const home = collection.critical.droppable;\n registry.droppable.getAllByType(home.type).forEach(entry => entry.callbacks.dragStopped());\n collection.unsubscribe();\n collection = null;\n };\n const subscriber = event => {\n !collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should only be subscribed when a collection is occurring') : invariant() : void 0;\n const dragging = collection.critical.draggable;\n if (event.type === 'ADDITION') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.add(event.value);\n }\n }\n if (event.type === 'REMOVAL') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.remove(event.value);\n }\n }\n };\n const startPublishing = request => {\n !!collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start capturing critical dimensions as there is already a collection') : invariant() : void 0;\n const entry = registry.draggable.getById(request.draggableId);\n const home = registry.droppable.getById(entry.descriptor.droppableId);\n const critical = {\n draggable: entry.descriptor,\n droppable: home.descriptor\n };\n const unsubscribe = registry.subscribe(subscriber);\n collection = {\n critical,\n unsubscribe\n };\n return getInitialPublish({\n critical,\n registry,\n scrollOptions: request.scrollOptions\n });\n };\n const marshal = {\n updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled,\n scrollDroppable,\n updateDroppableScroll,\n startPublishing,\n stopPublishing\n };\n return marshal;\n};\n\nvar canStartDrag = (state, id) => {\n if (state.phase === 'IDLE') {\n return true;\n }\n if (state.phase !== 'DROP_ANIMATING') {\n return false;\n }\n if (state.completed.result.draggableId === id) {\n return false;\n }\n return state.completed.result.reason === 'DROP';\n};\n\nvar scrollWindow = change => {\n window.scrollBy(change.x, change.y);\n};\n\nconst getScrollableDroppables = memoizeOne(droppables => toDroppableList(droppables).filter(droppable => {\n if (!droppable.isEnabled) {\n return false;\n }\n if (!droppable.frame) {\n return false;\n }\n return true;\n}));\nconst getScrollableDroppableOver = (target, droppables) => {\n const maybe = getScrollableDroppables(droppables).find(droppable => {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Invalid result') : invariant() : void 0;\n return isPositionInFrame(droppable.frame.pageMarginBox)(target);\n }) || null;\n return maybe;\n};\nvar getBestScrollableDroppable = ({\n center,\n destination,\n droppables\n}) => {\n if (destination) {\n const dimension = droppables[destination];\n if (!dimension.frame) {\n return null;\n }\n return dimension;\n }\n const dimension = getScrollableDroppableOver(center, droppables);\n return dimension;\n};\n\nconst defaultAutoScrollerOptions = {\n startFromPercentage: 0.25,\n maxScrollAtPercentage: 0.05,\n maxPixelScroll: 28,\n ease: percentage => percentage ** 2,\n durationDampening: {\n stopDampeningAt: 1200,\n accelerateAt: 360\n },\n disabled: false\n};\n\nvar getDistanceThresholds = (container, axis, getAutoScrollerOptions = () => defaultAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n const startScrollingFrom = container[axis.size] * autoScrollerOptions.startFromPercentage;\n const maxScrollValueAt = container[axis.size] * autoScrollerOptions.maxScrollAtPercentage;\n const thresholds = {\n startScrollingFrom,\n maxScrollValueAt\n };\n return thresholds;\n};\n\nvar getPercentage = ({\n startOfRange,\n endOfRange,\n current\n}) => {\n const range = endOfRange - startOfRange;\n if (range === 0) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Detected distance range of 0 in the fluid auto scroller\n This is unexpected and would cause a divide by 0 issue.\n Not allowing an auto scroll\n `) : void 0;\n return 0;\n }\n const currentInRange = current - startOfRange;\n const percentage = currentInRange / range;\n return percentage;\n};\n\nvar minScroll = 1;\n\nvar getValueFromDistance = (distanceToEdge, thresholds, getAutoScrollerOptions = () => defaultAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n if (distanceToEdge > thresholds.startScrollingFrom) {\n return 0;\n }\n if (distanceToEdge <= thresholds.maxScrollValueAt) {\n return autoScrollerOptions.maxPixelScroll;\n }\n if (distanceToEdge === thresholds.startScrollingFrom) {\n return minScroll;\n }\n const percentageFromMaxScrollValueAt = getPercentage({\n startOfRange: thresholds.maxScrollValueAt,\n endOfRange: thresholds.startScrollingFrom,\n current: distanceToEdge\n });\n const percentageFromStartScrollingFrom = 1 - percentageFromMaxScrollValueAt;\n const scroll = autoScrollerOptions.maxPixelScroll * autoScrollerOptions.ease(percentageFromStartScrollingFrom);\n return Math.ceil(scroll);\n};\n\nvar dampenValueByTime = (proposedScroll, dragStartTime, getAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n const accelerateAt = autoScrollerOptions.durationDampening.accelerateAt;\n const stopAt = autoScrollerOptions.durationDampening.stopDampeningAt;\n const startOfRange = dragStartTime;\n const endOfRange = stopAt;\n const now = Date.now();\n const runTime = now - startOfRange;\n if (runTime >= stopAt) {\n return proposedScroll;\n }\n if (runTime < accelerateAt) {\n return minScroll;\n }\n const betweenAccelerateAtAndStopAtPercentage = getPercentage({\n startOfRange: accelerateAt,\n endOfRange,\n current: runTime\n });\n const scroll = proposedScroll * autoScrollerOptions.ease(betweenAccelerateAtAndStopAtPercentage);\n return Math.ceil(scroll);\n};\n\nvar getValue = ({\n distanceToEdge,\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const scroll = getValueFromDistance(distanceToEdge, thresholds, getAutoScrollerOptions);\n if (scroll === 0) {\n return 0;\n }\n if (!shouldUseTimeDampening) {\n return scroll;\n }\n return Math.max(dampenValueByTime(scroll, dragStartTime, getAutoScrollerOptions), minScroll);\n};\n\nvar getScrollOnAxis = ({\n container,\n distanceToEdges,\n dragStartTime,\n axis,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const thresholds = getDistanceThresholds(container, axis, getAutoScrollerOptions);\n const isCloserToEnd = distanceToEdges[axis.end] < distanceToEdges[axis.start];\n if (isCloserToEnd) {\n return getValue({\n distanceToEdge: distanceToEdges[axis.end],\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n }\n return -1 * getValue({\n distanceToEdge: distanceToEdges[axis.start],\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n};\n\nvar adjustForSizeLimits = ({\n container,\n subject,\n proposedScroll\n}) => {\n const isTooBigVertically = subject.height > container.height;\n const isTooBigHorizontally = subject.width > container.width;\n if (!isTooBigHorizontally && !isTooBigVertically) {\n return proposedScroll;\n }\n if (isTooBigHorizontally && isTooBigVertically) {\n return null;\n }\n return {\n x: isTooBigHorizontally ? 0 : proposedScroll.x,\n y: isTooBigVertically ? 0 : proposedScroll.y\n };\n};\n\nconst clean = apply(value => value === 0 ? 0 : value);\nvar getScroll$1 = ({\n dragStartTime,\n container,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const distanceToEdges = {\n top: center.y - container.top,\n right: container.right - center.x,\n bottom: container.bottom - center.y,\n left: center.x - container.left\n };\n const y = getScrollOnAxis({\n container,\n distanceToEdges,\n dragStartTime,\n axis: vertical,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n const x = getScrollOnAxis({\n container,\n distanceToEdges,\n dragStartTime,\n axis: horizontal,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n const required = clean({\n x,\n y\n });\n if (isEqual$1(required, origin)) {\n return null;\n }\n const limited = adjustForSizeLimits({\n container,\n subject,\n proposedScroll: required\n });\n if (!limited) {\n return null;\n }\n return isEqual$1(limited, origin) ? null : limited;\n};\n\nconst smallestSigned = apply(value => {\n if (value === 0) {\n return 0;\n }\n return value > 0 ? 1 : -1;\n});\nconst getOverlap = (() => {\n const getRemainder = (target, max) => {\n if (target < 0) {\n return target;\n }\n if (target > max) {\n return target - max;\n }\n return 0;\n };\n return ({\n current,\n max,\n change\n }) => {\n const targetScroll = add(current, change);\n const overlap = {\n x: getRemainder(targetScroll.x, max.x),\n y: getRemainder(targetScroll.y, max.y)\n };\n if (isEqual$1(overlap, origin)) {\n return null;\n }\n return overlap;\n };\n})();\nconst canPartiallyScroll = ({\n max: rawMax,\n current,\n change\n}) => {\n const max = {\n x: Math.max(current.x, rawMax.x),\n y: Math.max(current.y, rawMax.y)\n };\n const smallestChange = smallestSigned(change);\n const overlap = getOverlap({\n max,\n current,\n change: smallestChange\n });\n if (!overlap) {\n return true;\n }\n if (smallestChange.x !== 0 && overlap.x === 0) {\n return true;\n }\n if (smallestChange.y !== 0 && overlap.y === 0) {\n return true;\n }\n return false;\n};\nconst canScrollWindow = (viewport, change) => canPartiallyScroll({\n current: viewport.scroll.current,\n max: viewport.scroll.max,\n change\n});\nconst getWindowOverlap = (viewport, change) => {\n if (!canScrollWindow(viewport, change)) {\n return null;\n }\n const max = viewport.scroll.max;\n const current = viewport.scroll.current;\n return getOverlap({\n current,\n max,\n change\n });\n};\nconst canScrollDroppable = (droppable, change) => {\n const frame = droppable.frame;\n if (!frame) {\n return false;\n }\n return canPartiallyScroll({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change\n });\n};\nconst getDroppableOverlap = (droppable, change) => {\n const frame = droppable.frame;\n if (!frame) {\n return null;\n }\n if (!canScrollDroppable(droppable, change)) {\n return null;\n }\n return getOverlap({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change\n });\n};\n\nvar getWindowScrollChange = ({\n viewport,\n subject,\n center,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const scroll = getScroll$1({\n dragStartTime,\n container: viewport.frame,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n return scroll && canScrollWindow(viewport, scroll) ? scroll : null;\n};\n\nvar getDroppableScrollChange = ({\n droppable,\n subject,\n center,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const frame = droppable.frame;\n if (!frame) {\n return null;\n }\n const scroll = getScroll$1({\n dragStartTime,\n container: frame.pageMarginBox,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n return scroll && canScrollDroppable(droppable, scroll) ? scroll : null;\n};\n\nvar scroll = ({\n state,\n dragStartTime,\n shouldUseTimeDampening,\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions\n}) => {\n const center = state.current.page.borderBoxCenter;\n const draggable = state.dimensions.draggables[state.critical.draggable.id];\n const subject = draggable.page.marginBox;\n if (state.isWindowScrollAllowed) {\n const viewport = state.viewport;\n const change = getWindowScrollChange({\n dragStartTime,\n viewport,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n if (change) {\n scrollWindow(change);\n return;\n }\n }\n const droppable = getBestScrollableDroppable({\n center,\n destination: whatIsDraggedOver(state.impact),\n droppables: state.dimensions.droppables\n });\n if (!droppable) {\n return;\n }\n const change = getDroppableScrollChange({\n dragStartTime,\n droppable,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n if (change) {\n scrollDroppable(droppable.descriptor.id, change);\n }\n};\n\nvar createFluidScroller = ({\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions = () => defaultAutoScrollerOptions\n}) => {\n const scheduleWindowScroll = rafSchd(scrollWindow);\n const scheduleDroppableScroll = rafSchd(scrollDroppable);\n let dragging = null;\n const tryScroll = state => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fluid scroll if not dragging') : invariant() : void 0;\n const {\n shouldUseTimeDampening,\n dragStartTime\n } = dragging;\n scroll({\n state,\n scrollWindow: scheduleWindowScroll,\n scrollDroppable: scheduleDroppableScroll,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n };\n const start$1 = state => {\n start();\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start auto scrolling when already started') : invariant() : void 0;\n const dragStartTime = Date.now();\n let wasScrollNeeded = false;\n const fakeScrollCallback = () => {\n wasScrollNeeded = true;\n };\n scroll({\n state,\n dragStartTime: 0,\n shouldUseTimeDampening: false,\n scrollWindow: fakeScrollCallback,\n scrollDroppable: fakeScrollCallback,\n getAutoScrollerOptions\n });\n dragging = {\n dragStartTime,\n shouldUseTimeDampening: wasScrollNeeded\n };\n finish();\n if (wasScrollNeeded) {\n tryScroll(state);\n }\n };\n const stop = () => {\n if (!dragging) {\n return;\n }\n scheduleWindowScroll.cancel();\n scheduleDroppableScroll.cancel();\n dragging = null;\n };\n return {\n start: start$1,\n stop,\n scroll: tryScroll\n };\n};\n\nvar createJumpScroller = ({\n move,\n scrollDroppable,\n scrollWindow\n}) => {\n const moveByOffset = (state, offset) => {\n const client = add(state.current.client.selection, offset);\n move({\n client\n });\n };\n const scrollDroppableAsMuchAsItCan = (droppable, change) => {\n if (!canScrollDroppable(droppable, change)) {\n return change;\n }\n const overlap = getDroppableOverlap(droppable, change);\n if (!overlap) {\n scrollDroppable(droppable.descriptor.id, change);\n return null;\n }\n const whatTheDroppableCanScroll = subtract(change, overlap);\n scrollDroppable(droppable.descriptor.id, whatTheDroppableCanScroll);\n const remainder = subtract(change, whatTheDroppableCanScroll);\n return remainder;\n };\n const scrollWindowAsMuchAsItCan = (isWindowScrollAllowed, viewport, change) => {\n if (!isWindowScrollAllowed) {\n return change;\n }\n if (!canScrollWindow(viewport, change)) {\n return change;\n }\n const overlap = getWindowOverlap(viewport, change);\n if (!overlap) {\n scrollWindow(change);\n return null;\n }\n const whatTheWindowCanScroll = subtract(change, overlap);\n scrollWindow(whatTheWindowCanScroll);\n const remainder = subtract(change, whatTheWindowCanScroll);\n return remainder;\n };\n const jumpScroller = state => {\n const request = state.scrollJumpRequest;\n if (!request) {\n return;\n }\n const destination = whatIsDraggedOver(state.impact);\n !destination ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot perform a jump scroll when there is no destination') : invariant() : void 0;\n const droppableRemainder = scrollDroppableAsMuchAsItCan(state.dimensions.droppables[destination], request);\n if (!droppableRemainder) {\n return;\n }\n const viewport = state.viewport;\n const windowRemainder = scrollWindowAsMuchAsItCan(state.isWindowScrollAllowed, viewport, droppableRemainder);\n if (!windowRemainder) {\n return;\n }\n moveByOffset(state, windowRemainder);\n };\n return jumpScroller;\n};\n\nvar createAutoScroller = ({\n scrollDroppable,\n scrollWindow,\n move,\n getAutoScrollerOptions\n}) => {\n const fluidScroller = createFluidScroller({\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions\n });\n const jumpScroll = createJumpScroller({\n move,\n scrollWindow,\n scrollDroppable\n });\n const scroll = state => {\n const autoScrollerOptions = getAutoScrollerOptions();\n if (autoScrollerOptions.disabled || state.phase !== 'DRAGGING') {\n return;\n }\n if (state.movementMode === 'FLUID') {\n fluidScroller.scroll(state);\n return;\n }\n if (!state.scrollJumpRequest) {\n return;\n }\n jumpScroll(state);\n };\n const scroller = {\n scroll,\n start: fluidScroller.start,\n stop: fluidScroller.stop\n };\n return scroller;\n};\n\nconst prefix = 'data-rfd';\nconst dragHandle = (() => {\n const base = `${prefix}-drag-handle`;\n return {\n base,\n draggableId: `${base}-draggable-id`,\n contextId: `${base}-context-id`\n };\n})();\nconst draggable = (() => {\n const base = `${prefix}-draggable`;\n return {\n base,\n contextId: `${base}-context-id`,\n id: `${base}-id`\n };\n})();\nconst droppable = (() => {\n const base = `${prefix}-droppable`;\n return {\n base,\n contextId: `${base}-context-id`,\n id: `${base}-id`\n };\n})();\nconst scrollContainer = {\n contextId: `${prefix}-scroll-container-context-id`\n};\n\nconst makeGetSelector = context => attribute => `[${attribute}=\"${context}\"]`;\nconst getStyles = (rules, property) => rules.map(rule => {\n const value = rule.styles[property];\n if (!value) {\n return '';\n }\n return `${rule.selector} { ${value} }`;\n}).join(' ');\nconst noPointerEvents = 'pointer-events: none;';\nvar getStyles$1 = contextId => {\n const getSelector = makeGetSelector(contextId);\n const dragHandle$1 = (() => {\n const grabCursor = `\n cursor: -webkit-grab;\n cursor: grab;\n `;\n return {\n selector: getSelector(dragHandle.contextId),\n styles: {\n always: `\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n touch-action: manipulation;\n `,\n resting: grabCursor,\n dragging: noPointerEvents,\n dropAnimating: grabCursor\n }\n };\n })();\n const draggable$1 = (() => {\n const transition = `\n transition: ${transitions.outOfTheWay};\n `;\n return {\n selector: getSelector(draggable.contextId),\n styles: {\n dragging: transition,\n dropAnimating: transition,\n userCancel: transition\n }\n };\n })();\n const droppable$1 = {\n selector: getSelector(droppable.contextId),\n styles: {\n always: `overflow-anchor: none;`\n }\n };\n const body = {\n selector: 'body',\n styles: {\n dragging: `\n cursor: grabbing;\n cursor: -webkit-grabbing;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n overflow-anchor: none;\n `\n }\n };\n const rules = [draggable$1, dragHandle$1, droppable$1, body];\n return {\n always: getStyles(rules, 'always'),\n resting: getStyles(rules, 'resting'),\n dragging: getStyles(rules, 'dragging'),\n dropAnimating: getStyles(rules, 'dropAnimating'),\n userCancel: getStyles(rules, 'userCancel')\n };\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\nconst getHead = () => {\n const head = document.querySelector('head');\n !head ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find the head to append a style to') : invariant() : void 0;\n return head;\n};\nconst createStyleEl = nonce => {\n const el = document.createElement('style');\n if (nonce) {\n el.setAttribute('nonce', nonce);\n }\n el.type = 'text/css';\n return el;\n};\nfunction useStyleMarshal(contextId, nonce) {\n const styles = useMemo(() => getStyles$1(contextId), [contextId]);\n const alwaysRef = useRef(null);\n const dynamicRef = useRef(null);\n const setDynamicStyle = useCallback(memoizeOne(proposed => {\n const el = dynamicRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant() : void 0;\n el.textContent = proposed;\n }), []);\n const setAlwaysStyle = useCallback(proposed => {\n const el = alwaysRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant() : void 0;\n el.textContent = proposed;\n }, []);\n useIsomorphicLayoutEffect(() => {\n !(!alwaysRef.current && !dynamicRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'style elements already mounted') : invariant() : void 0;\n const always = createStyleEl(nonce);\n const dynamic = createStyleEl(nonce);\n alwaysRef.current = always;\n dynamicRef.current = dynamic;\n always.setAttribute(`${prefix}-always`, contextId);\n dynamic.setAttribute(`${prefix}-dynamic`, contextId);\n getHead().appendChild(always);\n getHead().appendChild(dynamic);\n setAlwaysStyle(styles.always);\n setDynamicStyle(styles.resting);\n return () => {\n const remove = ref => {\n const current = ref.current;\n !current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot unmount ref as it is not set') : invariant() : void 0;\n getHead().removeChild(current);\n ref.current = null;\n };\n remove(alwaysRef);\n remove(dynamicRef);\n };\n }, [nonce, setAlwaysStyle, setDynamicStyle, styles.always, styles.resting, contextId]);\n const dragging = useCallback(() => setDynamicStyle(styles.dragging), [setDynamicStyle, styles.dragging]);\n const dropping = useCallback(reason => {\n if (reason === 'DROP') {\n setDynamicStyle(styles.dropAnimating);\n return;\n }\n setDynamicStyle(styles.userCancel);\n }, [setDynamicStyle, styles.dropAnimating, styles.userCancel]);\n const resting = useCallback(() => {\n if (!dynamicRef.current) {\n return;\n }\n setDynamicStyle(styles.resting);\n }, [setDynamicStyle, styles.resting]);\n const marshal = useMemo(() => ({\n dragging,\n dropping,\n resting\n }), [dragging, dropping, resting]);\n return marshal;\n}\n\nfunction querySelectorAll(parentNode, selector) {\n return Array.from(parentNode.querySelectorAll(selector));\n}\n\nvar getWindowFromEl = el => {\n if (el && el.ownerDocument && el.ownerDocument.defaultView) {\n return el.ownerDocument.defaultView;\n }\n return window;\n};\n\nfunction isHtmlElement(el) {\n return el instanceof getWindowFromEl(el).HTMLElement;\n}\n\nfunction findDragHandle(contextId, draggableId) {\n const selector = `[${dragHandle.contextId}=\"${contextId}\"]`;\n const possible = querySelectorAll(document, selector);\n if (!possible.length) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find any drag handles in the context \"${contextId}\"`) : void 0;\n return null;\n }\n const handle = possible.find(el => {\n return el.getAttribute(dragHandle.draggableId) === draggableId;\n });\n if (!handle) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find drag handle with id \"${draggableId}\" as no handle with a matching id was found`) : void 0;\n return null;\n }\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle needs to be a HTMLElement') : void 0;\n return null;\n }\n return handle;\n}\n\nfunction useFocusMarshal(contextId) {\n const entriesRef = useRef({});\n const recordRef = useRef(null);\n const restoreFocusFrameRef = useRef(null);\n const isMountedRef = useRef(false);\n const register = useCallback(function register(id, focus) {\n const entry = {\n id,\n focus\n };\n entriesRef.current[id] = entry;\n return function unregister() {\n const entries = entriesRef.current;\n const current = entries[id];\n if (current !== entry) {\n delete entries[id];\n }\n };\n }, []);\n const tryGiveFocus = useCallback(function tryGiveFocus(tryGiveFocusTo) {\n const handle = findDragHandle(contextId, tryGiveFocusTo);\n if (handle && handle !== document.activeElement) {\n handle.focus();\n }\n }, [contextId]);\n const tryShiftRecord = useCallback(function tryShiftRecord(previous, redirectTo) {\n if (recordRef.current === previous) {\n recordRef.current = redirectTo;\n }\n }, []);\n const tryRestoreFocusRecorded = useCallback(function tryRestoreFocusRecorded() {\n if (restoreFocusFrameRef.current) {\n return;\n }\n if (!isMountedRef.current) {\n return;\n }\n restoreFocusFrameRef.current = requestAnimationFrame(() => {\n restoreFocusFrameRef.current = null;\n const record = recordRef.current;\n if (record) {\n tryGiveFocus(record);\n }\n });\n }, [tryGiveFocus]);\n const tryRecordFocus = useCallback(function tryRecordFocus(id) {\n recordRef.current = null;\n const focused = document.activeElement;\n if (!focused) {\n return;\n }\n if (focused.getAttribute(dragHandle.draggableId) !== id) {\n return;\n }\n recordRef.current = id;\n }, []);\n useIsomorphicLayoutEffect(() => {\n isMountedRef.current = true;\n return function clearFrameOnUnmount() {\n isMountedRef.current = false;\n const frameId = restoreFocusFrameRef.current;\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n };\n }, []);\n const marshal = useMemo(() => ({\n register,\n tryRecordFocus,\n tryRestoreFocusRecorded,\n tryShiftRecord\n }), [register, tryRecordFocus, tryRestoreFocusRecorded, tryShiftRecord]);\n return marshal;\n}\n\nfunction createRegistry() {\n const entries = {\n draggables: {},\n droppables: {}\n };\n const subscribers = [];\n function subscribe(cb) {\n subscribers.push(cb);\n return function unsubscribe() {\n const index = subscribers.indexOf(cb);\n if (index === -1) {\n return;\n }\n subscribers.splice(index, 1);\n };\n }\n function notify(event) {\n if (subscribers.length) {\n subscribers.forEach(cb => cb(event));\n }\n }\n function findDraggableById(id) {\n return entries.draggables[id] || null;\n }\n function getDraggableById(id) {\n const entry = findDraggableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find draggable entry with id [${id}]`) : invariant() : void 0;\n return entry;\n }\n const draggableAPI = {\n register: entry => {\n entries.draggables[entry.descriptor.id] = entry;\n notify({\n type: 'ADDITION',\n value: entry\n });\n },\n update: (entry, last) => {\n const current = entries.draggables[last.descriptor.id];\n if (!current) {\n return;\n }\n if (current.uniqueId !== entry.uniqueId) {\n return;\n }\n delete entries.draggables[last.descriptor.id];\n entries.draggables[entry.descriptor.id] = entry;\n },\n unregister: entry => {\n const draggableId = entry.descriptor.id;\n const current = findDraggableById(draggableId);\n if (!current) {\n return;\n }\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n delete entries.draggables[draggableId];\n if (entries.droppables[entry.descriptor.droppableId]) {\n notify({\n type: 'REMOVAL',\n value: entry\n });\n }\n },\n getById: getDraggableById,\n findById: findDraggableById,\n exists: id => Boolean(findDraggableById(id)),\n getAllByType: type => Object.values(entries.draggables).filter(entry => entry.descriptor.type === type)\n };\n function findDroppableById(id) {\n return entries.droppables[id] || null;\n }\n function getDroppableById(id) {\n const entry = findDroppableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find droppable entry with id [${id}]`) : invariant() : void 0;\n return entry;\n }\n const droppableAPI = {\n register: entry => {\n entries.droppables[entry.descriptor.id] = entry;\n },\n unregister: entry => {\n const current = findDroppableById(entry.descriptor.id);\n if (!current) {\n return;\n }\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n delete entries.droppables[entry.descriptor.id];\n },\n getById: getDroppableById,\n findById: findDroppableById,\n exists: id => Boolean(findDroppableById(id)),\n getAllByType: type => Object.values(entries.droppables).filter(entry => entry.descriptor.type === type)\n };\n function clean() {\n entries.draggables = {};\n entries.droppables = {};\n subscribers.length = 0;\n }\n return {\n draggable: draggableAPI,\n droppable: droppableAPI,\n subscribe,\n clean\n };\n}\n\nfunction useRegistry() {\n const registry = useMemo(createRegistry, []);\n useEffect(() => {\n return function unmount() {\n registry.clean();\n };\n }, [registry]);\n return registry;\n}\n\nvar StoreContext = React.createContext(null);\n\nvar getBodyElement = () => {\n const body = document.body;\n !body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.body') : invariant() : void 0;\n return body;\n};\n\nconst visuallyHidden = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n border: '0',\n padding: '0',\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n 'clip-path': 'inset(100%)'\n};\n\nconst getId = contextId => `rfd-announcement-${contextId}`;\nfunction useAnnouncer(contextId) {\n const id = useMemo(() => getId(contextId), [contextId]);\n const ref = useRef(null);\n useEffect(function setup() {\n const el = document.createElement('div');\n ref.current = el;\n el.id = id;\n el.setAttribute('aria-live', 'assertive');\n el.setAttribute('aria-atomic', 'true');\n _extends(el.style, visuallyHidden);\n getBodyElement().appendChild(el);\n return function cleanup() {\n setTimeout(function remove() {\n const body = getBodyElement();\n if (body.contains(el)) {\n body.removeChild(el);\n }\n if (el === ref.current) {\n ref.current = null;\n }\n });\n };\n }, [id]);\n const announce = useCallback(message => {\n const el = ref.current;\n if (el) {\n el.textContent = message;\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n A screen reader message was trying to be announced but it was unable to do so.\n This can occur if you unmount your <DragDropContext /> in your onDragEnd.\n Consider calling provided.announce() before the unmount so that the instruction will\n not be lost for users relying on a screen reader.\n\n Message not passed to screen reader:\n\n \"${message}\"\n `) : void 0;\n }, []);\n return announce;\n}\n\nconst defaults = {\n separator: '::'\n};\nfunction useUniqueId(prefix, options = defaults) {\n const id = React.useId();\n return useMemo(() => `${prefix}${options.separator}${id}`, [options.separator, prefix, id]);\n}\n\nfunction getElementId({\n contextId,\n uniqueId\n}) {\n return `rfd-hidden-text-${contextId}-${uniqueId}`;\n}\nfunction useHiddenTextElement({\n contextId,\n text\n}) {\n const uniqueId = useUniqueId('hidden-text', {\n separator: '-'\n });\n const id = useMemo(() => getElementId({\n contextId,\n uniqueId\n }), [uniqueId, contextId]);\n useEffect(function mount() {\n const el = document.createElement('div');\n el.id = id;\n el.textContent = text;\n el.style.display = 'none';\n getBodyElement().appendChild(el);\n return function unmount() {\n const body = getBodyElement();\n if (body.contains(el)) {\n body.removeChild(el);\n }\n };\n }, [id, text]);\n return id;\n}\n\nvar AppContext = React.createContext(null);\n\nvar peerDependencies = {\n\treact: \"^18.0.0 || ^19.0.0\"};\n\nconst semver = /(\\d+)\\.(\\d+)\\.(\\d+)/;\nconst getVersion = value => {\n const result = semver.exec(value);\n !(result != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unable to parse React version ${value}`) : invariant() : void 0;\n const major = Number(result[1]);\n const minor = Number(result[2]);\n const patch = Number(result[3]);\n return {\n major,\n minor,\n patch,\n raw: value\n };\n};\nconst isSatisfied = (expected, actual) => {\n if (actual.major > expected.major) {\n return true;\n }\n if (actual.major < expected.major) {\n return false;\n }\n if (actual.minor > expected.minor) {\n return true;\n }\n if (actual.minor < expected.minor) {\n return false;\n }\n return actual.patch >= expected.patch;\n};\nvar checkReactVersion = (peerDepValue, actualValue) => {\n const peerDep = getVersion(peerDepValue);\n const actual = getVersion(actualValue);\n if (isSatisfied(peerDep, actual)) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n React version: [${actual.raw}]\n does not satisfy expected peer dependency version: [${peerDep.raw}]\n\n This can result in run time bugs, and even fatal crashes\n `) : void 0;\n};\n\nconst suffix = `\n We expect a html5 doctype: <!doctype html>\n This is to ensure consistent browser layout and measurement\n\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/doctype.md\n`;\nvar checkDoctype = doc => {\n const doctype = doc.doctype;\n if (!doctype) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n No <!doctype html> found.\n\n ${suffix}\n `) : void 0;\n return;\n }\n if (doctype.name.toLowerCase() !== 'html') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Unexpected <!doctype> found: (${doctype.name})\n\n ${suffix}\n `) : void 0;\n }\n if (doctype.publicId !== '') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Unexpected <!doctype> publicId found: (${doctype.publicId})\n A html5 doctype does not have a publicId\n\n ${suffix}\n `) : void 0;\n }\n};\n\nfunction useDev(useHook) {\n if (process.env.NODE_ENV !== 'production') {\n useHook();\n }\n}\n\nfunction useDevSetupWarning(fn, inputs) {\n useDev(() => {\n useEffect(() => {\n try {\n fn();\n } catch (e) {\n error(`\n A setup problem was encountered.\n\n > ${e.message}\n `);\n }\n }, inputs);\n });\n}\n\nfunction useStartupValidation() {\n useDevSetupWarning(() => {\n checkReactVersion(peerDependencies.react, React.version);\n checkDoctype(document);\n }, []);\n}\n\nfunction usePrevious(current) {\n const ref = useRef(current);\n useEffect(() => {\n ref.current = current;\n });\n return ref;\n}\n\nfunction create() {\n let lock = null;\n function isClaimed() {\n return Boolean(lock);\n }\n function isActive(value) {\n return value === lock;\n }\n function claim(abandon) {\n !!lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot claim lock as it is already claimed') : invariant() : void 0;\n const newLock = {\n abandon\n };\n lock = newLock;\n return newLock;\n }\n function release() {\n !lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot release lock when there is no lock') : invariant() : void 0;\n lock = null;\n }\n function tryAbandon() {\n if (lock) {\n lock.abandon();\n release();\n }\n }\n return {\n isClaimed,\n isActive,\n claim,\n release,\n tryAbandon\n };\n}\n\nfunction isDragging(state) {\n if (state.phase === 'IDLE' || state.phase === 'DROP_ANIMATING') {\n return false;\n }\n return state.isDragging;\n}\n\nconst tab = 9;\nconst enter = 13;\nconst escape = 27;\nconst space = 32;\nconst pageUp = 33;\nconst pageDown = 34;\nconst end = 35;\nconst home = 36;\nconst arrowLeft = 37;\nconst arrowUp = 38;\nconst arrowRight = 39;\nconst arrowDown = 40;\n\nconst preventedKeys = {\n [enter]: true,\n [tab]: true\n};\nvar preventStandardKeyEvents = event => {\n if (preventedKeys[event.keyCode]) {\n event.preventDefault();\n }\n};\n\nconst supportedEventName = (() => {\n const base = 'visibilitychange';\n if (typeof document === 'undefined') {\n return base;\n }\n const candidates = [base, `ms${base}`, `webkit${base}`, `moz${base}`, `o${base}`];\n const supported = candidates.find(eventName => `on${eventName}` in document);\n return supported || base;\n})();\n\nconst primaryButton = 0;\nconst sloppyClickThreshold = 5;\nfunction isSloppyClickThresholdExceeded(original, current) {\n return Math.abs(current.x - original.x) >= sloppyClickThreshold || Math.abs(current.y - original.y) >= sloppyClickThreshold;\n}\nconst idle$1 = {\n type: 'IDLE'\n};\nfunction getCaptureBindings({\n cancel,\n completed,\n getPhase,\n setPhase\n}) {\n return [{\n eventName: 'mousemove',\n fn: event => {\n const {\n button,\n clientX,\n clientY\n } = event;\n if (button !== primaryButton) {\n return;\n }\n const point = {\n x: clientX,\n y: clientY\n };\n const phase = getPhase();\n if (phase.type === 'DRAGGING') {\n event.preventDefault();\n phase.actions.move(point);\n return;\n }\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot be IDLE') : invariant() : void 0;\n const pending = phase.point;\n if (!isSloppyClickThresholdExceeded(pending, point)) {\n return;\n }\n event.preventDefault();\n const actions = phase.actions.fluidLift(point);\n setPhase({\n type: 'DRAGGING',\n actions\n });\n }\n }, {\n eventName: 'mouseup',\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'mousedown',\n fn: event => {\n if (getPhase().type === 'DRAGGING') {\n event.preventDefault();\n }\n cancel();\n }\n }, {\n eventName: 'keydown',\n fn: event => {\n const phase = getPhase();\n if (phase.type === 'PENDING') {\n cancel();\n return;\n }\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: () => {\n if (getPhase().type === 'PENDING') {\n cancel();\n }\n }\n }, {\n eventName: 'webkitmouseforcedown',\n fn: event => {\n const phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase') : invariant() : void 0;\n if (phase.actions.shouldRespectForcePress()) {\n cancel();\n return;\n }\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useMouseSensor(api) {\n const phaseRef = useRef(idle$1);\n const unbindEventsRef = useRef(noop$2);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'mousedown',\n fn: function onMouseDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (event.button !== primaryButton) {\n return;\n }\n if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!actions) {\n return;\n }\n event.preventDefault();\n const point = {\n x: event.clientX,\n y: event.clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n }), [api]);\n const preventForcePressBinding = useMemo(() => ({\n eventName: 'webkitmouseforcewillbegin',\n fn: event => {\n if (event.defaultPrevented) {\n return;\n }\n const id = api.findClosestDraggableId(event);\n if (!id) {\n return;\n }\n const options = api.findOptionsForDraggable(id);\n if (!options) {\n return;\n }\n if (options.shouldRespectForcePress) {\n return;\n }\n if (!api.canGetLock(id)) {\n return;\n }\n event.preventDefault();\n }\n }), [api]);\n const listenForCapture = useCallback(function listenForCapture() {\n const options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [preventForcePressBinding, startCaptureBinding], options);\n }, [preventForcePressBinding, startCaptureBinding]);\n const stop = useCallback(() => {\n const current = phaseRef.current;\n if (current.type === 'IDLE') {\n return;\n }\n phaseRef.current = idle$1;\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture]);\n const cancel = useCallback(() => {\n const phase = phaseRef.current;\n stop();\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n const bindCapturingEvents = useCallback(function bindCapturingEvents() {\n const options = {\n capture: true,\n passive: false\n };\n const bindings = getCaptureBindings({\n cancel,\n completed: stop,\n getPhase: () => phaseRef.current,\n setPhase: phase => {\n phaseRef.current = phase;\n }\n });\n unbindEventsRef.current = bindEvents(window, bindings, options);\n }, [cancel, stop]);\n const startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(phaseRef.current.type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant() : void 0;\n phaseRef.current = {\n type: 'PENDING',\n point,\n actions\n };\n bindCapturingEvents();\n }, [bindCapturingEvents]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nfunction noop$1() {}\nconst scrollJumpKeys = {\n [pageDown]: true,\n [pageUp]: true,\n [home]: true,\n [end]: true\n};\nfunction getDraggingBindings(actions, stop) {\n function cancel() {\n stop();\n actions.cancel();\n }\n function drop() {\n stop();\n actions.drop();\n }\n return [{\n eventName: 'keydown',\n fn: event => {\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n if (event.keyCode === space) {\n event.preventDefault();\n drop();\n return;\n }\n if (event.keyCode === arrowDown) {\n event.preventDefault();\n actions.moveDown();\n return;\n }\n if (event.keyCode === arrowUp) {\n event.preventDefault();\n actions.moveUp();\n return;\n }\n if (event.keyCode === arrowRight) {\n event.preventDefault();\n actions.moveRight();\n return;\n }\n if (event.keyCode === arrowLeft) {\n event.preventDefault();\n actions.moveLeft();\n return;\n }\n if (scrollJumpKeys[event.keyCode]) {\n event.preventDefault();\n return;\n }\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'mousedown',\n fn: cancel\n }, {\n eventName: 'mouseup',\n fn: cancel\n }, {\n eventName: 'click',\n fn: cancel\n }, {\n eventName: 'touchstart',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'wheel',\n fn: cancel,\n options: {\n passive: true\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useKeyboardSensor(api) {\n const unbindEventsRef = useRef(noop$1);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'keydown',\n fn: function onKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (event.keyCode !== space) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const preDrag = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!preDrag) {\n return;\n }\n event.preventDefault();\n let isCapturing = true;\n const actions = preDrag.snapLift();\n unbindEventsRef.current();\n function stop() {\n !isCapturing ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop capturing a keyboard drag when not capturing') : invariant() : void 0;\n isCapturing = false;\n unbindEventsRef.current();\n listenForCapture();\n }\n unbindEventsRef.current = bindEvents(window, getDraggingBindings(actions, stop), {\n capture: true,\n passive: false\n });\n }\n }), [api]);\n const listenForCapture = useCallback(function tryStartCapture() {\n const options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nconst idle = {\n type: 'IDLE'\n};\nconst timeForLongPress = 120;\nconst forcePressThreshold = 0.15;\nfunction getWindowBindings({\n cancel,\n getPhase\n}) {\n return [{\n eventName: 'orientationchange',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'contextmenu',\n fn: event => {\n event.preventDefault();\n }\n }, {\n eventName: 'keydown',\n fn: event => {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n if (event.keyCode === escape) {\n event.preventDefault();\n }\n cancel();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction getHandleBindings({\n cancel,\n completed,\n getPhase\n}) {\n return [{\n eventName: 'touchmove',\n options: {\n capture: false\n },\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n phase.hasMoved = true;\n const {\n clientX,\n clientY\n } = event.touches[0];\n const point = {\n x: clientX,\n y: clientY\n };\n event.preventDefault();\n phase.actions.move(point);\n }\n }, {\n eventName: 'touchend',\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'touchcancel',\n fn: event => {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n cancel();\n }\n }, {\n eventName: 'touchforcechange',\n fn: event => {\n const phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const touch = event.touches[0];\n if (!touch) {\n return;\n }\n const isForcePress = touch.force >= forcePressThreshold;\n if (!isForcePress) {\n return;\n }\n const shouldRespect = phase.actions.shouldRespectForcePress();\n if (phase.type === 'PENDING') {\n if (shouldRespect) {\n cancel();\n }\n return;\n }\n if (shouldRespect) {\n if (phase.hasMoved) {\n event.preventDefault();\n return;\n }\n cancel();\n return;\n }\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useTouchSensor(api) {\n const phaseRef = useRef(idle);\n const unbindEventsRef = useRef(noop$2);\n const getPhase = useCallback(function getPhase() {\n return phaseRef.current;\n }, []);\n const setPhase = useCallback(function setPhase(phase) {\n phaseRef.current = phase;\n }, []);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'touchstart',\n fn: function onTouchStart(event) {\n if (event.defaultPrevented) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!actions) {\n return;\n }\n const touch = event.touches[0];\n const {\n clientX,\n clientY\n } = touch;\n const point = {\n x: clientX,\n y: clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n }), [api]);\n const listenForCapture = useCallback(function listenForCapture() {\n const options = {\n capture: true,\n passive: false\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n const stop = useCallback(() => {\n const current = phaseRef.current;\n if (current.type === 'IDLE') {\n return;\n }\n if (current.type === 'PENDING') {\n clearTimeout(current.longPressTimerId);\n }\n setPhase(idle);\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture, setPhase]);\n const cancel = useCallback(() => {\n const phase = phaseRef.current;\n stop();\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n const bindCapturingEvents = useCallback(function bindCapturingEvents() {\n const options = {\n capture: true,\n passive: false\n };\n const args = {\n cancel,\n completed: stop,\n getPhase\n };\n const unbindTarget = bindEvents(window, getHandleBindings(args), options);\n const unbindWindow = bindEvents(window, getWindowBindings(args), options);\n unbindEventsRef.current = function unbindAll() {\n unbindTarget();\n unbindWindow();\n };\n }, [cancel, getPhase, stop]);\n const startDragging = useCallback(function startDragging() {\n const phase = getPhase();\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot start dragging from phase ${phase.type}`) : invariant() : void 0;\n const actions = phase.actions.fluidLift(phase.point);\n setPhase({\n type: 'DRAGGING',\n actions,\n hasMoved: false\n });\n }, [getPhase, setPhase]);\n const startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(getPhase().type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant() : void 0;\n const longPressTimerId = setTimeout(startDragging, timeForLongPress);\n setPhase({\n type: 'PENDING',\n point,\n actions,\n longPressTimerId\n });\n bindCapturingEvents();\n }, [bindCapturingEvents, getPhase, setPhase, startDragging]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n const phase = getPhase();\n if (phase.type === 'PENDING') {\n clearTimeout(phase.longPressTimerId);\n setPhase(idle);\n }\n };\n }, [getPhase, listenForCapture, setPhase]);\n useIsomorphicLayoutEffect(function webkitHack() {\n const unbind = bindEvents(window, [{\n eventName: 'touchmove',\n fn: () => {},\n options: {\n capture: false,\n passive: false\n }\n }]);\n return unbind;\n }, []);\n}\n\nfunction useValidateSensorHooks(sensorHooks) {\n useDev(() => {\n const previousRef = usePrevious(sensorHooks);\n useDevSetupWarning(() => {\n !(previousRef.current.length === sensorHooks.length) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot change the amount of sensor hooks after mounting') : invariant(false) : void 0;\n });\n });\n}\n\nconst interactiveTagNames = ['input', 'button', 'textarea', 'select', 'option', 'optgroup', 'video', 'audio'];\nfunction isAnInteractiveElement(parent, current) {\n if (current == null) {\n return false;\n }\n const hasAnInteractiveTag = interactiveTagNames.includes(current.tagName.toLowerCase());\n if (hasAnInteractiveTag) {\n return true;\n }\n const attribute = current.getAttribute('contenteditable');\n if (attribute === 'true' || attribute === '') {\n return true;\n }\n if (current === parent) {\n return false;\n }\n return isAnInteractiveElement(parent, current.parentElement);\n}\nfunction isEventInInteractiveElement(draggable, event) {\n const target = event.target;\n if (!isHtmlElement(target)) {\n return false;\n }\n return isAnInteractiveElement(draggable, target);\n}\n\nvar getBorderBoxCenterPosition = el => getRect(el.getBoundingClientRect()).center;\n\nfunction isElement(el) {\n return el instanceof getWindowFromEl(el).Element;\n}\n\nconst supportedMatchesName = (() => {\n const base = 'matches';\n if (typeof document === 'undefined') {\n return base;\n }\n const candidates = [base, 'msMatchesSelector', 'webkitMatchesSelector'];\n const value = candidates.find(name => name in Element.prototype);\n return value || base;\n})();\nfunction closestPonyfill(el, selector) {\n if (el == null) {\n return null;\n }\n if (el[supportedMatchesName](selector)) {\n return el;\n }\n return closestPonyfill(el.parentElement, selector);\n}\nfunction closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n return closestPonyfill(el, selector);\n}\n\nfunction getSelector(contextId) {\n return `[${dragHandle.contextId}=\"${contextId}\"]`;\n}\nfunction findClosestDragHandleFromEvent(contextId, event) {\n const target = event.target;\n if (!isElement(target)) {\n process.env.NODE_ENV !== \"production\" ? warning('event.target must be a Element') : void 0;\n return null;\n }\n const selector = getSelector(contextId);\n const handle = closest(target, selector);\n if (!handle) {\n return null;\n }\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle must be a HTMLElement') : void 0;\n return null;\n }\n return handle;\n}\nfunction tryGetClosestDraggableIdFromEvent(contextId, event) {\n const handle = findClosestDragHandleFromEvent(contextId, event);\n if (!handle) {\n return null;\n }\n return handle.getAttribute(dragHandle.draggableId);\n}\n\nfunction findDraggable(contextId, draggableId) {\n const selector = `[${draggable.contextId}=\"${contextId}\"]`;\n const possible = querySelectorAll(document, selector);\n const draggable$1 = possible.find(el => {\n return el.getAttribute(draggable.id) === draggableId;\n });\n if (!draggable$1) {\n return null;\n }\n if (!isHtmlElement(draggable$1)) {\n process.env.NODE_ENV !== \"production\" ? warning('Draggable element is not a HTMLElement') : void 0;\n return null;\n }\n return draggable$1;\n}\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\nfunction isActive({\n expected,\n phase,\n isLockActive,\n shouldWarn\n}) {\n if (!isLockActive()) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Cannot perform action.\n The sensor no longer has an action lock.\n\n Tips:\n\n - Throw away your action handlers when forceStop() is called\n - Check actions.isActive() if you really need to\n `) : void 0;\n }\n return false;\n }\n if (expected !== phase) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Cannot perform action.\n The actions you used belong to an outdated phase\n\n Current phase: ${expected}\n You called an action from outdated phase: ${phase}\n\n Tips:\n\n - Do not use preDragActions actions after calling preDragActions.lift()\n `) : void 0;\n }\n return false;\n }\n return true;\n}\nfunction canStart({\n lockAPI,\n store,\n registry,\n draggableId\n}) {\n if (lockAPI.isClaimed()) {\n return false;\n }\n const entry = registry.draggable.findById(draggableId);\n if (!entry) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find draggable with id: ${draggableId}`) : void 0;\n return false;\n }\n if (!entry.options.isEnabled) {\n return false;\n }\n if (!canStartDrag(store.getState(), draggableId)) {\n return false;\n }\n return true;\n}\nfunction tryStart({\n lockAPI,\n contextId,\n store,\n registry,\n draggableId,\n forceSensorStop,\n sourceEvent\n}) {\n const shouldStart = canStart({\n lockAPI,\n store,\n registry,\n draggableId\n });\n if (!shouldStart) {\n return null;\n }\n const entry = registry.draggable.getById(draggableId);\n const el = findDraggable(contextId, entry.descriptor.id);\n if (!el) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find draggable element with id: ${draggableId}`) : void 0;\n return null;\n }\n if (sourceEvent && !entry.options.canDragInteractiveElements && isEventInInteractiveElement(el, sourceEvent)) {\n return null;\n }\n const lock = lockAPI.claim(forceSensorStop || noop$2);\n let phase = 'PRE_DRAG';\n function getShouldRespectForcePress() {\n return entry.options.shouldRespectForcePress;\n }\n function isLockActive() {\n return lockAPI.isActive(lock);\n }\n function tryDispatch(expected, getAction) {\n if (isActive({\n expected,\n phase,\n isLockActive,\n shouldWarn: true\n })) {\n store.dispatch(getAction());\n }\n }\n const tryDispatchWhenDragging = tryDispatch.bind(null, 'DRAGGING');\n function lift(args) {\n function completed() {\n lockAPI.release();\n phase = 'COMPLETED';\n }\n if (phase !== 'PRE_DRAG') {\n completed();\n process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot lift in phase ${phase}`) : invariant() ;\n }\n store.dispatch(lift$1(args.liftActionArgs));\n phase = 'DRAGGING';\n function finish(reason, options = {\n shouldBlockNextClick: false\n }) {\n args.cleanup();\n if (options.shouldBlockNextClick) {\n const unbind = bindEvents(window, [{\n eventName: 'click',\n fn: preventDefault,\n options: {\n once: true,\n passive: false,\n capture: true\n }\n }]);\n setTimeout(unbind);\n }\n completed();\n store.dispatch(drop({\n reason\n }));\n }\n return {\n isActive: () => isActive({\n expected: 'DRAGGING',\n phase,\n isLockActive,\n shouldWarn: false\n }),\n shouldRespectForcePress: getShouldRespectForcePress,\n drop: options => finish('DROP', options),\n cancel: options => finish('CANCEL', options),\n ...args.actions\n };\n }\n function fluidLift(clientSelection) {\n const move$1 = rafSchd(client => {\n tryDispatchWhenDragging(() => move({\n client\n }));\n });\n const api = lift({\n liftActionArgs: {\n id: draggableId,\n clientSelection,\n movementMode: 'FLUID'\n },\n cleanup: () => move$1.cancel(),\n actions: {\n move: move$1\n }\n });\n return {\n ...api,\n move: move$1\n };\n }\n function snapLift() {\n const actions = {\n moveUp: () => tryDispatchWhenDragging(moveUp),\n moveRight: () => tryDispatchWhenDragging(moveRight),\n moveDown: () => tryDispatchWhenDragging(moveDown),\n moveLeft: () => tryDispatchWhenDragging(moveLeft)\n };\n return lift({\n liftActionArgs: {\n id: draggableId,\n clientSelection: getBorderBoxCenterPosition(el),\n movementMode: 'SNAP'\n },\n cleanup: noop$2,\n actions\n });\n }\n function abortPreDrag() {\n const shouldRelease = isActive({\n expected: 'PRE_DRAG',\n phase,\n isLockActive,\n shouldWarn: true\n });\n if (shouldRelease) {\n lockAPI.release();\n }\n }\n const preDrag = {\n isActive: () => isActive({\n expected: 'PRE_DRAG',\n phase,\n isLockActive,\n shouldWarn: false\n }),\n shouldRespectForcePress: getShouldRespectForcePress,\n fluidLift,\n snapLift,\n abort: abortPreDrag\n };\n return preDrag;\n}\nconst defaultSensors = [useMouseSensor, useKeyboardSensor, useTouchSensor];\nfunction useSensorMarshal({\n contextId,\n store,\n registry,\n customSensors,\n enableDefaultSensors\n}) {\n const useSensors = [...(enableDefaultSensors ? defaultSensors : []), ...(customSensors || [])];\n const lockAPI = useState(() => create())[0];\n const tryAbandonLock = useCallback(function tryAbandonLock(previous, current) {\n if (isDragging(previous) && !isDragging(current)) {\n lockAPI.tryAbandon();\n }\n }, [lockAPI]);\n useIsomorphicLayoutEffect(function listenToStore() {\n let previous = store.getState();\n const unsubscribe = store.subscribe(() => {\n const current = store.getState();\n tryAbandonLock(previous, current);\n previous = current;\n });\n return unsubscribe;\n }, [lockAPI, store, tryAbandonLock]);\n useIsomorphicLayoutEffect(() => {\n return lockAPI.tryAbandon;\n }, [lockAPI.tryAbandon]);\n const canGetLock = useCallback(draggableId => {\n return canStart({\n lockAPI,\n registry,\n store,\n draggableId\n });\n }, [lockAPI, registry, store]);\n const tryGetLock = useCallback((draggableId, forceStop, options) => tryStart({\n lockAPI,\n registry,\n contextId,\n store,\n draggableId,\n forceSensorStop: forceStop || null,\n sourceEvent: options && options.sourceEvent ? options.sourceEvent : null\n }), [contextId, lockAPI, registry, store]);\n const findClosestDraggableId = useCallback(event => tryGetClosestDraggableIdFromEvent(contextId, event), [contextId]);\n const findOptionsForDraggable = useCallback(id => {\n const entry = registry.draggable.findById(id);\n return entry ? entry.options : null;\n }, [registry.draggable]);\n const tryReleaseLock = useCallback(function tryReleaseLock() {\n if (!lockAPI.isClaimed()) {\n return;\n }\n lockAPI.tryAbandon();\n if (store.getState().phase !== 'IDLE') {\n store.dispatch(flush());\n }\n }, [lockAPI, store]);\n const isLockClaimed = useCallback(() => lockAPI.isClaimed(), [lockAPI]);\n const api = useMemo(() => ({\n canGetLock,\n tryGetLock,\n findClosestDraggableId,\n findOptionsForDraggable,\n tryReleaseLock,\n isLockClaimed\n }), [canGetLock, tryGetLock, findClosestDraggableId, findOptionsForDraggable, tryReleaseLock, isLockClaimed]);\n useValidateSensorHooks(useSensors);\n for (let i = 0; i < useSensors.length; i++) {\n useSensors[i](api);\n }\n}\n\nconst createResponders = props => ({\n onBeforeCapture: t => {\n const onBeforeCapureCallback = () => {\n if (props.onBeforeCapture) {\n props.onBeforeCapture(t);\n }\n };\n flushSync(onBeforeCapureCallback);\n },\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragEnd: props.onDragEnd,\n onDragUpdate: props.onDragUpdate\n});\nconst createAutoScrollerOptions = props => ({\n ...defaultAutoScrollerOptions,\n ...props.autoScrollerOptions,\n durationDampening: {\n ...defaultAutoScrollerOptions.durationDampening,\n ...props.autoScrollerOptions\n }\n});\nfunction getStore(lazyRef) {\n !lazyRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find store from lazy ref') : invariant() : void 0;\n return lazyRef.current;\n}\nfunction App(props) {\n const {\n contextId,\n setCallbacks,\n sensors,\n nonce,\n dragHandleUsageInstructions\n } = props;\n const lazyStoreRef = useRef(null);\n useStartupValidation();\n const lastPropsRef = usePrevious(props);\n const getResponders = useCallback(() => {\n return createResponders(lastPropsRef.current);\n }, [lastPropsRef]);\n const getAutoScrollerOptions = useCallback(() => {\n return createAutoScrollerOptions(lastPropsRef.current);\n }, [lastPropsRef]);\n const announce = useAnnouncer(contextId);\n const dragHandleUsageInstructionsId = useHiddenTextElement({\n contextId,\n text: dragHandleUsageInstructions\n });\n const styleMarshal = useStyleMarshal(contextId, nonce);\n const lazyDispatch = useCallback(action => {\n getStore(lazyStoreRef).dispatch(action);\n }, []);\n const marshalCallbacks = useMemo(() => bindActionCreators({\n publishWhileDragging,\n updateDroppableScroll,\n updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled,\n collectionStarting\n }, lazyDispatch), [lazyDispatch]);\n const registry = useRegistry();\n const dimensionMarshal = useMemo(() => {\n return createDimensionMarshal(registry, marshalCallbacks);\n }, [registry, marshalCallbacks]);\n const autoScroller = useMemo(() => createAutoScroller({\n scrollWindow,\n scrollDroppable: dimensionMarshal.scrollDroppable,\n getAutoScrollerOptions,\n ...bindActionCreators({\n move\n }, lazyDispatch)\n }), [dimensionMarshal.scrollDroppable, lazyDispatch, getAutoScrollerOptions]);\n const focusMarshal = useFocusMarshal(contextId);\n const store = useMemo(() => createStore({\n announce,\n autoScroller,\n dimensionMarshal,\n focusMarshal,\n getResponders,\n styleMarshal\n }), [announce, autoScroller, dimensionMarshal, focusMarshal, getResponders, styleMarshal]);\n if (process.env.NODE_ENV !== 'production') {\n if (lazyStoreRef.current && lazyStoreRef.current !== store) {\n process.env.NODE_ENV !== \"production\" ? warning('unexpected store change') : void 0;\n }\n }\n lazyStoreRef.current = store;\n const tryResetStore = useCallback(() => {\n const current = getStore(lazyStoreRef);\n const state = current.getState();\n if (state.phase !== 'IDLE') {\n current.dispatch(flush());\n }\n }, []);\n const isDragging = useCallback(() => {\n const state = getStore(lazyStoreRef).getState();\n if (state.phase === 'DROP_ANIMATING') {\n return true;\n }\n if (state.phase === 'IDLE') {\n return false;\n }\n return state.isDragging;\n }, []);\n const appCallbacks = useMemo(() => ({\n isDragging,\n tryAbort: tryResetStore\n }), [isDragging, tryResetStore]);\n setCallbacks(appCallbacks);\n const getCanLift = useCallback(id => canStartDrag(getStore(lazyStoreRef).getState(), id), []);\n const getIsMovementAllowed = useCallback(() => isMovementAllowed(getStore(lazyStoreRef).getState()), []);\n const appContext = useMemo(() => ({\n marshal: dimensionMarshal,\n focus: focusMarshal,\n contextId,\n canLift: getCanLift,\n isMovementAllowed: getIsMovementAllowed,\n dragHandleUsageInstructionsId,\n registry\n }), [contextId, dimensionMarshal, dragHandleUsageInstructionsId, focusMarshal, getCanLift, getIsMovementAllowed, registry]);\n useSensorMarshal({\n contextId,\n store,\n registry,\n customSensors: sensors || null,\n enableDefaultSensors: props.enableDefaultSensors !== false\n });\n useEffect(() => {\n return tryResetStore;\n }, [tryResetStore]);\n return React.createElement(AppContext.Provider, {\n value: appContext\n }, React.createElement(Provider, {\n context: StoreContext,\n store: store\n }, props.children));\n}\n\nfunction useUniqueContextId() {\n return React.useId();\n}\n\nfunction DragDropContext(props) {\n const contextId = useUniqueContextId();\n const dragHandleUsageInstructions = props.dragHandleUsageInstructions || preset.dragHandleUsageInstructions;\n return React.createElement(ErrorBoundary, null, setCallbacks => React.createElement(App, {\n nonce: props.nonce,\n contextId: contextId,\n setCallbacks: setCallbacks,\n dragHandleUsageInstructions: dragHandleUsageInstructions,\n enableDefaultSensors: props.enableDefaultSensors,\n sensors: props.sensors,\n onBeforeCapture: props.onBeforeCapture,\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragUpdate: props.onDragUpdate,\n onDragEnd: props.onDragEnd,\n autoScrollerOptions: props.autoScrollerOptions\n }, props.children));\n}\n\nconst zIndexOptions = {\n dragging: 5000,\n dropAnimating: 4500\n};\nconst getDraggingTransition = (shouldAnimateDragMovement, dropping) => {\n if (dropping) {\n return transitions.drop(dropping.duration);\n }\n if (shouldAnimateDragMovement) {\n return transitions.snap;\n }\n return transitions.fluid;\n};\nconst getDraggingOpacity = (isCombining, isDropAnimating) => {\n if (!isCombining) {\n return undefined;\n }\n return isDropAnimating ? combine.opacity.drop : combine.opacity.combining;\n};\nconst getShouldDraggingAnimate = dragging => {\n if (dragging.forceShouldAnimate != null) {\n return dragging.forceShouldAnimate;\n }\n return dragging.mode === 'SNAP';\n};\nfunction getDraggingStyle(dragging) {\n const dimension = dragging.dimension;\n const box = dimension.client;\n const {\n offset,\n combineWith,\n dropping\n } = dragging;\n const isCombining = Boolean(combineWith);\n const shouldAnimate = getShouldDraggingAnimate(dragging);\n const isDropAnimating = Boolean(dropping);\n const transform = isDropAnimating ? transforms.drop(offset, isCombining) : transforms.moveTo(offset);\n const style = {\n position: 'fixed',\n top: box.marginBox.top,\n left: box.marginBox.left,\n boxSizing: 'border-box',\n width: box.borderBox.width,\n height: box.borderBox.height,\n transition: getDraggingTransition(shouldAnimate, dropping),\n transform,\n opacity: getDraggingOpacity(isCombining, isDropAnimating),\n zIndex: isDropAnimating ? zIndexOptions.dropAnimating : zIndexOptions.dragging,\n pointerEvents: 'none'\n };\n return style;\n}\nfunction getSecondaryStyle(secondary) {\n return {\n transform: transforms.moveTo(secondary.offset),\n transition: secondary.shouldAnimateDisplacement ? undefined : 'none'\n };\n}\nfunction getStyle$1(mapped) {\n return mapped.type === 'DRAGGING' ? getDraggingStyle(mapped) : getSecondaryStyle(mapped);\n}\n\nfunction getDimension$1(descriptor, el, windowScroll = origin) {\n const computedStyles = window.getComputedStyle(el);\n const borderBox = el.getBoundingClientRect();\n const client = calculateBox(borderBox, computedStyles);\n const page = withScroll(client, windowScroll);\n const placeholder = {\n client,\n tagName: el.tagName.toLowerCase(),\n display: computedStyles.display\n };\n const displaceBy = {\n x: client.marginBox.width,\n y: client.marginBox.height\n };\n const dimension = {\n descriptor,\n placeholder,\n displaceBy,\n client,\n page\n };\n return dimension;\n}\n\nfunction useDraggablePublisher(args) {\n const uniqueId = useUniqueId('draggable');\n const {\n descriptor,\n registry,\n getDraggableRef,\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n } = args;\n const options = useMemo(() => ({\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n }), [canDragInteractiveElements, isEnabled, shouldRespectForcePress]);\n const getDimension = useCallback(windowScroll => {\n const el = getDraggableRef();\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get dimension when no ref is set') : invariant() : void 0;\n return getDimension$1(descriptor, el, windowScroll);\n }, [descriptor, getDraggableRef]);\n const entry = useMemo(() => ({\n uniqueId,\n descriptor,\n options,\n getDimension\n }), [descriptor, getDimension, options, uniqueId]);\n const publishedRef = useRef(entry);\n const isFirstPublishRef = useRef(true);\n useIsomorphicLayoutEffect(() => {\n registry.draggable.register(publishedRef.current);\n return () => registry.draggable.unregister(publishedRef.current);\n }, [registry.draggable]);\n useIsomorphicLayoutEffect(() => {\n if (isFirstPublishRef.current) {\n isFirstPublishRef.current = false;\n return;\n }\n const last = publishedRef.current;\n publishedRef.current = entry;\n registry.draggable.update(entry, last);\n }, [entry, registry.draggable]);\n}\n\nvar DroppableContext = React.createContext(null);\n\nfunction checkIsValidInnerRef(el) {\n !(el && isHtmlElement(el)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `\n provided.innerRef has not been provided with a HTMLElement.\n\n You can find a guide on using the innerRef callback functions at:\n https://github.com/hello-pangea/dnd/blob/main/docs/guides/using-inner-ref.md\n `) : invariant() : void 0;\n}\n\nfunction useValidation$1(props, contextId, getRef) {\n useDevSetupWarning(() => {\n function prefix(id) {\n return `Draggable[id: ${id}]: `;\n }\n const id = props.draggableId;\n !id ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable requires a draggableId') : invariant(false) : void 0;\n !(typeof id === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Draggable requires a [string] draggableId.\n Provided: [type: ${typeof id}] (value: ${id})`) : invariant(false) : void 0;\n !Number.isInteger(props.index) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${prefix(id)} requires an integer index prop`) : invariant(false) : void 0;\n if (props.mapped.type === 'DRAGGING') {\n return;\n }\n checkIsValidInnerRef(getRef());\n if (props.isEnabled) {\n !findDragHandle(contextId, id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${prefix(id)} Unable to find drag handle`) : invariant(false) : void 0;\n }\n });\n}\nfunction useClonePropValidation(isClone) {\n useDev(() => {\n const initialRef = useRef(isClone);\n useDevSetupWarning(() => {\n !(isClone === initialRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable isClone prop value changed during component life') : invariant(false) : void 0;\n }, [isClone]);\n });\n}\n\nfunction useRequiredContext(Context) {\n const result = useContext(Context);\n !result ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find required context') : invariant() : void 0;\n return result;\n}\n\nfunction preventHtml5Dnd(event) {\n event.preventDefault();\n}\nconst Draggable = props => {\n const ref = useRef(null);\n const setRef = useCallback((el = null) => {\n ref.current = el;\n }, []);\n const getRef = useCallback(() => ref.current, []);\n const {\n contextId,\n dragHandleUsageInstructionsId,\n registry\n } = useRequiredContext(AppContext);\n const {\n type,\n droppableId\n } = useRequiredContext(DroppableContext);\n const descriptor = useMemo(() => ({\n id: props.draggableId,\n index: props.index,\n type,\n droppableId\n }), [props.draggableId, props.index, type, droppableId]);\n const {\n children,\n draggableId,\n isEnabled,\n shouldRespectForcePress,\n canDragInteractiveElements,\n isClone,\n mapped,\n dropAnimationFinished: dropAnimationFinishedAction\n } = props;\n useValidation$1(props, contextId, getRef);\n useClonePropValidation(isClone);\n if (!isClone) {\n const forPublisher = useMemo(() => ({\n descriptor,\n registry,\n getDraggableRef: getRef,\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n }), [descriptor, registry, getRef, canDragInteractiveElements, shouldRespectForcePress, isEnabled]);\n useDraggablePublisher(forPublisher);\n }\n const dragHandleProps = useMemo(() => isEnabled ? {\n tabIndex: 0,\n role: 'button',\n 'aria-describedby': dragHandleUsageInstructionsId,\n 'data-rfd-drag-handle-draggable-id': draggableId,\n 'data-rfd-drag-handle-context-id': contextId,\n draggable: false,\n onDragStart: preventHtml5Dnd\n } : null, [contextId, dragHandleUsageInstructionsId, draggableId, isEnabled]);\n const onMoveEnd = useCallback(event => {\n if (mapped.type !== 'DRAGGING') {\n return;\n }\n if (!mapped.dropping) {\n return;\n }\n if (event.propertyName !== 'transform') {\n return;\n }\n flushSync(dropAnimationFinishedAction);\n }, [dropAnimationFinishedAction, mapped]);\n const provided = useMemo(() => {\n const style = getStyle$1(mapped);\n const onTransitionEnd = mapped.type === 'DRAGGING' && mapped.dropping ? onMoveEnd : undefined;\n const result = {\n innerRef: setRef,\n draggableProps: {\n 'data-rfd-draggable-context-id': contextId,\n 'data-rfd-draggable-id': draggableId,\n style,\n onTransitionEnd\n },\n dragHandleProps\n };\n return result;\n }, [contextId, dragHandleProps, draggableId, mapped, onMoveEnd, setRef]);\n const rubric = useMemo(() => ({\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n }), [descriptor.droppableId, descriptor.id, descriptor.index, descriptor.type]);\n return React.createElement(React.Fragment, null, children(provided, mapped.snapshot, rubric));\n};\n\nvar isStrictEqual = (a, b) => a === b;\n\nvar whatIsDraggedOverFromResult = result => {\n const {\n combine,\n destination\n } = result;\n if (destination) {\n return destination.droppableId;\n }\n if (combine) {\n return combine.droppableId;\n }\n return null;\n};\n\nconst getCombineWithFromResult = result => {\n return result.combine ? result.combine.draggableId : null;\n};\nconst getCombineWithFromImpact = impact => {\n return impact.at && impact.at.type === 'COMBINE' ? impact.at.combine.draggableId : null;\n};\nfunction getDraggableSelector() {\n const memoizedOffset = memoizeOne((x, y) => ({\n x,\n y\n }));\n const getMemoizedSnapshot = memoizeOne((mode, isClone, draggingOver = null, combineWith = null, dropping = null) => ({\n isDragging: true,\n isClone,\n isDropAnimating: Boolean(dropping),\n dropAnimation: dropping,\n mode,\n draggingOver,\n combineWith,\n combineTargetFor: null\n }));\n const getMemoizedProps = memoizeOne((offset, mode, dimension, isClone, draggingOver = null, combineWith = null, forceShouldAnimate = null) => ({\n mapped: {\n type: 'DRAGGING',\n dropping: null,\n draggingOver,\n combineWith,\n mode,\n offset,\n dimension,\n forceShouldAnimate,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, null)\n }\n }));\n const selector = (state, ownProps) => {\n if (isDragging(state)) {\n if (state.critical.draggable.id !== ownProps.draggableId) {\n return null;\n }\n const offset = state.current.client.offset;\n const dimension = state.dimensions.draggables[ownProps.draggableId];\n const draggingOver = whatIsDraggedOver(state.impact);\n const combineWith = getCombineWithFromImpact(state.impact);\n const forceShouldAnimate = state.forceShouldAnimate;\n return getMemoizedProps(memoizedOffset(offset.x, offset.y), state.movementMode, dimension, ownProps.isClone, draggingOver, combineWith, forceShouldAnimate);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (completed.result.draggableId !== ownProps.draggableId) {\n return null;\n }\n const isClone = ownProps.isClone;\n const dimension = state.dimensions.draggables[ownProps.draggableId];\n const result = completed.result;\n const mode = result.mode;\n const draggingOver = whatIsDraggedOverFromResult(result);\n const combineWith = getCombineWithFromResult(result);\n const duration = state.dropDuration;\n const dropping = {\n duration,\n curve: curves.drop,\n moveTo: state.newHomeClientOffset,\n opacity: combineWith ? combine.opacity.drop : null,\n scale: combineWith ? combine.scale.drop : null\n };\n return {\n mapped: {\n type: 'DRAGGING',\n offset: state.newHomeClientOffset,\n dimension,\n dropping,\n draggingOver,\n combineWith,\n mode,\n forceShouldAnimate: null,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, dropping)\n }\n };\n }\n return null;\n };\n return selector;\n}\nfunction getSecondarySnapshot(combineTargetFor = null) {\n return {\n isDragging: false,\n isDropAnimating: false,\n isClone: false,\n dropAnimation: null,\n mode: null,\n draggingOver: null,\n combineTargetFor,\n combineWith: null\n };\n}\nconst atRest = {\n mapped: {\n type: 'SECONDARY',\n offset: origin,\n combineTargetFor: null,\n shouldAnimateDisplacement: true,\n snapshot: getSecondarySnapshot(null)\n }\n};\nfunction getSecondarySelector() {\n const memoizedOffset = memoizeOne((x, y) => ({\n x,\n y\n }));\n const getMemoizedSnapshot = memoizeOne(getSecondarySnapshot);\n const getMemoizedProps = memoizeOne((offset, combineTargetFor = null, shouldAnimateDisplacement) => ({\n mapped: {\n type: 'SECONDARY',\n offset,\n combineTargetFor,\n shouldAnimateDisplacement,\n snapshot: getMemoizedSnapshot(combineTargetFor)\n }\n }));\n const getFallback = combineTargetFor => {\n return combineTargetFor ? getMemoizedProps(origin, combineTargetFor, true) : null;\n };\n const getProps = (ownId, draggingId, impact, afterCritical) => {\n const visualDisplacement = impact.displaced.visible[ownId];\n const isAfterCriticalInVirtualList = Boolean(afterCritical.inVirtualList && afterCritical.effected[ownId]);\n const combine = tryGetCombine(impact);\n const combineTargetFor = combine && combine.draggableId === ownId ? draggingId : null;\n if (!visualDisplacement) {\n if (!isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n if (impact.displaced.invisible[ownId]) {\n return null;\n }\n const change = negate(afterCritical.displacedBy.point);\n const offset = memoizedOffset(change.x, change.y);\n return getMemoizedProps(offset, combineTargetFor, true);\n }\n if (isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n const displaceBy = impact.displacedBy.point;\n const offset = memoizedOffset(displaceBy.x, displaceBy.y);\n return getMemoizedProps(offset, combineTargetFor, visualDisplacement.shouldAnimate);\n };\n const selector = (state, ownProps) => {\n if (isDragging(state)) {\n if (state.critical.draggable.id === ownProps.draggableId) {\n return null;\n }\n return getProps(ownProps.draggableId, state.critical.draggable.id, state.impact, state.afterCritical);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (completed.result.draggableId === ownProps.draggableId) {\n return null;\n }\n return getProps(ownProps.draggableId, completed.result.draggableId, completed.impact, completed.afterCritical);\n }\n return null;\n };\n return selector;\n}\nconst makeMapStateToProps$1 = () => {\n const draggingSelector = getDraggableSelector();\n const secondarySelector = getSecondarySelector();\n const selector = (state, ownProps) => draggingSelector(state, ownProps) || secondarySelector(state, ownProps) || atRest;\n return selector;\n};\nconst mapDispatchToProps$1 = {\n dropAnimationFinished: dropAnimationFinished\n};\nconst ConnectedDraggable = connect(makeMapStateToProps$1, mapDispatchToProps$1, null, {\n context: StoreContext,\n areStatePropsEqual: isStrictEqual\n})(Draggable);\n\nfunction PrivateDraggable(props) {\n const droppableContext = useRequiredContext(DroppableContext);\n const isUsingCloneFor = droppableContext.isUsingCloneFor;\n if (isUsingCloneFor === props.draggableId && !props.isClone) {\n return null;\n }\n return React.createElement(ConnectedDraggable, props);\n}\nfunction PublicDraggable(props) {\n const isEnabled = typeof props.isDragDisabled === 'boolean' ? !props.isDragDisabled : true;\n const canDragInteractiveElements = Boolean(props.disableInteractiveElementBlocking);\n const shouldRespectForcePress = Boolean(props.shouldRespectForcePress);\n return React.createElement(PrivateDraggable, _extends({}, props, {\n isClone: false,\n isEnabled: isEnabled,\n canDragInteractiveElements: canDragInteractiveElements,\n shouldRespectForcePress: shouldRespectForcePress\n }));\n}\n\nconst isEqual = base => value => base === value;\nconst isScroll = isEqual('scroll');\nconst isAuto = isEqual('auto');\nconst isVisible = isEqual('visible');\nconst isEither = (overflow, fn) => fn(overflow.overflowX) || fn(overflow.overflowY);\nconst isBoth = (overflow, fn) => fn(overflow.overflowX) && fn(overflow.overflowY);\nconst isElementScrollable = el => {\n const style = window.getComputedStyle(el);\n const overflow = {\n overflowX: style.overflowX,\n overflowY: style.overflowY\n };\n return isEither(overflow, isScroll) || isEither(overflow, isAuto);\n};\nconst isBodyScrollable = () => {\n if (process.env.NODE_ENV === 'production') {\n return false;\n }\n const body = getBodyElement();\n const html = document.documentElement;\n !html ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n if (!isElementScrollable(body)) {\n return false;\n }\n const htmlStyle = window.getComputedStyle(html);\n const htmlOverflow = {\n overflowX: htmlStyle.overflowX,\n overflowY: htmlStyle.overflowY\n };\n if (isBoth(htmlOverflow, isVisible)) {\n return false;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n We have detected that your <body> element might be a scroll container.\n We have found no reliable way of detecting whether the <body> element is a scroll container.\n Under most circumstances a <body> scroll bar will be on the <html> element (document.documentElement)\n\n Because we cannot determine if the <body> is a scroll container, and generally it is not one,\n we will be treating the <body> as *not* a scroll container\n\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/how-we-detect-scroll-containers.md\n `) : void 0;\n return false;\n};\nconst getClosestScrollable = el => {\n if (el == null) {\n return null;\n }\n if (el === document.body) {\n return isBodyScrollable() ? el : null;\n }\n if (el === document.documentElement) {\n return null;\n }\n if (!isElementScrollable(el)) {\n return getClosestScrollable(el.parentElement);\n }\n return el;\n};\n\nvar checkForNestedScrollContainers = scrollable => {\n if (!scrollable) {\n return;\n }\n const anotherScrollParent = getClosestScrollable(scrollable.parentElement);\n if (!anotherScrollParent) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n Droppable: unsupported nested scroll container detected.\n A Droppable can only have one scroll parent (which can be itself)\n Nested scroll containers are currently not supported.\n\n We hope to support nested scroll containers soon: https://github.com/atlassian/react-beautiful-dnd/issues/131\n `) : void 0;\n};\n\nvar getScroll = el => ({\n x: el.scrollLeft,\n y: el.scrollTop\n});\n\nconst getIsFixed = el => {\n if (!el) {\n return false;\n }\n const style = window.getComputedStyle(el);\n if (style.position === 'fixed') {\n return true;\n }\n return getIsFixed(el.parentElement);\n};\nvar getEnv = start => {\n const closestScrollable = getClosestScrollable(start);\n const isFixedOnPage = getIsFixed(start);\n return {\n closestScrollable,\n isFixedOnPage\n };\n};\n\nvar getDroppableDimension = ({\n descriptor,\n isEnabled,\n isCombineEnabled,\n isFixedOnPage,\n direction,\n client,\n page,\n closest\n}) => {\n const frame = (() => {\n if (!closest) {\n return null;\n }\n const {\n scrollSize,\n client: frameClient\n } = closest;\n const maxScroll = getMaxScroll({\n scrollHeight: scrollSize.scrollHeight,\n scrollWidth: scrollSize.scrollWidth,\n height: frameClient.paddingBox.height,\n width: frameClient.paddingBox.width\n });\n return {\n pageMarginBox: closest.page.marginBox,\n frameClient,\n scrollSize,\n shouldClipSubject: closest.shouldClipSubject,\n scroll: {\n initial: closest.scroll,\n current: closest.scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n })();\n const axis = direction === 'vertical' ? vertical : horizontal;\n const subject = getSubject({\n page,\n withPlaceholder: null,\n axis,\n frame\n });\n const dimension = {\n descriptor,\n isCombineEnabled,\n isFixedOnPage,\n axis,\n isEnabled,\n client,\n page,\n frame,\n subject\n };\n return dimension;\n};\n\nconst getClient = (targetRef, closestScrollable) => {\n const base = getBox(targetRef);\n if (!closestScrollable) {\n return base;\n }\n if (targetRef !== closestScrollable) {\n return base;\n }\n const top = base.paddingBox.top - closestScrollable.scrollTop;\n const left = base.paddingBox.left - closestScrollable.scrollLeft;\n const bottom = top + closestScrollable.scrollHeight;\n const right = left + closestScrollable.scrollWidth;\n const paddingBox = {\n top,\n right,\n bottom,\n left\n };\n const borderBox = expand(paddingBox, base.border);\n const client = createBox({\n borderBox,\n margin: base.margin,\n border: base.border,\n padding: base.padding\n });\n return client;\n};\nvar getDimension = ({\n ref,\n descriptor,\n env,\n windowScroll,\n direction,\n isDropDisabled,\n isCombineEnabled,\n shouldClipSubject\n}) => {\n const closestScrollable = env.closestScrollable;\n const client = getClient(ref, closestScrollable);\n const page = withScroll(client, windowScroll);\n const closest = (() => {\n if (!closestScrollable) {\n return null;\n }\n const frameClient = getBox(closestScrollable);\n const scrollSize = {\n scrollHeight: closestScrollable.scrollHeight,\n scrollWidth: closestScrollable.scrollWidth\n };\n return {\n client: frameClient,\n page: withScroll(frameClient, windowScroll),\n scroll: getScroll(closestScrollable),\n scrollSize,\n shouldClipSubject\n };\n })();\n const dimension = getDroppableDimension({\n descriptor,\n isEnabled: !isDropDisabled,\n isCombineEnabled,\n isFixedOnPage: env.isFixedOnPage,\n direction,\n client,\n page,\n closest\n });\n return dimension;\n};\n\nconst immediate = {\n passive: false\n};\nconst delayed = {\n passive: true\n};\nvar getListenerOptions = options => options.shouldPublishImmediately ? immediate : delayed;\n\nconst getClosestScrollableFromDrag = dragging => dragging && dragging.env.closestScrollable || null;\nfunction useDroppablePublisher(args) {\n const whileDraggingRef = useRef(null);\n const appContext = useRequiredContext(AppContext);\n const uniqueId = useUniqueId('droppable');\n const {\n registry,\n marshal\n } = appContext;\n const previousRef = usePrevious(args);\n const descriptor = useMemo(() => ({\n id: args.droppableId,\n type: args.type,\n mode: args.mode\n }), [args.droppableId, args.mode, args.type]);\n const publishedDescriptorRef = useRef(descriptor);\n const memoizedUpdateScroll = useMemo(() => memoizeOne((x, y) => {\n !whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only update scroll when dragging') : invariant() : void 0;\n const scroll = {\n x,\n y\n };\n marshal.updateDroppableScroll(descriptor.id, scroll);\n }), [descriptor.id, marshal]);\n const getClosestScroll = useCallback(() => {\n const dragging = whileDraggingRef.current;\n if (!dragging || !dragging.env.closestScrollable) {\n return origin;\n }\n return getScroll(dragging.env.closestScrollable);\n }, []);\n const updateScroll = useCallback(() => {\n const scroll = getClosestScroll();\n memoizedUpdateScroll(scroll.x, scroll.y);\n }, [getClosestScroll, memoizedUpdateScroll]);\n const scheduleScrollUpdate = useMemo(() => rafSchd(updateScroll), [updateScroll]);\n const onClosestScroll = useCallback(() => {\n const dragging = whileDraggingRef.current;\n const closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find scroll options while scrolling') : invariant() : void 0;\n const options = dragging.scrollOptions;\n if (options.shouldPublishImmediately) {\n updateScroll();\n return;\n }\n scheduleScrollUpdate();\n }, [scheduleScrollUpdate, updateScroll]);\n const getDimensionAndWatchScroll = useCallback((windowScroll, options) => {\n !!whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect a droppable while a drag is occurring') : invariant() : void 0;\n const previous = previousRef.current;\n const ref = previous.getDroppableRef();\n !ref ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect without a droppable ref') : invariant() : void 0;\n const env = getEnv(ref);\n const dragging = {\n ref,\n descriptor,\n env,\n scrollOptions: options\n };\n whileDraggingRef.current = dragging;\n const dimension = getDimension({\n ref,\n descriptor,\n env,\n windowScroll,\n direction: previous.direction,\n isDropDisabled: previous.isDropDisabled,\n isCombineEnabled: previous.isCombineEnabled,\n shouldClipSubject: !previous.ignoreContainerClipping\n });\n const scrollable = env.closestScrollable;\n if (scrollable) {\n scrollable.setAttribute(scrollContainer.contextId, appContext.contextId);\n scrollable.addEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n if (process.env.NODE_ENV !== 'production') {\n checkForNestedScrollContainers(scrollable);\n }\n }\n return dimension;\n }, [appContext.contextId, descriptor, onClosestScroll, previousRef]);\n const getScrollWhileDragging = useCallback(() => {\n const dragging = whileDraggingRef.current;\n const closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only recollect Droppable client for Droppables that have a scroll container') : invariant() : void 0;\n return getScroll(closest);\n }, []);\n const dragStopped = useCallback(() => {\n const dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop drag when no active drag') : invariant() : void 0;\n const closest = getClosestScrollableFromDrag(dragging);\n whileDraggingRef.current = null;\n if (!closest) {\n return;\n }\n scheduleScrollUpdate.cancel();\n closest.removeAttribute(scrollContainer.contextId);\n closest.removeEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n }, [onClosestScroll, scheduleScrollUpdate]);\n const scroll = useCallback(change => {\n const dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll when there is no drag') : invariant() : void 0;\n const closest = getClosestScrollableFromDrag(dragging);\n !closest ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll a droppable with no closest scrollable') : invariant() : void 0;\n closest.scrollTop += change.y;\n closest.scrollLeft += change.x;\n }, []);\n const callbacks = useMemo(() => {\n return {\n getDimensionAndWatchScroll,\n getScrollWhileDragging,\n dragStopped,\n scroll\n };\n }, [dragStopped, getDimensionAndWatchScroll, getScrollWhileDragging, scroll]);\n const entry = useMemo(() => ({\n uniqueId,\n descriptor,\n callbacks\n }), [callbacks, descriptor, uniqueId]);\n useIsomorphicLayoutEffect(() => {\n publishedDescriptorRef.current = entry.descriptor;\n registry.droppable.register(entry);\n return () => {\n if (whileDraggingRef.current) {\n process.env.NODE_ENV !== \"production\" ? warning('Unsupported: changing the droppableId or type of a Droppable during a drag') : void 0;\n dragStopped();\n }\n registry.droppable.unregister(entry);\n };\n }, [callbacks, descriptor, dragStopped, entry, marshal, registry.droppable]);\n useIsomorphicLayoutEffect(() => {\n if (!whileDraggingRef.current) {\n return;\n }\n marshal.updateDroppableIsEnabled(publishedDescriptorRef.current.id, !args.isDropDisabled);\n }, [args.isDropDisabled, marshal]);\n useIsomorphicLayoutEffect(() => {\n if (!whileDraggingRef.current) {\n return;\n }\n marshal.updateDroppableIsCombineEnabled(publishedDescriptorRef.current.id, args.isCombineEnabled);\n }, [args.isCombineEnabled, marshal]);\n}\n\nfunction noop() {}\nconst empty = {\n width: 0,\n height: 0,\n margin: noSpacing\n};\nconst getSize = ({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n}) => {\n if (isAnimatingOpenOnMount) {\n return empty;\n }\n if (animate === 'close') {\n return empty;\n }\n return {\n height: placeholder.client.borderBox.height,\n width: placeholder.client.borderBox.width,\n margin: placeholder.client.margin\n };\n};\nconst getStyle = ({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n}) => {\n const size = getSize({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n });\n return {\n display: placeholder.display,\n boxSizing: 'border-box',\n width: size.width,\n height: size.height,\n marginTop: size.margin.top,\n marginRight: size.margin.right,\n marginBottom: size.margin.bottom,\n marginLeft: size.margin.left,\n flexShrink: '0',\n flexGrow: '0',\n pointerEvents: 'none',\n transition: animate !== 'none' ? transitions.placeholder : null\n };\n};\nconst Placeholder = props => {\n const animateOpenTimerRef = useRef(null);\n const tryClearAnimateOpenTimer = useCallback(() => {\n if (!animateOpenTimerRef.current) {\n return;\n }\n clearTimeout(animateOpenTimerRef.current);\n animateOpenTimerRef.current = null;\n }, []);\n const {\n animate,\n onTransitionEnd,\n onClose,\n contextId\n } = props;\n const [isAnimatingOpenOnMount, setIsAnimatingOpenOnMount] = useState(props.animate === 'open');\n useEffect(() => {\n if (!isAnimatingOpenOnMount) {\n return noop;\n }\n if (animate !== 'open') {\n tryClearAnimateOpenTimer();\n setIsAnimatingOpenOnMount(false);\n return noop;\n }\n if (animateOpenTimerRef.current) {\n return noop;\n }\n animateOpenTimerRef.current = setTimeout(() => {\n animateOpenTimerRef.current = null;\n setIsAnimatingOpenOnMount(false);\n });\n return tryClearAnimateOpenTimer;\n }, [animate, isAnimatingOpenOnMount, tryClearAnimateOpenTimer]);\n const onSizeChangeEnd = useCallback(event => {\n if (event.propertyName !== 'height') {\n return;\n }\n onTransitionEnd();\n if (animate === 'close') {\n onClose();\n }\n }, [animate, onClose, onTransitionEnd]);\n const style = getStyle({\n isAnimatingOpenOnMount,\n animate: props.animate,\n placeholder: props.placeholder\n });\n return React.createElement(props.placeholder.tagName, {\n style,\n 'data-rfd-placeholder-context-id': contextId,\n onTransitionEnd: onSizeChangeEnd,\n ref: props.innerRef\n });\n};\nvar Placeholder$1 = React.memo(Placeholder);\n\nfunction isBoolean(value) {\n return typeof value === 'boolean';\n}\nfunction runChecks(args, checks) {\n checks.forEach(check => check(args));\n}\nconst shared = [function required({\n props\n}) {\n !props.droppableId ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A Droppable requires a droppableId prop') : invariant() : void 0;\n !(typeof props.droppableId === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `A Droppable requires a [string] droppableId. Provided: [${typeof props.droppableId}]`) : invariant() : void 0;\n}, function boolean({\n props\n}) {\n !isBoolean(props.isDropDisabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isDropDisabled must be a boolean') : invariant() : void 0;\n !isBoolean(props.isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isCombineEnabled must be a boolean') : invariant() : void 0;\n !isBoolean(props.ignoreContainerClipping) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'ignoreContainerClipping must be a boolean') : invariant() : void 0;\n}, function ref({\n getDroppableRef\n}) {\n checkIsValidInnerRef(getDroppableRef());\n}];\nconst standard = [function placeholder({\n props,\n getPlaceholderRef\n}) {\n if (!props.placeholder) {\n return;\n }\n const ref = getPlaceholderRef();\n if (ref) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n Droppable setup issue [droppableId: \"${props.droppableId}\"]:\n DroppableProvided > placeholder could not be found.\n\n Please be sure to add the {provided.placeholder} React Node as a child of your Droppable.\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/api/droppable.md\n `) : void 0;\n}];\nconst virtual = [function hasClone({\n props\n}) {\n !props.renderClone ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must provide a clone render function (renderClone) for virtual lists') : invariant() : void 0;\n}, function hasNoPlaceholder({\n getPlaceholderRef\n}) {\n !!getPlaceholderRef() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected virtual list to not have a placeholder') : invariant() : void 0;\n}];\nfunction useValidation(args) {\n useDevSetupWarning(() => {\n runChecks(args, shared);\n if (args.props.mode === 'standard') {\n runChecks(args, standard);\n }\n if (args.props.mode === 'virtual') {\n runChecks(args, virtual);\n }\n });\n}\n\nclass AnimateInOut extends React.PureComponent {\n constructor(...args) {\n super(...args);\n this.state = {\n isVisible: Boolean(this.props.on),\n data: this.props.on,\n animate: this.props.shouldAnimate && this.props.on ? 'open' : 'none'\n };\n this.onClose = () => {\n if (this.state.animate !== 'close') {\n return;\n }\n this.setState({\n isVisible: false\n });\n };\n }\n static getDerivedStateFromProps(props, state) {\n if (!props.shouldAnimate) {\n return {\n isVisible: Boolean(props.on),\n data: props.on,\n animate: 'none'\n };\n }\n if (props.on) {\n return {\n isVisible: true,\n data: props.on,\n animate: 'open'\n };\n }\n if (state.isVisible) {\n return {\n isVisible: true,\n data: state.data,\n animate: 'close'\n };\n }\n return {\n isVisible: false,\n animate: 'close',\n data: null\n };\n }\n render() {\n if (!this.state.isVisible) {\n return null;\n }\n const provided = {\n onClose: this.onClose,\n data: this.state.data,\n animate: this.state.animate\n };\n return this.props.children(provided);\n }\n}\n\nconst Droppable = props => {\n const appContext = useContext(AppContext);\n !appContext ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find app context') : invariant() : void 0;\n const {\n contextId,\n isMovementAllowed\n } = appContext;\n const droppableRef = useRef(null);\n const placeholderRef = useRef(null);\n const {\n children,\n droppableId,\n type,\n mode,\n direction,\n ignoreContainerClipping,\n isDropDisabled,\n isCombineEnabled,\n snapshot,\n useClone,\n updateViewportMaxScroll,\n getContainerForClone\n } = props;\n const getDroppableRef = useCallback(() => droppableRef.current, []);\n const setDroppableRef = useCallback((value = null) => {\n droppableRef.current = value;\n }, []);\n const getPlaceholderRef = useCallback(() => placeholderRef.current, []);\n const setPlaceholderRef = useCallback((value = null) => {\n placeholderRef.current = value;\n }, []);\n useValidation({\n props,\n getDroppableRef,\n getPlaceholderRef\n });\n const onPlaceholderTransitionEnd = useCallback(() => {\n if (isMovementAllowed()) {\n updateViewportMaxScroll({\n maxScroll: getMaxWindowScroll()\n });\n }\n }, [isMovementAllowed, updateViewportMaxScroll]);\n useDroppablePublisher({\n droppableId,\n type,\n mode,\n direction,\n isDropDisabled,\n isCombineEnabled,\n ignoreContainerClipping,\n getDroppableRef\n });\n const placeholder = useMemo(() => React.createElement(AnimateInOut, {\n on: props.placeholder,\n shouldAnimate: props.shouldAnimatePlaceholder\n }, ({\n onClose,\n data,\n animate\n }) => React.createElement(Placeholder$1, {\n placeholder: data,\n onClose: onClose,\n innerRef: setPlaceholderRef,\n animate: animate,\n contextId: contextId,\n onTransitionEnd: onPlaceholderTransitionEnd\n })), [contextId, onPlaceholderTransitionEnd, props.placeholder, props.shouldAnimatePlaceholder, setPlaceholderRef]);\n const provided = useMemo(() => ({\n innerRef: setDroppableRef,\n placeholder,\n droppableProps: {\n 'data-rfd-droppable-id': droppableId,\n 'data-rfd-droppable-context-id': contextId\n }\n }), [contextId, droppableId, placeholder, setDroppableRef]);\n const isUsingCloneFor = useClone ? useClone.dragging.draggableId : null;\n const droppableContext = useMemo(() => ({\n droppableId,\n type,\n isUsingCloneFor\n }), [droppableId, isUsingCloneFor, type]);\n function getClone() {\n if (!useClone) {\n return null;\n }\n const {\n dragging,\n render\n } = useClone;\n const node = React.createElement(PrivateDraggable, {\n draggableId: dragging.draggableId,\n index: dragging.source.index,\n isClone: true,\n isEnabled: true,\n shouldRespectForcePress: false,\n canDragInteractiveElements: true\n }, (draggableProvided, draggableSnapshot) => render(draggableProvided, draggableSnapshot, dragging));\n return ReactDOM.createPortal(node, getContainerForClone());\n }\n return React.createElement(DroppableContext.Provider, {\n value: droppableContext\n }, children(provided, snapshot), getClone());\n};\n\nfunction getBody() {\n !document.body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'document.body is not ready') : invariant() : void 0;\n return document.body;\n}\nconst defaultProps = {\n mode: 'standard',\n type: 'DEFAULT',\n direction: 'vertical',\n isDropDisabled: false,\n isCombineEnabled: false,\n ignoreContainerClipping: false,\n renderClone: null,\n getContainerForClone: getBody\n};\nconst attachDefaultPropsToOwnProps = ownProps => {\n let mergedProps = {\n ...ownProps\n };\n let defaultPropKey;\n for (defaultPropKey in defaultProps) {\n if (ownProps[defaultPropKey] === undefined) {\n mergedProps = {\n ...mergedProps,\n [defaultPropKey]: defaultProps[defaultPropKey]\n };\n }\n }\n return mergedProps;\n};\nconst isMatchingType = (type, critical) => type === critical.droppable.type;\nconst getDraggable = (critical, dimensions) => dimensions.draggables[critical.draggable.id];\nconst makeMapStateToProps = () => {\n const idleWithAnimation = {\n placeholder: null,\n shouldAnimatePlaceholder: true,\n snapshot: {\n isDraggingOver: false,\n draggingOverWith: null,\n draggingFromThisWith: null,\n isUsingPlaceholder: false\n },\n useClone: null\n };\n const idleWithoutAnimation = {\n ...idleWithAnimation,\n shouldAnimatePlaceholder: false\n };\n const getDraggableRubric = memoizeOne(descriptor => ({\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n }));\n const getMapProps = memoizeOne((id, isEnabled, isDraggingOverForConsumer, isDraggingOverForImpact, dragging, renderClone) => {\n const draggableId = dragging.descriptor.id;\n const isHome = dragging.descriptor.droppableId === id;\n if (isHome) {\n const useClone = renderClone ? {\n render: renderClone,\n dragging: getDraggableRubric(dragging.descriptor)\n } : null;\n const snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: isDraggingOverForConsumer ? draggableId : null,\n draggingFromThisWith: draggableId,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: false,\n snapshot,\n useClone\n };\n }\n if (!isEnabled) {\n return idleWithoutAnimation;\n }\n if (!isDraggingOverForImpact) {\n return idleWithAnimation;\n }\n const snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: draggableId,\n draggingFromThisWith: null,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: true,\n snapshot,\n useClone: null\n };\n });\n const selector = (state, ownProps) => {\n const ownPropsWithDefaultProps = attachDefaultPropsToOwnProps(ownProps);\n const id = ownPropsWithDefaultProps.droppableId;\n const type = ownPropsWithDefaultProps.type;\n const isEnabled = !ownPropsWithDefaultProps.isDropDisabled;\n const renderClone = ownPropsWithDefaultProps.renderClone;\n if (isDragging(state)) {\n const critical = state.critical;\n if (!isMatchingType(type, critical)) {\n return idleWithoutAnimation;\n }\n const dragging = getDraggable(critical, state.dimensions);\n const isDraggingOver = whatIsDraggedOver(state.impact) === id;\n return getMapProps(id, isEnabled, isDraggingOver, isDraggingOver, dragging, renderClone);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n const dragging = getDraggable(completed.critical, state.dimensions);\n return getMapProps(id, isEnabled, whatIsDraggedOverFromResult(completed.result) === id, whatIsDraggedOver(completed.impact) === id, dragging, renderClone);\n }\n if (state.phase === 'IDLE' && state.completed && !state.shouldFlush) {\n const completed = state.completed;\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n const wasOver = whatIsDraggedOver(completed.impact) === id;\n const wasCombining = Boolean(completed.impact.at && completed.impact.at.type === 'COMBINE');\n const isHome = completed.critical.droppable.id === id;\n if (wasOver) {\n return wasCombining ? idleWithAnimation : idleWithoutAnimation;\n }\n if (isHome) {\n return idleWithAnimation;\n }\n return idleWithoutAnimation;\n }\n return idleWithoutAnimation;\n };\n return selector;\n};\nconst mapDispatchToProps = {\n updateViewportMaxScroll: updateViewportMaxScroll\n};\nconst ConnectedDroppable = connect(makeMapStateToProps, mapDispatchToProps, (stateProps, dispatchProps, ownProps) => {\n return {\n ...attachDefaultPropsToOwnProps(ownProps),\n ...stateProps,\n ...dispatchProps\n };\n}, {\n context: StoreContext,\n areStatePropsEqual: isStrictEqual\n})(Droppable);\n\nexport { DragDropContext, PublicDraggable as Draggable, ConnectedDroppable as Droppable, useKeyboardSensor, useMouseSensor, useTouchSensor };\n","// ========================================\r\n// KanbanBoard Component\r\n// ========================================\r\n// Drag-and-drop kanban board for loops and tasks\r\n\r\nimport { useCallback } from 'react';\r\nimport {\r\n DragDropContext,\r\n Droppable,\r\n Draggable,\r\n type DropResult,\r\n type DraggableProvided,\r\n type DroppableProvided,\r\n} from '@hello-pangea/dnd';\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 KanbanItem {\r\n id: string;\r\n title?: string;\r\n status: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface KanbanColumn<T extends KanbanItem = KanbanItem> {\r\n id: string;\r\n title: string;\r\n items: T[];\r\n color?: string;\r\n icon?: React.ReactNode;\r\n}\r\n\r\nexport interface KanbanBoardProps<T extends KanbanItem = KanbanItem> {\r\n columns: KanbanColumn<T>[];\r\n onDragEnd?: (result: DropResult, sourceColumn: string, destColumn: string) => void;\r\n onItemClick?: (item: T) => void;\r\n renderItem?: (item: T, provided: DraggableProvided) => React.ReactNode;\r\n className?: string;\r\n columnClassName?: string;\r\n itemClassName?: string;\r\n emptyColumnMessage?: string;\r\n isLoading?: boolean;\r\n}\r\n\r\n// ========== Default Item Renderer ==========\r\n\r\nfunction DefaultItemRenderer<T extends KanbanItem>({\r\n item,\r\n provided,\r\n onClick,\r\n className,\r\n}: {\r\n item: T;\r\n provided: DraggableProvided;\r\n onClick?: () => void;\r\n className?: string;\r\n}) {\r\n return (\r\n <div\r\n ref={provided.innerRef}\r\n {...provided.draggableProps}\r\n {...provided.dragHandleProps}\r\n onClick={onClick}\r\n className={cn(\r\n 'p-3 bg-card border border-border rounded-lg shadow-sm cursor-pointer',\r\n 'hover:shadow-md hover:border-primary/50 transition-all',\r\n 'focus:outline-none focus:ring-2 focus:ring-primary/50',\r\n className\r\n )}\r\n >\r\n <p className=\"text-sm font-medium text-foreground truncate\">\r\n {item.title || item.id}\r\n </p>\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Column Component ==========\r\n\r\nfunction KanbanColumnComponent<T extends KanbanItem>({\r\n column,\r\n onItemClick,\r\n renderItem,\r\n itemClassName,\r\n emptyMessage,\r\n}: {\r\n column: KanbanColumn<T>;\r\n onItemClick?: (item: T) => void;\r\n renderItem?: (item: T, provided: DraggableProvided) => React.ReactNode;\r\n itemClassName?: string;\r\n emptyMessage?: string;\r\n}) {\r\n return (\r\n <Droppable droppableId={column.id}>\r\n {(provided: DroppableProvided, snapshot) => (\r\n <div\r\n ref={provided.innerRef}\r\n {...provided.droppableProps}\r\n className={cn(\r\n 'min-h-[200px] p-2 space-y-2 rounded-lg transition-colors',\r\n snapshot.isDraggingOver && 'bg-primary/5'\r\n )}\r\n >\r\n {column.items.length === 0 ? (\r\n <p className=\"text-center text-sm text-muted-foreground py-8\">\r\n {emptyMessage || 'No items'}\r\n </p>\r\n ) : (\r\n column.items.map((item, index) => (\r\n <Draggable key={item.id} draggableId={item.id} index={index}>\r\n {(dragProvided: DraggableProvided) =>\r\n renderItem ? (\r\n renderItem(item, dragProvided)\r\n ) : (\r\n <DefaultItemRenderer\r\n item={item}\r\n provided={dragProvided}\r\n onClick={() => onItemClick?.(item)}\r\n className={itemClassName}\r\n />\r\n )\r\n }\r\n </Draggable>\r\n ))\r\n )}\r\n {provided.placeholder}\r\n </div>\r\n )}\r\n </Droppable>\r\n );\r\n}\r\n\r\n// ========== Main Kanban Board Component ==========\r\n\r\nexport function KanbanBoard<T extends KanbanItem = KanbanItem>({\r\n columns,\r\n onDragEnd,\r\n onItemClick,\r\n renderItem,\r\n className,\r\n columnClassName,\r\n itemClassName,\r\n emptyColumnMessage,\r\n isLoading = false,\r\n}: KanbanBoardProps<T>) {\r\n const handleDragEnd = useCallback(\r\n (result: DropResult) => {\r\n if (!result.destination) return;\r\n\r\n const { source, destination } = result;\r\n if (\r\n source.droppableId === destination.droppableId &&\r\n source.index === destination.index\r\n ) {\r\n return;\r\n }\r\n\r\n onDragEnd?.(result, source.droppableId, destination.droppableId);\r\n },\r\n [onDragEnd]\r\n );\r\n\r\n if (isLoading) {\r\n return (\r\n <div className={cn('grid gap-4', className)} style={{ gridTemplateColumns: `repeat(${columns.length}, minmax(0, 1fr))` }}>\r\n {columns.map((column) => (\r\n <Card key={column.id} className={cn('p-4', columnClassName)}>\r\n <div className=\"h-6 w-24 bg-muted animate-pulse rounded mb-4\" />\r\n <div className=\"space-y-2\">\r\n {[1, 2, 3].map((i) => (\r\n <div key={i} className=\"h-16 bg-muted animate-pulse rounded\" />\r\n ))}\r\n </div>\r\n </Card>\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <DragDropContext onDragEnd={handleDragEnd}>\r\n <div\r\n className={cn('grid gap-4', className)}\r\n style={{ gridTemplateColumns: `repeat(${columns.length}, minmax(0, 1fr))` }}\r\n >\r\n {columns.map((column) => (\r\n <Card key={column.id} className={cn('p-4', columnClassName)}>\r\n {/* Column Header */}\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <div className=\"flex items-center gap-2\">\r\n {column.icon}\r\n <h3 className=\"font-medium text-foreground\">{column.title}</h3>\r\n </div>\r\n <Badge\r\n variant=\"secondary\"\r\n className={cn(column.color && `bg-${column.color}/10 text-${column.color}`)}\r\n >\r\n {column.items.length}\r\n </Badge>\r\n </div>\r\n\r\n {/* Column Content */}\r\n <KanbanColumnComponent\r\n column={column}\r\n onItemClick={onItemClick}\r\n renderItem={renderItem}\r\n itemClassName={itemClassName}\r\n emptyMessage={emptyColumnMessage}\r\n />\r\n </Card>\r\n ))}\r\n </div>\r\n </DragDropContext>\r\n );\r\n}\r\n\r\n// ========== Loop-specific Kanban ==========\r\n\r\nexport interface LoopKanbanItem extends KanbanItem {\r\n status: 'created' | 'running' | 'paused' | 'completed' | 'failed';\r\n currentStep?: number;\r\n totalSteps?: number;\r\n prompt?: string;\r\n tool?: string;\r\n}\r\n\r\nexport function useLoopKanbanColumns(loopsByStatus: Record<string, LoopKanbanItem[]>): KanbanColumn<LoopKanbanItem>[] {\r\n return [\r\n {\r\n id: 'created',\r\n title: 'Pending',\r\n items: loopsByStatus.created || [],\r\n color: 'muted',\r\n },\r\n {\r\n id: 'running',\r\n title: 'Running',\r\n items: loopsByStatus.running || [],\r\n color: 'primary',\r\n },\r\n {\r\n id: 'paused',\r\n title: 'Paused',\r\n items: loopsByStatus.paused || [],\r\n color: 'warning',\r\n },\r\n {\r\n id: 'completed',\r\n title: 'Completed',\r\n items: loopsByStatus.completed || [],\r\n color: 'success',\r\n },\r\n {\r\n id: 'failed',\r\n title: 'Failed',\r\n items: loopsByStatus.failed || [],\r\n color: 'destructive',\r\n },\r\n ];\r\n}\r\n\r\nexport default KanbanBoard;\r\n","// ========================================\n// Issues Panel\n// ========================================\n// Unified issue list panel with list/board view toggle\n\nimport { useState, useMemo, useCallback, useEffect } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n Search,\n CheckCircle,\n Clock,\n AlertTriangle,\n AlertCircle,\n LayoutGrid,\n List,\n} from 'lucide-react';\nimport type { DropResult } from '@hello-pangea/dnd';\nimport { Card } from '@/components/ui/Card';\nimport { Input } from '@/components/ui/Input';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/Select';\nimport { IssueCard } from '@/components/shared/IssueCard';\nimport { IssueDrawer } from '@/components/issue/hub/IssueDrawer';\nimport { KanbanBoard, type KanbanColumn, type KanbanItem } from '@/components/shared/KanbanBoard';\nimport { useIssues, useIssueMutations } from '@/hooks';\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\nimport { cn } from '@/lib/utils';\nimport type { Issue } from '@/lib/api';\n\ntype StatusFilter = 'all' | Issue['status'];\ntype PriorityFilter = 'all' | Issue['priority'];\ntype ViewMode = 'list' | 'board';\n\n// Board columns matching backend status with Chinese defaults\nconst BOARD_COLUMNS: Array<{ id: Issue['status']; titleKey: string; defaultLabel: string }> = [\n { id: 'registered', titleKey: 'issues.status.registered', defaultLabel: '新注册' },\n { id: 'planning', titleKey: 'issues.status.planning', defaultLabel: '规划中' },\n { id: 'planned', titleKey: 'issues.status.planned', defaultLabel: '已规划' },\n { id: 'executing', titleKey: 'issues.status.executing', defaultLabel: '执行中' },\n { id: 'completed', titleKey: 'issues.status.completed', defaultLabel: '已完成' },\n];\n\ninterface IssuesPanelProps {\n onCreateIssue?: () => void;\n}\n\ninterface IssueListProps {\n issues: Issue[];\n isLoading: boolean;\n onIssueClick: (issue: Issue) => void;\n onIssueEdit: (issue: Issue) => void;\n onIssueDelete: (issue: Issue) => void;\n onStatusChange: (issue: Issue, status: Issue['status']) => void;\n}\n\nfunction IssueList({ issues, isLoading, onIssueClick, onIssueEdit, onIssueDelete, onStatusChange }: IssueListProps) {\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"h-32 bg-muted animate-pulse rounded-lg\" />\n ))}\n </div>\n );\n }\n\n if (issues.length === 0) {\n return (\n <Card className=\"p-8 text-center\">\n <AlertCircle className=\"w-12 h-12 mx-auto text-muted-foreground/50\" />\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">{formatMessage({ id: 'issues.emptyState.title' })}</h3>\n <p className=\"mt-2 text-muted-foreground\">{formatMessage({ id: 'issues.emptyState.message' })}</p>\n </Card>\n );\n }\n\n return (\n <div className=\"grid gap-3 md:grid-cols-2 lg:grid-cols-3\">\n {issues.map((issue) => (\n <IssueCard\n key={issue.id}\n issue={issue}\n onClick={onIssueClick}\n onEdit={onIssueEdit}\n onDelete={onIssueDelete}\n onStatusChange={onStatusChange}\n />\n ))}\n </div>\n );\n}\n\n// Local storage key for board order\nfunction storageKey(projectPath: string | null | undefined): string {\n const base = projectPath ? encodeURIComponent(projectPath) : 'global';\n return `ccw.issues.board.order:${base}`;\n}\n\ntype BoardOrder = Partial<Record<Issue['status'], string[]>>;\n\nfunction safeParseOrder(value: string | null): BoardOrder {\n if (!value) return {};\n try {\n const parsed = JSON.parse(value) as unknown;\n if (!parsed || typeof parsed !== 'object') return {};\n return parsed as BoardOrder;\n } catch {\n return {};\n }\n}\n\nfunction buildColumns(\n issues: Issue[],\n order: BoardOrder,\n formatTitle: (statusId: Issue['status']) => string\n): KanbanColumn<Issue & KanbanItem>[] {\n const byId = new Map(issues.map((i) => [i.id, i]));\n const columns: KanbanColumn<Issue & KanbanItem>[] = [];\n\n for (const col of BOARD_COLUMNS) {\n const desired = (order[col.id] ?? []).map((id) => byId.get(id)).filter(Boolean) as Issue[];\n const desiredIds = new Set(desired.map((i) => i.id));\n\n const remaining = issues\n .filter((i) => i.status === col.id && !desiredIds.has(i.id))\n .sort((a, b) => {\n const at = a.updatedAt || a.createdAt || '';\n const bt = b.updatedAt || b.createdAt || '';\n return bt.localeCompare(at);\n });\n\n const items = [...desired, ...remaining].map((issue) => ({\n ...issue,\n id: issue.id,\n title: issue.title,\n status: issue.status,\n }));\n\n columns.push({\n id: col.id,\n title: formatTitle(col.id),\n items,\n icon: <LayoutGrid className=\"w-4 h-4\" />,\n });\n }\n\n return columns;\n}\n\nfunction syncOrderWithIssues(prev: BoardOrder, issues: Issue[]): BoardOrder {\n const statusById = new Map(issues.map((i) => [i.id, i.status]));\n const next: BoardOrder = {};\n\n for (const { id: status } of BOARD_COLUMNS) {\n const existing = prev[status] ?? [];\n const filtered = existing.filter((id) => statusById.get(id) === status);\n const present = new Set(filtered);\n\n const missing = issues\n .filter((i) => i.status === status && !present.has(i.id))\n .map((i) => i.id);\n\n next[status] = [...filtered, ...missing];\n }\n\n return next;\n}\n\nfunction reorderIds(list: string[], from: number, to: number): string[] {\n const next = [...list];\n const [moved] = next.splice(from, 1);\n if (moved === undefined) return list;\n next.splice(to, 0, moved);\n return next;\n}\n\nexport function IssuesPanel({ onCreateIssue: _onCreateIssue }: IssuesPanelProps) {\n const { formatMessage } = useIntl();\n const projectPath = useWorkflowStore(selectProjectPath);\n\n // View mode state\n const [viewMode, setViewMode] = useState<ViewMode>('list');\n\n // Filter state\n const [searchQuery, setSearchQuery] = useState('');\n const [statusFilter, setStatusFilter] = useState<StatusFilter>('all');\n const [priorityFilter, setPriorityFilter] = useState<PriorityFilter>('all');\n const [selectedIssue, setSelectedIssue] = useState<Issue | null>(null);\n\n // Board order state\n const [order, setOrder] = useState<BoardOrder>({});\n\n // Load board order when project changes\n useEffect(() => {\n const key = storageKey(projectPath);\n const loaded = safeParseOrder(localStorage.getItem(key));\n setOrder(loaded);\n }, [projectPath]);\n\n const { issues, criticalCount, isLoading } = useIssues({\n filter: {\n search: searchQuery || undefined,\n status: statusFilter !== 'all' ? [statusFilter] : undefined,\n priority: priorityFilter !== 'all' ? [priorityFilter] : undefined,\n },\n });\n\n const { updateIssue, deleteIssue } = useIssueMutations();\n\n // Keep order consistent with current issues\n useEffect(() => {\n setOrder((prev) => syncOrderWithIssues(prev, issues));\n }, [issues]);\n\n // Persist order\n useEffect(() => {\n const key = storageKey(projectPath);\n try {\n localStorage.setItem(key, JSON.stringify(order));\n } catch {\n // ignore quota errors\n }\n }, [order, projectPath]);\n\n // Status counts using backend statuses\n const statusCounts = useMemo(() => ({\n all: issues.length,\n registered: issues.filter(i => i.status === 'registered').length,\n planning: issues.filter(i => i.status === 'planning').length,\n planned: issues.filter(i => i.status === 'planned').length,\n executing: issues.filter(i => i.status === 'executing').length,\n completed: issues.filter(i => i.status === 'completed').length,\n failed: issues.filter(i => i.status === 'failed').length,\n }), [issues]);\n\n // Build kanban columns\n const columns = useMemo(\n () =>\n buildColumns(issues, order, (statusId) => {\n const col = BOARD_COLUMNS.find((c) => c.id === statusId);\n if (!col) return statusId;\n return formatMessage({ id: col.titleKey, defaultMessage: col.defaultLabel });\n }),\n [issues, order, formatMessage]\n );\n\n const idsByStatus = useMemo(() => {\n const map: Record<string, string[]> = {};\n for (const col of columns) {\n map[col.id] = col.items.map((i) => i.id);\n }\n return map;\n }, [columns]);\n\n const handleEditIssue = (_issue: Issue) => {};\n\n const handleDeleteIssue = async (issue: Issue) => {\n if (confirm(`Delete issue \"${issue.title}\"?`)) {\n await deleteIssue(issue.id);\n }\n };\n\n const handleStatusChange = async (issue: Issue, status: Issue['status']) => {\n await updateIssue(issue.id, { status });\n };\n\n const handleIssueClick = (issue: Issue) => {\n setSelectedIssue(issue);\n };\n\n const handleCloseDrawer = () => {\n setSelectedIssue(null);\n };\n\n // Board drag handler\n const handleDragEnd = useCallback(\n async (result: DropResult, sourceColumn: string, destColumn: string) => {\n const issueId = result.draggableId;\n const issue = issues.find((i) => i.id === issueId);\n if (!issue) return;\n\n const sourceStatus = sourceColumn as Issue['status'];\n const destStatus = destColumn as Issue['status'];\n const sourceIds = idsByStatus[sourceStatus] ?? [];\n const destIds = idsByStatus[destStatus] ?? [];\n\n // Update local order first (optimistic)\n setOrder((prev) => {\n const next = { ...prev };\n if (sourceStatus === destStatus) {\n next[sourceStatus] = reorderIds(sourceIds, result.source.index, result.destination!.index);\n return next;\n }\n\n const nextSource = [...sourceIds];\n nextSource.splice(result.source.index, 1);\n\n const nextDest = [...destIds];\n nextDest.splice(result.destination!.index, 0, issueId);\n\n next[sourceStatus] = nextSource;\n next[destStatus] = nextDest;\n return next;\n });\n\n // Status update\n if (sourceStatus !== destStatus) {\n try {\n await updateIssue(issueId, { status: destStatus });\n } catch (e) {\n console.error('Failed to update issue status:', e);\n }\n }\n },\n [issues, idsByStatus, updateIssue]\n );\n\n return (\n <div className=\"space-y-4\">\n {/* Stats Cards */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <AlertCircle className=\"w-5 h-5 text-info\" />\n <span className=\"text-2xl font-bold\">{statusCounts.registered}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{formatMessage({ id: 'issues.status.registered', defaultMessage: '新注册' })}</p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <Clock className=\"w-5 h-5 text-warning\" />\n <span className=\"text-2xl font-bold\">{statusCounts.executing}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{formatMessage({ id: 'issues.status.executing', defaultMessage: '执行中' })}</p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <AlertTriangle className=\"w-5 h-5 text-destructive\" />\n <span className=\"text-2xl font-bold\">{criticalCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{formatMessage({ id: 'issues.priority.critical' })}</p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"w-5 h-5 text-success\" />\n <span className=\"text-2xl font-bold\">{statusCounts.completed}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{formatMessage({ id: 'issues.status.completed', defaultMessage: '已完成' })}</p>\n </Card>\n </div>\n\n {/* Toolbar */}\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n placeholder={formatMessage({ id: 'common.actions.searchIssues' })}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n\n {/* View Mode Toggle */}\n <div className=\"flex border border-border rounded-md overflow-hidden\">\n <Button\n variant={viewMode === 'list' ? 'default' : 'ghost'}\n size=\"sm\"\n className=\"rounded-none\"\n onClick={() => setViewMode('list')}\n >\n <List className=\"w-4 h-4 mr-1\" />\n {formatMessage({ id: 'common.view.list', defaultMessage: '列表' })}\n </Button>\n <Button\n variant={viewMode === 'board' ? 'default' : 'ghost'}\n size=\"sm\"\n className=\"rounded-none\"\n onClick={() => setViewMode('board')}\n >\n <LayoutGrid className=\"w-4 h-4 mr-1\" />\n {formatMessage({ id: 'common.view.board', defaultMessage: '看板' })}\n </Button>\n </div>\n\n <div className=\"flex gap-2\">\n <Select value={statusFilter} onValueChange={(v) => setStatusFilter(v as StatusFilter)}>\n <SelectTrigger className=\"w-[140px]\">\n <SelectValue placeholder={formatMessage({ id: 'common.status.label' })} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.filters.all' })}</SelectItem>\n <SelectItem value=\"registered\">{formatMessage({ id: 'issues.status.registered', defaultMessage: '新注册' })}</SelectItem>\n <SelectItem value=\"planning\">{formatMessage({ id: 'issues.status.planning', defaultMessage: '规划中' })}</SelectItem>\n <SelectItem value=\"planned\">{formatMessage({ id: 'issues.status.planned', defaultMessage: '已规划' })}</SelectItem>\n <SelectItem value=\"executing\">{formatMessage({ id: 'issues.status.executing', defaultMessage: '执行中' })}</SelectItem>\n <SelectItem value=\"completed\">{formatMessage({ id: 'issues.status.completed', defaultMessage: '已完成' })}</SelectItem>\n <SelectItem value=\"failed\">{formatMessage({ id: 'issues.status.failed', defaultMessage: '失败' })}</SelectItem>\n </SelectContent>\n </Select>\n <Select value={priorityFilter} onValueChange={(v) => setPriorityFilter(v as PriorityFilter)}>\n <SelectTrigger className=\"w-[140px]\">\n <SelectValue placeholder={formatMessage({ id: 'issues.priority.label' })} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.filters.byPriority' })}</SelectItem>\n <SelectItem value=\"critical\">{formatMessage({ id: 'issues.priority.critical' })}</SelectItem>\n <SelectItem value=\"high\">{formatMessage({ id: 'issues.priority.high' })}</SelectItem>\n <SelectItem value=\"medium\">{formatMessage({ id: 'issues.priority.medium' })}</SelectItem>\n <SelectItem value=\"low\">{formatMessage({ id: 'issues.priority.low' })}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Status Filter Pills - only in list mode */}\n {viewMode === 'list' && (\n <div className=\"flex flex-wrap gap-2\">\n <Button variant={statusFilter === 'all' ? 'default' : 'outline'} size=\"sm\" onClick={() => setStatusFilter('all')}>\n {formatMessage({ id: 'issues.filters.all' })} ({statusCounts.all})\n </Button>\n <Button variant={statusFilter === 'registered' ? 'default' : 'outline'} size=\"sm\" onClick={() => setStatusFilter('registered')}>\n <Badge variant=\"info\" className=\"mr-2\">{statusCounts.registered}</Badge>\n {formatMessage({ id: 'issues.status.registered', defaultMessage: '新注册' })}\n </Button>\n <Button variant={statusFilter === 'executing' ? 'default' : 'outline'} size=\"sm\" onClick={() => setStatusFilter('executing')}>\n <Badge variant=\"warning\" className=\"mr-2\">{statusCounts.executing}</Badge>\n {formatMessage({ id: 'issues.status.executing', defaultMessage: '执行中' })}\n </Button>\n <Button variant={priorityFilter === 'critical' ? 'destructive' : 'outline'} size=\"sm\" onClick={() => { setPriorityFilter(priorityFilter === 'critical' ? 'all' : 'critical'); setStatusFilter('all'); }}>\n <Badge variant=\"destructive\" className=\"mr-2\">{criticalCount}</Badge>\n {formatMessage({ id: 'issues.priority.critical' })}\n </Button>\n </div>\n )}\n\n {/* Content Area */}\n {viewMode === 'list' ? (\n <IssueList\n issues={issues}\n isLoading={isLoading}\n onIssueClick={handleIssueClick}\n onIssueEdit={handleEditIssue}\n onIssueDelete={handleDeleteIssue}\n onStatusChange={handleStatusChange}\n />\n ) : (\n <KanbanBoard<Issue & KanbanItem>\n columns={columns}\n onDragEnd={handleDragEnd}\n onItemClick={(item) => handleIssueClick(item as unknown as Issue)}\n isLoading={isLoading}\n emptyColumnMessage={formatMessage({ id: 'issues.emptyState.message' })}\n className={cn('gap-4', 'grid')}\n renderItem={(item, provided) => (\n <IssueCard\n issue={item as unknown as Issue}\n compact\n showActions={false}\n onClick={(i) => handleIssueClick(i)}\n innerRef={provided.innerRef}\n draggableProps={provided.draggableProps}\n dragHandleProps={provided.dragHandleProps}\n className=\"w-full\"\n />\n )}\n />\n )}\n\n {/* Issue Detail Drawer */}\n <IssueDrawer\n issue={selectedIssue}\n isOpen={selectedIssue !== null}\n onClose={handleCloseDrawer}\n />\n </div>\n );\n}\n","// ========================================\r\n// ExecutionGroup Component\r\n// ========================================\r\n// Expandable execution group for queue items\r\n\r\nimport { useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { ChevronDown, ChevronRight, GitMerge, ArrowRight } from 'lucide-react';\r\nimport { Card, CardHeader } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { cn } from '@/lib/utils';\r\nimport type { QueueItem } from '@/lib/api';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface ExecutionGroupProps {\r\n group: string;\r\n items: QueueItem[];\r\n type?: 'parallel' | 'sequential';\r\n onItemClick?: (item: QueueItem) => void;\r\n}\r\n\r\n// ========== Component ==========\r\n\r\nexport function ExecutionGroup({ group, items, type = 'sequential', onItemClick }: ExecutionGroupProps) {\r\n const { formatMessage } = useIntl();\r\n const [isExpanded, setIsExpanded] = useState(false);\r\n const isParallel = type === 'parallel';\r\n\r\n return (\r\n <Card className=\"overflow-hidden\">\r\n <CardHeader\r\n className=\"py-3 px-4 cursor-pointer hover:bg-muted/50 transition-colors\"\r\n onClick={() => setIsExpanded(!isExpanded)}\r\n >\r\n <div className=\"flex items-center justify-between gap-2\">\r\n <div className=\"flex items-center gap-2\">\r\n {isExpanded ? (\r\n <ChevronDown className=\"w-4 h-4 text-muted-foreground\" />\r\n ) : (\r\n <ChevronRight className=\"w-4 h-4 text-muted-foreground\" />\r\n )}\r\n <Badge\r\n variant={isParallel ? 'info' : 'secondary'}\r\n className=\"gap-1\"\r\n >\r\n {isParallel ? (\r\n <GitMerge className=\"w-3 h-3\" />\r\n ) : (\r\n <ArrowRight className=\"w-3 h-3\" />\r\n )}\r\n {group}\r\n </Badge>\r\n <span className=\"text-sm text-muted-foreground\">\r\n {isParallel\r\n ? formatMessage({ id: 'issues.queue.parallelGroup' })\r\n : formatMessage({ id: 'issues.queue.sequentialGroup' })}\r\n </span>\r\n </div>\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n {formatMessage({ id: 'issues.queue.itemCount' }, { count: items.length })}\r\n </Badge>\r\n </div>\r\n </CardHeader>\r\n\r\n {isExpanded && (\r\n <div className=\"px-4 pb-4 pt-0\">\r\n <div className={cn(\r\n \"space-y-1 mt-2\",\r\n isParallel ? \"grid grid-cols-1 sm:grid-cols-2 gap-2\" : \"space-y-1\"\r\n )}>\r\n {items.map((item, index) => {\r\n // Parse item_id to extract type and ID\r\n const [itemType, ...idParts] = item.item_id.split('-');\r\n const displayId = idParts.join('-');\r\n const typeLabel = itemType === 'issue' ? formatMessage({ id: 'issues.solution.shortIssue' })\r\n : itemType === 'solution' ? formatMessage({ id: 'issues.solution.shortSolution' })\r\n : itemType;\r\n\r\n return (\r\n <div\r\n key={item.item_id}\r\n onClick={() => onItemClick?.(item)}\r\n className={cn(\r\n \"flex items-center gap-2 p-2 rounded-md bg-muted/50 text-sm\",\r\n \"hover:bg-muted transition-colors cursor-pointer\"\r\n )}\r\n >\r\n <span className=\"text-muted-foreground text-xs w-6\">\r\n {isParallel ? '' : `${index + 1}.`}\r\n </span>\r\n <span className=\"text-xs text-muted-foreground shrink-0\">\r\n {typeLabel}\r\n </span>\r\n <span className=\"font-mono text-xs truncate flex-1\">\r\n {displayId}\r\n </span>\r\n <Badge variant=\"outline\" className=\"text-xs shrink-0\">\r\n {formatMessage({ id: `issues.queue.status.${item.status}` })}\r\n </Badge>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n </Card>\r\n );\r\n}\r\n\r\nexport default ExecutionGroup;\r\n","// ========================================\r\n// QueueActions Component\r\n// ========================================\r\n// Queue operations with direct action buttons (no dropdown menu)\r\n\r\nimport { useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { Play, Pause, Trash2, Merge, GitBranch, Loader2 } from 'lucide-react';\r\nimport {\r\n AlertDialog,\r\n AlertDialogContent,\r\n AlertDialogHeader,\r\n AlertDialogTitle,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n} from '@/components/ui/AlertDialog';\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogHeader,\r\n DialogTitle,\r\n DialogFooter,\r\n} from '@/components/ui/Dialog';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Input } from '@/components/ui/Input';\r\nimport { Checkbox } from '@/components/ui/Checkbox';\r\nimport { cn } from '@/lib/utils';\r\nimport type { IssueQueue, QueueItem } from '@/lib/api';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface QueueActionsProps {\n queue: IssueQueue;\n queueId?: string;\n isActive?: boolean;\n onActivate?: (queueId: string) => void;\n onDeactivate?: () => void;\n onDelete?: (queueId: string) => void;\n onMerge?: (sourceId: string, targetId: string) => void;\r\n onSplit?: (sourceQueueId: string, itemIds: string[]) => void;\r\n isActivating?: boolean;\r\n isDeactivating?: boolean;\r\n isDeleting?: boolean;\r\n isMerging?: boolean;\r\n isSplitting?: boolean;\r\n}\r\n\r\n// ========== Component ==========\r\n\r\nexport function QueueActions({\n queue,\n queueId: queueIdProp,\n isActive = false,\n onActivate,\n onDeactivate,\n onDelete,\n onMerge,\n onSplit,\r\n isActivating = false,\r\n isDeactivating = false,\r\n isDeleting = false,\r\n isMerging = false,\r\n isSplitting = false,\r\n}: QueueActionsProps) {\n const { formatMessage } = useIntl();\n const [isDeleteOpen, setIsDeleteOpen] = useState(false);\r\n const [isMergeOpen, setIsMergeOpen] = useState(false);\r\n const [isSplitOpen, setIsSplitOpen] = useState(false);\r\n const [mergeTargetId, setMergeTargetId] = useState('');\r\n const [selectedItemIds, setSelectedItemIds] = useState<string[]>([]);\r\n\r\n const queueId = queueIdProp;\n\r\n // Get all items from grouped_items for split dialog\r\n const allItems: QueueItem[] = Object.values(queue.grouped_items || {}).flat();\r\n\r\n const handleDelete = () => {\n if (!queueId) return;\n onDelete?.(queueId);\n setIsDeleteOpen(false);\n };\n\r\n const handleMerge = () => {\n if (mergeTargetId.trim()) {\n if (!queueId) return;\n onMerge?.(queueId, mergeTargetId.trim());\n setIsMergeOpen(false);\n setMergeTargetId('');\n }\n };\n\r\n const handleSplit = () => {\n if (selectedItemIds.length > 0 && selectedItemIds.length < allItems.length) {\n if (!queueId) return;\n onSplit?.(queueId, selectedItemIds);\n setIsSplitOpen(false);\n setSelectedItemIds([]);\n }\n };\n\r\n const toggleItemSelection = (itemId: string) => {\r\n setSelectedItemIds(prev =>\r\n prev.includes(itemId)\r\n ? prev.filter(id => id !== itemId)\r\n : [...prev, itemId]\r\n );\r\n };\r\n\r\n const selectAll = () => {\r\n setSelectedItemIds(allItems.map(item => item.item_id));\r\n };\r\n\r\n const clearAll = () => {\r\n setSelectedItemIds([]);\r\n };\r\n\r\n // Calculate item count\r\n const totalItems = (queue.tasks?.length || 0) + (queue.solutions?.length || 0);\r\n const canSplit = totalItems > 1;\r\n\r\n return (\r\n <>\r\n {/* Direct action buttons */}\r\n <div className=\"flex items-center gap-1\">\r\n {/* Activate/Deactivate button */}\r\n {!isActive && onActivate && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0\"\n onClick={() => {\n if (queueId) onActivate(queueId);\n }}\n disabled={isActivating || !queueId}\n title={formatMessage({ id: 'issues.queue.actions.activate' })}\n >\n {isActivating ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n ) : (\r\n <Play className=\"w-4 h-4 text-success\" />\r\n )}\r\n </Button>\r\n )}\r\n {isActive && onDeactivate && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-8 w-8 p-0\"\r\n onClick={() => onDeactivate()}\r\n disabled={isDeactivating}\r\n title={formatMessage({ id: 'issues.queue.actions.deactivate' })}\r\n >\r\n {isDeactivating ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n ) : (\r\n <Pause className=\"w-4 h-4 text-warning\" />\r\n )}\r\n </Button>\r\n )}\r\n\r\n {/* Merge button */}\r\n <Button\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-8 w-8 p-0\"\r\n onClick={() => setIsMergeOpen(true)}\n disabled={isMerging || !queueId}\n title={formatMessage({ id: 'issues.queue.actions.merge' })}\n >\n {isMerging ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n ) : (\r\n <Merge className=\"w-4 h-4 text-info\" />\r\n )}\r\n </Button>\r\n\r\n {/* Split button - only show if more than 1 item */}\r\n {canSplit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0\"\n onClick={() => setIsSplitOpen(true)}\n disabled={isSplitting || !queueId}\n title={formatMessage({ id: 'issues.queue.actions.split' })}\n >\n {isSplitting ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n ) : (\r\n <GitBranch className=\"w-4 h-4 text-muted-foreground\" />\r\n )}\r\n </Button>\r\n )}\r\n\r\n {/* Delete button */}\r\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0\"\n onClick={() => setIsDeleteOpen(true)}\n disabled={isDeleting || !queueId}\n title={formatMessage({ id: 'issues.queue.actions.delete' })}\n >\n {isDeleting ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin text-destructive\" />\r\n ) : (\r\n <Trash2 className=\"w-4 h-4 text-destructive\" />\r\n )}\r\n </Button>\r\n </div>\r\n\r\n {/* Delete Confirmation Dialog */}\r\n <AlertDialog open={isDeleteOpen} onOpenChange={setIsDeleteOpen}>\r\n <AlertDialogContent>\r\n <AlertDialogHeader>\r\n <AlertDialogTitle>\r\n {formatMessage({ id: 'issues.queue.deleteDialog.title' })}\r\n </AlertDialogTitle>\r\n <AlertDialogDescription>\r\n {formatMessage({ id: 'issues.queue.deleteDialog.description' })}\r\n </AlertDialogDescription>\r\n </AlertDialogHeader>\r\n <AlertDialogFooter>\r\n <AlertDialogCancel>\r\n {formatMessage({ id: 'common.actions.cancel' })}\r\n </AlertDialogCancel>\r\n <AlertDialogAction onClick={handleDelete} className=\"bg-destructive hover:bg-destructive/90\">\r\n {isDeleting ? (\r\n <>\r\n <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />\r\n {formatMessage({ id: 'common.actions.deleting' })}\r\n </>\r\n ) : (\r\n formatMessage({ id: 'issues.queue.actions.delete' })\r\n )}\r\n </AlertDialogAction>\r\n </AlertDialogFooter>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n\r\n {/* Merge Dialog */}\r\n <Dialog open={isMergeOpen} onOpenChange={setIsMergeOpen}>\r\n <DialogContent>\r\n <DialogHeader>\r\n <DialogTitle>\r\n {formatMessage({ id: 'issues.queue.mergeDialog.title' })}\r\n </DialogTitle>\r\n </DialogHeader>\r\n <div className=\"space-y-4 py-4\">\r\n <div>\r\n <label htmlFor=\"merge-target\" className=\"text-sm font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.queue.mergeDialog.targetQueueLabel' })}\r\n </label>\r\n <Input\r\n id=\"merge-target\"\r\n value={mergeTargetId}\r\n onChange={(e) => setMergeTargetId(e.target.value)}\r\n placeholder={formatMessage({ id: 'issues.queue.mergeDialog.targetQueuePlaceholder' })}\r\n className=\"mt-1\"\r\n />\r\n </div>\r\n </div>\r\n <DialogFooter>\r\n <Button\r\n variant=\"outline\"\r\n onClick={() => {\r\n setIsMergeOpen(false);\r\n setMergeTargetId('');\r\n }}\r\n >\r\n {formatMessage({ id: 'common.actions.cancel' })}\r\n </Button>\r\n <Button\r\n onClick={handleMerge}\r\n disabled={!mergeTargetId.trim() || isMerging}\r\n >\r\n {isMerging ? (\r\n <>\r\n <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />\r\n {formatMessage({ id: 'common.actions.merging' })}\r\n </>\r\n ) : (\r\n <>\r\n <Merge className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.queue.actions.merge' })}\r\n </>\r\n )}\r\n </Button>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n\r\n {/* Split Dialog */}\r\n <Dialog open={isSplitOpen} onOpenChange={setIsSplitOpen}>\r\n <DialogContent className=\"max-w-2xl max-h-[80vh] overflow-hidden flex flex-col\">\r\n <DialogHeader>\r\n <DialogTitle>\r\n {formatMessage({ id: 'issues.queue.splitDialog.title' })}\r\n </DialogTitle>\r\n </DialogHeader>\r\n <div className=\"flex-1 overflow-hidden flex flex-col py-4\">\r\n {/* Selection info */}\r\n <div className=\"flex items-center justify-between mb-4 pb-4 border-b\">\r\n <span className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.queue.splitDialog.selected' }, { count: selectedItemIds.length, total: allItems.length })}\r\n </span>\r\n <div className=\"flex gap-2\">\r\n <Button variant=\"outline\" size=\"sm\" onClick={selectAll}>\r\n {formatMessage({ id: 'issues.queue.splitDialog.selectAll' })}\r\n </Button>\r\n <Button variant=\"outline\" size=\"sm\" onClick={clearAll}>\r\n {formatMessage({ id: 'issues.queue.splitDialog.clearAll' })}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Items list with checkboxes */}\r\n <div className=\"flex-1 overflow-y-auto space-y-2 pr-2\">\r\n {allItems.map((item) => {\r\n const isSelected = selectedItemIds.includes(item.item_id);\r\n return (\r\n <div\r\n key={item.item_id}\r\n className={cn(\r\n \"flex items-center gap-3 p-3 rounded-md border transition-colors cursor-pointer\",\r\n isSelected ? \"bg-primary/10 border-primary\" : \"bg-card hover:bg-muted/50\"\r\n )}\r\n onClick={() => toggleItemSelection(item.item_id)}\r\n >\r\n <Checkbox\r\n checked={isSelected}\r\n onChange={() => toggleItemSelection(item.item_id)}\r\n />\r\n <span className=\"font-mono text-xs flex-1 truncate\">\r\n {item.item_id}\r\n </span>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatMessage({ id: `issues.queue.status.${item.status}` })}\r\n </span>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Validation message */}\r\n {selectedItemIds.length === 0 && (\r\n <p className=\"text-sm text-muted-foreground text-center py-2\">\r\n {formatMessage({ id: 'issues.queue.splitDialog.noSelection' })}\r\n </p>\r\n )}\r\n {selectedItemIds.length >= allItems.length && (\r\n <p className=\"text-sm text-destructive text-center py-2\">\r\n {formatMessage({ id: 'issues.queue.splitDialog.cannotSplitAll' })}\r\n </p>\r\n )}\r\n </div>\r\n <DialogFooter>\r\n <Button\r\n variant=\"outline\"\r\n onClick={() => {\r\n setIsSplitOpen(false);\r\n setSelectedItemIds([]);\r\n }}\r\n >\r\n {formatMessage({ id: 'common.actions.cancel' })}\r\n </Button>\r\n <Button\r\n onClick={handleSplit}\r\n disabled={selectedItemIds.length === 0 || selectedItemIds.length >= allItems.length || isSplitting}\r\n >\r\n {isSplitting ? (\r\n <>\r\n <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />\r\n {formatMessage({ id: 'common.actions.splitting' })}\r\n </>\r\n ) : (\r\n <>\r\n <GitBranch className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.queue.actions.split' })}\r\n </>\r\n )}\r\n </Button>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n </>\r\n );\r\n}\r\n\r\nexport default QueueActions;\r\n","// ========================================\r\n// QueueCard Component\r\n// ========================================\r\n// Card component for displaying queue information and actions\r\n\r\nimport { useIntl } from 'react-intl';\r\nimport { ListTodo, CheckCircle2, AlertCircle } from 'lucide-react';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { ExecutionGroup } from './ExecutionGroup';\r\nimport { QueueActions } from './QueueActions';\r\nimport { cn } from '@/lib/utils';\r\nimport type { IssueQueue } from '@/lib/api';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface QueueCardProps {\r\n queue: IssueQueue;\r\n isActive?: boolean;\r\n onActivate?: (queueId: string) => void;\r\n onDeactivate?: () => void;\r\n onDelete?: (queueId: string) => void;\r\n onMerge?: (sourceId: string, targetId: string) => void;\r\n onSplit?: (sourceQueueId: string, itemIds: string[]) => void;\r\n onItemClick?: (item: import('@/lib/api').QueueItem) => void;\r\n isActivating?: boolean;\r\n isDeactivating?: boolean;\r\n isDeleting?: boolean;\r\n isMerging?: boolean;\r\n isSplitting?: boolean;\r\n className?: string;\r\n}\r\n\r\n// ========== Component ==========\r\n\r\nexport function QueueCard({\n queue,\n isActive = false,\n onActivate,\r\n onDeactivate,\r\n onDelete,\r\n onMerge,\r\n onSplit,\r\n onItemClick,\r\n isActivating = false,\r\n isDeactivating = false,\r\n isDeleting = false,\r\n isMerging = false,\r\n isSplitting = false,\r\n className,\r\n}: QueueCardProps) {\n const { formatMessage } = useIntl();\n\n const queueId = queue.id;\n\r\n // Calculate item counts\r\n const taskCount = queue.tasks?.length || 0;\r\n const solutionCount = queue.solutions?.length || 0;\r\n const conflictCount = queue.conflicts?.length || 0;\r\n const totalItems = taskCount + solutionCount;\r\n const groupCount = Object.keys(queue.grouped_items || {}).length;\r\n\r\n // Get execution groups from grouped_items\r\n const executionGroups = Object.entries(queue.grouped_items || {}).map(([name, items]) => ({\r\n id: name,\r\n type: name.toLowerCase().includes('parallel') ? 'parallel' as const : 'sequential' as const,\r\n items: items || [],\r\n }));\r\n\r\n return (\r\n <Card className={cn(\r\n \"p-4 transition-all\",\r\n isActive && \"border-primary shadow-sm\",\r\n className\r\n )}>\r\n {/* Header */}\r\n <div className=\"flex items-start justify-between gap-3 mb-4\">\r\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\r\n <div className={cn(\r\n \"p-2 rounded-lg\",\r\n isActive ? \"bg-primary/10 text-primary\" : \"bg-muted text-muted-foreground\"\r\n )}>\r\n <ListTodo className=\"w-5 h-5\" />\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <h3 className=\"font-medium text-foreground truncate\">\r\n {formatMessage({ id: 'issues.queue.title' })}\r\n </h3>\r\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {(queueId || 'legacy').substring(0, 20)}{(queueId || 'legacy').length > 20 ? '...' : ''}\n </p>\n </div>\n </div>\n\r\n {isActive && (\r\n <Badge variant=\"success\" className=\"gap-1 shrink-0\">\r\n <CheckCircle2 className=\"w-3 h-3\" />\r\n {formatMessage({ id: 'issues.queue.status.active' })}\r\n </Badge>\r\n )}\r\n\r\n <QueueActions\n queue={queue}\n queueId={queueId}\n isActive={isActive}\n onActivate={onActivate}\n onDeactivate={onDeactivate}\n onDelete={onDelete}\n onMerge={onMerge}\n onSplit={onSplit}\r\n isActivating={isActivating}\r\n isDeactivating={isDeactivating}\r\n isDeleting={isDeleting}\r\n isMerging={isMerging}\r\n isSplitting={isSplitting}\r\n />\r\n </div>\r\n\r\n {/* Stats */}\r\n <div className=\"grid grid-cols-2 gap-2 mb-4\">\r\n <div className=\"flex items-center gap-2 text-sm\">\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'issues.queue.items' })}:</span>\r\n <span className=\"font-medium\">{totalItems}</span>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-sm\">\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'issues.queue.groups' })}:</span>\r\n <span className=\"font-medium\">{groupCount}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Conflicts Warning */}\r\n {conflictCount > 0 && (\r\n <div className=\"flex items-center gap-2 p-2 mb-4 bg-destructive/10 rounded-md\">\r\n <AlertCircle className=\"w-4 h-4 text-destructive shrink-0\" />\r\n <span className=\"text-sm text-destructive\">\r\n {conflictCount} {formatMessage({ id: 'issues.queue.conflicts' })}\r\n </span>\r\n </div>\r\n )}\r\n\r\n {/* Execution Groups */}\r\n {executionGroups.length > 0 && (\r\n <div className=\"space-y-2\">\r\n <p className=\"text-xs font-medium text-muted-foreground uppercase\">\r\n {formatMessage({ id: 'issues.queue.executionGroups' })}\r\n </p>\r\n <div className=\"space-y-2\">\r\n {executionGroups.map((group) => (\r\n <ExecutionGroup\r\n key={group.id}\r\n group={group.id}\r\n items={group.items}\r\n type={group.type}\r\n onItemClick={onItemClick}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Empty State */}\r\n {executionGroups.length === 0 && totalItems === 0 && (\r\n <div className=\"text-center py-8 text-muted-foreground\">\r\n <ListTodo className=\"w-8 h-8 mx-auto mb-2 opacity-50\" />\r\n <p className=\"text-sm\">{formatMessage({ id: 'issues.queue.empty' })}</p>\r\n </div>\r\n )}\r\n </Card>\r\n );\r\n}\r\n\r\nexport default QueueCard;\r\n","// ========================================\n// QueueBoard\n// ========================================\n// Kanban-style view of queue execution groups with DnD reordering/moving.\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { DropResult } from '@hello-pangea/dnd';\nimport { useIntl } from 'react-intl';\nimport { LayoutGrid } from 'lucide-react';\nimport { KanbanBoard, type KanbanColumn, type KanbanItem } from '@/components/shared/KanbanBoard';\nimport { Badge } from '@/components/ui/Badge';\nimport { cn } from '@/lib/utils';\nimport { useQueueMutations } from '@/hooks';\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\nimport type { IssueQueue, QueueItem } from '@/lib/api';\n\ntype QueueBoardItem = QueueItem & KanbanItem;\n\nfunction groupSortKey(groupId: string): [number, string] {\n const n = parseInt(groupId.match(/\\d+/)?.[0] || '999');\n return [Number.isFinite(n) ? n : 999, groupId];\n}\n\nfunction buildColumns(queue: IssueQueue): KanbanColumn<QueueBoardItem>[] {\n const entries = Object.entries(queue.grouped_items || {});\n entries.sort(([a], [b]) => {\n const [an, aid] = groupSortKey(a);\n const [bn, bid] = groupSortKey(b);\n if (an !== bn) return an - bn;\n return aid.localeCompare(bid);\n });\n\n return entries.map(([groupId, items]) => {\n const sorted = [...(items || [])].sort((a, b) => (a.execution_order || 0) - (b.execution_order || 0));\n const mapped = sorted.map((it) => ({\n ...it,\n id: it.item_id,\n title: `${it.issue_id} · ${it.solution_id}`,\n status: it.status,\n }));\n return {\n id: groupId,\n title: groupId,\n items: mapped,\n icon: <LayoutGrid className=\"w-4 h-4\" />,\n };\n });\n}\n\nfunction applyDrag(columns: KanbanColumn<QueueBoardItem>[], result: DropResult): KanbanColumn<QueueBoardItem>[] {\n if (!result.destination) return columns;\n const { source, destination, draggableId } = result;\n\n const startCol = columns.find(c => c.id === source.droppableId);\n const endCol = columns.find(c => c.id === destination.droppableId);\n if (!startCol || !endCol) return columns;\n\n const itemToMove = startCol.items.find(item => item.id === draggableId);\n if (!itemToMove) return columns;\n\n // 如果在同一列中移动\n if (startCol.id === endCol.id) {\n const items = [...startCol.items];\n const [reorderedItem] = items.splice(source.index, 1);\n items.splice(destination.index, 0, reorderedItem);\n return columns.map(c => c.id === startCol.id ? { ...c, items } : c);\n }\n\n // 如果跨列移动\n const newStartItems = startCol.items.filter(item => item.id !== draggableId);\n const newEndItems = [\n ...endCol.items.slice(0, destination.index),\n itemToMove,\n ...endCol.items.slice(destination.index),\n ];\n\n return columns.map(c => {\n if (c.id === startCol.id) return { ...c, items: newStartItems };\n if (c.id === endCol.id) return { ...c, items: newEndItems };\n return c;\n });\n}\n\nexport function QueueBoard({\n queue,\n onItemClick,\n className,\n}: {\n queue: IssueQueue;\n onItemClick?: (item: QueueItem) => void;\n className?: string;\n}) {\n const { formatMessage } = useIntl();\n const projectPath = useWorkflowStore(selectProjectPath);\n const { reorderQueueGroup, moveQueueItem, isReordering, isMoving } = useQueueMutations();\n\n const baseColumns = useMemo(() => buildColumns(queue), [queue]);\n const [columns, setColumns] = useState<KanbanColumn<QueueBoardItem>[]>(baseColumns);\n\n useEffect(() => {\n setColumns(baseColumns);\n }, [baseColumns]);\n\n const handleDragEnd = useCallback(\n async (result: DropResult, sourceColumn: string, destColumn: string) => {\n if (!projectPath) return;\n if (!result.destination) return;\n if (sourceColumn === destColumn && result.source.index === result.destination.index) return;\n\n try {\n const nextColumns = applyDrag(columns, result);\n setColumns(nextColumns);\n\n const itemId = result.draggableId;\n\n if (sourceColumn === destColumn) {\n const column = nextColumns.find((c) => c.id === sourceColumn);\n const nextOrder = (column?.items ?? []).map((i) => i.item_id);\n await reorderQueueGroup(sourceColumn, nextOrder);\n } else {\n await moveQueueItem(itemId, destColumn, result.destination.index);\n }\n } catch (e) {\n // Revert by resetting to server-derived columns\n setColumns(baseColumns);\n }\n },\n [baseColumns, columns, moveQueueItem, projectPath, reorderQueueGroup]\n );\n\n return (\n <div className={cn('space-y-2', className)}>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Badge variant=\"secondary\" className=\"gap-1\">\n {formatMessage({ id: 'issues.queue.stats.executionGroups' })}\n </Badge>\n {(isReordering || isMoving) && (\n <span>\n {formatMessage({ id: 'common.status.running' })}\n </span>\n )}\n </div>\n\n <KanbanBoard<QueueBoardItem>\n columns={columns}\n onDragEnd={handleDragEnd}\n onItemClick={(item) => onItemClick?.(item as unknown as QueueItem)}\n emptyColumnMessage={formatMessage({ id: 'issues.queue.empty' })}\n renderItem={(item, provided) => (\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n onClick={() => onItemClick?.(item as unknown as QueueItem)}\n className={cn(\n 'p-3 bg-card border border-border rounded-lg shadow-sm cursor-pointer',\n 'hover:shadow-md hover:border-primary/50 transition-all',\n item.status === 'blocked' && 'border-destructive/50 bg-destructive/5',\n item.status === 'failed' && 'border-destructive/50 bg-destructive/5',\n item.status === 'executing' && 'border-primary/40'\n )}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <div className=\"text-xs font-mono text-muted-foreground\">{item.item_id}</div>\n <div className=\"text-sm font-medium text-foreground truncate\">\n {item.issue_id} · {item.solution_id}\n </div>\n </div>\n <Badge variant=\"outline\" className=\"text-xs shrink-0\">\n {formatMessage({ id: `issues.queue.status.${item.status}` })}\n </Badge>\n </div>\n {item.depends_on?.length ? (\n <div className=\"mt-2 text-xs text-muted-foreground\">\n {formatMessage({ id: 'issues.solution.overview.dependencies' })}: {item.depends_on.length}\n </div>\n ) : null}\n </div>\n )}\n />\n </div>\n );\n}\n\nexport default QueueBoard;\n","// ========================================\n// CliExecutionSettings Component\n// ========================================\n// Shared execution parameter controls (tool, mode, resumeStrategy)\n// extracted from QueueExecuteInSession and QueueSendToOrchestrator.\n\nimport { useIntl } from 'react-intl';\nimport { Card, CardContent } from '@/components/ui/Card';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/Select';\nimport { cn } from '@/lib/utils';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ToolName = 'claude' | 'codex' | 'gemini' | 'qwen';\nexport type ExecutionMode = 'analysis' | 'write';\nexport type ResumeStrategy = 'nativeResume' | 'promptConcat';\n\nexport interface CliExecutionSettingsProps {\n /** Currently selected tool. */\n tool: ToolName;\n /** Currently selected execution mode. */\n mode: ExecutionMode;\n /** Currently selected resume strategy. */\n resumeStrategy: ResumeStrategy;\n /** Callback when tool changes. */\n onToolChange: (tool: ToolName) => void;\n /** Callback when mode changes. */\n onModeChange: (mode: ExecutionMode) => void;\n /** Callback when resume strategy changes. */\n onResumeStrategyChange: (strategy: ResumeStrategy) => void;\n /** Available tool options. Defaults to claude, codex, gemini, qwen. */\n toolOptions?: ToolName[];\n /** Additional CSS class. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Default tool list\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_TOOL_OPTIONS: ToolName[] = ['claude', 'codex', 'gemini', 'qwen'];\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function CliExecutionSettings({\n tool,\n mode,\n resumeStrategy,\n onToolChange,\n onModeChange,\n onResumeStrategyChange,\n toolOptions = DEFAULT_TOOL_OPTIONS,\n className,\n}: CliExecutionSettingsProps) {\n const { formatMessage } = useIntl();\n\n return (\n <Card className={cn('', className)}>\n <CardContent className=\"p-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-3\">\n {/* Tool selector */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {formatMessage({ id: 'issues.terminal.exec.tool' })}\n </label>\n <Select\n value={tool}\n onValueChange={(v) => onToolChange(v as ToolName)}\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {toolOptions.map((t) => (\n <SelectItem key={t} value={t}>\n {t}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Mode selector */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {formatMessage({ id: 'issues.terminal.exec.mode' })}\n </label>\n <Select\n value={mode}\n onValueChange={(v) => onModeChange(v as ExecutionMode)}\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"analysis\">analysis</SelectItem>\n <SelectItem value=\"write\">write</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Resume strategy selector */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {formatMessage({ id: 'issues.terminal.exec.resumeStrategy' })}\n </label>\n <Select\n value={resumeStrategy}\n onValueChange={(v) =>\n onResumeStrategyChange(v as ResumeStrategy)\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"nativeResume\">nativeResume</SelectItem>\n <SelectItem value=\"promptConcat\">promptConcat</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}\n","// ========================================\n// Queue Prompt Builder\n// ========================================\n// Unified prompt/instruction builder for queue item execution.\n// Merges buildQueueItemPrompt (QueueExecuteInSession) and\n// buildQueueItemInstruction (QueueSendToOrchestrator) into a single function.\n\nimport type { QueueItem } from '@/lib/api';\n\n// ---------------------------------------------------------------------------\n// Minimal interfaces for the issue data consumed by buildQueueItemContext.\n// The backend may return solution.tasks[] which is not part of the core\n// IssueSolution interface, so we define a local superset here.\n// ---------------------------------------------------------------------------\n\n/** A lightweight task entry nested inside a solution from the backend. */\ninterface SolutionTask {\n id: string;\n title?: string;\n description?: string;\n}\n\n/** Solution shape as consumed by the prompt builder (superset of IssueSolution). */\ninterface PromptSolution {\n id: string;\n description?: string;\n approach?: string;\n tasks?: SolutionTask[];\n}\n\n/** Minimal issue shape consumed by the prompt builder. */\nexport interface QueueItemIssue {\n title?: string;\n context?: string;\n solutions?: PromptSolution[];\n}\n\n/**\n * Build a context string for executing a queue item.\n *\n * This produces the same output that both `buildQueueItemPrompt` and\n * `buildQueueItemInstruction` used to produce. The only difference between\n * the two originals was that the \"in-session\" variant included the matched\n * task block from `solution.tasks[]`; this unified version always includes\n * it when available, which is strictly a superset.\n */\nexport function buildQueueItemContext(\n item: QueueItem,\n issue: QueueItemIssue | undefined\n): string {\n const lines: string[] = [];\n\n // Header\n lines.push(`Queue Item: ${item.item_id}`);\n lines.push(`Issue: ${item.issue_id}`);\n lines.push(`Solution: ${item.solution_id}`);\n if (item.task_id) lines.push(`Task: ${item.task_id}`);\n lines.push('');\n\n if (issue) {\n if (issue.title) lines.push(`Title: ${issue.title}`);\n if (issue.context) {\n lines.push('');\n lines.push('Context:');\n lines.push(String(issue.context));\n }\n\n const solution = Array.isArray(issue.solutions)\n ? issue.solutions.find((s) => s?.id === item.solution_id)\n : undefined;\n\n if (solution) {\n lines.push('');\n lines.push('Solution Description:');\n if (solution.description) lines.push(String(solution.description));\n if (solution.approach) {\n lines.push('');\n lines.push('Approach:');\n lines.push(String(solution.approach));\n }\n\n // Include matched task from solution.tasks when available\n const tasks = Array.isArray(solution.tasks) ? solution.tasks : [];\n const task = item.task_id\n ? tasks.find((t) => t?.id === item.task_id)\n : undefined;\n if (task) {\n lines.push('');\n lines.push('Task:');\n if (task.title) lines.push(`- ${task.title}`);\n if (task.description) lines.push(String(task.description));\n }\n }\n }\n\n // Footer instruction\n lines.push('');\n lines.push('Instruction:');\n lines.push(\n 'Implement the above queue item in this repository. Prefer small, testable changes; run relevant tests; report blockers if any.'\n );\n\n return lines.join('\\n');\n}\n","// ========================================\r\n// QueueItemExecutor\r\n// ========================================\r\n// Unified execution component for queue items with Tab switching\r\n// between Session (direct PTY) and Orchestrator (flow-based) modes.\r\n// Replaces QueueExecuteInSession and QueueSendToOrchestrator.\r\n\r\nimport { useMemo, useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { Plus, RefreshCw, Terminal, Workflow } from 'lucide-react';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '@/components/ui/Select';\r\nimport { cn } from '@/lib/utils';\r\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\r\nimport { toast, useExecutionStore, useFlowStore } from '@/stores';\r\nimport { useIssues } from '@/hooks';\r\nimport {\r\n executeInCliSession,\r\n createOrchestratorFlow,\r\n executeOrchestratorFlow,\r\n type QueueItem,\r\n} from '@/lib/api';\r\nimport { useTerminalPanelStore } from '@/stores/terminalPanelStore';\r\nimport { useCliSessionCore } from '@/hooks/useCliSessionCore';\r\nimport {\r\n CliExecutionSettings,\r\n type ToolName,\r\n type ExecutionMode,\r\n type ResumeStrategy,\r\n} from '@/components/shared/CliExecutionSettings';\r\nimport { buildQueueItemContext } from '@/lib/queue-prompt';\r\nimport { useQueueExecutionStore, type QueueExecution } from '@/stores/queueExecutionStore';\r\nimport type { Flow } from '@/types/flow';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\ntype ExecutionTab = 'session' | 'orchestrator';\r\n\r\nexport interface QueueItemExecutorProps {\r\n item: QueueItem;\r\n className?: string;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction generateId(prefix: string): string {\r\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Component\r\n// ---------------------------------------------------------------------------\r\n\r\nexport function QueueItemExecutor({ item, className }: QueueItemExecutorProps) {\r\n const { formatMessage } = useIntl();\r\n const navigate = useNavigate();\r\n const projectPath = useWorkflowStore(selectProjectPath);\r\n\r\n // Resolve the parent issue for context building\r\n const { issues } = useIssues();\r\n const issue = useMemo(\r\n () => issues.find((i) => i.id === item.issue_id),\r\n [issues, item.issue_id]\r\n );\r\n\r\n // Shared session management via useCliSessionCore\r\n const {\r\n sessions,\r\n selectedSessionKey,\r\n setSelectedSessionKey,\r\n refreshSessions,\r\n ensureSession,\r\n handleCreateSession,\r\n isLoading,\r\n error: sessionError,\r\n } = useCliSessionCore({ autoSelectLast: true, resumeKey: item.issue_id });\r\n\r\n // Shared execution settings state\r\n const [tool, setTool] = useState<ToolName>('claude');\r\n const [mode, setMode] = useState<ExecutionMode>('write');\r\n const [resumeStrategy, setResumeStrategy] = useState<ResumeStrategy>('nativeResume');\r\n\r\n // Execution state\r\n const [activeTab, setActiveTab] = useState<ExecutionTab>('session');\r\n const [isExecuting, setIsExecuting] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [lastResult, setLastResult] = useState<string | null>(null);\r\n\r\n // Combine errors from session core and local execution\r\n const displayError = error || sessionError || null;\r\n\r\n // Store reference for recording executions\r\n const addExecution = useQueueExecutionStore((s) => s.addExecution);\r\n\r\n // ========== Session Execution ==========\r\n\r\n const handleSessionExecute = async () => {\r\n setIsExecuting(true);\r\n setError(null);\r\n setLastResult(null);\r\n try {\r\n const sessionKey = await ensureSession();\r\n const prompt = buildQueueItemContext(item, issue);\r\n const result = await executeInCliSession(\r\n sessionKey,\r\n {\r\n tool,\r\n prompt,\r\n mode,\r\n workingDir: projectPath,\r\n category: 'user',\r\n resumeKey: item.issue_id,\r\n resumeStrategy,\r\n },\r\n projectPath\r\n );\r\n\r\n // Record to queueExecutionStore\r\n const execution: QueueExecution = {\r\n id: result.executionId,\r\n queueItemId: item.item_id,\r\n issueId: item.issue_id,\r\n solutionId: item.solution_id,\r\n type: 'session',\r\n sessionKey,\r\n tool,\r\n mode,\r\n status: 'running',\r\n startedAt: new Date().toISOString(),\r\n };\r\n addExecution(execution);\r\n\r\n setLastResult(result.executionId);\r\n\r\n // Open terminal panel to show output\r\n useTerminalPanelStore.getState().openTerminal(sessionKey);\r\n } catch (e) {\r\n setError(e instanceof Error ? e.message : String(e));\r\n } finally {\r\n setIsExecuting(false);\r\n }\r\n };\r\n\r\n // ========== Orchestrator Execution ==========\r\n\r\n const handleOrchestratorExecute = async () => {\r\n setIsExecuting(true);\r\n setError(null);\r\n setLastResult(null);\r\n try {\r\n const sessionKey = await ensureSession();\r\n const instruction = buildQueueItemContext(item, issue);\r\n\r\n const nodeId = generateId('node');\r\n const flowName = `Queue ${item.issue_id} / ${item.solution_id}${item.task_id ? ` / ${item.task_id}` : ''}`;\r\n const flowDescription = `Queue item ${item.item_id} -> Orchestrator`;\r\n\r\n const created = await createOrchestratorFlow(\r\n {\r\n name: flowName,\r\n description: flowDescription,\r\n version: '1.0.0',\r\n nodes: [\r\n {\r\n id: nodeId,\r\n type: 'prompt-template',\r\n position: { x: 100, y: 100 },\r\n data: {\r\n label: flowName,\r\n instruction,\r\n tool,\r\n mode,\r\n delivery: 'sendToSession',\r\n targetSessionKey: sessionKey,\r\n resumeKey: item.issue_id,\r\n resumeStrategy,\r\n tags: ['queue', item.item_id, item.issue_id, item.solution_id].filter(Boolean),\r\n },\r\n },\r\n ],\r\n edges: [],\r\n variables: {},\r\n metadata: {\r\n source: 'local',\r\n tags: ['queue', item.item_id, item.issue_id, item.solution_id].filter(Boolean),\r\n },\r\n },\r\n projectPath || undefined\r\n );\r\n\r\n if (!created.success) {\r\n throw new Error('Failed to create flow');\r\n }\r\n\r\n // Hydrate Orchestrator stores -- convert OrchestratorFlowDto to Flow\r\n const flowDto = created.data;\r\n const parsedVersion = parseInt(String(flowDto.version ?? '1'), 10);\r\n const flowForStore: Flow = {\r\n ...flowDto,\r\n version: Number.isFinite(parsedVersion) ? parsedVersion : 1,\r\n } as unknown as Flow;\r\n useFlowStore.getState().setCurrentFlow(flowForStore);\r\n\r\n // Execute the flow\r\n const executed = await executeOrchestratorFlow(\r\n created.data.id,\r\n {},\r\n projectPath || undefined\r\n );\r\n if (!executed.success) {\r\n throw new Error('Failed to execute flow');\r\n }\r\n\r\n const execId = executed.data.execId;\r\n useExecutionStore.getState().startExecution(execId, created.data.id);\r\n useExecutionStore.getState().setMonitorPanelOpen(true);\r\n\r\n // Record to queueExecutionStore\r\n const execution: QueueExecution = {\r\n id: generateId('qexec'),\r\n queueItemId: item.item_id,\r\n issueId: item.issue_id,\r\n solutionId: item.solution_id,\r\n type: 'orchestrator',\r\n flowId: created.data.id,\r\n execId,\r\n tool,\r\n mode,\r\n status: 'running',\r\n startedAt: new Date().toISOString(),\r\n };\r\n addExecution(execution);\r\n\r\n setLastResult(`${created.data.id} / ${execId}`);\r\n toast.success(\r\n formatMessage({ id: 'issues.queue.orchestrator.sentTitle' }),\r\n formatMessage(\r\n { id: 'issues.queue.orchestrator.sentDesc' },\r\n { flowId: created.data.id }\r\n )\r\n );\r\n\r\n navigate('/orchestrator');\r\n } catch (e) {\r\n const message = e instanceof Error ? e.message : String(e);\r\n setError(message);\r\n toast.error(formatMessage({ id: 'issues.queue.orchestrator.sendFailed' }), message);\r\n } finally {\r\n setIsExecuting(false);\r\n }\r\n };\r\n\r\n // ========== Render ==========\r\n\r\n return (\r\n <div className={cn('space-y-3', className)}>\r\n {/* Header with session controls */}\r\n <div className=\"flex items-center justify-between gap-2\">\r\n <h3 className=\"text-sm font-semibold text-foreground\">\r\n {formatMessage({ id: 'issues.queue.exec.title' })}\r\n </h3>\r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={refreshSessions}\r\n disabled={isLoading}\r\n className=\"gap-2\"\r\n >\r\n <RefreshCw className={cn('h-4 w-4', isLoading && 'animate-spin')} />\r\n {formatMessage({ id: 'issues.terminal.session.refresh' })}\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={handleCreateSession}\r\n className=\"gap-2\"\r\n >\r\n <Plus className=\"h-4 w-4\" />\r\n {formatMessage({ id: 'issues.terminal.session.new' })}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Session selector */}\r\n <div>\r\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.terminal.session.select' })}\r\n </label>\r\n <Select value={selectedSessionKey} onValueChange={setSelectedSessionKey}>\r\n <SelectTrigger>\r\n <SelectValue\r\n placeholder={formatMessage({ id: 'issues.terminal.session.none' })}\r\n />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {sessions.length === 0 ? (\r\n <SelectItem value=\"__none__\" disabled>\r\n {formatMessage({ id: 'issues.terminal.session.none' })}\r\n </SelectItem>\r\n ) : (\r\n sessions.map((s) => (\r\n <SelectItem key={s.sessionKey} value={s.sessionKey}>\r\n {(s.tool || 'cli') + ' \\u00B7 ' + s.sessionKey}\r\n </SelectItem>\r\n ))\r\n )}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n\r\n {/* Shared execution settings */}\r\n <CliExecutionSettings\r\n tool={tool}\r\n mode={mode}\r\n resumeStrategy={resumeStrategy}\r\n onToolChange={setTool}\r\n onModeChange={setMode}\r\n onResumeStrategyChange={setResumeStrategy}\r\n />\r\n\r\n {/* Execution mode tabs */}\r\n <Tabs\r\n value={activeTab}\r\n onValueChange={(v) => setActiveTab(v as ExecutionTab)}\r\n className=\"w-full\"\r\n >\r\n <TabsList className=\"w-full\">\r\n <TabsTrigger value=\"session\" className=\"flex-1 gap-2\">\r\n <Terminal className=\"h-4 w-4\" />\r\n {formatMessage({ id: 'issues.queue.exec.sessionTab' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"orchestrator\" className=\"flex-1 gap-2\">\r\n <Workflow className=\"h-4 w-4\" />\r\n {formatMessage({ id: 'issues.queue.exec.orchestratorTab' })}\r\n </TabsTrigger>\r\n </TabsList>\r\n\r\n {/* Session Tab */}\r\n <TabsContent value=\"session\" className=\"mt-3\">\r\n <div className=\"flex items-center justify-end\">\r\n <Button\r\n onClick={handleSessionExecute}\r\n disabled={isExecuting || !projectPath}\r\n className=\"gap-2\"\r\n >\r\n {isExecuting ? (\r\n <>\r\n <RefreshCw className=\"h-4 w-4 animate-spin\" />\r\n {formatMessage({ id: 'issues.terminal.exec.run' })}\r\n </>\r\n ) : (\r\n formatMessage({ id: 'issues.terminal.exec.run' })\r\n )}\r\n </Button>\r\n </div>\r\n </TabsContent>\r\n\r\n {/* Orchestrator Tab */}\r\n <TabsContent value=\"orchestrator\" className=\"mt-3\">\r\n <div className=\"flex items-center justify-end\">\r\n <Button\r\n onClick={handleOrchestratorExecute}\r\n disabled={isExecuting || !projectPath}\r\n className=\"gap-2\"\r\n >\r\n {isExecuting ? (\r\n <>\r\n <RefreshCw className=\"h-4 w-4 animate-spin\" />\r\n {formatMessage({ id: 'issues.queue.orchestrator.sending' })}\r\n </>\r\n ) : (\r\n formatMessage({ id: 'issues.queue.orchestrator.send' })\r\n )}\r\n </Button>\r\n </div>\r\n </TabsContent>\r\n </Tabs>\r\n\r\n {/* Error display */}\r\n {displayError && (\r\n <div className=\"text-sm text-destructive\">{displayError}</div>\r\n )}\r\n\r\n {/* Last result */}\r\n {lastResult && (\r\n <div className=\"text-xs text-muted-foreground font-mono break-all\">\r\n {lastResult}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default QueueItemExecutor;\r\n","// ========================================\n// SolutionDrawer Component\n// ========================================\n// Right-side solution detail drawer\n\nimport { useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { X, FileText, CheckCircle, Circle, Loader2, XCircle, Clock, AlertTriangle, Terminal } from 'lucide-react';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\nimport { QueueItemExecutor } from '@/components/issue/queue/QueueItemExecutor';\nimport { useOpenTerminalPanel } from '@/stores/terminalPanelStore';\nimport { useIssueQueue } from '@/hooks';\nimport { cn } from '@/lib/utils';\nimport type { QueueItem } from '@/lib/api';\n\n// ========== Types ==========\nexport interface SolutionDrawerProps {\n item: QueueItem | null;\n isOpen: boolean;\n onClose: () => void;\n}\n\ntype TabValue = 'overview' | 'tasks' | 'terminal' | 'json';\n\n// ========== Status Configuration ==========\nconst statusConfig: Record<string, { label: string; variant: 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'info'; icon: React.ComponentType<{ className?: string }> }> = {\n pending: { label: 'issues.queue.status.pending', variant: 'secondary', icon: Circle },\n ready: { label: 'issues.queue.status.ready', variant: 'info', icon: Clock },\n executing: { label: 'issues.queue.status.executing', variant: 'warning', icon: Loader2 },\n completed: { label: 'issues.queue.status.completed', variant: 'success', icon: CheckCircle },\n failed: { label: 'issues.queue.status.failed', variant: 'destructive', icon: XCircle },\n blocked: { label: 'issues.queue.status.blocked', variant: 'destructive', icon: AlertTriangle },\n};\n\n// ========== Component ==========\n\nexport function SolutionDrawer({ item, isOpen, onClose }: SolutionDrawerProps) {\n const { formatMessage } = useIntl();\n const openTerminal = useOpenTerminalPanel();\n const [activeTab, setActiveTab] = useState<TabValue>('overview');\n const { data: queue } = useIssueQueue();\n const itemId = item?.item_id;\n const solutionId = item?.solution_id;\n\n // ESC key to close\n useEffect(() => {\n if (!isOpen) return;\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n window.addEventListener('keydown', handleEsc);\n return () => window.removeEventListener('keydown', handleEsc);\n }, [isOpen, onClose]);\n\n // Reset tab when switching items\n useEffect(() => {\n if (!isOpen || !itemId) return;\n setActiveTab('overview');\n }, [itemId, isOpen]);\n\n const tasksForSolution = useMemo(() => {\n if (!solutionId) return [];\n const allItems = Object.values(queue?.grouped_items || {}).flat();\n const isTaskItem = (qi: QueueItem) => Boolean(qi.task_id) || qi.item_id.startsWith('task-');\n return allItems\n .filter((qi) => qi.solution_id === solutionId && isTaskItem(qi))\n .sort((a, b) => a.execution_order - b.execution_order);\n }, [queue?.grouped_items, solutionId]);\n\n if (!item || !isOpen) {\n return null;\n }\n\n const status = statusConfig[item.status] || statusConfig.pending;\n const StatusIcon = status.icon;\n\n // Get solution details (would need to fetch full solution data)\n const issueId = item.issue_id;\n\n return (\n <>\n {/* Overlay */}\n <div\n className={cn(\n 'fixed inset-0 bg-black/40 transition-opacity z-40',\n isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'\n )}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n\n {/* Drawer */}\n <div\n className={cn(\n 'fixed top-0 right-0 h-full w-1/2 bg-background border-l border-border shadow-2xl z-50 flex flex-col transition-transform duration-300 ease-in-out',\n isOpen ? 'translate-x-0' : 'translate-x-full'\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n style={{ minWidth: '400px', maxWidth: '800px' }}\n >\n {/* Header */}\n <div className=\"flex items-start justify-between p-6 border-b border-border bg-card\">\n <div className=\"flex-1 min-w-0 mr-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n <span className=\"text-xs font-mono text-muted-foreground\">{item.item_id}</span>\n <Badge variant={status.variant} className=\"gap-1\">\n <StatusIcon className=\"h-3 w-3\" />\n {formatMessage({ id: status.label })}\n </Badge>\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-sm text-muted-foreground\">\n {formatMessage({ id: 'issues.solution.issue' })}: <span className=\"font-mono\">{issueId}</span>\n </p>\n <p className=\"text-sm text-muted-foreground\">\n {formatMessage({ id: 'issues.solution.solution' })}: <span className=\"font-mono\">{solutionId}</span>\n </p>\n </div>\n </div>\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose} className=\"flex-shrink-0 hover:bg-secondary\">\n <X className=\"h-5 w-5\" />\n </Button>\n </div>\n\n {/* Tabs */}\n <div className=\"px-6 pt-4 bg-card\">\n <Tabs value={activeTab} onValueChange={(v) => setActiveTab(v as TabValue)} className=\"w-full\">\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"overview\" className=\"flex-1\">\n <FileText className=\"h-4 w-4 mr-2\" />\n {formatMessage({ id: 'issues.solution.tabs.overview' })}\n </TabsTrigger>\n <TabsTrigger value=\"tasks\" className=\"flex-1\">\n <CheckCircle className=\"h-4 w-4 mr-2\" />\n {formatMessage({ id: 'issues.solution.tabs.tasks' })}\n </TabsTrigger>\n <TabsTrigger value=\"terminal\" className=\"flex-1\">\n <Terminal className=\"h-4 w-4 mr-2\" />\n {formatMessage({ id: 'issues.solution.tabs.terminal' })}\n </TabsTrigger>\n <TabsTrigger value=\"json\" className=\"flex-1\">\n <FileText className=\"h-4 w-4 mr-2\" />\n {formatMessage({ id: 'issues.solution.tabs.json' })}\n </TabsTrigger>\n </TabsList>\n\n {/* Tab Content */}\n <div className=\"overflow-y-auto pr-2\" style={{ height: 'calc(100vh - 200px)' }}>\n {/* Overview Tab */}\n <TabsContent value=\"overview\" className=\"mt-4 pb-6 focus-visible:outline-none\">\n <div className=\"space-y-6\">\n {/* Execution Info */}\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n {formatMessage({ id: 'issues.solution.overview.executionInfo' })}\n </h3>\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"p-3 bg-muted/50 rounded-md\">\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.solution.overview.executionOrder' })}</p>\n <p className=\"text-lg font-semibold\">{item.execution_order}</p>\n </div>\n <div className=\"p-3 bg-muted/50 rounded-md\">\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.solution.overview.semanticPriority' })}</p>\n <p className=\"text-lg font-semibold\">{item.semantic_priority}</p>\n </div>\n <div className=\"p-3 bg-muted/50 rounded-md\">\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.solution.overview.group' })}</p>\n <p className=\"text-sm font-mono truncate\">{item.execution_group}</p>\n </div>\n <div className=\"p-3 bg-muted/50 rounded-md\">\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.solution.overview.taskCount' })}</p>\n <p className=\"text-lg font-semibold\">{item.task_count || '-'}</p>\n </div>\n </div>\n </div>\n\n {/* Unified Execution */}\n <QueueItemExecutor item={item} />\n\n {/* Dependencies */}\n {item.depends_on && item.depends_on.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\n {formatMessage({ id: 'issues.solution.overview.dependencies' })}\n </h3>\n <div className=\"flex flex-wrap gap-2\">\n {item.depends_on.map((dep, index) => (\n <Badge key={index} variant=\"outline\" className=\"font-mono text-xs\">\n {dep}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {/* Files Touched */}\n {item.files_touched && item.files_touched.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\n {formatMessage({ id: 'issues.solution.overview.filesTouched' })}\n </h3>\n <div className=\"space-y-1\">\n {item.files_touched.map((file, index) => (\n <div key={index} className=\"p-2 bg-muted/50 rounded-md\">\n <span className=\"text-sm font-mono\">{file}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </TabsContent>\n\n {/* Tasks Tab */}\n <TabsContent value=\"tasks\" className=\"mt-4 pb-6 focus-visible:outline-none\">\n {tasksForSolution.length === 0 ? (\n <div className=\"text-center py-12 text-muted-foreground\">\n <FileText className=\"h-12 w-12 mx-auto mb-4 opacity-50\" />\n <p className=\"text-sm\">{formatMessage({ id: 'issues.solution.tasks.empty' })}</p>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {tasksForSolution.map((task) => {\n const taskStatus = statusConfig[task.status] || statusConfig.pending;\n const TaskStatusIcon = taskStatus.icon;\n const taskId = task.task_id || task.item_id;\n\n return (\n <div\n key={task.item_id}\n className=\"flex items-center justify-between gap-3 p-3 bg-muted/50 rounded-md\"\n >\n <div className=\"min-w-0\">\n <p className=\"text-sm font-mono truncate\">{taskId}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {formatMessage({ id: 'issues.solution.overview.executionOrder' })}: {task.execution_order}\n {' · '}\n {formatMessage({ id: 'issues.solution.overview.group' })}: {task.execution_group}\n </p>\n </div>\n <Badge variant={taskStatus.variant} className=\"gap-1 shrink-0\">\n <TaskStatusIcon\n className={cn('h-3 w-3', task.status === 'executing' && 'animate-spin')}\n />\n {formatMessage({ id: taskStatus.label })}\n </Badge>\n </div>\n );\n })}\n </div>\n )}\n </TabsContent>\n\n {/* Terminal Tab - Link to Terminal Panel */}\n <TabsContent value=\"terminal\" className=\"mt-4 pb-6 focus-visible:outline-none\">\n <div className=\"flex flex-col items-center justify-center py-12 text-muted-foreground\">\n <Terminal className=\"h-12 w-12 mb-4 opacity-50\" />\n <p className=\"text-sm mb-4\">{formatMessage({ id: 'home.terminalPanel.openInPanel' })}</p>\n <Button\n onClick={() => {\n openTerminal(issueId);\n onClose();\n }}\n >\n <Terminal className=\"h-4 w-4 mr-2\" />\n {formatMessage({ id: 'home.terminalPanel.openInPanel' })}\n </Button>\n </div>\n </TabsContent>\n\n {/* JSON Tab */}\n <TabsContent value=\"json\" className=\"mt-4 pb-6 focus-visible:outline-none\">\n <pre className=\"p-4 bg-muted rounded-md overflow-x-auto text-xs\">\n {JSON.stringify(item, null, 2)}\n </pre>\n </TabsContent>\n </div>\n </Tabs>\n </div>\n </div>\n </>\n );\n}\n\nexport default SolutionDrawer;\n","// ========================================\n// Queue Panel\n// ========================================\n// Content panel for Queue tab in IssueHub\n\nimport { useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n AlertCircle,\n CheckCircle,\n Clock,\n ListTodo,\n GitMerge,\n} from 'lucide-react';\nimport { Card } from '@/components/ui/Card';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/Select';\nimport { QueueCard } from '@/components/issue/queue/QueueCard';\nimport { QueueBoard } from '@/components/issue/queue/QueueBoard';\nimport { SolutionDrawer } from '@/components/issue/queue/SolutionDrawer';\nimport { useIssueQueue, useIssueQueueById, useQueueHistory, useQueueMutations } from '@/hooks';\nimport type { QueueItem } from '@/lib/api';\n\n// ========== Loading Skeleton ==========\n\nfunction QueuePanelSkeleton() {\n return (\n <div className=\"space-y-6\">\n {/* Stats Cards Skeleton */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Card key={i} className=\"p-4\">\n <div className=\"h-6 bg-muted animate-pulse rounded w-16 mb-2\" />\n <div className=\"h-4 bg-muted animate-pulse rounded w-24\" />\n </Card>\n ))}\n </div>\n\n {/* Queue Cards Skeleton */}\n <div className=\"grid gap-4 md:grid-cols-2\">\n {[1, 2].map((i) => (\n <Card key={i} className=\"p-4\">\n <div className=\"h-6 bg-muted animate-pulse rounded w-32 mb-4\" />\n <div className=\"h-4 bg-muted animate-pulse rounded w-full mb-2\" />\n <div className=\"h-4 bg-muted animate-pulse rounded w-3/4\" />\n </Card>\n ))}\n </div>\n </div>\n );\n}\n\n// ========== Empty State ==========\n\nfunction QueueEmptyState() {\n const { formatMessage } = useIntl();\n\n return (\n <Card className=\"p-12 text-center\">\n <AlertCircle className=\"w-16 h-16 mx-auto text-muted-foreground/50\" />\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\n {formatMessage({ id: 'issues.queue.emptyState.title' })}\n </h3>\n <p className=\"mt-2 text-muted-foreground\">\n {formatMessage({ id: 'issues.queue.emptyState.description' })}\n </p>\n </Card>\n );\n}\n\n// ========== Main Panel Component ==========\n\nexport function QueuePanel() {\n const { formatMessage } = useIntl();\n const [selectedItem, setSelectedItem] = useState<QueueItem | null>(null);\n const [selectedQueueId, setSelectedQueueId] = useState<string>('');\n\n const activeQueueQuery = useIssueQueue();\n const { data: historyIndex } = useQueueHistory();\n const selectedQueueQuery = useIssueQueueById(selectedQueueId);\n const {\n activateQueue,\n deactivateQueue,\n deleteQueue,\n mergeQueues,\n splitQueue,\n isActivating,\n isDeactivating,\n isDeleting,\n isMerging,\n isSplitting,\n } = useQueueMutations();\n\n const queue = selectedQueueId && selectedQueueQuery.data ? selectedQueueQuery.data : activeQueueQuery.data;\n const isLoading =\n activeQueueQuery.isLoading ||\n (selectedQueueId ? selectedQueueQuery.isLoading && !selectedQueueQuery.data : false);\n const error = activeQueueQuery.error || selectedQueueQuery.error;\n\n const taskCount = queue?.tasks?.length || 0;\n const solutionCount = queue?.solutions?.length || 0;\n const conflictCount = queue?.conflicts?.length || 0;\n const groupCount = Object.keys(queue?.grouped_items || {}).length;\n const totalItems = taskCount + solutionCount;\n const activeQueueId = historyIndex?.active_queue_id || null;\n const activeQueueIds = historyIndex?.active_queue_ids || [];\n const queueId = queue?.id;\n\n // Keep selector in sync with active queue id\n useEffect(() => {\n if (selectedQueueId) return;\n if (activeQueueId) setSelectedQueueId(activeQueueId);\n else if (queueId) setSelectedQueueId(queueId);\n }, [activeQueueId, queueId, selectedQueueId]);\n\n const handleActivate = async (queueId: string) => {\n try {\n await activateQueue(queueId);\n } catch (err) {\n console.error('Failed to activate queue:', err);\n }\n };\n\n const handleDeactivate = async () => {\n try {\n await deactivateQueue();\n } catch (err) {\n console.error('Failed to deactivate queue:', err);\n }\n };\n\n const handleDelete = async (queueId: string) => {\n try {\n await deleteQueue(queueId);\n } catch (err) {\n console.error('Failed to delete queue:', err);\n }\n };\n\n const handleMerge = async (sourceId: string, targetId: string) => {\n try {\n await mergeQueues(sourceId, targetId);\n } catch (err) {\n console.error('Failed to merge queues:', err);\n }\n };\n\n const handleSplit = async (sourceQueueId: string, itemIds: string[]) => {\n try {\n await splitQueue(sourceQueueId, itemIds);\n } catch (err) {\n console.error('Failed to split queue:', err);\n }\n };\n\n const handleItemClick = (item: QueueItem) => {\n setSelectedItem(item);\n };\n\n const handleCloseDrawer = () => {\n setSelectedItem(null);\n };\n\n if (isLoading) {\n return <QueuePanelSkeleton />;\n }\n\n if (error) {\n return (\n <Card className=\"p-12 text-center\">\n <AlertCircle className=\"w-16 h-16 mx-auto text-destructive/50\" />\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\n {formatMessage({ id: 'issues.queue.error.title' })}\n </h3>\n <p className=\"mt-2 text-muted-foreground\">\n {(error as Error).message || formatMessage({ id: 'issues.queue.error.message' })}\n </p>\n </Card>\n );\n }\n\n if (!queue || totalItems === 0) {\n return <QueueEmptyState />;\n }\n\n // Check if queue is active (multi-queue index preferred)\n const isActive = queueId ? activeQueueIds.includes(queueId) : totalItems > 0 && conflictCount === 0;\n\n return (\n <div className=\"space-y-6\">\n {/* Queue History / Active Queue Selector */}\n {historyIndex && (\n <Card className=\"p-4\">\n <div className=\"flex flex-col md:flex-row md:items-center gap-3 justify-between\">\n <div className=\"min-w-0\">\n <div className=\"text-sm font-semibold text-foreground\">\n {formatMessage({ id: 'issues.queue.history.title' })}\n </div>\n <div className=\"text-xs text-muted-foreground mt-1 font-mono\">\n {formatMessage({ id: 'issues.queue.history.active' })}:{' '}\n {activeQueueId || '—'}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Select value={selectedQueueId} onValueChange={(v) => setSelectedQueueId(v)}>\n <SelectTrigger className=\"w-[260px]\">\n <SelectValue placeholder={formatMessage({ id: 'issues.queue.history.select' })} />\n </SelectTrigger>\n <SelectContent>\n {(historyIndex.queues || []).length === 0 ? (\n <SelectItem value=\"__none__\" disabled>\n {formatMessage({ id: 'issues.queue.history.empty' })}\n </SelectItem>\n ) : (\n historyIndex.queues.map((q) => (\n <SelectItem key={q.id} value={q.id}>\n {q.id}\n </SelectItem>\n ))\n )}\n </SelectContent>\n </Select>\n <Button\n variant=\"outline\"\n disabled={!selectedQueueId || isActivating}\n onClick={() => activateQueue(selectedQueueId)}\n >\n {formatMessage({ id: 'issues.queue.history.activate' })}\n </Button>\n <Button\n variant=\"outline\"\n disabled={isDeactivating}\n onClick={() => deactivateQueue()}\n >\n {formatMessage({ id: 'issues.queue.actions.deactivate' })}\n </Button>\n </div>\n </div>\n </Card>\n )}\n\n {/* Stats Cards */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <ListTodo className=\"w-5 h-5 text-info\" />\n <span className=\"text-2xl font-bold\">{totalItems}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'issues.queue.stats.totalItems' })}\n </p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <GitMerge className=\"w-5 h-5 text-warning\" />\n <span className=\"text-2xl font-bold\">{groupCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'issues.queue.stats.groups' })}\n </p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <Clock className=\"w-5 h-5 text-warning\" />\n <span className=\"text-2xl font-bold\">{taskCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'issues.queue.stats.tasks' })}\n </p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"w-5 h-5 text-success\" />\n <span className=\"text-2xl font-bold\">{solutionCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'issues.queue.stats.solutions' })}\n </p>\n </Card>\n </div>\n\n {/* Conflicts Warning */}\n {conflictCount > 0 && (\n <Card className=\"p-4 border-destructive/50 bg-destructive/5\">\n <div className=\"flex items-center gap-3\">\n <AlertCircle className=\"w-5 h-5 text-destructive shrink-0\" />\n <div className=\"flex-1\">\n <h4 className=\"font-medium text-destructive\">\n {formatMessage({ id: 'issues.queue.conflicts.title' })}\n </h4>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {conflictCount} {formatMessage({ id: 'issues.queue.conflicts.description' })}\n </p>\n </div>\n </div>\n </Card>\n )}\n\n {/* Queue Card (actions + summary) */}\n <QueueCard\n key={queue.id || 'legacy'}\n queue={queue}\n isActive={isActive}\n onActivate={handleActivate}\n onDeactivate={handleDeactivate}\n onDelete={handleDelete}\n onMerge={handleMerge}\n onSplit={handleSplit}\n onItemClick={handleItemClick}\n isActivating={isActivating}\n isDeactivating={isDeactivating}\n isDeleting={isDeleting}\n isMerging={isMerging}\n isSplitting={isSplitting}\n />\n\n {/* Queue Board (DnD reorder/move) */}\n <QueueBoard queue={queue} onItemClick={handleItemClick} />\n\n {/* Solution Detail Drawer */}\n <SolutionDrawer\n item={selectedItem}\n isOpen={selectedItem !== null}\n onClose={handleCloseDrawer}\n />\n\n {/* Status Footer */}\n <div className=\"flex items-center justify-between p-4 bg-muted/50 rounded-lg\">\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n {isActive ? (\n <>\n <CheckCircle className=\"w-4 h-4 text-success\" />\n {formatMessage({ id: 'issues.queue.status.ready' })}\n </>\n ) : (\n <>\n <Clock className=\"w-4 h-4 text-warning\" />\n {formatMessage({ id: 'issues.queue.status.pending' })}\n </>\n )}\n </div>\n <Badge variant={isActive ? 'success' : 'secondary'} className=\"gap-1\">\n {isActive ? (\n <CheckCircle className=\"w-3 h-3\" />\n ) : (\n <Clock className=\"w-3 h-3\" />\n )}\n {isActive\n ? formatMessage({ id: 'issues.queue.status.active' })\n : formatMessage({ id: 'issues.queue.status.inactive' })\n }\n </Badge>\n </div>\n </div>\n );\n}\n","// ========================================\r\n// Discovery Card Component\r\n// ========================================\r\n// Displays a discovery session card with status, progress, and findings count\r\n\r\nimport { useIntl } from 'react-intl';\r\nimport { Radar, CheckCircle, XCircle, Clock } from 'lucide-react';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Progress } from '@/components/ui/Progress';\r\nimport { cn } from '@/lib/utils';\r\nimport type { DiscoverySession } from '@/lib/api';\r\n\r\ninterface DiscoveryCardProps {\r\n session: DiscoverySession;\r\n isActive: boolean;\r\n onClick: () => void;\r\n}\r\n\r\nconst statusConfig = {\r\n running: {\r\n icon: Clock,\r\n variant: 'warning' as const,\r\n label: 'issues.discovery.session.status.running',\r\n },\r\n completed: {\r\n icon: CheckCircle,\r\n variant: 'success' as const,\r\n label: 'issues.discovery.session.status.completed',\r\n },\r\n failed: {\r\n icon: XCircle,\r\n variant: 'destructive' as const,\r\n label: 'issues.discovery.session.status.failed',\r\n },\r\n};\r\n\r\nexport function DiscoveryCard({ session, isActive, onClick }: DiscoveryCardProps) {\r\n const { formatMessage } = useIntl();\r\n const config = statusConfig[session.status];\r\n const StatusIcon = config.icon;\r\n\r\n const formatDate = (dateString: string) => {\r\n return new Date(dateString).toLocaleString();\r\n };\r\n\r\n return (\r\n <Card\r\n className={cn(\r\n 'p-4 cursor-pointer transition-all hover:shadow-md',\r\n isActive && 'ring-2 ring-primary'\r\n )}\r\n onClick={onClick}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-start justify-between mb-3\">\r\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\r\n <Radar className=\"w-5 h-5 text-primary flex-shrink-0\" />\r\n <h3 className=\"font-medium text-foreground truncate\">{session.name}</h3>\r\n </div>\r\n <Badge variant={config.variant} className=\"flex-shrink-0\">\r\n <StatusIcon className=\"w-3 h-3 mr-1\" />\r\n {formatMessage({ id: config.label })}\r\n </Badge>\r\n </div>\r\n\r\n {/* Progress Bar for Running Sessions */}\r\n {session.status === 'running' && (\r\n <div className=\"mb-3\">\r\n <div className=\"flex items-center justify-between text-xs text-muted-foreground mb-1\">\r\n <span>{formatMessage({ id: 'issues.discovery.progress' })}</span>\r\n <span>{session.progress}%</span>\r\n </div>\r\n <Progress value={session.progress} className=\"h-2\" />\r\n </div>\r\n )}\r\n\r\n {/* Findings Count */}\r\n <div className=\"flex items-center justify-between text-sm\">\r\n <div className=\"flex items-center gap-4\">\r\n <div className=\"flex items-center gap-1\">\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'issues.discovery.session.findings' }, { count: session.findings_count })}:</span>\r\n <span className=\"font-medium text-foreground\">{session.findings_count}</span>\r\n </div>\r\n </div>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatDate(session.created_at)}\r\n </span>\r\n </div>\r\n </Card>\r\n );\r\n}\r\n","// ========================================\n// FindingDrawer Component\n// ========================================\n// Right-side finding detail drawer for displaying discovery finding details\n\nimport { useEffect } from 'react';\nimport { useIntl } from 'react-intl';\nimport { X, FileText, AlertTriangle, ExternalLink, MapPin, Code, Lightbulb, Target } from 'lucide-react';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { cn } from '@/lib/utils';\nimport type { Finding } from '@/lib/api';\n\n// ========== Types ==========\nexport interface FindingDrawerProps {\n finding: Finding | null;\n isOpen: boolean;\n onClose: () => void;\n}\n\n// ========== Severity Configuration ==========\nconst severityConfig: Record<string, { label: string; variant: 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'info' }> = {\n critical: { label: 'issues.discovery.findings.severity.critical', variant: 'destructive' },\n high: { label: 'issues.discovery.findings.severity.high', variant: 'destructive' },\n medium: { label: 'issues.discovery.findings.severity.medium', variant: 'warning' },\n low: { label: 'issues.discovery.findings.severity.low', variant: 'secondary' },\n};\n\nfunction getSeverityConfig(severity: string) {\n return severityConfig[severity] || { label: 'issues.discovery.findings.severity.unknown', variant: 'outline' };\n}\n\n// ========== Component ==========\n\nexport function FindingDrawer({ finding, isOpen, onClose }: FindingDrawerProps) {\n const { formatMessage } = useIntl();\n\n // ESC key to close\n useEffect(() => {\n if (!isOpen) return;\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n window.addEventListener('keydown', handleEsc);\n return () => window.removeEventListener('keydown', handleEsc);\n }, [isOpen, onClose]);\n\n if (!finding || !isOpen) {\n return null;\n }\n\n const severity = getSeverityConfig(finding.severity);\n\n return (\n <>\n {/* Overlay */}\n <div\n className={cn(\n 'fixed inset-0 bg-black/40 transition-opacity z-40',\n isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'\n )}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n\n {/* Drawer */}\n <div\n className={cn(\n 'fixed top-0 right-0 h-full w-1/2 bg-background border-l border-border shadow-2xl z-50 flex flex-col transition-transform duration-300 ease-in-out',\n isOpen ? 'translate-x-0' : 'translate-x-full'\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n style={{ minWidth: '400px', maxWidth: '800px' }}\n >\n {/* Header */}\n <div className=\"flex items-start justify-between p-6 border-b border-border bg-card\">\n <div className=\"flex-1 min-w-0 mr-4\">\n <div className=\"flex items-center gap-2 mb-2 flex-wrap\">\n <span className=\"text-xs font-mono text-muted-foreground\">{finding.id}</span>\n <Badge variant={severity.variant}>\n {formatMessage({ id: severity.label })}\n </Badge>\n {finding.type && (\n <Badge variant=\"outline\">{finding.type}</Badge>\n )}\n {finding.category && (\n <Badge variant=\"info\">{finding.category}</Badge>\n )}\n </div>\n <h2 className=\"text-lg font-semibold text-foreground\">\n {finding.title}\n </h2>\n </div>\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose} className=\"flex-shrink-0 hover:bg-secondary\">\n <X className=\"h-5 w-5\" />\n </Button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto p-6 space-y-6\">\n {/* Description */}\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <AlertTriangle className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.description' })}\n </h3>\n <p className=\"text-sm text-muted-foreground whitespace-pre-wrap\">\n {finding.description}\n </p>\n </div>\n\n {/* File Location */}\n {finding.file && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <MapPin className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.location' })}\n </h3>\n <div className=\"flex items-center gap-2 text-sm\">\n <FileText className=\"h-4 w-4 text-muted-foreground\" />\n <code className=\"px-2 py-1 bg-muted rounded text-xs\">\n {finding.file}\n {finding.line && `:${finding.line}`}\n </code>\n </div>\n </div>\n )}\n\n {/* Code Snippet */}\n {finding.code_snippet && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <Code className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.codeSnippet' })}\n </h3>\n <pre className=\"p-3 bg-muted rounded-md overflow-x-auto text-xs border border-border\">\n <code>{finding.code_snippet}</code>\n </pre>\n </div>\n )}\n\n {/* Suggested Fix */}\n {finding.suggested_issue && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <Lightbulb className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.suggestedFix' })}\n </h3>\n <p className=\"text-sm text-muted-foreground whitespace-pre-wrap\">\n {finding.suggested_issue}\n </p>\n </div>\n )}\n\n {/* Confidence */}\n {finding.confidence !== undefined && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <Target className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.confidence' })}\n </h3>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-1 h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className={cn(\n \"h-full transition-all\",\n finding.confidence >= 0.9 ? \"bg-green-500\" :\n finding.confidence >= 0.7 ? \"bg-yellow-500\" : \"bg-red-500\"\n )}\n style={{ width: `${finding.confidence * 100}%` }}\n />\n </div>\n <span className=\"text-sm font-medium\">\n {Math.round(finding.confidence * 100)}%\n </span>\n </div>\n </div>\n )}\n\n {/* Reference */}\n {finding.reference && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <ExternalLink className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.reference' })}\n </h3>\n <a\n href={finding.reference}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm text-primary hover:underline break-all\"\n >\n {finding.reference}\n </a>\n </div>\n )}\n\n {/* Perspective */}\n {finding.perspective && (\n <div className=\"pt-4 border-t border-border\">\n <Badge variant=\"secondary\" className=\"text-xs\">\n {formatMessage({ id: 'issues.discovery.findings.perspective' })}: {finding.perspective}\n </Badge>\n </div>\n )}\n </div>\n </div>\n </>\n );\n}\n\nexport default FindingDrawer;\n","// ========================================\r\n// Finding List Component\r\n// ========================================\r\n// Displays findings with filters and severity badges\r\n\r\nimport { useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { Search, FileCode, AlertTriangle, ExternalLink, Check } from 'lucide-react';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Input } from '@/components/ui/Input';\r\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/Select';\r\nimport { cn } from '@/lib/utils';\r\nimport type { Finding } from '@/lib/api';\r\nimport type { FindingFilters } from '@/hooks/useIssues';\r\n\r\ninterface FindingListProps {\r\n findings: Finding[];\r\n filters: FindingFilters;\r\n onFilterChange: (filters: FindingFilters) => void;\r\n onFindingClick?: (finding: Finding) => void;\r\n selectedIds?: string[];\r\n onSelectionChange?: (selectedIds: string[]) => void;\r\n}\r\n\r\nconst severityConfig: Record<string, { variant: 'destructive' | 'warning' | 'secondary' | 'outline' | 'success' | 'info' | 'default'; label: string }> = {\r\n critical: { variant: 'destructive', label: 'issues.discovery.findings.severity.critical' },\r\n high: { variant: 'destructive', label: 'issues.discovery.findings.severity.high' },\r\n medium: { variant: 'warning', label: 'issues.discovery.findings.severity.medium' },\r\n low: { variant: 'secondary', label: 'issues.discovery.findings.severity.low' },\r\n};\r\n\r\nfunction getSeverityConfig(severity: string) {\r\n return severityConfig[severity] || { variant: 'outline', label: 'issues.discovery.findings.severity.unknown' };\r\n}\r\n\r\nexport function FindingList({\r\n findings,\r\n filters,\r\n onFilterChange,\r\n onFindingClick,\r\n selectedIds = [],\r\n onSelectionChange,\r\n}: FindingListProps) {\r\n const { formatMessage } = useIntl();\r\n const [internalSelection, setInternalSelection] = useState<Set<string>>(new Set());\r\n\r\n // Use external selection if provided, otherwise use internal state\r\n const selectionSet = onSelectionChange\r\n ? new Set(selectedIds)\r\n : internalSelection;\r\n\r\n const handleToggleSelection = (findingId: string) => {\r\n const newSet = new Set(selectionSet);\r\n if (newSet.has(findingId)) {\r\n newSet.delete(findingId);\r\n } else {\r\n newSet.add(findingId);\r\n }\r\n if (onSelectionChange) {\r\n onSelectionChange(Array.from(newSet));\r\n } else {\r\n setInternalSelection(newSet);\r\n }\r\n };\r\n\r\n const handleToggleAll = () => {\r\n const allSelected = selectionSet.size === findings.length && findings.length > 0;\r\n const newSet = allSelected ? new Set<string>() : new Set(findings.map(f => f.id));\r\n if (onSelectionChange) {\r\n onSelectionChange(Array.from(newSet));\r\n } else {\r\n setInternalSelection(newSet);\r\n }\r\n };\r\n\r\n const isAllSelected = findings.length > 0 && selectionSet.size === findings.length;\r\n const isSomeSelected = selectionSet.size > 0 && selectionSet.size < findings.length;\r\n\r\n // Extract unique types for filter\r\n const uniqueTypes = Array.from(new Set(findings.map(f => f.type))).sort();\r\n\r\n if (findings.length === 0) {\r\n return (\r\n <Card className=\"p-8 text-center\">\r\n <AlertTriangle className=\"w-12 h-12 mx-auto text-muted-foreground/50\" />\r\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.discovery.findings.noFindings' })}\r\n </h3>\r\n <p className=\"mt-2 text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.findings.noFindingsDescription' })}\r\n </p>\r\n </Card>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n {/* Filters */}\r\n <div className=\"flex flex-col sm:flex-row gap-3\">\r\n <div className=\"relative flex-1\">\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={formatMessage({ id: 'issues.discovery.findings.searchPlaceholder' })}\r\n value={filters.search || ''}\r\n onChange={(e) => onFilterChange({ ...filters, search: e.target.value || undefined })}\r\n className=\"pl-9\"\r\n />\r\n </div>\r\n <Select\r\n value={filters.severity || 'all'}\r\n onValueChange={(v) => onFilterChange({ ...filters, severity: v === 'all' ? undefined : v as Finding['severity'] })}\r\n >\r\n <SelectTrigger className=\"w-[140px]\">\r\n <SelectValue placeholder={formatMessage({ id: 'issues.discovery.findings.filterBySeverity' })} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.discovery.findings.severity.all' })}</SelectItem>\r\n <SelectItem value=\"critical\">{formatMessage({ id: 'issues.discovery.findings.severity.critical' })}</SelectItem>\r\n <SelectItem value=\"high\">{formatMessage({ id: 'issues.discovery.findings.severity.high' })}</SelectItem>\r\n <SelectItem value=\"medium\">{formatMessage({ id: 'issues.discovery.findings.severity.medium' })}</SelectItem>\r\n <SelectItem value=\"low\">{formatMessage({ id: 'issues.discovery.findings.severity.low' })}</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n {uniqueTypes.length > 0 && (\r\n <Select\r\n value={filters.type || 'all'}\r\n onValueChange={(v) => onFilterChange({ ...filters, type: v === 'all' ? undefined : v })}\r\n >\r\n <SelectTrigger className=\"w-[140px]\">\r\n <SelectValue placeholder={formatMessage({ id: 'issues.discovery.findings.filterByType' })} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.discovery.findings.type.all' })}</SelectItem>\r\n {uniqueTypes.map(type => (\r\n <SelectItem key={type} value={type}>{type}</SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )}\r\n <Select\r\n value={filters.exported === undefined ? 'all' : filters.exported ? 'exported' : 'notExported'}\r\n onValueChange={(v) => {\r\n if (v === 'all') {\r\n onFilterChange({ ...filters, exported: undefined });\r\n } else if (v === 'exported') {\r\n onFilterChange({ ...filters, exported: true });\r\n } else {\r\n onFilterChange({ ...filters, exported: false });\r\n }\r\n }}\r\n >\r\n <SelectTrigger className=\"w-[140px]\">\r\n <SelectValue placeholder={formatMessage({ id: 'issues.discovery.findings.filterByExported' })} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.discovery.findings.exportedStatus.all' })}</SelectItem>\r\n <SelectItem value=\"exported\">{formatMessage({ id: 'issues.discovery.findings.exportedStatus.exported' })}</SelectItem>\r\n <SelectItem value=\"notExported\">{formatMessage({ id: 'issues.discovery.findings.exportedStatus.notExported' })}</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n <Select\r\n value={filters.hasIssue === undefined ? 'all' : filters.hasIssue ? 'hasIssue' : 'noIssue'}\r\n onValueChange={(v) => {\r\n if (v === 'all') {\r\n onFilterChange({ ...filters, hasIssue: undefined });\r\n } else if (v === 'hasIssue') {\r\n onFilterChange({ ...filters, hasIssue: true });\r\n } else {\r\n onFilterChange({ ...filters, hasIssue: false });\r\n }\r\n }}\r\n >\r\n <SelectTrigger className=\"w-[140px]\">\r\n <SelectValue placeholder={formatMessage({ id: 'issues.discovery.findings.filterByIssue' })} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.discovery.findings.issueStatus.all' })}</SelectItem>\r\n <SelectItem value=\"hasIssue\">{formatMessage({ id: 'issues.discovery.findings.issueStatus.hasIssue' })}</SelectItem>\r\n <SelectItem value=\"noIssue\">{formatMessage({ id: 'issues.discovery.findings.issueStatus.noIssue' })}</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n\r\n {/* Select All */}\r\n {onSelectionChange && (\r\n <button\r\n onClick={handleToggleAll}\r\n className=\"flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors\"\r\n >\r\n <div className=\"w-4 h-4 border rounded flex items-center justify-center\">\r\n {isAllSelected ? (\r\n <Check className=\"w-3 h-3\" />\r\n ) : isSomeSelected ? (\r\n <div className=\"w-2 h-2 bg-foreground rounded-sm\" />\r\n ) : null}\r\n </div>\r\n {isAllSelected\r\n ? formatMessage({ id: 'issues.discovery.findings.deselectAll' })\r\n : formatMessage({ id: 'issues.discovery.findings.selectAll' })}\r\n </button>\r\n )}\r\n\r\n {/* Findings List */}\r\n <div className=\"space-y-3\">\r\n {findings.map((finding) => {\r\n const config = getSeverityConfig(finding.severity);\r\n const isSelected = selectionSet.has(finding.id);\r\n return (\r\n <Card\r\n key={finding.id}\r\n className={cn(\r\n \"p-4 transition-colors\",\r\n onFindingClick && \"cursor-pointer hover:bg-muted/50\"\r\n )}\r\n onClick={(e) => {\r\n // Don't trigger finding click when clicking checkbox\r\n if ((e.target as HTMLElement).closest('.selection-checkbox')) return;\r\n onFindingClick?.(finding);\r\n }}\r\n >\r\n <div className=\"flex items-start gap-3\">\r\n {/* Checkbox */}\r\n {onSelectionChange && (\r\n <div\r\n className=\"selection-checkbox flex-shrink-0 mt-1\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleToggleSelection(finding.id);\r\n }}\r\n >\r\n <div className={cn(\r\n \"w-4 h-4 border rounded flex items-center justify-center cursor-pointer transition-colors\",\r\n isSelected ? \"bg-primary border-primary\" : \"border-border hover:border-primary\"\r\n )}>\r\n {isSelected && <Check className=\"w-3 h-3 text-primary-foreground\" />}\r\n </div>\r\n </div>\r\n )}\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-start justify-between gap-3 mb-2\">\r\n <div className=\"flex items-center gap-2 flex-wrap\">\r\n <Badge variant={config.variant}>\r\n {formatMessage({ id: config.label })}\r\n </Badge>\r\n {finding.type && (\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n {finding.type}\r\n </Badge>\r\n )}\r\n {finding.exported && (\r\n <Badge variant=\"success\" className=\"text-xs gap-1\">\r\n <ExternalLink className=\"w-3 h-3\" />\r\n {formatMessage({ id: 'issues.discovery.findings.exported' })}\r\n </Badge>\r\n )}\r\n {finding.issue_id && (\r\n <Badge variant=\"info\" className=\"text-xs\">\r\n {formatMessage({ id: 'issues.discovery.findings.hasIssue' })}: {finding.issue_id}\r\n </Badge>\r\n )}\r\n </div>\r\n {finding.file && (\r\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\r\n <FileCode className=\"w-3 h-3\" />\r\n <span>{finding.file}</span>\r\n {finding.line && <span>:{finding.line}</span>}\r\n </div>\r\n )}\r\n </div>\r\n <h4 className=\"font-medium text-foreground mb-1\">{finding.title}</h4>\r\n <p className=\"text-sm text-muted-foreground line-clamp-2\">{finding.description}</p>\r\n {finding.code_snippet && (\r\n <pre className=\"mt-2 p-2 bg-muted rounded text-xs overflow-x-auto\">\r\n <code>{finding.code_snippet}</code>\r\n </pre>\r\n )}\r\n </div>\r\n </div>\r\n </Card>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Count */}\r\n <div className=\"text-center text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.findings.showingCount' }, { count: findings.length })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default FindingList;\r\n","// ========================================\r\n// Discovery Detail Component\r\n// ========================================\r\n// Displays findings detail panel with tabs and export functionality\r\n\r\nimport { useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { Download, FileText, BarChart3, Info, Upload } from 'lucide-react';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Progress } from '@/components/ui/Progress';\r\nimport { IssueDrawer } from '@/components/issue/hub/IssueDrawer';\r\nimport { FindingDrawer } from './FindingDrawer';\r\nimport type { DiscoverySession, Finding } from '@/lib/api';\r\nimport type { Issue } from '@/lib/api';\r\nimport type { FindingFilters } from '@/hooks/useIssues';\r\nimport { FindingList } from './FindingList';\r\n\r\ninterface DiscoveryDetailProps {\r\n sessionId: string;\r\n session: DiscoverySession | null;\r\n findings: Finding[];\r\n filters: FindingFilters;\r\n onFilterChange: (filters: FindingFilters) => void;\r\n onExport: () => void;\r\n onExportSelected?: (findingIds: string[]) => Promise<{ success: boolean; message?: string; exported?: number }>;\r\n isExporting?: boolean;\r\n issues?: Issue[]; // Optional: pass issues to find related ones\r\n}\r\n\r\nexport function DiscoveryDetail({\r\n sessionId: _sessionId,\r\n session,\r\n findings,\r\n filters,\r\n onFilterChange,\r\n onExport,\r\n onExportSelected,\r\n isExporting = false,\r\n issues = [],\r\n}: DiscoveryDetailProps) {\r\n const { formatMessage } = useIntl();\r\n const [activeTab, setActiveTab] = useState('findings');\r\n const [selectedIssue, setSelectedIssue] = useState<Issue | null>(null);\r\n const [selectedFinding, setSelectedFinding] = useState<Finding | null>(null);\r\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\r\n\r\n const handleFindingClick = (finding: Finding) => {\r\n // If finding has an associated issue_id, find and show that issue\r\n if (finding.issue_id) {\r\n const relatedIssue = issues.find(i => i.id === finding.issue_id);\r\n if (relatedIssue) {\r\n setSelectedIssue(relatedIssue);\r\n return;\r\n }\r\n }\r\n // Otherwise, show the finding details in FindingDrawer\r\n setSelectedFinding(finding);\r\n };\r\n\r\n const handleCloseIssueDrawer = () => {\r\n setSelectedIssue(null);\r\n };\r\n\r\n const handleCloseFindingDrawer = () => {\r\n setSelectedFinding(null);\r\n };\r\n\r\n const handleExportSelected = async () => {\r\n if (onExportSelected && selectedIds.length > 0) {\r\n await onExportSelected(selectedIds);\r\n setSelectedIds([]); // Clear selection after export\r\n }\r\n };\r\n\r\n if (!session) {\r\n return (\r\n <Card className=\"p-8 text-center\">\r\n <FileText className=\"w-12 h-12 mx-auto text-muted-foreground/50\" />\r\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.discovery.noSessionSelected' })}\r\n </h3>\r\n <p className=\"mt-2 text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.selectSession' })}\r\n </p>\r\n </Card>\r\n );\r\n }\r\n\r\n const severityCounts = findings.reduce((acc, f) => {\r\n acc[f.severity] = (acc[f.severity] || 0) + 1;\r\n return acc;\r\n }, { critical: 0, high: 0, medium: 0, low: 0 });\r\n\r\n const typeCounts = findings.reduce((acc, f) => {\r\n acc[f.type] = (acc[f.type] || 0) + 1;\r\n return acc;\r\n }, {} as Record<string, number>);\r\n\r\n const formatDate = (dateString: string) => {\r\n return new Date(dateString).toLocaleString();\r\n };\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h2 className=\"text-lg font-semibold text-foreground\">{session.name}</h2>\r\n <p className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.sessionId' })}: {session.id}\r\n </p>\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n {selectedIds.length > 0 && onExportSelected && (\r\n <Button\r\n variant=\"default\"\r\n onClick={handleExportSelected}\r\n disabled={isExporting || selectedIds.length === 0}\r\n >\r\n <Upload className=\"w-4 h-4 mr-2\" />\r\n {isExporting\r\n ? formatMessage({ id: 'issues.discovery.exporting' })\r\n : formatMessage({ id: 'issues.discovery.exportSelected' }, { count: selectedIds.length })\r\n }\r\n </Button>\r\n )}\r\n <Button variant=\"outline\" onClick={onExport} disabled={findings.length === 0}>\r\n <Download className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.discovery.export' })}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Status Badge */}\r\n <div className=\"flex items-center gap-3\">\r\n <Badge\r\n variant={session.status === 'completed' ? 'success' : session.status === 'failed' ? 'destructive' : 'warning'}\r\n >\r\n {formatMessage({ id: `issues.discovery.session.status.${session.status}` })}\r\n </Badge>\r\n <span className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.createdAt' })}: {formatDate(session.created_at)}\r\n </span>\r\n {session.completed_at && (\r\n <span className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.completedAt' })}: {formatDate(session.completed_at)}\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Progress Bar for Running Sessions */}\r\n {session.status === 'running' && (\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center justify-between text-sm mb-2\">\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'issues.discovery.progress' })}</span>\r\n <span className=\"font-medium\">{session.progress}%</span>\r\n </div>\r\n <Progress value={session.progress} className=\"h-2\" />\r\n </Card>\r\n )}\r\n\r\n {/* Tabs */}\r\n <Tabs value={activeTab} onValueChange={setActiveTab}>\r\n <TabsList>\r\n <TabsTrigger value=\"findings\">\r\n <FileText className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.discovery.tabFindings' })} ({findings.length})\r\n </TabsTrigger>\r\n <TabsTrigger value=\"progress\">\r\n <BarChart3 className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.discovery.tabProgress' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"info\">\r\n <Info className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.discovery.tabInfo' })}\r\n </TabsTrigger>\r\n </TabsList>\r\n\r\n <TabsContent value=\"findings\" className=\"mt-4\">\r\n <FindingList\r\n findings={findings}\r\n filters={filters}\r\n onFilterChange={onFilterChange}\r\n onFindingClick={handleFindingClick}\r\n selectedIds={selectedIds}\r\n onSelectionChange={onExportSelected ? setSelectedIds : undefined}\r\n />\r\n </TabsContent>\r\n\r\n <TabsContent value=\"progress\" className=\"mt-4 space-y-4\">\r\n <Card className=\"p-6\">\r\n <h3 className=\"text-lg font-medium text-foreground mb-4\">\r\n {formatMessage({ id: 'issues.discovery.severityBreakdown' })}\r\n </h3>\r\n <div className=\"space-y-3\">\r\n {Object.entries(severityCounts).map(([severity, count]) => (\r\n <div key={severity} className=\"flex items-center justify-between\">\r\n <Badge\r\n variant={severity === 'critical' || severity === 'high' ? 'destructive' : severity === 'medium' ? 'warning' : 'secondary'}\r\n >\r\n {formatMessage({ id: `issues.discovery.findings.severity.${severity}` })}\r\n </Badge>\r\n <span className=\"font-medium\">{count}</span>\r\n </div>\r\n ))}\r\n </div>\r\n </Card>\r\n\r\n {Object.keys(typeCounts).length > 0 && (\r\n <Card className=\"p-6\">\r\n <h3 className=\"text-lg font-medium text-foreground mb-4\">\r\n {formatMessage({ id: 'issues.discovery.typeBreakdown' })}\r\n </h3>\r\n <div className=\"space-y-3\">\r\n {Object.entries(typeCounts)\r\n .sort(([, a], [, b]) => b - a)\r\n .map(([type, count]) => (\r\n <div key={type} className=\"flex items-center justify-between\">\r\n <Badge variant=\"outline\">{type}</Badge>\r\n <span className=\"font-medium\">{count}</span>\r\n </div>\r\n ))}\r\n </div>\r\n </Card>\r\n )}\r\n </TabsContent>\r\n\r\n <TabsContent value=\"info\" className=\"mt-4\">\r\n <Card className=\"p-6 space-y-4\">\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.sessionId' })}\r\n </h3>\r\n <p className=\"text-foreground font-mono text-sm\">{session.id}</p>\r\n </div>\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.name' })}\r\n </h3>\r\n <p className=\"text-foreground\">{session.name}</p>\r\n </div>\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.status' })}\r\n </h3>\r\n <Badge\r\n variant={session.status === 'completed' ? 'success' : session.status === 'failed' ? 'destructive' : 'warning'}\r\n >\r\n {formatMessage({ id: `issues.discovery.session.status.${session.status}` })}\r\n </Badge>\r\n </div>\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.progress' })}\r\n </h3>\r\n <p className=\"text-foreground\">{session.progress}%</p>\r\n </div>\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.findingsCount' })}\r\n </h3>\r\n <p className=\"text-foreground\">{session.findings_count}</p>\r\n </div>\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.createdAt' })}\r\n </h3>\r\n <p className=\"text-foreground\">{formatDate(session.created_at)}</p>\r\n </div>\r\n {session.completed_at && (\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.completedAt' })}\r\n </h3>\r\n <p className=\"text-foreground\">{formatDate(session.completed_at)}</p>\r\n </div>\r\n )}\r\n </Card>\r\n </TabsContent>\r\n </Tabs>\r\n\r\n {/* Issue Detail Drawer */}\r\n <IssueDrawer\r\n issue={selectedIssue}\r\n isOpen={selectedIssue !== null}\r\n onClose={handleCloseIssueDrawer}\r\n />\r\n\r\n {/* Finding Detail Drawer */}\r\n <FindingDrawer\r\n finding={selectedFinding}\r\n isOpen={selectedFinding !== null}\r\n onClose={handleCloseFindingDrawer}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport default DiscoveryDetail;\r\n","// ========================================\r\n// Discovery Panel\r\n// ========================================\r\n// Content panel for Discovery tab in IssueHub\r\n\r\nimport { useIntl } from 'react-intl';\r\nimport { Radar, AlertCircle, Loader2 } from 'lucide-react';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { useIssueDiscovery, useIssues } from '@/hooks/useIssues';\r\nimport { DiscoveryCard } from '@/components/issue/discovery/DiscoveryCard';\r\nimport { DiscoveryDetail } from '@/components/issue/discovery/DiscoveryDetail';\r\n\r\n// ========== Main Panel Component ==========\r\n\r\nexport function DiscoveryPanel() {\r\n const { formatMessage } = useIntl();\r\n\r\n const {\r\n sessions,\r\n activeSession,\r\n findings,\r\n isLoadingSessions,\r\n isLoadingFindings,\r\n error,\r\n filters,\r\n setFilters,\r\n selectSession,\r\n exportFindings,\r\n exportSelectedFindings,\r\n isExporting,\r\n } = useIssueDiscovery({ refetchInterval: 3000 });\r\n\r\n // Fetch issues to find related ones when clicking findings\r\n const { issues } = useIssues({\r\n // Don't apply filters to get all issues for matching\r\n filter: undefined\r\n });\r\n\r\n if (error) {\r\n return (\r\n <Card className=\"p-8 text-center\">\r\n <AlertCircle className=\"w-12 h-12 mx-auto text-destructive\" />\r\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'common.error' })}\r\n </h3>\r\n <p className=\"mt-2 text-muted-foreground\">{error.message}</p>\r\n </Card>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n {/* Stats Cards */}\r\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <Radar className=\"w-5 h-5 text-primary\" />\r\n <span className=\"text-2xl font-bold\">{sessions.length}</span>\r\n </div>\r\n <p className=\"text-sm text-muted-foreground mt-1\">\r\n {formatMessage({ id: 'issues.discovery.totalSessions' })}\r\n </p>\r\n </Card>\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <Badge variant=\"success\" className=\"w-5 h-5 flex items-center justify-center p-0\">\r\n {sessions.filter(s => s.status === 'completed').length}\r\n </Badge>\r\n <span className=\"text-2xl font-bold\">{sessions.filter(s => s.status === 'completed').length}</span>\r\n </div>\r\n <p className=\"text-sm text-muted-foreground mt-1\">\r\n {formatMessage({ id: 'issues.discovery.completedSessions' })}\r\n </p>\r\n </Card>\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <Badge variant=\"warning\" className=\"w-5 h-5 flex items-center justify-center p-0\">\r\n {sessions.filter(s => s.status === 'running').length}\r\n </Badge>\r\n <span className=\"text-2xl font-bold\">{sessions.filter(s => s.status === 'running').length}</span>\r\n </div>\r\n <p className=\"text-sm text-muted-foreground mt-1\">\r\n {formatMessage({ id: 'issues.discovery.runningSessions' })}\r\n </p>\r\n </Card>\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-2xl font-bold\">\r\n {sessions.reduce((sum, s) => sum + s.findings_count, 0)}\r\n </span>\r\n </div>\r\n <p className=\"text-sm text-muted-foreground mt-1\">\r\n {formatMessage({ id: 'issues.discovery.totalFindings' })}\r\n </p>\r\n </Card>\r\n </div>\r\n\r\n {/* Main Content: Split Pane */}\r\n <div className=\"grid md:grid-cols-3 gap-6\">\r\n {/* Left: Session List */}\r\n <div className=\"md:col-span-1 space-y-4\">\r\n <h2 className=\"text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.discovery.sessionList' })}\r\n </h2>\r\n\r\n {isLoadingSessions ? (\r\n <div className=\"space-y-3\">\r\n {[1, 2, 3].map((i) => (\r\n <div key={i} className=\"h-32 bg-muted animate-pulse rounded-lg\" />\r\n ))}\r\n </div>\r\n ) : sessions.length === 0 ? (\r\n <Card className=\"p-8 text-center\">\r\n <Radar className=\"w-12 h-12 mx-auto text-muted-foreground/50\" />\r\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.discovery.noSessions' })}\r\n </h3>\r\n <p className=\"mt-2 text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.noSessionsDescription' })}\r\n </p>\r\n </Card>\r\n ) : (\r\n <div className=\"space-y-3\">\r\n {sessions.map((session) => (\r\n <DiscoveryCard\r\n key={session.id}\r\n session={session}\r\n isActive={activeSession?.id === session.id}\r\n onClick={() => selectSession(session.id)}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Right: Findings Detail */}\r\n <div className=\"md:col-span-2 space-y-4\">\r\n <h2 className=\"text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.discovery.findingsDetail' })}\r\n </h2>\r\n\r\n {isLoadingFindings ? (\r\n <div className=\"flex items-center justify-center p-8\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-muted-foreground\" />\r\n </div>\r\n ) : (\r\n <DiscoveryDetail\r\n sessionId={activeSession?.id || ''}\r\n session={activeSession}\r\n findings={findings}\r\n filters={filters}\r\n onFilterChange={setFilters}\r\n onExport={exportFindings}\r\n onExportSelected={exportSelectedFindings}\r\n isExporting={isExporting}\r\n issues={issues}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","// ========================================\r\n// Issue Hub Page\r\n// ========================================\r\n// Unified page for issues, queue, and discovery with tab navigation\r\n\r\nimport { useState, useCallback, useEffect } from 'react';\r\nimport { useSearchParams } from 'react-router-dom';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n Plus,\r\n RefreshCw,\r\n Github,\r\n Loader2,\r\n Maximize2,\r\n Minimize2,\r\n} from 'lucide-react';\r\nimport { IssueHubHeader } from '@/components/issue/hub/IssueHubHeader';\r\nimport { IssueHubTabs, type IssueTab } from '@/components/issue/hub/IssueHubTabs';\r\n\r\nconst VALID_TABS: IssueTab[] = ['issues', 'queue', 'discovery'];\r\nimport { IssuesPanel } from '@/components/issue/hub/IssuesPanel';\r\nimport { QueuePanel } from '@/components/issue/hub/QueuePanel';\r\nimport { DiscoveryPanel } from '@/components/issue/hub/DiscoveryPanel';\r\n// ExecutionPanel hidden - import { ExecutionPanel } from '@/components/issue/hub/ExecutionPanel';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Input } from '@/components/ui/Input';\r\nimport { Label } from '@/components/ui/Label';\r\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/Dialog';\r\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/Select';\r\nimport { useIssues, useIssueMutations, useIssueQueue, useNotifications } from '@/hooks';\r\nimport { pullIssuesFromGitHub, uploadAttachments } from '@/lib/api';\r\nimport type { Issue } from '@/lib/api';\r\nimport { cn } from '@/lib/utils';\r\nimport { useAppStore, selectIsImmersiveMode } from '@/stores/appStore';\r\n\r\n// Issue types\r\ntype IssueType = 'bug' | 'feature' | 'improvement' | 'other';\r\n\r\nconst ISSUE_TYPE_CONFIG: Record<IssueType, { label: string; description: string; color: string }> = {\r\n bug: { label: 'Bug', description: '功能异常或错误', color: 'bg-red-500' },\r\n feature: { label: 'Feature', description: '新功能需求', color: 'bg-green-500' },\r\n improvement: { label: 'Improvement', description: '现有功能改进', color: 'bg-blue-500' },\r\n other: { label: 'Other', description: '其他类型', color: 'bg-gray-500' },\r\n};\r\n\r\nfunction NewIssueDialog({ open, onOpenChange, onSubmit, isCreating }: {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n onSubmit: (data: { title: string; context?: string; priority?: Issue['priority']; type?: IssueType; attachments?: File[] }) => void;\r\n isCreating: boolean;\r\n}) {\r\n const { formatMessage } = useIntl();\r\n const [title, setTitle] = useState('');\r\n const [context, setContext] = useState('');\r\n const [priority, setPriority] = useState<Issue['priority']>('medium');\r\n const [type, setType] = useState<IssueType>('other');\r\n const [attachments, setAttachments] = useState<File[]>([]);\r\n const [dragOver, setDragOver] = useState(false);\r\n\r\n const handleFileSelect = (files: FileList | null) => {\r\n if (!files) return;\r\n const validFiles = Array.from(files).filter(file => {\r\n const validTypes = ['image/', 'text/', 'application/pdf', '.md', '.txt', '.json'];\r\n return validTypes.some(t => file.type.includes(t) || file.name.endsWith(t));\r\n });\r\n setAttachments(prev => [...prev, ...validFiles]);\r\n };\r\n\r\n const removeAttachment = (index: number) => {\r\n setAttachments(prev => prev.filter((_, i) => i !== index));\r\n };\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (title.trim()) {\r\n onSubmit({ \r\n title: title.trim(), \r\n context: context.trim() || undefined, \r\n priority, \r\n type,\r\n attachments: attachments.length > 0 ? attachments : undefined \r\n });\r\n // Reset\r\n setTitle('');\r\n setContext('');\r\n setPriority('medium');\r\n setType('other');\r\n setAttachments([]);\r\n onOpenChange(false);\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n setDragOver(true);\r\n };\r\n\r\n const handleDragLeave = () => {\r\n setDragOver(false);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n setDragOver(false);\r\n handleFileSelect(e.dataTransfer.files);\r\n };\r\n\r\n return (\r\n <Dialog open={open} onOpenChange={onOpenChange}>\r\n <DialogContent className=\"sm:max-w-[600px] max-h-[90vh] overflow-y-auto\">\r\n <DialogHeader>\r\n <DialogTitle>{formatMessage({ id: 'issues.createDialog.title' })}</DialogTitle>\r\n </DialogHeader>\r\n \r\n <form onSubmit={handleSubmit} className=\"space-y-5 mt-4\">\r\n {/* 标题 */}\r\n <div>\r\n <Label className=\"text-sm font-medium\">\r\n {formatMessage({ id: 'issues.createDialog.labels.title' })}\r\n <span className=\"text-destructive ml-1\">*</span>\r\n </Label>\r\n <Input\r\n value={title}\r\n onChange={(e) => setTitle(e.target.value)}\r\n placeholder={formatMessage({ id: 'issues.createDialog.placeholders.title' })}\r\n className=\"mt-1.5\"\r\n required\r\n autoFocus\r\n />\r\n <p className=\"text-xs text-muted-foreground mt-1\">{title.length}/200</p>\r\n </div>\r\n\r\n {/* 描述 */}\r\n <div>\r\n <Label className=\"text-sm font-medium\">\r\n {formatMessage({ id: 'issues.createDialog.labels.context' })}\r\n </Label>\r\n <textarea\r\n value={context}\r\n onChange={(e) => setContext(e.target.value)}\r\n placeholder={formatMessage({ id: 'issues.createDialog.placeholders.context' })}\r\n className=\"mt-1.5 w-full min-h-[120px] p-3 bg-background border border-input rounded-md text-sm resize-y focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent\"\r\n />\r\n <p className=\"text-xs text-muted-foreground mt-1\">{context.length}/10000</p>\r\n </div>\r\n\r\n {/* 类型选择 */}\r\n <div>\r\n <Label className=\"text-sm font-medium\">\r\n {formatMessage({ id: 'issues.createDialog.labels.type', defaultMessage: '类型' })}\r\n </Label>\r\n <div className=\"grid grid-cols-4 gap-2 mt-1.5\">\r\n {(Object.keys(ISSUE_TYPE_CONFIG) as IssueType[]).map((t) => (\r\n <button\r\n key={t}\r\n type=\"button\"\r\n onClick={() => setType(t)}\r\n className={cn(\r\n 'px-3 py-2 rounded-md border text-sm transition-all',\r\n type === t\r\n ? 'border-primary bg-primary/10 ring-1 ring-primary'\r\n : 'border-border hover:border-primary/50 hover:bg-muted/50'\r\n )}\r\n >\r\n <div className=\"flex items-center justify-center gap-1.5\">\r\n <span className={cn('w-2 h-2 rounded-full', ISSUE_TYPE_CONFIG[t].color)} />\r\n <span>{ISSUE_TYPE_CONFIG[t].label}</span>\r\n </div>\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* 优先级 */}\r\n <div>\r\n <Label className=\"text-sm font-medium\">\r\n {formatMessage({ id: 'issues.createDialog.labels.priority' })}\r\n </Label>\r\n <Select value={priority} onValueChange={(v) => setPriority(v as Issue['priority'])}>\r\n <SelectTrigger className=\"mt-1.5\">\r\n <SelectValue />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"low\">{formatMessage({ id: 'issues.priority.low' })}</SelectItem>\r\n <SelectItem value=\"medium\">{formatMessage({ id: 'issues.priority.medium' })}</SelectItem>\r\n <SelectItem value=\"high\">{formatMessage({ id: 'issues.priority.high' })}</SelectItem>\r\n <SelectItem value=\"critical\">{formatMessage({ id: 'issues.priority.critical' })}</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n\r\n {/* 文件/图片上传 */}\r\n <div>\r\n <Label className=\"text-sm font-medium\">\r\n {formatMessage({ id: 'issues.createDialog.labels.attachments', defaultMessage: '附件' })}\r\n </Label>\r\n <div\r\n className={cn(\r\n 'mt-1.5 border-2 border-dashed rounded-lg p-4 transition-colors cursor-pointer',\r\n dragOver ? 'border-primary bg-primary/5' : 'border-border hover:border-primary/50'\r\n )}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n onClick={() => {\r\n const input = document.createElement('input');\r\n input.type = 'file';\r\n input.multiple = true;\r\n input.accept = 'image/*,.md,.txt,.json,.pdf';\r\n input.onchange = (e) => handleFileSelect((e.target as HTMLInputElement).files);\r\n input.click();\r\n }}\r\n >\r\n <div className=\"flex flex-col items-center justify-center text-muted-foreground py-2\">\r\n <svg className=\"w-8 h-8 mb-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" />\r\n </svg>\r\n <p className=\"text-sm\">拖拽文件到此处,或点击上传</p>\r\n <p className=\"text-xs mt-1\">支持图片、Markdown、文本、PDF</p>\r\n </div>\r\n </div>\r\n\r\n {/* 已上传文件列表 */}\r\n {attachments.length > 0 && (\r\n <div className=\"mt-2 space-y-1.5\">\r\n {attachments.map((file, index) => (\r\n <div key={index} className=\"flex items-center justify-between p-2 bg-muted/50 rounded-md\">\r\n <div className=\"flex items-center gap-2 min-w-0\">\r\n {file.type.startsWith('image/') ? (\r\n <img \r\n src={URL.createObjectURL(file)} \r\n alt={file.name}\r\n className=\"w-8 h-8 object-cover rounded\"\r\n />\r\n ) : (\r\n <svg className=\"w-8 h-8 text-muted-foreground\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\r\n </svg>\r\n )}\r\n <span className=\"text-sm truncate\">{file.name}</span>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {(file.size / 1024).toFixed(1)}KB\r\n </span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n onClick={(e) => { e.stopPropagation(); removeAttachment(index); }}\r\n className=\"text-muted-foreground hover:text-destructive transition-colors\"\r\n >\r\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* 按钮 */}\r\n <div className=\"flex justify-end gap-2 pt-2\">\r\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\r\n {formatMessage({ id: 'issues.createDialog.buttons.cancel' })}\r\n </Button>\r\n <Button type=\"submit\" disabled={isCreating || !title.trim()}>\r\n {isCreating ? (\r\n <>\r\n <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />\r\n {formatMessage({ id: 'issues.createDialog.buttons.creating' })}\r\n </>\r\n ) : (\r\n <>\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.createDialog.buttons.create' })}\r\n </>\r\n )}\r\n </Button>\r\n </div>\r\n </form>\r\n </DialogContent>\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport function IssueHubPage() {\r\n const { formatMessage } = useIntl();\r\n const [searchParams, setSearchParams] = useSearchParams();\r\n const rawTab = searchParams.get('tab') as IssueTab;\r\n const currentTab = VALID_TABS.includes(rawTab) ? rawTab : 'issues';\r\n const { error: showError, success } = useNotifications();\r\n\r\n // Redirect invalid tabs to 'issues'\r\n useEffect(() => {\r\n if (!VALID_TABS.includes(rawTab)) {\r\n setSearchParams({ tab: 'issues' });\r\n }\r\n }, [rawTab, setSearchParams]);\r\n\r\n const [isNewIssueOpen, setIsNewIssueOpen] = useState(false);\r\n const [isGithubSyncing, setIsGithubSyncing] = useState(false);\r\n const [isUploadingAttachments, setIsUploadingAttachments] = useState(false);\r\n\r\n // Immersive mode (fullscreen) - hide app chrome\r\n const isImmersiveMode = useAppStore(selectIsImmersiveMode);\r\n const toggleImmersiveMode = useAppStore((s) => s.toggleImmersiveMode);\r\n\r\n // Issues data\r\n const { refetch: refetchIssues, isFetching: isFetchingIssues } = useIssues();\r\n // Queue data\r\n const { refetch: refetchQueue, isFetching: isFetchingQueue } = useIssueQueue();\r\n\r\n const { createIssue, isCreating } = useIssueMutations();\r\n\r\n const setCurrentTab = (tab: IssueTab) => {\r\n setSearchParams({ tab });\r\n };\r\n\r\n // Issues tab handlers\r\n const handleIssuesRefresh = useCallback(() => {\r\n refetchIssues();\r\n }, [refetchIssues]);\r\n\r\n const handleGithubSync = useCallback(async () => {\r\n setIsGithubSyncing(true);\r\n try {\r\n const result = await pullIssuesFromGitHub({ state: 'open', limit: 100 });\r\n success(formatMessage({ id: 'issues.notifications.githubSyncSuccess' }, { count: result.total }));\r\n await refetchIssues();\r\n } catch (error) {\r\n showError(formatMessage({ id: 'issues.notifications.githubSyncFailed' }), error instanceof Error ? error.message : String(error));\r\n console.error('GitHub sync failed:', error);\r\n } finally {\r\n setIsGithubSyncing(false);\r\n }\r\n }, [refetchIssues, success, showError, formatMessage]);\r\n\r\n const handleCreateIssue = async (data: { title: string; context?: string; priority?: Issue['priority']; type?: IssueType; attachments?: File[] }) => {\r\n try {\r\n // Create the issue first\r\n const newIssue = await createIssue({\r\n title: data.title,\r\n context: data.context,\r\n priority: data.priority,\r\n });\r\n success(formatMessage({ id: 'issues.notifications.createSuccess' }), newIssue.id);\r\n\r\n // Upload attachments if any\r\n if (data.attachments && data.attachments.length > 0 && newIssue.id) {\r\n setIsUploadingAttachments(true);\r\n try {\r\n await uploadAttachments(newIssue.id, data.attachments);\r\n success(formatMessage({ id: 'issues.notifications.attachmentSuccess' }));\r\n } catch (uploadError) {\r\n showError(formatMessage({ id: 'issues.notifications.attachmentFailed' }), uploadError instanceof Error ? uploadError.message : String(uploadError));\r\n console.error('Failed to upload attachments:', uploadError);\r\n // Don't fail the whole operation, just log the error\r\n } finally {\r\n setIsUploadingAttachments(false);\r\n }\r\n }\r\n\r\n setIsNewIssueOpen(false);\r\n } catch (error) {\r\n showError(formatMessage({ id: 'issues.notifications.createFailed' }), error instanceof Error ? error.message : String(error));\r\n console.error('Failed to create issue:', error);\r\n }\r\n };\r\n\r\n // Queue tab handler\r\n const handleQueueRefresh = useCallback(() => {\r\n refetchQueue();\r\n }, [refetchQueue]);\r\n\r\n // Render action buttons based on current tab\r\n const renderActionButtons = () => {\r\n switch (currentTab) {\r\n case 'issues':\r\n return (\r\n <>\r\n <Button variant=\"outline\" onClick={handleIssuesRefresh} disabled={isFetchingIssues}>\r\n <RefreshCw className={cn('w-4 h-4 mr-2', isFetchingIssues && 'animate-spin')} />\r\n {formatMessage({ id: 'common.actions.refresh' })}\r\n </Button>\r\n <Button variant=\"outline\" onClick={handleGithubSync} disabled={isGithubSyncing}>\r\n <Github className={cn('w-4 h-4 mr-2', isGithubSyncing && 'animate-spin')} />\r\n {formatMessage({ id: 'issues.actions.github' })}\r\n </Button>\r\n <Button onClick={() => setIsNewIssueOpen(true)}>\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.actions.create' })}\r\n </Button>\r\n </>\r\n );\r\n\r\n case 'queue':\r\n return (\r\n <>\r\n <Button variant=\"outline\" onClick={handleQueueRefresh} disabled={isFetchingQueue}>\r\n <RefreshCw className={cn('w-4 h-4 mr-2', isFetchingQueue && 'animate-spin')} />\r\n {formatMessage({ id: 'common.actions.refresh' })}\r\n </Button>\r\n </>\r\n );\r\n\r\n case 'discovery':\r\n return null; // Discovery panel has its own controls\r\n\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"space-y-6\", isImmersiveMode && \"h-screen overflow-hidden\")}>\r\n {/* Header and action buttons on same row */}\r\n <div className=\"flex items-center justify-between\">\r\n <IssueHubHeader currentTab={currentTab} />\r\n\r\n <div className=\"flex items-center gap-2\">\r\n {/* Action buttons - dynamic based on current tab */}\r\n {renderActionButtons()}\r\n\r\n {/* Fullscreen toggle */}\r\n <button\r\n onClick={toggleImmersiveMode}\r\n className={cn(\r\n 'p-2 rounded-md transition-colors',\r\n isImmersiveMode\r\n ? 'bg-primary/10 text-primary'\r\n : 'text-muted-foreground hover:text-foreground hover:bg-muted'\r\n )}\r\n title={isImmersiveMode\r\n ? formatMessage({ id: 'issueHub.exitFullscreen', defaultMessage: 'Exit Fullscreen' })\r\n : formatMessage({ id: 'issueHub.fullscreen', defaultMessage: 'Fullscreen' })\r\n }\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 <IssueHubTabs currentTab={currentTab} onTabChange={setCurrentTab} />\r\n {currentTab === 'issues' && <IssuesPanel onCreateIssue={() => setIsNewIssueOpen(true)} />}\r\n {currentTab === 'queue' && <QueuePanel />}\r\n {currentTab === 'discovery' && <DiscoveryPanel />}\r\n\r\n <NewIssueDialog open={isNewIssueOpen} onOpenChange={setIsNewIssueOpen} onSubmit={handleCreateIssue} isCreating={isCreating || isUploadingAttachments} />\r\n </div>\r\n );\r\n}\r\n\r\nexport default IssueHubPage;\r\n"],"names":["GitMerge","createLucideIcon","Github","ListTodo","Merge","Radar","useCliSessionCore","options","autoSelectLast","resumeKey","preferredShell","createSessionDefaults","projectPath","useWorkflowStore","selectProjectPath","sessionsByKey","useCliSessionStore","s","setSessions","upsertSession","sessions","useMemo","a","b","selectedSessionKey","setSelectedSessionKey","useState","isLoading","setIsLoading","error","setError","clearError","useCallback","refreshSessions","r","fetchCliSessions","e","useEffect","_a","ensureSession","created","createCliSession","handleCreateSession","_extends","n","t","IssueHubHeader","currentTab","formatMessage","useIntl","tabConfig","jsx","AlertCircle","LayoutGrid","config","jsxs","IssueHubTabs","onTabChange","tabs","tab","Button","cn","priorityVariantConfig","AlertTriangle","Info","priorityLabelKeys","statusVariantConfig","Clock","Loader2","CheckCircle","XCircle","statusLabelKeys","PriorityBadge","priority","Badge","Icon","label","StatusBadge","status","IssueCard","issue","onEdit","onDelete","onClick","onStatusChange","className","compact","showActions","draggableProps","dragHandleProps","innerRef","isMenuOpen","setIsMenuOpen","handleClick","handleEdit","handleDelete","Card","DropdownMenu","DropdownMenuTrigger","MoreVertical","DropdownMenuContent","DropdownMenuItem","Edit","Trash2","ExternalLink","statusConfig","Circle","priorityConfig","IssueDrawer","isOpen","onClose","initialTab","openTerminal","useOpenTerminalPanel","activeTab","setActiveTab","CLI_TOOLS","selectedTool","setSelectedTool","selectedMode","setSelectedMode","isLaunching","setIsLaunching","handleEsc","handleLaunchSession","err","Fragment","X","Tabs","v","TabsList","TabsTrigger","FileText","History","Terminal","Hash","TabsContent","index","Tag","solution","m","Play","formatProdErrorMessage","code","$$observable","symbol_observable_default","randomString","ActionTypes","actionTypes_default","isPlainObject","obj","proto","createStore","reducer","preloadedState","enhancer","currentReducer","currentState","currentListeners","nextListeners","listenerIdCounter","isDispatching","ensureCanMutateNextListeners","listener","key","getState","subscribe","isSubscribed","listenerId","dispatch","action","replaceReducer","nextReducer","observable","outerSubscribe","observer","observeState","observerAsObserver","bindActionCreator","actionCreator","args","bindActionCreators","actionCreators","boundActionCreators","compose","funcs","arg","applyMiddleware","middlewares","createStore2","store","middlewareAPI","chain","middleware","React","require$$0","is","x","y","objectIs","useSyncExternalStore","useRef","useDebugValue","useSyncExternalStoreWithSelector_production","getSnapshot","getServerSnapshot","selector","isEqual","instRef","inst","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","value","withSelectorModule","IS_REACT_19","React.version","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","ForwardRef","Memo","typeOf","object","$$typeof","isMemo","pureFinalPropsSelectorFactory","mapStateToProps","mapDispatchToProps","mergeProps","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","state","ownProps","stateProps","dispatchProps","mergedProps","handleFirstCall","firstState","firstOwnProps","handleNewPropsAndNewState","handleNewProps","handleNewState","nextStateProps","statePropsChanged","handleSubsequentCalls","nextState","nextOwnProps","propsChanged","stateChanged","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","wrapMapToPropsConstant","getConstant","constant","constantSelector","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","methodName","displayName","proxy","stateOrDispatch","props","createInvalidArgFactory","name","mapDispatchToPropsFactory","mapStateToPropsFactory","defaultMergeProps","wrapMergePropsFunc","areMergedPropsEqual","hasRunOnce","nextMergedProps","mergePropsFactory","defaultNoopBatch","callback","createListenerCollection","first","last","listeners","nullListeners","createSubscription","parentSub","unsubscribe","subscriptionsAmount","selfSubscribed","addNestedSub","trySubscribe","cleanupListener","removed","tryUnsubscribe","notifyNestedSubs","handleChangeWrapper","subscription","trySubscribeSelf","tryUnsubscribeSelf","canUseDOM","isDOM","isRunningInReactNative","isReactNative","getUseIsomorphicLayoutEffect","React.useLayoutEffect","React.useEffect","useIsomorphicLayoutEffect","shallowEqual","objA","objB","keysA","keysB","REACT_STATICS","KNOWN_STATICS","FORWARD_REF_STATICS","MEMO_STATICS","TYPE_STATICS","getStatics","component","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","inheritedComponent","keys","targetStatics","sourceStatics","i","descriptor","ContextKey","gT","getContext","React.createContext","contextMap","realContext","ReactReduxContext","NO_SUBSCRIPTION_ARRAY","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","dependencies","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","childPropsFromStoreUpdate","subscribeUpdates","shouldHandleStateChanges","childPropsSelector","isMounted","additionalSubscribeListener","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","newChildProps","strictEqual","connect","pure","forwardRef","context","Context","WrappedComponent","wrappedComponentName","selectorFactoryOptions","ConnectFunction","propsContext","reactReduxForwardedRef","React.useMemo","reactReduxForwardedRef2","wrapperProps2","ContextToUse","ResultContext","contextValue","React.useContext","didStoreComeFromProps","didStoreComeFromContext","getServerState","subscription2","notifyNestedSubs2","overriddenContextValue","React.useRef","latestSubscriptionCallbackError","actualChildPropsSelector","subscribeForReact","reactListener","actualChildProps","React.useSyncExternalStore","renderedWrappedComponent","React.createElement","Connect","React.memo","forwarded","React.forwardRef","ref","connect_default","Provider","providerProps","children","serverState","previousState","Provider_default","getRect","_ref","top","right","bottom","left","width","height","rect","expand","target","expandBy","shrink","shrinkBy","shift","shiftBy","noSpacing","createBox","_ref2","borderBox","_ref2$margin","margin","_ref2$border","border","_ref2$padding","padding","marginBox","paddingBox","contentBox","parse","raw","suffix","result","invariant","getWindowScroll","offset","original","change","shifted","withScroll","scroll","calculateBox","styles","getBox","el","rafSchd","fn","lastArgs","frameId","wrapperFn","_len","_key","log","type","message","noop$2","getOptions","shared","fromBinding","bindEvents","bindings","sharedOptions","unbindings","binding","unbind","prefix$1","RbdInvariant","condition","ErrorBoundary","event","callbacks","dragHandleUsageInstructions","position","onDragStart","start","withLocation","source","destination","isInHomeList","startPosition","endPosition","withCombine","id","combine","onDragUpdate","update","location","returnedToStart","onDragEnd","preset","isEqual$2","second","areInputsEqual","newInputs","lastInputs","getResult","inputs","initial","isFirstRun","committed","cache","origin","add","point1","point2","subtract","isEqual$1","negate","point","patch","line","otherValue","distance","closest$1","points","apply","executeClip","frame","subject","offsetByPosition","spacing","getCorners","scroll$1","increase","axis","withPlaceholder","clip","getSubject","page","scrolled","increased","clipped","scrollDroppable","droppable","newScroll","scrollable","scrollDiff","scrollDisplacement","memoizeOne","resultFn","memoized","newArgs","lastResult","toDroppableMap","droppables","previous","current","toDraggableMap","draggables","toDroppableList","toDraggableList","getDraggablesInsideDroppable","droppableId","draggable","tryGetDestination","impact","tryGetCombine","removeDraggableFromList","remove","list","item","moveToNextCombine","isMovingForward","insideDestination","previousImpact","getImpact","at","all","closestId","withoutDraggable","indexOfClosest","d","proposedIndex","before","isHomeOf","noDisplacedBy","emptyGroups","noImpact","isWithin","lowerBound","upperBound","isPartiallyVisibleThroughFrame","isWithinVertical","isWithinHorizontal","isPartiallyVisibleVertically","isPartiallyVisibleHorizontally","isBiggerVertically","isBiggerHorizontally","isTotallyVisibleThroughFrame","vertical","horizontal","isTotallyVisibleThroughFrameOnAxis","getDroppableDisplaced","displacement","isVisibleInDroppable","isVisibleThroughFrameFn","isVisibleInViewport","viewport","isVisible$1","toBeDisplaced","withDroppableDisplacement","displacedTarget","isPartiallyVisible","isTotallyVisible","isTotallyVisibleOnAxis","getShouldAnimate","forceShouldAnimate","invisible","visible","getTarget","displacedBy","getDisplacementGroups","afterDragging","groups","shouldAnimate","getIndexOfLastItem","indexOfLastItem","goAtEnd","inHomeList","newIndex","calculateReorderImpact","match","withoutDragging","sliceFrom","impacted","didStartAfterCritical","draggableId","afterCritical","fromCombine","combineId","combineWithIndex","fromReorder","currentIndex","firstIndex","lastIndex","moveToNextIndex","wasAt","getCombinedItemDisplacement","displaced","combineWith","isDisplaced","whenCombining","center","displaceBy","distanceFromStartToBorderBoxCenter","box","distanceFromEndToBorderBoxCenter","getCrossAxisBorderBoxCenter","isMoving","goAfter","moveRelativeTo","goBefore","goIntoStart","moveInto","whenReordering","draggablePage","closestAfter","closest","withDisplacement","getResultWithoutDroppableDisplacement","getPageBorderBoxCenterFromImpact","withoutDisplacement","scrollViewport","diff","getDraggables$1","ids","tryGetVisible","speculativelyIncrease","maxScrollChange","scrolledViewport","scrolledDroppable","withViewportScroll","withDroppableScroll","withViewportDisplacement","getClientFromPageBorderBoxCenter","pageBorderBoxCenter","withoutPageScrollChange","isTotallyVisibleInNewLocation","newPageBorderBoxCenter","onlyOnMainAxis","changeNeeded","moveToNextPlace","previousPageBorderBoxCenter","previousClientSelection","cautious","getKnownActive","getBestCrossAxisDroppable","active","isBetweenSourceClipped","candidates","activeOfTarget","isBetweenDestinationClipped","array","contains","getCurrentPageBorderBoxCenter","getCurrentPageBorderBox","getClosestDraggable","distanceToA","distanceToB","getDisplacedBy","getRequiredGrowthForPlaceholder","placeholderSize","availableSpace","needsToGrowBy","sum","dimension","withMaxScroll","max","addPlaceholder","requiredGrowth","added","maxScroll","newFrame","removePlaceholder","oldMaxScroll","moveToNewDroppable","proposed","proposedPageBorderBoxCenter","isGoingBeforeTarget","relativeTo","moveCrossAxis","isOver","whatIsDraggedOver","getDroppableOver$1","moveInDirection","isActuallyOver","isMainAxisMovementAllowed","home","direction","isMovingOnMainAxis","isMovementAllowed","isPositionInFrame","getHasOverlap","getFurthestAway","pageBorderBox","startCenter","sorted","candidate","getDroppableOver","childCenter","crossAxisStart","crossAxisEnd","isContained","isStartContained","isEndContained","offsetRectByPosition","area","getIsDisplaced","atIndex","getReorderImpact","targetRect","targetStart","targetEnd","child","didStartAfterCritical$1","combineThresholdDivisor","getCombineImpact","childRect","threshold","getDragImpact","pageOffset","destinationId","pageBorderBoxWithDroppableScroll","patchDroppableMap","updated","clearUnusedPlaceholder","now","lastDroppable","recomputePlaceholders","cleaned","patched","forcedClientSelection","forcedDimensions","forcedViewport","forcedImpact","scrollJumpRequest","dimensions","clientSelection","client","newImpact","withUpdatedPlaceholders","getDraggables","recompute","getClientBorderBoxCenter","refreshSnap","needsVisibilityCheck","getHomeLocation","getLiftEffect","insideHome","rawIndex","effected","patchDimensionMap","offsetDraggable","offset$1","initialWindowScroll","getFrame","adjustAdditionsForScrollChanges","additions","updatedDroppables","windowScrollChange","modified","droppableScrollChange","totalChange","publishWhileDraggingInVirtual","published","withScrollChange","existing","updatedAdditions","wasOverId","wasOver","onLiftImpact","draggingState","isSnapping","postDroppableChange","isEnabledChanging","removeScrollJumpRequest","idle$2","critical","movementMode","isWindowScrollAllowed","isEnabled","isCombineEnabled","reason","completed","dropDuration","newHomeClientOffset","guard","predicate","beforeInitialCapture","lift$1","initialPublish","publishWhileDragging","collectionStarting","updateDroppableScroll","updateDroppableIsEnabled","updateDroppableIsCombineEnabled","move","moveByWindowScroll","updateViewportMaxScroll","moveUp","moveDown","moveRight","moveLeft","flush","animateDrop","completeDrop","drop","dropPending","dropAnimationFinished","lift","next","request","marshal","style","curves","timings","outOfTheWayTiming","transitions","duration","timing","moveTo","transforms","isCombining","translate","minDropTime","maxDropTime","dropTimeRange","maxDropTimeAtDistance","cancelDropModifier","getDropDuration","distance$1","percentage","withDuration","getNewHomeClientOffset","newClientCenter","getDropImpact","lastImpact","dropMiddleware","didDropInsideDroppable","getWindowScrollBinding","getScrollListener","onWindowScroll","updateScroll","scheduled","isActive","stop","shouldStop$1","scrollListener","getExpiringAnnounce","announce","wasCalled","isExpired","timeoutId","getAsyncMarshal","entries","execute","timerId","entry","shallow","areLocationsEqual","isCombineEqual","isCriticalEqual","isDraggableEqual","isDroppableEqual","withTimings","getDragStart","mode","responder","data","getDefaultMessage","willExpire","getPublisher","getResponders","asyncMarshal","dragging","beforeCapture","beforeStart","hasCriticalChanged","hasLocationChanged","hasGroupingChanged","responders","publisher","dropAnimationFinishMiddleware","dropAnimationFlushOnScrollMiddleware","clear","dimensionMarshalStopper","focus","isWatching","shouldStop","autoScroll","autoScroller","pendingDrop","postActionState","composeEnhancers","dimensionMarshal","focusMarshal","styleMarshal","createStore$1","clean$1","createPublisher","registry","staging","collect","removals","getMaxScroll","scrollHeight","scrollWidth","getDocumentElement","doc","getMaxWindowScroll","getViewport","getInitialPublish","scrollOptions","windowScroll","shouldPublishUpdate","createDimensionMarshal","collection","stopPublishing","subscriber","canStartDrag","scrollWindow","getScrollableDroppables","getScrollableDroppableOver","getBestScrollableDroppable","defaultAutoScrollerOptions","getDistanceThresholds","container","getAutoScrollerOptions","autoScrollerOptions","startScrollingFrom","maxScrollValueAt","getPercentage","startOfRange","endOfRange","range","minScroll","getValueFromDistance","distanceToEdge","thresholds","percentageFromStartScrollingFrom","dampenValueByTime","proposedScroll","dragStartTime","accelerateAt","stopAt","runTime","betweenAccelerateAtAndStopAtPercentage","getValue","shouldUseTimeDampening","getScrollOnAxis","distanceToEdges","adjustForSizeLimits","isTooBigVertically","isTooBigHorizontally","clean","getScroll$1","required","limited","smallestSigned","getOverlap","getRemainder","targetScroll","overlap","canPartiallyScroll","rawMax","smallestChange","canScrollWindow","getWindowOverlap","canScrollDroppable","getDroppableOverlap","getWindowScrollChange","getDroppableScrollChange","createFluidScroller","scheduleWindowScroll","scheduleDroppableScroll","tryScroll","wasScrollNeeded","fakeScrollCallback","createJumpScroller","moveByOffset","scrollDroppableAsMuchAsItCan","whatTheDroppableCanScroll","scrollWindowAsMuchAsItCan","whatTheWindowCanScroll","droppableRemainder","windowRemainder","createAutoScroller","fluidScroller","jumpScroll","prefix","dragHandle","base","scrollContainer","makeGetSelector","attribute","getStyles","rules","property","rule","noPointerEvents","getStyles$1","contextId","getSelector","dragHandle$1","grabCursor","draggable$1","transition","droppable$1","useLayoutEffect","getHead","head","createStyleEl","nonce","useStyleMarshal","alwaysRef","dynamicRef","setDynamicStyle","setAlwaysStyle","always","dynamic","dropping","resting","querySelectorAll","parentNode","getWindowFromEl","isHtmlElement","findDragHandle","possible","handle","useFocusMarshal","entriesRef","recordRef","restoreFocusFrameRef","isMountedRef","register","tryGiveFocus","tryGiveFocusTo","tryShiftRecord","redirectTo","tryRestoreFocusRecorded","record","tryRecordFocus","focused","createRegistry","subscribers","cb","notify","findDraggableById","getDraggableById","draggableAPI","findDroppableById","getDroppableById","droppableAPI","useRegistry","StoreContext","getBodyElement","body","visuallyHidden","getId","useAnnouncer","defaults","useUniqueId","getElementId","uniqueId","useHiddenTextElement","text","AppContext","usePrevious","create","lock","isClaimed","claim","abandon","newLock","release","tryAbandon","isDragging","enter","escape","space","pageUp","pageDown","end","arrowLeft","arrowUp","arrowRight","arrowDown","preventedKeys","preventStandardKeyEvents","supportedEventName","eventName","primaryButton","sloppyClickThreshold","isSloppyClickThresholdExceeded","idle$1","getCaptureBindings","cancel","getPhase","setPhase","button","clientX","clientY","phase","pending","actions","useMouseSensor","api","phaseRef","unbindEventsRef","startCaptureBinding","startPendingDrag","preventForcePressBinding","listenForCapture","bindCapturingEvents","noop$1","scrollJumpKeys","getDraggingBindings","useKeyboardSensor","preDrag","isCapturing","idle","timeForLongPress","forcePressThreshold","getWindowBindings","getHandleBindings","touch","shouldRespect","useTouchSensor","unbindTarget","unbindWindow","startDragging","longPressTimerId","interactiveTagNames","isAnInteractiveElement","parent","isEventInInteractiveElement","getBorderBoxCenterPosition","isElement","supportedMatchesName","closestPonyfill","findClosestDragHandleFromEvent","tryGetClosestDraggableIdFromEvent","findDraggable","preventDefault","expected","isLockActive","shouldWarn","canStart","lockAPI","tryStart","forceSensorStop","sourceEvent","getShouldRespectForcePress","tryDispatch","getAction","tryDispatchWhenDragging","finish","fluidLift","move$1","snapLift","abortPreDrag","defaultSensors","useSensorMarshal","customSensors","enableDefaultSensors","useSensors","tryAbandonLock","canGetLock","tryGetLock","forceStop","findClosestDraggableId","findOptionsForDraggable","tryReleaseLock","isLockClaimed","createResponders","onBeforeCapureCallback","flushSync","createAutoScrollerOptions","getStore","lazyRef","App","setCallbacks","sensors","lazyStoreRef","lastPropsRef","dragHandleUsageInstructionsId","lazyDispatch","marshalCallbacks","tryResetStore","appCallbacks","getCanLift","getIsMovementAllowed","appContext","useUniqueContextId","DragDropContext","zIndexOptions","getDraggingTransition","shouldAnimateDragMovement","getDraggingOpacity","isDropAnimating","getShouldDraggingAnimate","getDraggingStyle","transform","getSecondaryStyle","secondary","getStyle$1","mapped","getDimension$1","computedStyles","placeholder","useDraggablePublisher","getDraggableRef","canDragInteractiveElements","shouldRespectForcePress","getDimension","publishedRef","isFirstPublishRef","DroppableContext","useRequiredContext","useContext","preventHtml5Dnd","Draggable","setRef","getRef","isClone","dropAnimationFinishedAction","forPublisher","onMoveEnd","provided","onTransitionEnd","rubric","isStrictEqual","whatIsDraggedOverFromResult","getCombineWithFromResult","getCombineWithFromImpact","getDraggableSelector","memoizedOffset","getMemoizedSnapshot","draggingOver","getMemoizedProps","getSecondarySnapshot","combineTargetFor","atRest","getSecondarySelector","shouldAnimateDisplacement","getFallback","getProps","ownId","draggingId","visualDisplacement","isAfterCriticalInVirtualList","makeMapStateToProps$1","draggingSelector","secondarySelector","mapDispatchToProps$1","ConnectedDraggable","PrivateDraggable","PublicDraggable","isScroll","isAuto","isEither","overflow","isElementScrollable","isBodyScrollable","getClosestScrollable","getScroll","getIsFixed","getEnv","closestScrollable","isFixedOnPage","getDroppableDimension","scrollSize","frameClient","getClient","targetRef","env","isDropDisabled","shouldClipSubject","immediate","delayed","getListenerOptions","getClosestScrollableFromDrag","useDroppablePublisher","whileDraggingRef","previousRef","publishedDescriptorRef","memoizedUpdateScroll","getClosestScroll","scheduleScrollUpdate","onClosestScroll","getDimensionAndWatchScroll","getScrollWhileDragging","dragStopped","noop","empty","getSize","isAnimatingOpenOnMount","animate","getStyle","size","Placeholder","animateOpenTimerRef","tryClearAnimateOpenTimer","setIsAnimatingOpenOnMount","onSizeChangeEnd","Placeholder$1","AnimateInOut","Droppable","droppableRef","placeholderRef","ignoreContainerClipping","snapshot","useClone","getContainerForClone","getDroppableRef","setDroppableRef","setPlaceholderRef","onPlaceholderTransitionEnd","isUsingCloneFor","droppableContext","getClone","render","node","draggableProvided","draggableSnapshot","ReactDOM","getBody","defaultProps","attachDefaultPropsToOwnProps","defaultPropKey","isMatchingType","getDraggable","makeMapStateToProps","idleWithAnimation","idleWithoutAnimation","getDraggableRubric","getMapProps","isDraggingOverForConsumer","isDraggingOverForImpact","renderClone","ownPropsWithDefaultProps","isDraggingOver","wasCombining","isHome","ConnectedDroppable","DefaultItemRenderer","KanbanColumnComponent","column","onItemClick","renderItem","itemClassName","emptyMessage","dragProvided","KanbanBoard","columns","columnClassName","emptyColumnMessage","handleDragEnd","BOARD_COLUMNS","IssueList","issues","onIssueClick","onIssueEdit","onIssueDelete","storageKey","safeParseOrder","parsed","buildColumns","order","formatTitle","byId","col","desired","desiredIds","remaining","items","syncOrderWithIssues","prev","statusById","filtered","present","missing","reorderIds","from","to","moved","IssuesPanel","_onCreateIssue","viewMode","setViewMode","searchQuery","setSearchQuery","statusFilter","setStatusFilter","priorityFilter","setPriorityFilter","selectedIssue","setSelectedIssue","setOrder","loaded","criticalCount","useIssues","updateIssue","deleteIssue","useIssueMutations","statusCounts","statusId","c","idsByStatus","map","handleEditIssue","_issue","handleDeleteIssue","handleStatusChange","handleIssueClick","handleCloseDrawer","sourceColumn","destColumn","issueId","sourceStatus","destStatus","sourceIds","destIds","nextSource","nextDest","Search","Input","List","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","ExecutionGroup","group","isExpanded","setIsExpanded","isParallel","CardHeader","ChevronDown","ChevronRight","ArrowRight","itemType","idParts","displayId","typeLabel","QueueActions","queue","queueIdProp","onActivate","onDeactivate","onMerge","onSplit","isActivating","isDeactivating","isDeleting","isMerging","isSplitting","isDeleteOpen","setIsDeleteOpen","isMergeOpen","setIsMergeOpen","isSplitOpen","setIsSplitOpen","mergeTargetId","setMergeTargetId","selectedItemIds","setSelectedItemIds","queueId","allItems","handleMerge","handleSplit","toggleItemSelection","itemId","selectAll","clearAll","canSplit","_b","Pause","GitBranch","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","isSelected","Checkbox","QueueCard","taskCount","solutionCount","conflictCount","_c","totalItems","groupCount","executionGroups","CheckCircle2","groupSortKey","groupId","an","aid","bn","bid","it","applyDrag","startCol","endCol","itemToMove","reorderedItem","newStartItems","newEndItems","QueueBoard","reorderQueueGroup","moveQueueItem","isReordering","useQueueMutations","baseColumns","setColumns","nextColumns","nextOrder","DEFAULT_TOOL_OPTIONS","CliExecutionSettings","tool","resumeStrategy","onToolChange","onModeChange","onResumeStrategyChange","toolOptions","CardContent","buildQueueItemContext","lines","tasks","task","generateId","QueueItemExecutor","navigate","useNavigate","sessionError","setTool","setMode","setResumeStrategy","isExecuting","setIsExecuting","setLastResult","displayError","addExecution","useQueueExecutionStore","handleSessionExecute","sessionKey","prompt","executeInCliSession","execution","useTerminalPanelStore","handleOrchestratorExecute","instruction","nodeId","flowName","flowDescription","createOrchestratorFlow","flowDto","parsedVersion","flowForStore","useFlowStore","executed","executeOrchestratorFlow","execId","useExecutionStore","toast","RefreshCw","Plus","Workflow","SolutionDrawer","useIssueQueue","solutionId","tasksForSolution","isTaskItem","qi","StatusIcon","dep","file","taskStatus","TaskStatusIcon","taskId","QueuePanelSkeleton","QueueEmptyState","QueuePanel","selectedItem","setSelectedItem","selectedQueueId","setSelectedQueueId","activeQueueQuery","historyIndex","useQueueHistory","selectedQueueQuery","useIssueQueueById","activateQueue","deactivateQueue","deleteQueue","mergeQueues","splitQueue","activeQueueId","activeQueueIds","handleActivate","handleDeactivate","sourceId","targetId","sourceQueueId","itemIds","handleItemClick","q","DiscoveryCard","session","formatDate","dateString","Progress","severityConfig","getSeverityConfig","severity","FindingDrawer","finding","MapPin","Code","Lightbulb","Target","FindingList","findings","filters","onFilterChange","onFindingClick","selectedIds","onSelectionChange","internalSelection","setInternalSelection","selectionSet","handleToggleSelection","findingId","newSet","handleToggleAll","f","isAllSelected","isSomeSelected","uniqueTypes","Check","FileCode","DiscoveryDetail","_sessionId","onExport","onExportSelected","isExporting","selectedFinding","setSelectedFinding","setSelectedIds","handleFindingClick","relatedIssue","handleCloseIssueDrawer","handleCloseFindingDrawer","handleExportSelected","severityCounts","acc","typeCounts","Upload","Download","BarChart3","count","DiscoveryPanel","activeSession","isLoadingSessions","isLoadingFindings","setFilters","selectSession","exportFindings","exportSelectedFindings","useIssueDiscovery","VALID_TABS","ISSUE_TYPE_CONFIG","NewIssueDialog","open","onOpenChange","onSubmit","isCreating","title","setTitle","setContext","setPriority","setType","attachments","setAttachments","dragOver","setDragOver","handleFileSelect","files","validFiles","removeAttachment","_","handleSubmit","handleDragOver","handleDragLeave","handleDrop","Label","input","IssueHubPage","searchParams","setSearchParams","useSearchParams","rawTab","showError","success","useNotifications","isNewIssueOpen","setIsNewIssueOpen","isGithubSyncing","setIsGithubSyncing","isUploadingAttachments","setIsUploadingAttachments","isImmersiveMode","useAppStore","selectIsImmersiveMode","toggleImmersiveMode","refetchIssues","isFetchingIssues","refetchQueue","isFetchingQueue","createIssue","setCurrentTab","handleIssuesRefresh","handleGithubSync","pullIssuesFromGitHub","handleCreateIssue","newIssue","uploadAttachments","uploadError","handleQueueRefresh","renderActionButtons","Minimize2","Maximize2"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,6,11,12,13,14,15,16,17]}
|
|
1
|
+
{"version":3,"file":"IssueHubPage-BP0zJc1R.js","sources":["../../../../node_modules/lucide-react/dist/esm/icons/git-merge.js","../../../../node_modules/lucide-react/dist/esm/icons/github.js","../../../../node_modules/lucide-react/dist/esm/icons/list-todo.js","../../../../node_modules/lucide-react/dist/esm/icons/merge.js","../../../../node_modules/lucide-react/dist/esm/icons/radar.js","../../src/hooks/useCliSessionCore.ts","../../../../node_modules/@babel/runtime/helpers/esm/extends.js","../../src/components/issue/hub/IssueHubHeader.tsx","../../src/components/issue/hub/IssueHubTabs.tsx","../../src/components/shared/IssueCard.tsx","../../src/components/issue/hub/IssueDrawer.tsx","../../../../node_modules/redux/dist/redux.mjs","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js","../../../../node_modules/use-sync-external-store/with-selector.js","../../../../node_modules/react-redux/dist/react-redux.mjs","../../../../node_modules/css-box-model/dist/css-box-model.esm.js","../../../../node_modules/raf-schd/dist/raf-schd.esm.js","../../../../node_modules/@hello-pangea/dnd/dist/dnd.esm.js","../../src/components/shared/KanbanBoard.tsx","../../src/components/issue/hub/IssuesPanel.tsx","../../src/components/issue/queue/ExecutionGroup.tsx","../../src/components/issue/queue/QueueActions.tsx","../../src/components/issue/queue/QueueCard.tsx","../../src/components/issue/queue/QueueBoard.tsx","../../src/components/shared/CliExecutionSettings.tsx","../../src/lib/queue-prompt.ts","../../src/components/issue/queue/QueueItemExecutor.tsx","../../src/components/issue/queue/SolutionDrawer.tsx","../../src/components/issue/hub/QueuePanel.tsx","../../src/components/issue/discovery/DiscoveryCard.tsx","../../src/components/issue/discovery/FindingDrawer.tsx","../../src/components/issue/discovery/FindingList.tsx","../../src/components/issue/discovery/DiscoveryDetail.tsx","../../src/components/issue/hub/DiscoveryPanel.tsx","../../src/pages/IssueHubPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst GitMerge = createLucideIcon(\"GitMerge\", [\n [\"circle\", { cx: \"18\", cy: \"18\", r: \"3\", key: \"1xkwt0\" }],\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"3\", key: \"1lh9wr\" }],\n [\"path\", { d: \"M6 21V9a9 9 0 0 0 9 9\", key: \"7kw0sc\" }]\n]);\n\nexport { GitMerge as default };\n//# sourceMappingURL=git-merge.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Github = createLucideIcon(\"Github\", [\n [\n \"path\",\n {\n d: \"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\",\n key: \"tonef\"\n }\n ],\n [\"path\", { d: \"M9 18c-4.51 2-5-2-7-2\", key: \"9comsn\" }]\n]);\n\nexport { Github as default };\n//# sourceMappingURL=github.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ListTodo = createLucideIcon(\"ListTodo\", [\n [\"rect\", { x: \"3\", y: \"5\", width: \"6\", height: \"6\", rx: \"1\", key: \"1defrl\" }],\n [\"path\", { d: \"m3 17 2 2 4-4\", key: \"1jhpwq\" }],\n [\"path\", { d: \"M13 6h8\", key: \"15sg57\" }],\n [\"path\", { d: \"M13 12h8\", key: \"h98zly\" }],\n [\"path\", { d: \"M13 18h8\", key: \"oe0vm4\" }]\n]);\n\nexport { ListTodo as default };\n//# sourceMappingURL=list-todo.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Merge = createLucideIcon(\"Merge\", [\n [\"path\", { d: \"m8 6 4-4 4 4\", key: \"ybng9g\" }],\n [\"path\", { d: \"M12 2v10.3a4 4 0 0 1-1.172 2.872L4 22\", key: \"1hyw0i\" }],\n [\"path\", { d: \"m20 22-5-5\", key: \"1m27yz\" }]\n]);\n\nexport { Merge as default };\n//# sourceMappingURL=merge.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Radar = createLucideIcon(\"Radar\", [\n [\"path\", { d: \"M19.07 4.93A10 10 0 0 0 6.99 3.34\", key: \"z3du51\" }],\n [\"path\", { d: \"M4 6h.01\", key: \"oypzma\" }],\n [\"path\", { d: \"M2.29 9.62A10 10 0 1 0 21.31 8.35\", key: \"qzzz0\" }],\n [\"path\", { d: \"M16.24 7.76A6 6 0 1 0 8.23 16.67\", key: \"1yjesh\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }],\n [\"path\", { d: \"M17.99 11.66A6 6 0 0 1 15.77 16.67\", key: \"1u2y91\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"2\", key: \"1c9p78\" }],\n [\"path\", { d: \"m13.41 10.59 5.66-5.66\", key: \"mhq4k0\" }]\n]);\n\nexport { Radar as default };\n//# sourceMappingURL=radar.js.map\n","// ========================================\n// useCliSessionCore Hook\n// ========================================\n// Shared CLI session lifecycle management extracted from\n// QueueExecuteInSession, QueueSendToOrchestrator, and IssueTerminalTab.\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n createCliSession,\n fetchCliSessions,\n type CliSession,\n} from '@/lib/api';\nimport { useCliSessionStore } from '@/stores/cliSessionStore';\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface UseCliSessionCoreOptions {\n /** When true, auto-select the most recent session on load. Defaults to true. */\n autoSelectLast?: boolean;\n /** Default resumeKey used when creating sessions via ensureSession/handleCreateSession. */\n resumeKey?: string;\n /** Shell to use when creating new sessions. Defaults to 'bash'. */\n preferredShell?: 'bash' | 'pwsh';\n /** Additional createCliSession fields (cols, rows, tool, model). */\n createSessionDefaults?: {\n cols?: number;\n rows?: number;\n tool?: string;\n model?: string;\n };\n}\n\nexport interface UseCliSessionCoreReturn {\n /** Sorted list of CLI sessions (oldest first). */\n sessions: CliSession[];\n /** Currently selected session key. */\n selectedSessionKey: string;\n /** Setter for selected session key. */\n setSelectedSessionKey: (key: string) => void;\n /** Refresh sessions from the backend. */\n refreshSessions: () => Promise<void>;\n /** Return the current session key, creating one if none is selected. */\n ensureSession: () => Promise<string>;\n /** Explicitly create a new session and select it. */\n handleCreateSession: () => Promise<void>;\n /** True while sessions are being fetched. */\n isLoading: boolean;\n /** Last error message, or null. */\n error: string | null;\n /** Clear the current error. */\n clearError: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\nexport function useCliSessionCore(options: UseCliSessionCoreOptions = {}): UseCliSessionCoreReturn {\n const {\n autoSelectLast = true,\n resumeKey,\n preferredShell = 'bash',\n createSessionDefaults,\n } = options;\n\n const projectPath = useWorkflowStore(selectProjectPath);\n\n // Store selectors\n const sessionsByKey = useCliSessionStore((s) => s.sessions);\n const setSessions = useCliSessionStore((s) => s.setSessions);\n const upsertSession = useCliSessionStore((s) => s.upsertSession);\n\n // Derived sorted list (oldest first)\n const sessions = useMemo(\n () =>\n Object.values(sessionsByKey).sort((a, b) =>\n a.createdAt.localeCompare(b.createdAt)\n ),\n [sessionsByKey]\n );\n\n // Local state\n const [selectedSessionKey, setSelectedSessionKey] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const clearError = useCallback(() => setError(null), []);\n\n // ------- refreshSessions -------\n const refreshSessions = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const r = await fetchCliSessions(projectPath || undefined);\n setSessions(r.sessions);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n } finally {\n setIsLoading(false);\n }\n }, [projectPath, setSessions]);\n\n // Fetch on mount / when projectPath changes\n useEffect(() => {\n void refreshSessions();\n }, [refreshSessions]);\n\n // Auto-select the last (most recent) session\n useEffect(() => {\n if (!autoSelectLast) return;\n if (selectedSessionKey) return;\n if (sessions.length === 0) return;\n setSelectedSessionKey(sessions[sessions.length - 1]?.sessionKey ?? '');\n }, [sessions, selectedSessionKey, autoSelectLast]);\n\n // ------- ensureSession -------\n const ensureSession = useCallback(async (): Promise<string> => {\n if (selectedSessionKey) return selectedSessionKey;\n if (!projectPath) throw new Error('No project path selected');\n const created = await createCliSession(\n {\n workingDir: projectPath,\n preferredShell,\n resumeKey,\n ...createSessionDefaults,\n },\n projectPath\n );\n upsertSession(created.session);\n setSelectedSessionKey(created.session.sessionKey);\n return created.session.sessionKey;\n }, [selectedSessionKey, projectPath, resumeKey, preferredShell, createSessionDefaults, upsertSession]);\n\n // ------- handleCreateSession -------\n const handleCreateSession = useCallback(async () => {\n setError(null);\n try {\n if (!projectPath) throw new Error('No project path selected');\n const created = await createCliSession(\n {\n workingDir: projectPath,\n preferredShell,\n resumeKey,\n ...createSessionDefaults,\n },\n projectPath\n );\n upsertSession(created.session);\n setSelectedSessionKey(created.session.sessionKey);\n // Refresh full list so store stays consistent\n const r = await fetchCliSessions(projectPath || undefined);\n setSessions(r.sessions);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n }\n }, [projectPath, resumeKey, preferredShell, createSessionDefaults, upsertSession, setSessions]);\n\n return {\n sessions,\n selectedSessionKey,\n setSelectedSessionKey,\n refreshSessions,\n ensureSession,\n handleCreateSession,\n isLoading,\n error,\n clearError,\n };\n}\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","// ========================================\n// Issue Hub Header\n// ========================================\n// Dynamic header component for IssueHub\n\nimport { useIntl } from 'react-intl';\nimport { AlertCircle, Radar, ListTodo, LayoutGrid } from 'lucide-react';\nimport type { IssueTab } from './IssueHubTabs';\n\ninterface IssueHubHeaderProps {\n currentTab: IssueTab;\n}\n\nexport function IssueHubHeader({ currentTab }: IssueHubHeaderProps) {\n const { formatMessage } = useIntl();\n\n // Tab configuration with icons and labels\n const tabConfig = {\n issues: {\n icon: <AlertCircle className=\"w-6 h-6 text-primary\" />,\n title: formatMessage({ id: 'issues.title' }),\n description: formatMessage({ id: 'issues.description' }),\n },\n board: {\n icon: <LayoutGrid className=\"w-6 h-6 text-primary\" />,\n title: formatMessage({ id: 'issues.board.pageTitle' }),\n description: formatMessage({ id: 'issues.board.description' }),\n },\n queue: {\n icon: <ListTodo className=\"w-6 h-6 text-primary\" />,\n title: formatMessage({ id: 'issues.queue.pageTitle' }),\n description: formatMessage({ id: 'issues.queue.description' }),\n },\n discovery: {\n icon: <Radar className=\"w-6 h-6 text-primary\" />,\n title: formatMessage({ id: 'issues.discovery.pageTitle' }),\n description: formatMessage({ id: 'issues.discovery.description' }),\n },\n };\n\n const config = tabConfig[currentTab] || tabConfig.issues;\n\n return (\n <div className=\"flex items-center gap-2\">\n {config.icon}\n <div>\n <h1 className=\"text-2xl font-bold text-foreground\">\n {config.title}\n </h1>\n <p className=\"text-muted-foreground text-sm mt-1\">\n {config.description}\n </p>\n </div>\n </div>\n );\n}\n","// ========================================\n// Issue Hub Tabs\n// ========================================\n// Tab navigation for IssueHub\n\nimport { useIntl } from 'react-intl';\nimport { Button } from '@/components/ui/Button';\nimport { cn } from '@/lib/utils';\n\n// Keep in sync with IssueHubHeader/IssueHubPage\nexport type IssueTab = 'issues' | 'queue' | 'discovery';\n\ninterface IssueHubTabsProps {\n currentTab: IssueTab;\n onTabChange: (tab: IssueTab) => void;\n}\n\nexport function IssueHubTabs({ currentTab, onTabChange }: IssueHubTabsProps) {\n const { formatMessage } = useIntl();\n\n const tabs: Array<{ value: IssueTab; label: string }> = [\n { value: 'issues', label: formatMessage({ id: 'issues.hub.tabs.issues' }) },\n { value: 'queue', label: formatMessage({ id: 'issues.hub.tabs.queue' }) },\n { value: 'discovery', label: formatMessage({ id: 'issues.hub.tabs.discovery' }) },\n ];\n\n return (\n <div className=\"flex gap-2 border-b border-border\">\n {tabs.map((tab) => (\n <Button\n key={tab.value}\n variant=\"ghost\"\n className={cn(\n \"border-b-2 rounded-none h-11 px-4\",\n currentTab === tab.value\n ? \"border-primary text-primary\"\n : \"border-transparent text-muted-foreground hover:text-foreground\"\n )}\n onClick={() => onTabChange(tab.value)}\n >\n {tab.label}\n </Button>\n ))}\n </div>\n );\n}\n","// ========================================\r\n// IssueCard Component\r\n// ========================================\r\n// Card component for displaying issues with actions\r\n\r\nimport { useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n AlertCircle,\r\n AlertTriangle,\r\n Info,\r\n MoreVertical,\r\n Edit,\r\n Trash2,\r\n ExternalLink,\r\n CheckCircle,\r\n Clock,\r\n XCircle,\r\n Loader2,\r\n} from 'lucide-react';\r\nimport { cn } from '@/lib/utils';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@/components/ui/Dropdown';\r\nimport type { DraggableProvidedDragHandleProps, DraggableProvidedDraggableProps } from '@hello-pangea/dnd';\r\nimport type { Issue } from '@/lib/api';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface IssueCardProps {\r\n issue: Issue;\r\n onEdit?: (issue: Issue) => void;\r\n onDelete?: (issue: Issue) => void;\r\n onClick?: (issue: Issue) => void;\r\n onStatusChange?: (issue: Issue, status: Issue['status']) => void;\r\n className?: string;\r\n compact?: boolean;\r\n showActions?: boolean;\r\n draggableProps?: DraggableProvidedDraggableProps;\r\n dragHandleProps?: DraggableProvidedDragHandleProps | null;\r\n innerRef?: React.Ref<HTMLDivElement>;\r\n}\r\n\r\n// ========== Priority Helpers ==========\r\n\r\n// Priority icon and color configuration (without labels for i18n)\r\nconst priorityVariantConfig: Record<Issue['priority'], { icon: React.ElementType; color: string }> = {\r\n critical: { icon: AlertCircle, color: 'destructive' },\r\n high: { icon: AlertTriangle, color: 'warning' },\r\n medium: { icon: Info, color: 'info' },\r\n low: { icon: Info, color: 'secondary' },\r\n};\r\n\r\n// Priority label keys for i18n\r\nconst priorityLabelKeys: Record<Issue['priority'], string> = {\r\n critical: 'issues.priority.critical',\r\n high: 'issues.priority.high',\r\n medium: 'issues.priority.medium',\r\n low: 'issues.priority.low',\r\n};\r\n\r\n// Status icon and color configuration (without labels for i18n)\r\nconst statusVariantConfig: Record<Issue['status'], { icon: React.ElementType; color: string }> = {\r\n registered: { icon: AlertCircle, color: 'info' },\r\n planning: { icon: Clock, color: 'warning' },\r\n planned: { icon: Clock, color: 'warning' },\r\n queued: { icon: Clock, color: 'warning' },\r\n executing: { icon: Loader2, color: 'warning' },\r\n completed: { icon: CheckCircle, color: 'success' },\r\n failed: { icon: XCircle, color: 'destructive' },\r\n paused: { icon: Clock, color: 'muted' },\r\n};\r\n\r\n// Status label keys for i18n\r\nconst statusLabelKeys: Record<Issue['status'], string> = {\r\n registered: 'issues.status.registered',\r\n planning: 'issues.status.planning',\r\n planned: 'issues.status.planned',\r\n queued: 'issues.status.queued',\r\n executing: 'issues.status.executing',\r\n completed: 'issues.status.completed',\r\n failed: 'issues.status.failed',\r\n paused: 'issues.status.paused',\r\n};\r\n\r\n// ========== Priority Badge ==========\r\n\r\nexport function PriorityBadge({ priority }: { priority: Issue['priority'] }) {\r\n const { formatMessage } = useIntl();\r\n const config = priorityVariantConfig[priority];\r\n\r\n // Defensive check: handle unknown priority values\r\n if (!config) {\r\n return (\r\n <Badge variant=\"secondary\" className=\"gap-1\">\r\n {priority}\r\n </Badge>\r\n );\r\n }\r\n\r\n const Icon = config.icon;\r\n const label = priorityLabelKeys[priority]\r\n ? formatMessage({ id: priorityLabelKeys[priority] })\r\n : priority;\r\n\r\n return (\r\n <Badge variant={config.color as 'default' | 'secondary' | 'destructive' | 'outline'} className=\"gap-1\">\r\n <Icon className=\"w-3 h-3\" />\r\n {label}\r\n </Badge>\r\n );\r\n}\r\n\r\n// ========== Status Badge ==========\r\n\r\nexport function StatusBadge({ status }: { status: Issue['status'] }) {\r\n const { formatMessage } = useIntl();\r\n const config = statusVariantConfig[status];\r\n\r\n // Defensive check: handle unknown status values\r\n if (!config) {\r\n return (\r\n <Badge variant=\"outline\" className=\"gap-1\">\r\n {status}\r\n </Badge>\r\n );\r\n }\r\n\r\n const Icon = config.icon;\r\n const label = statusLabelKeys[status]\r\n ? formatMessage({ id: statusLabelKeys[status] })\r\n : status;\r\n\r\n return (\r\n <Badge variant=\"outline\" className=\"gap-1\">\r\n <Icon className=\"w-3 h-3\" />\r\n {label}\r\n </Badge>\r\n );\r\n}\r\n\r\n// ========== Main IssueCard Component ==========\r\n\r\nexport function IssueCard({\r\n issue,\r\n onEdit,\r\n onDelete,\r\n onClick,\r\n onStatusChange,\r\n className,\r\n compact = false,\r\n showActions = true,\r\n draggableProps,\r\n dragHandleProps,\r\n innerRef,\r\n}: IssueCardProps) {\r\n const { formatMessage } = useIntl();\r\n const [isMenuOpen, setIsMenuOpen] = useState(false);\r\n\r\n const handleClick = () => {\r\n if (!isMenuOpen) {\r\n onClick?.(issue);\r\n }\r\n };\r\n\r\n const handleEdit = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n setIsMenuOpen(false);\r\n onEdit?.(issue);\r\n };\r\n\r\n const handleDelete = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n setIsMenuOpen(false);\r\n onDelete?.(issue);\r\n };\r\n\r\n if (compact) {\r\n return (\r\n <div\r\n ref={innerRef}\r\n {...draggableProps}\r\n {...dragHandleProps}\r\n onClick={handleClick}\r\n className={cn(\r\n 'p-3 bg-card border border-border rounded-lg cursor-pointer',\r\n 'hover:shadow-md hover:border-primary/50 transition-all hover-glow',\r\n className\r\n )}\r\n >\r\n <div className=\"flex items-start justify-between gap-2\">\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium text-foreground truncate\">{issue.title}</p>\r\n <p className=\"text-xs text-muted-foreground mt-0.5\">#{issue.id}</p>\r\n </div>\r\n <PriorityBadge priority={issue.priority} />\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <Card\r\n ref={innerRef}\r\n {...draggableProps}\r\n onClick={handleClick}\r\n className={cn(\r\n 'p-4 cursor-pointer hover:shadow-md hover:border-primary/50 transition-all hover-glow',\r\n className\r\n )}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-start justify-between gap-2\">\r\n <div className=\"flex-1 min-w-0\" {...dragHandleProps}>\r\n <h3 className=\"text-sm font-medium text-foreground line-clamp-2\">\r\n {issue.title}\r\n </h3>\r\n <p className=\"text-xs text-muted-foreground mt-1\">#{issue.id}</p>\r\n </div>\r\n {showActions && (\r\n <DropdownMenu open={isMenuOpen} onOpenChange={setIsMenuOpen}>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-8 w-8 p-0\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <MoreVertical className=\"w-4 h-4\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\">\r\n <DropdownMenuItem onClick={handleEdit}>\r\n <Edit className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.actions.edit' })}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onStatusChange?.(issue, 'executing')}>\r\n <Clock className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.actions.startProgress' })}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onStatusChange?.(issue, 'completed')}>\r\n <CheckCircle className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.actions.markResolved' })}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={handleDelete} className=\"text-destructive\">\r\n <Trash2 className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.actions.delete' })}\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n )}\r\n </div>\r\n\r\n {/* Context Preview */}\r\n {issue.context && (\r\n <p className=\"text-sm text-muted-foreground mt-2 line-clamp-2\">\r\n {issue.context}\r\n </p>\r\n )}\r\n\r\n {/* Labels */}\r\n {issue.labels && issue.labels.length > 0 && (\r\n <div className=\"flex flex-wrap gap-1 mt-2\">\r\n {issue.labels.slice(0, 3).map((label) => (\r\n <Badge key={label} variant=\"outline\" className=\"text-xs\">\r\n {label}\r\n </Badge>\r\n ))}\r\n {issue.labels.length > 3 && (\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n +{issue.labels.length - 3}\r\n </Badge>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Footer */}\r\n <div className=\"flex items-center justify-between mt-3 pt-3 border-t border-border\">\r\n <PriorityBadge priority={issue.priority} />\r\n <StatusBadge status={issue.status} />\r\n </div>\r\n\r\n {/* Solutions Count */}\r\n {issue.solutions && issue.solutions.length > 0 && (\r\n <div className=\"flex items-center gap-1 mt-2 text-xs text-muted-foreground\">\r\n <ExternalLink className=\"w-3 h-3\" />\r\n {issue.solutions.length} {formatMessage(\r\n { id: 'issues.card.solutions' },\r\n { count: issue.solutions.length }\r\n )}\r\n </div>\r\n )}\r\n </Card>\r\n );\r\n}\r\n\r\nexport default IssueCard;\r\n","// ========================================\r\n// IssueDrawer Component\r\n// ========================================\r\n// Right-side issue detail drawer with Overview/Solutions/History tabs\r\n\r\nimport { useEffect, useState, useCallback } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { X, FileText, CheckCircle, Circle, Loader2, Tag, History, Hash, Terminal, Play } from 'lucide-react';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\r\nimport { cn } from '@/lib/utils';\r\nimport type { Issue } from '@/lib/api';\r\nimport { createCliSession } from '@/lib/api';\r\nimport { useOpenTerminalPanel } from '@/stores/terminalPanelStore';\r\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\r\n\r\n// ========== Types ==========\r\nexport interface IssueDrawerProps {\r\n issue: Issue | null;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n initialTab?: TabValue;\r\n}\r\n\r\ntype TabValue = 'overview' | 'solutions' | 'history' | 'terminal' | 'json';\r\n\r\n// ========== Status Configuration ==========\r\nconst statusConfig: Record<string, { label: string; variant: 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'info'; icon: React.ComponentType<{ className?: string }> }> = {\r\n open: { label: 'issues.status.open', variant: 'info', icon: Circle },\r\n in_progress: { label: 'issues.status.inProgress', variant: 'warning', icon: Loader2 },\r\n resolved: { label: 'issues.status.resolved', variant: 'success', icon: CheckCircle },\r\n closed: { label: 'issues.status.closed', variant: 'secondary', icon: Circle },\r\n completed: { label: 'issues.status.completed', variant: 'success', icon: CheckCircle },\r\n};\r\n\r\nconst priorityConfig: Record<string, { label: string; variant: 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'info' }> = {\r\n low: { label: 'issues.priority.low', variant: 'secondary' },\r\n medium: { label: 'issues.priority.medium', variant: 'default' },\r\n high: { label: 'issues.priority.high', variant: 'warning' },\r\n critical: { label: 'issues.priority.critical', variant: 'destructive' },\r\n};\r\n\r\n// ========== Component ==========\r\n\r\nexport function IssueDrawer({ issue, isOpen, onClose, initialTab = 'overview' }: IssueDrawerProps) {\r\n const { formatMessage } = useIntl();\r\n const openTerminal = useOpenTerminalPanel();\r\n const projectPath = useWorkflowStore(selectProjectPath);\r\n const [activeTab, setActiveTab] = useState<TabValue>(initialTab);\r\n\r\n // Execution binding state\r\n const CLI_TOOLS = ['claude', 'gemini', 'qwen', 'codex', 'opencode'] as const;\r\n const [selectedTool, setSelectedTool] = useState<string>('claude');\r\n const [selectedMode, setSelectedMode] = useState<'analysis' | 'write'>('analysis');\r\n const [isLaunching, setIsLaunching] = useState(false);\r\n\r\n // Reset to initial tab when opening/switching issues\r\n useEffect(() => {\r\n if (!isOpen || !issue) return;\r\n setActiveTab(initialTab);\r\n }, [initialTab, isOpen, issue?.id]);\r\n\r\n // ESC key to close\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n const handleEsc = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') onClose();\r\n };\r\n window.addEventListener('keydown', handleEsc);\r\n return () => window.removeEventListener('keydown', handleEsc);\r\n }, [isOpen, onClose]);\r\n\r\n const handleLaunchSession = useCallback(async () => {\r\n if (!projectPath || !issue || isLaunching) return;\r\n setIsLaunching(true);\r\n try {\r\n const created = await createCliSession(\r\n { workingDir: projectPath, tool: selectedTool },\r\n projectPath\r\n );\r\n openTerminal(created.session.sessionKey);\r\n onClose();\r\n } catch (err) {\r\n console.error('[IssueDrawer] createCliSession failed:', err);\r\n } finally {\r\n setIsLaunching(false);\r\n }\r\n }, [projectPath, issue, isLaunching, selectedTool, openTerminal, onClose]);\r\n\r\n if (!issue || !isOpen) {\r\n return null;\r\n }\r\n\r\n const status = statusConfig[issue.status] || statusConfig.open;\r\n const priority = priorityConfig[issue.priority] || priorityConfig.medium;\r\n\r\n return (\r\n <>\r\n {/* Overlay */}\r\n <div\r\n className={cn(\r\n 'fixed inset-0 bg-black/40 transition-opacity z-40',\r\n isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'\r\n )}\r\n onClick={onClose}\r\n aria-hidden=\"true\"\r\n />\r\n\r\n {/* Drawer */}\r\n <div\r\n className={cn(\r\n 'fixed top-0 right-0 h-full w-1/2 bg-background border-l border-border shadow-2xl z-50 flex flex-col transition-transform duration-300 ease-in-out',\r\n isOpen ? 'translate-x-0' : 'translate-x-full'\r\n )}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n style={{ minWidth: '400px', maxWidth: '800px' }}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-start justify-between p-6 border-b border-border bg-card\">\r\n <div className=\"flex-1 min-w-0 mr-4\">\r\n <div className=\"flex items-center gap-2 mb-2 flex-wrap\">\r\n <span className=\"text-xs font-mono text-muted-foreground\">{issue.id}</span>\r\n <Badge variant={status.variant} className=\"gap-1\">\r\n <status.icon className=\"h-3 w-3\" />\r\n {formatMessage({ id: status.label })}\r\n </Badge>\r\n <Badge variant={priority.variant}>\r\n {formatMessage({ id: priority.label })}\r\n </Badge>\r\n </div>\r\n <h2 className=\"text-lg font-semibold text-foreground\">\r\n {issue.title}\r\n </h2>\r\n </div>\r\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose} className=\"flex-shrink-0 hover:bg-secondary\">\r\n <X className=\"h-5 w-5\" />\r\n </Button>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div className=\"px-6 pt-4 bg-card\">\r\n <Tabs value={activeTab} onValueChange={(v) => setActiveTab(v as TabValue)} className=\"w-full\">\r\n <TabsList className=\"w-full\">\r\n <TabsTrigger value=\"overview\" className=\"flex-1\">\r\n <FileText className=\"h-4 w-4 mr-2\" />\r\n {formatMessage({ id: 'issues.detail.tabs.overview' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"solutions\" className=\"flex-1\">\r\n <CheckCircle className=\"h-4 w-4 mr-2\" />\r\n {formatMessage({ id: 'issues.detail.tabs.solutions' })}\r\n {issue.solutions && issue.solutions.length > 0 && (\r\n <Badge variant=\"secondary\" className=\"ml-1\">\r\n {issue.solutions.length}\r\n </Badge>\r\n )}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"history\" className=\"flex-1\">\r\n <History className=\"h-4 w-4 mr-2\" />\r\n {formatMessage({ id: 'issues.detail.tabs.history' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"terminal\" className=\"flex-1\">\r\n <Terminal className=\"h-4 w-4 mr-2\" />\r\n {formatMessage({ id: 'issues.detail.tabs.terminal' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"json\" className=\"flex-1\">\r\n <Hash className=\"h-4 w-4 mr-2\" />\r\n JSON\r\n </TabsTrigger>\r\n </TabsList>\r\n\r\n {/* Tab Content */}\r\n <div className=\"overflow-y-auto pr-2\" style={{ height: 'calc(100vh - 200px)' }}>\r\n {/* Overview Tab */}\r\n <TabsContent value=\"overview\" className=\"mt-4 pb-6 focus-visible:outline-none\">\r\n <div className=\"space-y-6\">\r\n {/* Context */}\r\n {issue.context && (\r\n <div>\r\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\r\n {formatMessage({ id: 'issues.detail.overview.context' })}\r\n </h3>\r\n <p className=\"text-sm text-muted-foreground whitespace-pre-wrap\">\r\n {issue.context}\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* Labels */}\r\n {issue.labels && issue.labels.length > 0 && (\r\n <div>\r\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\r\n {formatMessage({ id: 'issues.detail.overview.labels' })}\r\n </h3>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {issue.labels.map((label, index) => (\r\n <Badge key={index} variant=\"outline\" className=\"gap-1\">\r\n <Tag className=\"h-3 w-3\" />\r\n {label}\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Meta Info */}\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n <div className=\"p-3 bg-muted/50 rounded-md\">\r\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.detail.overview.createdAt' })}</p>\r\n <p className=\"text-sm\">{new Date(issue.createdAt).toLocaleString()}</p>\r\n </div>\r\n {issue.updatedAt && (\r\n <div className=\"p-3 bg-muted/50 rounded-md\">\r\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.detail.overview.updatedAt' })}</p>\r\n <p className=\"text-sm\">{new Date(issue.updatedAt).toLocaleString()}</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </TabsContent>\r\n\r\n {/* Solutions Tab */}\r\n <TabsContent value=\"solutions\" className=\"mt-4 pb-6 focus-visible:outline-none\">\r\n {!issue.solutions || issue.solutions.length === 0 ? (\r\n <div className=\"text-center py-12 text-muted-foreground\">\r\n <CheckCircle className=\"h-12 w-12 mx-auto mb-4 opacity-50\" />\r\n <p className=\"text-sm\">{formatMessage({ id: 'issues.detail.solutions.empty' })}</p>\r\n </div>\r\n ) : (\r\n <div className=\"space-y-4\">\r\n {issue.solutions.map((solution, index) => (\r\n <div key={solution.id || index} className=\"p-4 bg-muted/50 rounded-md border border-border\">\r\n <div className=\"flex items-center justify-between mb-2\">\r\n <Badge variant={solution.status === 'completed' ? 'success' : 'secondary'}>\r\n {solution.status}\r\n </Badge>\r\n {solution.estimatedEffort && (\r\n <span className=\"text-xs text-muted-foreground\">\r\n {solution.estimatedEffort}\r\n </span>\r\n )}\r\n </div>\r\n <p className=\"text-sm font-medium mb-1\">{solution.description}</p>\r\n {solution.approach && (\r\n <p className=\"text-xs text-muted-foreground\">{solution.approach}</p>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </TabsContent>\r\n\r\n {/* Terminal Tab - Execution Binding */}\r\n <TabsContent value=\"terminal\" className=\"mt-4 pb-6 focus-visible:outline-none\">\r\n <div className=\"space-y-5\">\r\n {/* Tool Selection */}\r\n <div>\r\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\r\n {formatMessage({ id: 'issues.terminal.exec.tool' })}\r\n </h3>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {CLI_TOOLS.map((t) => (\r\n <Button\r\n key={t}\r\n variant={selectedTool === t ? 'default' : 'outline'}\r\n size=\"sm\"\r\n onClick={() => setSelectedTool(t)}\r\n >\r\n {t}\r\n </Button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Mode Selection */}\r\n <div>\r\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\r\n {formatMessage({ id: 'issues.terminal.exec.mode' })}\r\n </h3>\r\n <div className=\"flex gap-2\">\r\n {(['analysis', 'write'] as const).map((m) => (\r\n <Button\r\n key={m}\r\n variant={selectedMode === m ? 'default' : 'outline'}\r\n size=\"sm\"\r\n onClick={() => setSelectedMode(m)}\r\n >\r\n {m}\r\n </Button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Launch Action */}\r\n <div className=\"pt-2 space-y-2\">\r\n <Button\r\n className=\"w-full gap-2\"\r\n disabled={isLaunching || !projectPath}\r\n onClick={handleLaunchSession}\r\n >\r\n {isLaunching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Play className=\"h-4 w-4\" />}\r\n {formatMessage({ id: 'issues.terminal.launch' })}\r\n </Button>\r\n\r\n <Button\r\n variant=\"outline\"\r\n className=\"w-full gap-2\"\r\n onClick={() => {\r\n openTerminal(issue.id);\r\n onClose();\r\n }}\r\n >\r\n <Terminal className=\"h-4 w-4\" />\r\n {formatMessage({ id: 'home.terminalPanel.openInPanel' })}\r\n </Button>\r\n </div>\r\n </div>\r\n </TabsContent>\r\n\r\n {/* History Tab */}\r\n <TabsContent value=\"history\" className=\"mt-4 pb-6 focus-visible:outline-none\">\r\n <div className=\"text-center py-12 text-muted-foreground\">\r\n <History className=\"h-12 w-12 mx-auto mb-4 opacity-50\" />\r\n <p className=\"text-sm\">{formatMessage({ id: 'issues.detail.history.empty' })}</p>\r\n </div>\r\n </TabsContent>\r\n\r\n {/* JSON Tab */}\r\n <TabsContent value=\"json\" className=\"mt-4 pb-6 focus-visible:outline-none\">\r\n <pre className=\"p-4 bg-muted rounded-md overflow-x-auto text-xs\">\r\n {JSON.stringify(issue, null, 2)}\r\n </pre>\r\n </TabsContent>\r\n </div>\r\n </Tabs>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport default IssueDrawer;\r\n","// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === \"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes = {\n INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null)\n return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n if (val === void 0)\n return \"undefined\";\n if (val === null)\n return \"null\";\n const type = typeof val;\n switch (type) {\n case \"boolean\":\n case \"string\":\n case \"number\":\n case \"symbol\":\n case \"function\": {\n return type;\n }\n }\n if (Array.isArray(val))\n return \"array\";\n if (isDate(val))\n return \"date\";\n if (isError(val))\n return \"error\";\n const constructorName = ctorName(val);\n switch (constructorName) {\n case \"Symbol\":\n case \"Promise\":\n case \"WeakMap\":\n case \"WeakSet\":\n case \"Map\":\n case \"Set\":\n return constructorName;\n }\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction ctorName(val) {\n return typeof val.constructor === \"function\" ? val.constructor.name : null;\n}\nfunction isError(val) {\n return val instanceof Error || typeof val.message === \"string\" && val.constructor && typeof val.constructor.stackTraceLimit === \"number\";\n}\nfunction isDate(val) {\n if (val instanceof Date)\n return true;\n return typeof val.toDateString === \"function\" && typeof val.getDate === \"function\" && typeof val.setDate === \"function\";\n}\nfunction kindOf(val) {\n let typeOfVal = typeof val;\n if (process.env.NODE_ENV !== \"production\") {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n if (typeof reducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"function\" || typeof enhancer === \"function\" && typeof arguments[3] === \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"undefined\") {\n enhancer = preloadedState;\n preloadedState = void 0;\n }\n if (typeof enhancer !== \"undefined\") {\n if (typeof enhancer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, preloadedState);\n }\n let currentReducer = reducer;\n let currentState = preloadedState;\n let currentListeners = /* @__PURE__ */ new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = /* @__PURE__ */ new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n }\n return currentState;\n }\n function subscribe(listener) {\n if (typeof listener !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== \"string\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : \"Reducers may not dispatch actions.\");\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach((listener) => {\n listener();\n });\n return action;\n }\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = nextReducer;\n dispatch({\n type: actionTypes_default.REPLACE\n });\n }\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer) {\n if (typeof observer !== \"object\" || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = observer;\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [symbol_observable_default]() {\n return this;\n }\n };\n }\n dispatch({\n type: actionTypes_default.INIT\n });\n const store = {\n dispatch,\n subscribe,\n getState,\n replaceReducer,\n [symbol_observable_default]: observable\n };\n return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n if (reducerKeys.length === 0) {\n return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach((key) => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === actionTypes_default.REPLACE)\n return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? \"keys\" : \"key\"} \"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead: \"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach((key) => {\n const reducer = reducers[key];\n const initialState = reducer(void 0, {\n type: actionTypes_default.INIT\n });\n if (typeof initialState === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n }\n if (typeof reducer(void 0, {\n type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n }) === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\nfunction combineReducers(reducers) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof reducers[key] === \"undefined\") {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === \"function\") {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n let unexpectedKeyCache;\n if (process.env.NODE_ENV !== \"production\") {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state = {}, action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== \"production\") {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === \"undefined\") {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : \"(unknown type)\"}, the slice reducer for key \"${key}\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n return function(...args) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === \"function\") {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== \"object\" || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n }\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === \"function\") {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n if (funcs.length === 0) {\n return (arg) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n return (createStore2) => (reducer, preloadedState) => {\n const store = createStore2(reducer, preloadedState);\n let dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n };\n const middlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n dispatch = compose(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}\n\n// src/utils/isAction.ts\nfunction isAction(action) {\n return isPlainObject(action) && \"type\" in action && typeof action.type === \"string\";\n}\nexport {\n actionTypes_default as __DO_NOT_USE__ActionTypes,\n applyMiddleware,\n bindActionCreators,\n combineReducers,\n compose,\n createStore,\n isAction,\n isPlainObject,\n legacy_createStore\n};\n//# sourceMappingURL=redux.mjs.map","/**\n * @license React\n * use-sync-external-store-with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = React.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/use-sync-external-store-with-selector.production.js');\n} else {\n module.exports = require('./cjs/use-sync-external-store-with-selector.development.js');\n}\n","// src/utils/react.ts\nimport * as React from \"react\";\n\n// src/utils/react-is.ts\nvar IS_REACT_19 = /* @__PURE__ */ React.version.startsWith(\"19\");\nvar REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(\n IS_REACT_19 ? \"react.transitional.element\" : \"react.element\"\n);\nvar REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for(\"react.portal\");\nvar REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for(\"react.fragment\");\nvar REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for(\"react.strict_mode\");\nvar REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for(\"react.profiler\");\nvar REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for(\"react.consumer\");\nvar REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for(\"react.context\");\nvar REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for(\"react.forward_ref\");\nvar REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for(\"react.suspense\");\nvar REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(\n \"react.suspense_list\"\n);\nvar REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for(\"react.memo\");\nvar REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for(\"react.lazy\");\nvar REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for(\"react.offscreen\");\nvar REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(\n \"react.client.reference\"\n);\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nfunction isValidElementType(type) {\n return typeof type === \"string\" || typeof type === \"function\" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === \"object\" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE || type.getModuleId !== void 0) ? true : false;\n}\nfunction typeOf(object) {\n if (typeof object === \"object\" && object !== null) {\n const { $$typeof } = object;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (object = object.type, object) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return object;\n default:\n switch (object = object && object.$$typeof, object) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n}\nfunction isContextConsumer(object) {\n return IS_REACT_19 ? typeOf(object) === REACT_CONSUMER_TYPE : typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/connect/verifySubselectors.ts\nfunction verify(selector, methodName) {\n if (!selector) {\n throw new Error(`Unexpected value for ${methodName} in connect.`);\n } else if (methodName === \"mapStateToProps\" || methodName === \"mapDispatchToProps\") {\n if (!Object.prototype.hasOwnProperty.call(selector, \"dependsOnOwnProps\")) {\n warning(\n `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`\n );\n }\n }\n}\nfunction verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) {\n verify(mapStateToProps, \"mapStateToProps\");\n verify(mapDispatchToProps, \"mapDispatchToProps\");\n verify(mergeProps, \"mergeProps\");\n}\n\n// src/connect/selectorFactory.ts\nfunction pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, {\n areStatesEqual,\n areOwnPropsEqual,\n areStatePropsEqual\n}) {\n let hasRunAtLeastOnce = false;\n let state;\n let ownProps;\n let stateProps;\n let dispatchProps;\n let mergedProps;\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps)\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps)\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps)\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n function handleNewState() {\n const nextStateProps = mapStateToProps(state, ownProps);\n const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged)\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n function handleSubsequentCalls(nextState, nextOwnProps) {\n const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n const stateChanged = !areStatesEqual(\n nextState,\n state,\n nextOwnProps,\n ownProps\n );\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n}\nfunction finalPropsSelectorFactory(dispatch, {\n initMapStateToProps,\n initMapDispatchToProps,\n initMergeProps,\n ...options\n}) {\n const mapStateToProps = initMapStateToProps(dispatch, options);\n const mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n const mergeProps = initMergeProps(dispatch, options);\n if (process.env.NODE_ENV !== \"production\") {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps);\n }\n return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}\n\n// src/utils/bindActionCreators.ts\nfunction bindActionCreators(actionCreators, dispatch) {\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === \"function\") {\n boundActionCreators[key] = (...args) => dispatch(actionCreator(...args));\n }\n }\n return boundActionCreators;\n}\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null) return false;\n const proto = Object.getPrototypeOf(obj);\n if (proto === null) return true;\n let baseProto = proto;\n while (Object.getPrototypeOf(baseProto) !== null) {\n baseProto = Object.getPrototypeOf(baseProto);\n }\n return proto === baseProto;\n}\n\n// src/utils/verifyPlainObject.ts\nfunction verifyPlainObject(value, displayName, methodName) {\n if (!isPlainObject(value)) {\n warning(\n `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`\n );\n }\n}\n\n// src/connect/wrapMapToProps.ts\nfunction wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch) {\n const constant = getConstant(dispatch);\n function constantSelector() {\n return constant;\n }\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n}\nfunction getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n}\nfunction wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, { displayName }) {\n const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, void 0);\n };\n proxy.dependsOnOwnProps = true;\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n let props = proxy(stateOrDispatch, ownProps);\n if (typeof props === \"function\") {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n if (process.env.NODE_ENV !== \"production\")\n verifyPlainObject(props, displayName, methodName);\n return props;\n };\n return proxy;\n };\n}\n\n// src/connect/invalidArgFactory.ts\nfunction createInvalidArgFactory(arg, name) {\n return (dispatch, options) => {\n throw new Error(\n `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`\n );\n };\n}\n\n// src/connect/mapDispatchToProps.ts\nfunction mapDispatchToPropsFactory(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === \"object\" ? wrapMapToPropsConstant(\n (dispatch) => (\n // @ts-ignore\n bindActionCreators(mapDispatchToProps, dispatch)\n )\n ) : !mapDispatchToProps ? wrapMapToPropsConstant((dispatch) => ({\n dispatch\n })) : typeof mapDispatchToProps === \"function\" ? (\n // @ts-ignore\n wrapMapToPropsFunc(mapDispatchToProps, \"mapDispatchToProps\")\n ) : createInvalidArgFactory(mapDispatchToProps, \"mapDispatchToProps\");\n}\n\n// src/connect/mapStateToProps.ts\nfunction mapStateToPropsFactory(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === \"function\" ? (\n // @ts-ignore\n wrapMapToPropsFunc(mapStateToProps, \"mapStateToProps\")\n ) : createInvalidArgFactory(mapStateToProps, \"mapStateToProps\");\n}\n\n// src/connect/mergeProps.ts\nfunction defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return { ...ownProps, ...stateProps, ...dispatchProps };\n}\nfunction wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, { displayName, areMergedPropsEqual }) {\n let hasRunOnce = false;\n let mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n if (hasRunOnce) {\n if (!areMergedPropsEqual(nextMergedProps, mergedProps))\n mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (process.env.NODE_ENV !== \"production\")\n verifyPlainObject(mergedProps, displayName, \"mergeProps\");\n }\n return mergedProps;\n };\n };\n}\nfunction mergePropsFactory(mergeProps) {\n return !mergeProps ? () => defaultMergeProps : typeof mergeProps === \"function\" ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, \"mergeProps\");\n}\n\n// src/utils/batch.ts\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\n// src/utils/Subscription.ts\nfunction createListenerCollection() {\n let first = null;\n let last = null;\n return {\n clear() {\n first = null;\n last = null;\n },\n notify() {\n defaultNoopBatch(() => {\n let listener = first;\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n get() {\n const listeners = [];\n let listener = first;\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n return listeners;\n },\n subscribe(callback) {\n let isSubscribed = true;\n const listener = last = {\n callback,\n next: null,\n prev: last\n };\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n return function unsubscribe() {\n if (!isSubscribed || first === null) return;\n isSubscribed = false;\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n };\n}\nvar nullListeners = {\n notify() {\n },\n get: () => []\n};\nfunction createSubscription(store, parentSub) {\n let unsubscribe;\n let listeners = nullListeners;\n let subscriptionsAmount = 0;\n let selfSubscribed = false;\n function addNestedSub(listener) {\n trySubscribe();\n const cleanupListener = listeners.subscribe(listener);\n let removed = false;\n return () => {\n if (!removed) {\n removed = true;\n cleanupListener();\n tryUnsubscribe();\n }\n };\n }\n function notifyNestedSubs() {\n listeners.notify();\n }\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n function isSubscribed() {\n return selfSubscribed;\n }\n function trySubscribe() {\n subscriptionsAmount++;\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n function tryUnsubscribe() {\n subscriptionsAmount--;\n if (unsubscribe && subscriptionsAmount === 0) {\n unsubscribe();\n unsubscribe = void 0;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n function trySubscribeSelf() {\n if (!selfSubscribed) {\n selfSubscribed = true;\n trySubscribe();\n }\n }\n function tryUnsubscribeSelf() {\n if (selfSubscribed) {\n selfSubscribed = false;\n tryUnsubscribe();\n }\n }\n const subscription = {\n addNestedSub,\n notifyNestedSubs,\n handleChangeWrapper,\n isSubscribed,\n trySubscribe: trySubscribeSelf,\n tryUnsubscribe: tryUnsubscribeSelf,\n getListeners: () => listeners\n };\n return subscription;\n}\n\n// src/utils/useIsomorphicLayoutEffect.ts\nvar canUseDOM = () => !!(typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\");\nvar isDOM = /* @__PURE__ */ canUseDOM();\nvar isRunningInReactNative = () => typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\";\nvar isReactNative = /* @__PURE__ */ isRunningInReactNative();\nvar getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? React.useLayoutEffect : React.useEffect;\nvar useIsomorphicLayoutEffect = /* @__PURE__ */ getUseIsomorphicLayoutEffect();\n\n// src/utils/shallowEqual.ts\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n for (let i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n return true;\n}\n\n// src/utils/hoistStatics.ts\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n $$typeof: true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n $$typeof: true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {\n [ForwardRef]: FORWARD_REF_STATICS,\n [Memo]: MEMO_STATICS\n};\nfunction getStatics(component) {\n if (isMemo(component)) {\n return MEMO_STATICS;\n }\n return TYPE_STATICS[component[\"$$typeof\"]] || REACT_STATICS;\n}\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent) {\n if (typeof sourceComponent !== \"string\") {\n if (objectPrototype) {\n const inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent);\n }\n }\n let keys = getOwnPropertyNames(sourceComponent);\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n const targetStatics = getStatics(targetComponent);\n const sourceStatics = getStatics(sourceComponent);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!KNOWN_STATICS[key] && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n const descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n try {\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {\n }\n }\n }\n }\n return targetComponent;\n}\n\n// src/components/Context.ts\nvar ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`);\nvar gT = typeof globalThis !== \"undefined\" ? globalThis : (\n /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */\n {}\n);\nfunction getContext() {\n if (!React.createContext) return {};\n const contextMap = gT[ContextKey] ??= /* @__PURE__ */ new Map();\n let realContext = contextMap.get(React.createContext);\n if (!realContext) {\n realContext = React.createContext(\n null\n );\n if (process.env.NODE_ENV !== \"production\") {\n realContext.displayName = \"ReactRedux\";\n }\n contextMap.set(React.createContext, realContext);\n }\n return realContext;\n}\nvar ReactReduxContext = /* @__PURE__ */ getContext();\n\n// src/components/connect.tsx\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\nvar stringifyComponent = (Comp) => {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);\n}\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n lastWrapperProps.current = wrapperProps;\n renderIsScheduled.current = false;\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n}\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, additionalSubscribeListener) {\n if (!shouldHandleStateChanges) return () => {\n };\n let didUnsubscribe = false;\n let lastThrownError = null;\n const checkForUpdates = () => {\n if (didUnsubscribe || !isMounted.current) {\n return;\n }\n const latestStoreState = store.getState();\n let newChildProps, error;\n try {\n newChildProps = childPropsSelector(\n latestStoreState,\n lastWrapperProps.current\n );\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n if (!error) {\n lastThrownError = null;\n }\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true;\n additionalSubscribeListener();\n }\n };\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe();\n checkForUpdates();\n const unsubscribeWrapper = () => {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n if (lastThrownError) {\n throw lastThrownError;\n }\n };\n return unsubscribeWrapper;\n}\nfunction strictEqual(a, b) {\n return a === b;\n}\nvar hasWarnedAboutDeprecatedPureOption = false;\nfunction connect(mapStateToProps, mapDispatchToProps, mergeProps, {\n // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n // @ts-ignore\n pure,\n areStatesEqual = strictEqual,\n areOwnPropsEqual = shallowEqual,\n areStatePropsEqual = shallowEqual,\n areMergedPropsEqual = shallowEqual,\n // use React's forwardRef to expose a ref of the wrapped component\n forwardRef = false,\n // the context consumer to use\n context = ReactReduxContext\n} = {}) {\n if (process.env.NODE_ENV !== \"production\") {\n if (pure !== void 0 && !hasWarnedAboutDeprecatedPureOption) {\n hasWarnedAboutDeprecatedPureOption = true;\n warning(\n 'The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component'\n );\n }\n }\n const Context = context;\n const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);\n const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);\n const initMergeProps = mergePropsFactory(mergeProps);\n const shouldHandleStateChanges = Boolean(mapStateToProps);\n const wrapWithConnect = (WrappedComponent) => {\n if (process.env.NODE_ENV !== \"production\") {\n const isValid = /* @__PURE__ */ isValidElementType(WrappedComponent);\n if (!isValid)\n throw new Error(\n `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(\n WrappedComponent\n )}`\n );\n }\n const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || \"Component\";\n const displayName = `Connect(${wrappedComponentName})`;\n const selectorFactoryOptions = {\n shouldHandleStateChanges,\n displayName,\n wrappedComponentName,\n WrappedComponent,\n // @ts-ignore\n initMapStateToProps,\n initMapDispatchToProps,\n initMergeProps,\n areStatesEqual,\n areStatePropsEqual,\n areOwnPropsEqual,\n areMergedPropsEqual\n };\n function ConnectFunction(props) {\n const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {\n const { reactReduxForwardedRef: reactReduxForwardedRef2, ...wrapperProps2 } = props;\n return [props.context, reactReduxForwardedRef2, wrapperProps2];\n }, [props]);\n const ContextToUse = React.useMemo(() => {\n let ResultContext = Context;\n if (propsContext?.Consumer) {\n if (process.env.NODE_ENV !== \"production\") {\n const isValid = /* @__PURE__ */ isContextConsumer(\n // @ts-ignore\n /* @__PURE__ */ React.createElement(propsContext.Consumer, null)\n );\n if (!isValid) {\n throw new Error(\n \"You must pass a valid React context consumer as `props.context`\"\n );\n }\n ResultContext = propsContext;\n }\n }\n return ResultContext;\n }, [propsContext, Context]);\n const contextValue = React.useContext(ContextToUse);\n const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n if (process.env.NODE_ENV !== \"production\" && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(\n `Could not find \"store\" in the context of \"${displayName}\". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to ${displayName} in connect options.`\n );\n }\n const store = didStoreComeFromProps ? props.store : contextValue.store;\n const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;\n const childPropsSelector = React.useMemo(() => {\n return finalPropsSelectorFactory(store.dispatch, selectorFactoryOptions);\n }, [store]);\n const [subscription, notifyNestedSubs] = React.useMemo(() => {\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY;\n const subscription2 = createSubscription(\n store,\n didStoreComeFromProps ? void 0 : contextValue.subscription\n );\n const notifyNestedSubs2 = subscription2.notifyNestedSubs.bind(subscription2);\n return [subscription2, notifyNestedSubs2];\n }, [store, didStoreComeFromProps, contextValue]);\n const overriddenContextValue = React.useMemo(() => {\n if (didStoreComeFromProps) {\n return contextValue;\n }\n return {\n ...contextValue,\n subscription\n };\n }, [didStoreComeFromProps, contextValue, subscription]);\n const lastChildProps = React.useRef(void 0);\n const lastWrapperProps = React.useRef(wrapperProps);\n const childPropsFromStoreUpdate = React.useRef(void 0);\n const renderIsScheduled = React.useRef(false);\n const isMounted = React.useRef(false);\n const latestSubscriptionCallbackError = React.useRef(\n void 0\n );\n useIsomorphicLayoutEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n const actualChildPropsSelector = React.useMemo(() => {\n const selector = () => {\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n }\n return childPropsSelector(store.getState(), wrapperProps);\n };\n return selector;\n }, [store, wrapperProps]);\n const subscribeForReact = React.useMemo(() => {\n const subscribe = (reactListener) => {\n if (!subscription) {\n return () => {\n };\n }\n return subscribeUpdates(\n shouldHandleStateChanges,\n store,\n subscription,\n // @ts-ignore\n childPropsSelector,\n lastWrapperProps,\n lastChildProps,\n renderIsScheduled,\n isMounted,\n childPropsFromStoreUpdate,\n notifyNestedSubs,\n reactListener\n );\n };\n return subscribe;\n }, [subscription]);\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [\n lastWrapperProps,\n lastChildProps,\n renderIsScheduled,\n wrapperProps,\n childPropsFromStoreUpdate,\n notifyNestedSubs\n ]);\n let actualChildProps;\n try {\n actualChildProps = React.useSyncExternalStore(\n // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n subscribeForReact,\n // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n actualChildPropsSelector,\n getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector\n );\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n ;\n err.message += `\nThe error may be correlated with this previous error:\n${latestSubscriptionCallbackError.current.stack}\n\n`;\n }\n throw err;\n }\n useIsomorphicLayoutEffect(() => {\n latestSubscriptionCallbackError.current = void 0;\n childPropsFromStoreUpdate.current = void 0;\n lastChildProps.current = actualChildProps;\n });\n const renderedWrappedComponent = React.useMemo(() => {\n return (\n // @ts-ignore\n /* @__PURE__ */ React.createElement(\n WrappedComponent,\n {\n ...actualChildProps,\n ref: reactReduxForwardedRef\n }\n )\n );\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]);\n const renderedChild = React.useMemo(() => {\n if (shouldHandleStateChanges) {\n return /* @__PURE__ */ React.createElement(ContextToUse.Provider, { value: overriddenContextValue }, renderedWrappedComponent);\n }\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n }\n const _Connect = React.memo(ConnectFunction);\n const Connect = _Connect;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n if (forwardRef) {\n const _forwarded = React.forwardRef(\n function forwardConnectRef(props, ref) {\n return /* @__PURE__ */ React.createElement(Connect, { ...props, reactReduxForwardedRef: ref });\n }\n );\n const forwarded = _forwarded;\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return /* @__PURE__ */ hoistNonReactStatics(forwarded, WrappedComponent);\n }\n return /* @__PURE__ */ hoistNonReactStatics(Connect, WrappedComponent);\n };\n return wrapWithConnect;\n}\nvar connect_default = connect;\n\n// src/components/Provider.tsx\nfunction Provider(providerProps) {\n const { children, context, serverState, store } = providerProps;\n const contextValue = React.useMemo(() => {\n const subscription = createSubscription(store);\n const baseContextValue = {\n store,\n subscription,\n getServerState: serverState ? () => serverState : void 0\n };\n if (process.env.NODE_ENV === \"production\") {\n return baseContextValue;\n } else {\n const { identityFunctionCheck = \"once\", stabilityCheck = \"once\" } = providerProps;\n return /* @__PURE__ */ Object.assign(baseContextValue, {\n stabilityCheck,\n identityFunctionCheck\n });\n }\n }, [store, serverState]);\n const previousState = React.useMemo(() => store.getState(), [store]);\n useIsomorphicLayoutEffect(() => {\n const { subscription } = contextValue;\n subscription.onStateChange = subscription.notifyNestedSubs;\n subscription.trySubscribe();\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n return () => {\n subscription.tryUnsubscribe();\n subscription.onStateChange = void 0;\n };\n }, [contextValue, previousState]);\n const Context = context || ReactReduxContext;\n return /* @__PURE__ */ React.createElement(Context.Provider, { value: contextValue }, children);\n}\nvar Provider_default = Provider;\n\n// src/hooks/useReduxContext.ts\nfunction createReduxContextHook(context = ReactReduxContext) {\n return function useReduxContext2() {\n const contextValue = React.useContext(context);\n if (process.env.NODE_ENV !== \"production\" && !contextValue) {\n throw new Error(\n \"could not find react-redux context value; please ensure the component is wrapped in a <Provider>\"\n );\n }\n return contextValue;\n };\n}\nvar useReduxContext = /* @__PURE__ */ createReduxContextHook();\n\n// src/hooks/useStore.ts\nfunction createStoreHook(context = ReactReduxContext) {\n const useReduxContext2 = context === ReactReduxContext ? useReduxContext : (\n // @ts-ignore\n createReduxContextHook(context)\n );\n const useStore2 = () => {\n const { store } = useReduxContext2();\n return store;\n };\n Object.assign(useStore2, {\n withTypes: () => useStore2\n });\n return useStore2;\n}\nvar useStore = /* @__PURE__ */ createStoreHook();\n\n// src/hooks/useDispatch.ts\nfunction createDispatchHook(context = ReactReduxContext) {\n const useStore2 = context === ReactReduxContext ? useStore : createStoreHook(context);\n const useDispatch2 = () => {\n const store = useStore2();\n return store.dispatch;\n };\n Object.assign(useDispatch2, {\n withTypes: () => useDispatch2\n });\n return useDispatch2;\n}\nvar useDispatch = /* @__PURE__ */ createDispatchHook();\n\n// src/hooks/useSelector.ts\nimport { useSyncExternalStoreWithSelector } from \"use-sync-external-store/with-selector.js\";\nvar refEquality = (a, b) => a === b;\nfunction createSelectorHook(context = ReactReduxContext) {\n const useReduxContext2 = context === ReactReduxContext ? useReduxContext : createReduxContextHook(context);\n const useSelector2 = (selector, equalityFnOrOptions = {}) => {\n const { equalityFn = refEquality } = typeof equalityFnOrOptions === \"function\" ? { equalityFn: equalityFnOrOptions } : equalityFnOrOptions;\n if (process.env.NODE_ENV !== \"production\") {\n if (!selector) {\n throw new Error(`You must pass a selector to useSelector`);\n }\n if (typeof selector !== \"function\") {\n throw new Error(`You must pass a function as a selector to useSelector`);\n }\n if (typeof equalityFn !== \"function\") {\n throw new Error(\n `You must pass a function as an equality function to useSelector`\n );\n }\n }\n const reduxContext = useReduxContext2();\n const { store, subscription, getServerState } = reduxContext;\n const firstRun = React.useRef(true);\n const wrappedSelector = React.useCallback(\n {\n [selector.name](state) {\n const selected = selector(state);\n if (process.env.NODE_ENV !== \"production\") {\n const { devModeChecks = {} } = typeof equalityFnOrOptions === \"function\" ? {} : equalityFnOrOptions;\n const { identityFunctionCheck, stabilityCheck } = reduxContext;\n const {\n identityFunctionCheck: finalIdentityFunctionCheck,\n stabilityCheck: finalStabilityCheck\n } = {\n stabilityCheck,\n identityFunctionCheck,\n ...devModeChecks\n };\n if (finalStabilityCheck === \"always\" || finalStabilityCheck === \"once\" && firstRun.current) {\n const toCompare = selector(state);\n if (!equalityFn(selected, toCompare)) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"Selector \" + (selector.name || \"unknown\") + \" returned a different result when called with the same parameters. This can lead to unnecessary rerenders.\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization\",\n {\n state,\n selected,\n selected2: toCompare,\n stack\n }\n );\n }\n }\n if (finalIdentityFunctionCheck === \"always\" || finalIdentityFunctionCheck === \"once\" && firstRun.current) {\n if (selected === state) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"Selector \" + (selector.name || \"unknown\") + \" returned the root state when called. This can lead to unnecessary rerenders.\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.\",\n { stack }\n );\n }\n }\n if (firstRun.current) firstRun.current = false;\n }\n return selected;\n }\n }[selector.name],\n [selector]\n );\n const selectedState = useSyncExternalStoreWithSelector(\n subscription.addNestedSub,\n store.getState,\n getServerState || store.getState,\n wrappedSelector,\n equalityFn\n );\n React.useDebugValue(selectedState);\n return selectedState;\n };\n Object.assign(useSelector2, {\n withTypes: () => useSelector2\n });\n return useSelector2;\n}\nvar useSelector = /* @__PURE__ */ createSelectorHook();\n\n// src/exports.ts\nvar batch = defaultNoopBatch;\nexport {\n Provider_default as Provider,\n ReactReduxContext,\n batch,\n connect_default as connect,\n createDispatchHook,\n createSelectorHook,\n createStoreHook,\n shallowEqual,\n useDispatch,\n useSelector,\n useStore\n};\n//# sourceMappingURL=react-redux.mjs.map","import invariant from 'tiny-invariant';\n\nvar getRect = function getRect(_ref) {\n var top = _ref.top,\n right = _ref.right,\n bottom = _ref.bottom,\n left = _ref.left;\n var width = right - left;\n var height = bottom - top;\n var rect = {\n top: top,\n right: right,\n bottom: bottom,\n left: left,\n width: width,\n height: height,\n x: left,\n y: top,\n center: {\n x: (right + left) / 2,\n y: (bottom + top) / 2\n }\n };\n return rect;\n};\nvar expand = function expand(target, expandBy) {\n return {\n top: target.top - expandBy.top,\n left: target.left - expandBy.left,\n bottom: target.bottom + expandBy.bottom,\n right: target.right + expandBy.right\n };\n};\nvar shrink = function shrink(target, shrinkBy) {\n return {\n top: target.top + shrinkBy.top,\n left: target.left + shrinkBy.left,\n bottom: target.bottom - shrinkBy.bottom,\n right: target.right - shrinkBy.right\n };\n};\n\nvar shift = function shift(target, shiftBy) {\n return {\n top: target.top + shiftBy.y,\n left: target.left + shiftBy.x,\n bottom: target.bottom + shiftBy.y,\n right: target.right + shiftBy.x\n };\n};\n\nvar noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\nvar createBox = function createBox(_ref2) {\n var borderBox = _ref2.borderBox,\n _ref2$margin = _ref2.margin,\n margin = _ref2$margin === void 0 ? noSpacing : _ref2$margin,\n _ref2$border = _ref2.border,\n border = _ref2$border === void 0 ? noSpacing : _ref2$border,\n _ref2$padding = _ref2.padding,\n padding = _ref2$padding === void 0 ? noSpacing : _ref2$padding;\n var marginBox = getRect(expand(borderBox, margin));\n var paddingBox = getRect(shrink(borderBox, border));\n var contentBox = getRect(shrink(paddingBox, padding));\n return {\n marginBox: marginBox,\n borderBox: getRect(borderBox),\n paddingBox: paddingBox,\n contentBox: contentBox,\n margin: margin,\n border: border,\n padding: padding\n };\n};\n\nvar parse = function parse(raw) {\n var value = raw.slice(0, -2);\n var suffix = raw.slice(-2);\n\n if (suffix !== 'px') {\n return 0;\n }\n\n var result = Number(value);\n !!isNaN(result) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Could not parse value [raw: \" + raw + \", without suffix: \" + value + \"]\") : invariant(false) : void 0;\n return result;\n};\n\nvar getWindowScroll = function getWindowScroll() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n};\n\nvar offset = function offset(original, change) {\n var borderBox = original.borderBox,\n border = original.border,\n margin = original.margin,\n padding = original.padding;\n var shifted = shift(borderBox, change);\n return createBox({\n borderBox: shifted,\n border: border,\n margin: margin,\n padding: padding\n });\n};\nvar withScroll = function withScroll(original, scroll) {\n if (scroll === void 0) {\n scroll = getWindowScroll();\n }\n\n return offset(original, scroll);\n};\nvar calculateBox = function calculateBox(borderBox, styles) {\n var margin = {\n top: parse(styles.marginTop),\n right: parse(styles.marginRight),\n bottom: parse(styles.marginBottom),\n left: parse(styles.marginLeft)\n };\n var padding = {\n top: parse(styles.paddingTop),\n right: parse(styles.paddingRight),\n bottom: parse(styles.paddingBottom),\n left: parse(styles.paddingLeft)\n };\n var border = {\n top: parse(styles.borderTopWidth),\n right: parse(styles.borderRightWidth),\n bottom: parse(styles.borderBottomWidth),\n left: parse(styles.borderLeftWidth)\n };\n return createBox({\n borderBox: borderBox,\n margin: margin,\n padding: padding,\n border: border\n });\n};\nvar getBox = function getBox(el) {\n var borderBox = el.getBoundingClientRect();\n var styles = window.getComputedStyle(el);\n return calculateBox(borderBox, styles);\n};\n\nexport { calculateBox, createBox, expand, getBox, getRect, offset, shrink, withScroll };\n","var rafSchd = function rafSchd(fn) {\n var lastArgs = [];\n var frameId = null;\n\n var wrapperFn = function wrapperFn() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n\n if (frameId) {\n return;\n }\n\n frameId = requestAnimationFrame(function () {\n frameId = null;\n fn.apply(void 0, lastArgs);\n });\n };\n\n wrapperFn.cancel = function () {\n if (!frameId) {\n return;\n }\n\n cancelAnimationFrame(frameId);\n frameId = null;\n };\n\n return wrapperFn;\n};\n\nexport default rafSchd;\n","import React, { useState, useRef, useEffect, useLayoutEffect, useContext } from 'react';\nimport ReactDOM, { flushSync } from 'react-dom';\nimport { createStore as createStore$1, compose, applyMiddleware, bindActionCreators } from 'redux';\nimport { Provider, connect } from 'react-redux';\nimport { getRect, expand, offset, withScroll, calculateBox, getBox, createBox } from 'css-box-model';\nimport rafSchd from 'raf-schd';\nimport _extends from '@babel/runtime/helpers/esm/extends';\n\nconst isProduction$1 = process.env.NODE_ENV === 'production';\nconst spacesAndTabs = /[ \\t]{2,}/g;\nconst lineStartWithSpaces = /^[ \\t]*/gm;\nconst clean$2 = value => value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();\nconst getDevMessage = message => clean$2(`\n %c@hello-pangea/dnd\n\n %c${clean$2(message)}\n\n %c👷 This is a development only message. It will be removed in production builds.\n`);\nconst getFormattedMessage = message => [getDevMessage(message), 'color: #00C584; font-size: 1.2em; font-weight: bold;', 'line-height: 1.5', 'color: #723874;'];\nconst isDisabledFlag = '__@hello-pangea/dnd-disable-dev-warnings';\nfunction log(type, message) {\n if (isProduction$1) {\n return;\n }\n if (typeof window !== 'undefined' && window[isDisabledFlag]) {\n return;\n }\n console[type](...getFormattedMessage(message));\n}\nconst warning = log.bind(null, 'warn');\nconst error = log.bind(null, 'error');\n\nfunction noop$2() {}\n\nfunction getOptions(shared, fromBinding) {\n return {\n ...shared,\n ...fromBinding\n };\n}\nfunction bindEvents(el, bindings, sharedOptions) {\n const unbindings = bindings.map(binding => {\n const options = getOptions(sharedOptions, binding.options);\n el.addEventListener(binding.eventName, binding.fn, options);\n return function unbind() {\n el.removeEventListener(binding.eventName, binding.fn, options);\n };\n });\n return function unbindAll() {\n unbindings.forEach(unbind => {\n unbind();\n });\n };\n}\n\nconst isProduction = process.env.NODE_ENV === 'production';\nconst prefix$1 = 'Invariant failed';\nclass RbdInvariant extends Error {}\nRbdInvariant.prototype.toString = function toString() {\n return this.message;\n};\nfunction invariant(condition, message) {\n if (isProduction) {\n throw new RbdInvariant(prefix$1);\n } else {\n throw new RbdInvariant(`${prefix$1}: ${message || ''}`);\n }\n}\n\nclass ErrorBoundary extends React.Component {\n constructor(...args) {\n super(...args);\n this.callbacks = null;\n this.unbind = noop$2;\n this.onWindowError = event => {\n const callbacks = this.getCallbacks();\n if (callbacks.isDragging()) {\n callbacks.tryAbort();\n process.env.NODE_ENV !== \"production\" ? warning(`\n An error was caught by our window 'error' event listener while a drag was occurring.\n The active drag has been aborted.\n `) : void 0;\n }\n const err = event.error;\n if (err instanceof RbdInvariant) {\n event.preventDefault();\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n }\n };\n this.getCallbacks = () => {\n if (!this.callbacks) {\n throw new Error('Unable to find AppCallbacks in <ErrorBoundary/>');\n }\n return this.callbacks;\n };\n this.setCallbacks = callbacks => {\n this.callbacks = callbacks;\n };\n }\n componentDidMount() {\n this.unbind = bindEvents(window, [{\n eventName: 'error',\n fn: this.onWindowError\n }]);\n }\n componentDidCatch(err) {\n if (err instanceof RbdInvariant) {\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n this.setState({});\n return;\n }\n throw err;\n }\n componentWillUnmount() {\n this.unbind();\n }\n render() {\n return this.props.children(this.setCallbacks);\n }\n}\n\nconst dragHandleUsageInstructions = `\n Press space bar to start a drag.\n When dragging you can use the arrow keys to move the item around and escape to cancel.\n Some screen readers may require you to be in focus mode or to use your pass through key\n`;\nconst position = index => index + 1;\nconst onDragStart = start => `\n You have lifted an item in position ${position(start.source.index)}\n`;\nconst withLocation = (source, destination) => {\n const isInHomeList = source.droppableId === destination.droppableId;\n const startPosition = position(source.index);\n const endPosition = position(destination.index);\n if (isInHomeList) {\n return `\n You have moved the item from position ${startPosition}\n to position ${endPosition}\n `;\n }\n return `\n You have moved the item from position ${startPosition}\n in list ${source.droppableId}\n to list ${destination.droppableId}\n in position ${endPosition}\n `;\n};\nconst withCombine = (id, source, combine) => {\n const inHomeList = source.droppableId === combine.droppableId;\n if (inHomeList) {\n return `\n The item ${id}\n has been combined with ${combine.draggableId}`;\n }\n return `\n The item ${id}\n in list ${source.droppableId}\n has been combined with ${combine.draggableId}\n in list ${combine.droppableId}\n `;\n};\nconst onDragUpdate = update => {\n const location = update.destination;\n if (location) {\n return withLocation(update.source, location);\n }\n const combine = update.combine;\n if (combine) {\n return withCombine(update.draggableId, update.source, combine);\n }\n return 'You are over an area that cannot be dropped on';\n};\nconst returnedToStart = source => `\n The item has returned to its starting position\n of ${position(source.index)}\n`;\nconst onDragEnd = result => {\n if (result.reason === 'CANCEL') {\n return `\n Movement cancelled.\n ${returnedToStart(result.source)}\n `;\n }\n const location = result.destination;\n const combine = result.combine;\n if (location) {\n return `\n You have dropped the item.\n ${withLocation(result.source, location)}\n `;\n }\n if (combine) {\n return `\n You have dropped the item.\n ${withCombine(result.draggableId, result.source, combine)}\n `;\n }\n return `\n The item has been dropped while not over a drop area.\n ${returnedToStart(result.source)}\n `;\n};\nconst preset = {\n dragHandleUsageInstructions,\n onDragStart,\n onDragUpdate,\n onDragEnd\n};\n\nfunction isEqual$2(first, second) {\n if (first === second) {\n return true;\n }\n if (Number.isNaN(first) && Number.isNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (let i = 0; i < newInputs.length; i++) {\n if (!isEqual$2(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction useMemo(getResult, inputs) {\n const initial = useState(() => ({\n inputs,\n result: getResult()\n }))[0];\n const isFirstRun = useRef(true);\n const committed = useRef(initial);\n const useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));\n const cache = useCache ? committed.current : {\n inputs,\n result: getResult()\n };\n useEffect(() => {\n isFirstRun.current = false;\n committed.current = cache;\n }, [cache]);\n return cache.result;\n}\nfunction useCallback(callback, inputs) {\n return useMemo(() => callback, inputs);\n}\n\nconst origin = {\n x: 0,\n y: 0\n};\nconst add = (point1, point2) => ({\n x: point1.x + point2.x,\n y: point1.y + point2.y\n});\nconst subtract = (point1, point2) => ({\n x: point1.x - point2.x,\n y: point1.y - point2.y\n});\nconst isEqual$1 = (point1, point2) => point1.x === point2.x && point1.y === point2.y;\nconst negate = point => ({\n x: point.x !== 0 ? -point.x : 0,\n y: point.y !== 0 ? -point.y : 0\n});\nconst patch = (line, value, otherValue = 0) => {\n if (line === 'x') {\n return {\n x: value,\n y: otherValue\n };\n }\n return {\n x: otherValue,\n y: value\n };\n};\nconst distance = (point1, point2) => Math.sqrt((point2.x - point1.x) ** 2 + (point2.y - point1.y) ** 2);\nconst closest$1 = (target, points) => Math.min(...points.map(point => distance(target, point)));\nconst apply = fn => point => ({\n x: fn(point.x),\n y: fn(point.y)\n});\n\nvar executeClip = (frame, subject) => {\n const result = getRect({\n top: Math.max(subject.top, frame.top),\n right: Math.min(subject.right, frame.right),\n bottom: Math.min(subject.bottom, frame.bottom),\n left: Math.max(subject.left, frame.left)\n });\n if (result.width <= 0 || result.height <= 0) {\n return null;\n }\n return result;\n};\n\nconst offsetByPosition = (spacing, point) => ({\n top: spacing.top + point.y,\n left: spacing.left + point.x,\n bottom: spacing.bottom + point.y,\n right: spacing.right + point.x\n});\nconst getCorners = spacing => [{\n x: spacing.left,\n y: spacing.top\n}, {\n x: spacing.right,\n y: spacing.top\n}, {\n x: spacing.left,\n y: spacing.bottom\n}, {\n x: spacing.right,\n y: spacing.bottom\n}];\nconst noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\n\nconst scroll$1 = (target, frame) => {\n if (!frame) {\n return target;\n }\n return offsetByPosition(target, frame.scroll.diff.displacement);\n};\nconst increase = (target, axis, withPlaceholder) => {\n if (withPlaceholder && withPlaceholder.increasedBy) {\n return {\n ...target,\n [axis.end]: target[axis.end] + withPlaceholder.increasedBy[axis.line]\n };\n }\n return target;\n};\nconst clip = (target, frame) => {\n if (frame && frame.shouldClipSubject) {\n return executeClip(frame.pageMarginBox, target);\n }\n return getRect(target);\n};\nvar getSubject = ({\n page,\n withPlaceholder,\n axis,\n frame\n}) => {\n const scrolled = scroll$1(page.marginBox, frame);\n const increased = increase(scrolled, axis, withPlaceholder);\n const clipped = clip(increased, frame);\n return {\n page,\n withPlaceholder,\n active: clipped\n };\n};\n\nvar scrollDroppable = (droppable, newScroll) => {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const scrollable = droppable.frame;\n const scrollDiff = subtract(newScroll, scrollable.scroll.initial);\n const scrollDisplacement = negate(scrollDiff);\n const frame = {\n ...scrollable,\n scroll: {\n initial: scrollable.scroll.initial,\n current: newScroll,\n diff: {\n value: scrollDiff,\n displacement: scrollDisplacement\n },\n max: scrollable.scroll.max\n }\n };\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: droppable.subject.withPlaceholder,\n axis: droppable.axis,\n frame\n });\n const result = {\n ...droppable,\n frame,\n subject\n };\n return result;\n};\n\nfunction memoizeOne(resultFn, isEqual = areInputsEqual) {\n let cache = null;\n function memoized(...newArgs) {\n if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n const lastResult = resultFn.apply(this, newArgs);\n cache = {\n lastResult,\n lastArgs: newArgs,\n lastThis: this\n };\n return lastResult;\n }\n memoized.clear = function clear() {\n cache = null;\n };\n return memoized;\n}\n\nconst toDroppableMap = memoizeOne(droppables => droppables.reduce((previous, current) => {\n previous[current.descriptor.id] = current;\n return previous;\n}, {}));\nconst toDraggableMap = memoizeOne(draggables => draggables.reduce((previous, current) => {\n previous[current.descriptor.id] = current;\n return previous;\n}, {}));\nconst toDroppableList = memoizeOne(droppables => Object.values(droppables));\nconst toDraggableList = memoizeOne(draggables => Object.values(draggables));\n\nvar getDraggablesInsideDroppable = memoizeOne((droppableId, draggables) => {\n const result = toDraggableList(draggables).filter(draggable => droppableId === draggable.descriptor.droppableId).sort((a, b) => a.descriptor.index - b.descriptor.index);\n return result;\n});\n\nfunction tryGetDestination(impact) {\n if (impact.at && impact.at.type === 'REORDER') {\n return impact.at.destination;\n }\n return null;\n}\nfunction tryGetCombine(impact) {\n if (impact.at && impact.at.type === 'COMBINE') {\n return impact.at.combine;\n }\n return null;\n}\n\nvar removeDraggableFromList = memoizeOne((remove, list) => list.filter(item => item.descriptor.id !== remove.descriptor.id));\n\nvar moveToNextCombine = ({\n isMovingForward,\n draggable,\n destination,\n insideDestination,\n previousImpact\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const location = tryGetDestination(previousImpact);\n if (!location) {\n return null;\n }\n function getImpact(target) {\n const at = {\n type: 'COMBINE',\n combine: {\n draggableId: target,\n droppableId: destination.descriptor.id\n }\n };\n return {\n ...previousImpact,\n at\n };\n }\n const all = previousImpact.displaced.all;\n const closestId = all.length ? all[0] : null;\n if (isMovingForward) {\n return closestId ? getImpact(closestId) : null;\n }\n const withoutDraggable = removeDraggableFromList(draggable, insideDestination);\n if (!closestId) {\n if (!withoutDraggable.length) {\n return null;\n }\n const last = withoutDraggable[withoutDraggable.length - 1];\n return getImpact(last.descriptor.id);\n }\n const indexOfClosest = withoutDraggable.findIndex(d => d.descriptor.id === closestId);\n !(indexOfClosest !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find displaced item in set') : invariant() : void 0;\n const proposedIndex = indexOfClosest - 1;\n if (proposedIndex < 0) {\n return null;\n }\n const before = withoutDraggable[proposedIndex];\n return getImpact(before.descriptor.id);\n};\n\nvar isHomeOf = (draggable, destination) => draggable.descriptor.droppableId === destination.descriptor.id;\n\nconst noDisplacedBy = {\n point: origin,\n value: 0\n};\nconst emptyGroups = {\n invisible: {},\n visible: {},\n all: []\n};\nconst noImpact = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: null\n};\n\nvar isWithin = (lowerBound, upperBound) => value => lowerBound <= value && value <= upperBound;\n\nvar isPartiallyVisibleThroughFrame = frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n if (isContained) {\n return true;\n }\n const isPartiallyVisibleVertically = isWithinVertical(subject.top) || isWithinVertical(subject.bottom);\n const isPartiallyVisibleHorizontally = isWithinHorizontal(subject.left) || isWithinHorizontal(subject.right);\n const isPartiallyContained = isPartiallyVisibleVertically && isPartiallyVisibleHorizontally;\n if (isPartiallyContained) {\n return true;\n }\n const isBiggerVertically = subject.top < frame.top && subject.bottom > frame.bottom;\n const isBiggerHorizontally = subject.left < frame.left && subject.right > frame.right;\n const isTargetBiggerThanFrame = isBiggerVertically && isBiggerHorizontally;\n if (isTargetBiggerThanFrame) {\n return true;\n }\n const isTargetBiggerOnOneAxis = isBiggerVertically && isPartiallyVisibleHorizontally || isBiggerHorizontally && isPartiallyVisibleVertically;\n return isTargetBiggerOnOneAxis;\n };\n};\n\nvar isTotallyVisibleThroughFrame = frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n return isContained;\n };\n};\n\nconst vertical = {\n direction: 'vertical',\n line: 'y',\n crossAxisLine: 'x',\n start: 'top',\n end: 'bottom',\n size: 'height',\n crossAxisStart: 'left',\n crossAxisEnd: 'right',\n crossAxisSize: 'width'\n};\nconst horizontal = {\n direction: 'horizontal',\n line: 'x',\n crossAxisLine: 'y',\n start: 'left',\n end: 'right',\n size: 'width',\n crossAxisStart: 'top',\n crossAxisEnd: 'bottom',\n crossAxisSize: 'height'\n};\n\nvar isTotallyVisibleThroughFrameOnAxis = axis => frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n if (axis === vertical) {\n return isWithinVertical(subject.top) && isWithinVertical(subject.bottom);\n }\n return isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n };\n};\n\nconst getDroppableDisplaced = (target, destination) => {\n const displacement = destination.frame ? destination.frame.scroll.diff.displacement : origin;\n return offsetByPosition(target, displacement);\n};\nconst isVisibleInDroppable = (target, destination, isVisibleThroughFrameFn) => {\n if (!destination.subject.active) {\n return false;\n }\n return isVisibleThroughFrameFn(destination.subject.active)(target);\n};\nconst isVisibleInViewport = (target, viewport, isVisibleThroughFrameFn) => isVisibleThroughFrameFn(viewport)(target);\nconst isVisible$1 = ({\n target: toBeDisplaced,\n destination,\n viewport,\n withDroppableDisplacement,\n isVisibleThroughFrameFn\n}) => {\n const displacedTarget = withDroppableDisplacement ? getDroppableDisplaced(toBeDisplaced, destination) : toBeDisplaced;\n return isVisibleInDroppable(displacedTarget, destination, isVisibleThroughFrameFn) && isVisibleInViewport(displacedTarget, viewport, isVisibleThroughFrameFn);\n};\nconst isPartiallyVisible = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isPartiallyVisibleThroughFrame\n});\nconst isTotallyVisible = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrame\n});\nconst isTotallyVisibleOnAxis = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrameOnAxis(args.destination.axis)\n});\n\nconst getShouldAnimate = (id, last, forceShouldAnimate) => {\n if (typeof forceShouldAnimate === 'boolean') {\n return forceShouldAnimate;\n }\n if (!last) {\n return true;\n }\n const {\n invisible,\n visible\n } = last;\n if (invisible[id]) {\n return false;\n }\n const previous = visible[id];\n return previous ? previous.shouldAnimate : true;\n};\nfunction getTarget(draggable, displacedBy) {\n const marginBox = draggable.page.marginBox;\n const expandBy = {\n top: displacedBy.point.y,\n right: 0,\n bottom: 0,\n left: displacedBy.point.x\n };\n return getRect(expand(marginBox, expandBy));\n}\nfunction getDisplacementGroups({\n afterDragging,\n destination,\n displacedBy,\n viewport,\n forceShouldAnimate,\n last\n}) {\n return afterDragging.reduce(function process(groups, draggable) {\n const target = getTarget(draggable, displacedBy);\n const id = draggable.descriptor.id;\n groups.all.push(id);\n const isVisible = isPartiallyVisible({\n target,\n destination,\n viewport,\n withDroppableDisplacement: true\n });\n if (!isVisible) {\n groups.invisible[draggable.descriptor.id] = true;\n return groups;\n }\n const shouldAnimate = getShouldAnimate(id, last, forceShouldAnimate);\n const displacement = {\n draggableId: id,\n shouldAnimate\n };\n groups.visible[id] = displacement;\n return groups;\n }, {\n all: [],\n visible: {},\n invisible: {}\n });\n}\n\nfunction getIndexOfLastItem(draggables, options) {\n if (!draggables.length) {\n return 0;\n }\n const indexOfLastItem = draggables[draggables.length - 1].descriptor.index;\n return options.inHomeList ? indexOfLastItem : indexOfLastItem + 1;\n}\nfunction goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n}) {\n const newIndex = getIndexOfLastItem(insideDestination, {\n inHomeList\n });\n return {\n displaced: emptyGroups,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: newIndex\n }\n }\n };\n}\nfunction calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n displacedBy,\n last,\n index,\n forceShouldAnimate\n}) {\n const inHomeList = isHomeOf(draggable, destination);\n if (index == null) {\n return goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n });\n }\n const match = insideDestination.find(item => item.descriptor.index === index);\n if (!match) {\n return goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n });\n }\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const sliceFrom = insideDestination.indexOf(match);\n const impacted = withoutDragging.slice(sliceFrom);\n const displaced = getDisplacementGroups({\n afterDragging: impacted,\n destination,\n displacedBy,\n last,\n viewport: viewport.frame,\n forceShouldAnimate\n });\n return {\n displaced,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index\n }\n }\n };\n}\n\nfunction didStartAfterCritical(draggableId, afterCritical) {\n return Boolean(afterCritical.effected[draggableId]);\n}\n\nvar fromCombine = ({\n isMovingForward,\n destination,\n draggables,\n combine,\n afterCritical\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const combineId = combine.draggableId;\n const combineWith = draggables[combineId];\n const combineWithIndex = combineWith.descriptor.index;\n const didCombineWithStartAfterCritical = didStartAfterCritical(combineId, afterCritical);\n if (didCombineWithStartAfterCritical) {\n if (isMovingForward) {\n return combineWithIndex;\n }\n return combineWithIndex - 1;\n }\n if (isMovingForward) {\n return combineWithIndex + 1;\n }\n return combineWithIndex;\n};\n\nvar fromReorder = ({\n isMovingForward,\n isInHomeList,\n insideDestination,\n location\n}) => {\n if (!insideDestination.length) {\n return null;\n }\n const currentIndex = location.index;\n const proposedIndex = isMovingForward ? currentIndex + 1 : currentIndex - 1;\n const firstIndex = insideDestination[0].descriptor.index;\n const lastIndex = insideDestination[insideDestination.length - 1].descriptor.index;\n const upperBound = isInHomeList ? lastIndex : lastIndex + 1;\n if (proposedIndex < firstIndex) {\n return null;\n }\n if (proposedIndex > upperBound) {\n return null;\n }\n return proposedIndex;\n};\n\nvar moveToNextIndex = ({\n isMovingForward,\n isInHomeList,\n draggable,\n draggables,\n destination,\n insideDestination,\n previousImpact,\n viewport,\n afterCritical\n}) => {\n const wasAt = previousImpact.at;\n !wasAt ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot move in direction without previous impact location') : invariant() : void 0;\n if (wasAt.type === 'REORDER') {\n const newIndex = fromReorder({\n isMovingForward,\n isInHomeList,\n location: wasAt.destination,\n insideDestination\n });\n if (newIndex == null) {\n return null;\n }\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n }\n const newIndex = fromCombine({\n isMovingForward,\n destination,\n displaced: previousImpact.displaced,\n draggables,\n combine: wasAt.combine,\n afterCritical\n });\n if (newIndex == null) {\n return null;\n }\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n};\n\nvar getCombinedItemDisplacement = ({\n displaced,\n afterCritical,\n combineWith,\n displacedBy\n}) => {\n const isDisplaced = Boolean(displaced.visible[combineWith] || displaced.invisible[combineWith]);\n if (didStartAfterCritical(combineWith, afterCritical)) {\n return isDisplaced ? origin : negate(displacedBy.point);\n }\n return isDisplaced ? displacedBy.point : origin;\n};\n\nvar whenCombining = ({\n afterCritical,\n impact,\n draggables\n}) => {\n const combine = tryGetCombine(impact);\n !combine ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const combineWith = combine.draggableId;\n const center = draggables[combineWith].page.borderBox.center;\n const displaceBy = getCombinedItemDisplacement({\n displaced: impact.displaced,\n afterCritical,\n combineWith,\n displacedBy: impact.displacedBy\n });\n return add(center, displaceBy);\n};\n\nconst distanceFromStartToBorderBoxCenter = (axis, box) => box.margin[axis.start] + box.borderBox[axis.size] / 2;\nconst distanceFromEndToBorderBoxCenter = (axis, box) => box.margin[axis.end] + box.borderBox[axis.size] / 2;\nconst getCrossAxisBorderBoxCenter = (axis, target, isMoving) => target[axis.crossAxisStart] + isMoving.margin[axis.crossAxisStart] + isMoving.borderBox[axis.crossAxisSize] / 2;\nconst goAfter = ({\n axis,\n moveRelativeTo,\n isMoving\n}) => patch(axis.line, moveRelativeTo.marginBox[axis.end] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\nconst goBefore = ({\n axis,\n moveRelativeTo,\n isMoving\n}) => patch(axis.line, moveRelativeTo.marginBox[axis.start] - distanceFromEndToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\nconst goIntoStart = ({\n axis,\n moveInto,\n isMoving\n}) => patch(axis.line, moveInto.contentBox[axis.start] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveInto.contentBox, isMoving));\n\nvar whenReordering = ({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n}) => {\n const insideDestination = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n const draggablePage = draggable.page;\n const axis = droppable.axis;\n if (!insideDestination.length) {\n return goIntoStart({\n axis,\n moveInto: droppable.page,\n isMoving: draggablePage\n });\n }\n const {\n displaced,\n displacedBy\n } = impact;\n const closestAfter = displaced.all[0];\n if (closestAfter) {\n const closest = draggables[closestAfter];\n if (didStartAfterCritical(closestAfter, afterCritical)) {\n return goBefore({\n axis,\n moveRelativeTo: closest.page,\n isMoving: draggablePage\n });\n }\n const withDisplacement = offset(closest.page, displacedBy.point);\n return goBefore({\n axis,\n moveRelativeTo: withDisplacement,\n isMoving: draggablePage\n });\n }\n const last = insideDestination[insideDestination.length - 1];\n if (last.descriptor.id === draggable.descriptor.id) {\n return draggablePage.borderBox.center;\n }\n if (didStartAfterCritical(last.descriptor.id, afterCritical)) {\n const page = offset(last.page, negate(afterCritical.displacedBy.point));\n return goAfter({\n axis,\n moveRelativeTo: page,\n isMoving: draggablePage\n });\n }\n return goAfter({\n axis,\n moveRelativeTo: last.page,\n isMoving: draggablePage\n });\n};\n\nvar withDroppableDisplacement = (droppable, point) => {\n const frame = droppable.frame;\n if (!frame) {\n return point;\n }\n return add(point, frame.scroll.diff.displacement);\n};\n\nconst getResultWithoutDroppableDisplacement = ({\n impact,\n draggable,\n droppable,\n draggables,\n afterCritical\n}) => {\n const original = draggable.page.borderBox.center;\n const at = impact.at;\n if (!droppable) {\n return original;\n }\n if (!at) {\n return original;\n }\n if (at.type === 'REORDER') {\n return whenReordering({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n });\n }\n return whenCombining({\n impact,\n draggables,\n afterCritical\n });\n};\nvar getPageBorderBoxCenterFromImpact = args => {\n const withoutDisplacement = getResultWithoutDroppableDisplacement(args);\n const droppable = args.droppable;\n const withDisplacement = droppable ? withDroppableDisplacement(droppable, withoutDisplacement) : withoutDisplacement;\n return withDisplacement;\n};\n\nvar scrollViewport = (viewport, newScroll) => {\n const diff = subtract(newScroll, viewport.scroll.initial);\n const displacement = negate(diff);\n const frame = getRect({\n top: newScroll.y,\n bottom: newScroll.y + viewport.frame.height,\n left: newScroll.x,\n right: newScroll.x + viewport.frame.width\n });\n const updated = {\n frame,\n scroll: {\n initial: viewport.scroll.initial,\n max: viewport.scroll.max,\n current: newScroll,\n diff: {\n value: diff,\n displacement\n }\n }\n };\n return updated;\n};\n\nfunction getDraggables$1(ids, draggables) {\n return ids.map(id => draggables[id]);\n}\nfunction tryGetVisible(id, groups) {\n for (let i = 0; i < groups.length; i++) {\n const displacement = groups[i].visible[id];\n if (displacement) {\n return displacement;\n }\n }\n return null;\n}\nvar speculativelyIncrease = ({\n impact,\n viewport,\n destination,\n draggables,\n maxScrollChange\n}) => {\n const scrolledViewport = scrollViewport(viewport, add(viewport.scroll.current, maxScrollChange));\n const scrolledDroppable = destination.frame ? scrollDroppable(destination, add(destination.frame.scroll.current, maxScrollChange)) : destination;\n const last = impact.displaced;\n const withViewportScroll = getDisplacementGroups({\n afterDragging: getDraggables$1(last.all, draggables),\n destination,\n displacedBy: impact.displacedBy,\n viewport: scrolledViewport.frame,\n last,\n forceShouldAnimate: false\n });\n const withDroppableScroll = getDisplacementGroups({\n afterDragging: getDraggables$1(last.all, draggables),\n destination: scrolledDroppable,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n last,\n forceShouldAnimate: false\n });\n const invisible = {};\n const visible = {};\n const groups = [last, withViewportScroll, withDroppableScroll];\n last.all.forEach(id => {\n const displacement = tryGetVisible(id, groups);\n if (displacement) {\n visible[id] = displacement;\n return;\n }\n invisible[id] = true;\n });\n const newImpact = {\n ...impact,\n displaced: {\n all: last.all,\n invisible,\n visible\n }\n };\n return newImpact;\n};\n\nvar withViewportDisplacement = (viewport, point) => add(viewport.scroll.diff.displacement, point);\n\nvar getClientFromPageBorderBoxCenter = ({\n pageBorderBoxCenter,\n draggable,\n viewport\n}) => {\n const withoutPageScrollChange = withViewportDisplacement(viewport, pageBorderBoxCenter);\n const offset = subtract(withoutPageScrollChange, draggable.page.borderBox.center);\n return add(draggable.client.borderBox.center, offset);\n};\n\nvar isTotallyVisibleInNewLocation = ({\n draggable,\n destination,\n newPageBorderBoxCenter,\n viewport,\n withDroppableDisplacement,\n onlyOnMainAxis = false\n}) => {\n const changeNeeded = subtract(newPageBorderBoxCenter, draggable.page.borderBox.center);\n const shifted = offsetByPosition(draggable.page.borderBox, changeNeeded);\n const args = {\n target: shifted,\n destination,\n withDroppableDisplacement,\n viewport\n };\n return onlyOnMainAxis ? isTotallyVisibleOnAxis(args) : isTotallyVisible(args);\n};\n\nvar moveToNextPlace = ({\n isMovingForward,\n draggable,\n destination,\n draggables,\n previousImpact,\n viewport,\n previousPageBorderBoxCenter,\n previousClientSelection,\n afterCritical\n}) => {\n if (!destination.isEnabled) {\n return null;\n }\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const isInHomeList = isHomeOf(draggable, destination);\n const impact = moveToNextCombine({\n isMovingForward,\n draggable,\n destination,\n insideDestination,\n previousImpact\n }) || moveToNextIndex({\n isMovingForward,\n isInHomeList,\n draggable,\n draggables,\n destination,\n insideDestination,\n previousImpact,\n viewport,\n afterCritical\n });\n if (!impact) {\n return null;\n }\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable,\n destination,\n newPageBorderBoxCenter: pageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n if (isVisibleInNewLocation) {\n const clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n return {\n clientSelection,\n impact,\n scrollJumpRequest: null\n };\n }\n const distance = subtract(pageBorderBoxCenter, previousPageBorderBoxCenter);\n const cautious = speculativelyIncrease({\n impact,\n viewport,\n destination,\n draggables,\n maxScrollChange: distance\n });\n return {\n clientSelection: previousClientSelection,\n impact: cautious,\n scrollJumpRequest: distance\n };\n};\n\nconst getKnownActive = droppable => {\n const rect = droppable.subject.active;\n !rect ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get clipped area from droppable') : invariant() : void 0;\n return rect;\n};\nvar getBestCrossAxisDroppable = ({\n isMovingForward,\n pageBorderBoxCenter,\n source,\n droppables,\n viewport\n}) => {\n const active = source.subject.active;\n if (!active) {\n return null;\n }\n const axis = source.axis;\n const isBetweenSourceClipped = isWithin(active[axis.start], active[axis.end]);\n const candidates = toDroppableList(droppables).filter(droppable => droppable !== source).filter(droppable => droppable.isEnabled).filter(droppable => Boolean(droppable.subject.active)).filter(droppable => isPartiallyVisibleThroughFrame(viewport.frame)(getKnownActive(droppable))).filter(droppable => {\n const activeOfTarget = getKnownActive(droppable);\n if (isMovingForward) {\n return active[axis.crossAxisEnd] < activeOfTarget[axis.crossAxisEnd];\n }\n return activeOfTarget[axis.crossAxisStart] < active[axis.crossAxisStart];\n }).filter(droppable => {\n const activeOfTarget = getKnownActive(droppable);\n const isBetweenDestinationClipped = isWithin(activeOfTarget[axis.start], activeOfTarget[axis.end]);\n return isBetweenSourceClipped(activeOfTarget[axis.start]) || isBetweenSourceClipped(activeOfTarget[axis.end]) || isBetweenDestinationClipped(active[axis.start]) || isBetweenDestinationClipped(active[axis.end]);\n }).sort((a, b) => {\n const first = getKnownActive(a)[axis.crossAxisStart];\n const second = getKnownActive(b)[axis.crossAxisStart];\n if (isMovingForward) {\n return first - second;\n }\n return second - first;\n }).filter((droppable, index, array) => getKnownActive(droppable)[axis.crossAxisStart] === getKnownActive(array[0])[axis.crossAxisStart]);\n if (!candidates.length) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0];\n }\n const contains = candidates.filter(droppable => {\n const isWithinDroppable = isWithin(getKnownActive(droppable)[axis.start], getKnownActive(droppable)[axis.end]);\n return isWithinDroppable(pageBorderBoxCenter[axis.line]);\n });\n if (contains.length === 1) {\n return contains[0];\n }\n if (contains.length > 1) {\n return contains.sort((a, b) => getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start])[0];\n }\n return candidates.sort((a, b) => {\n const first = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(a)));\n const second = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(b)));\n if (first !== second) {\n return first - second;\n }\n return getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start];\n })[0];\n};\n\nconst getCurrentPageBorderBoxCenter = (draggable, afterCritical) => {\n const original = draggable.page.borderBox.center;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? subtract(original, afterCritical.displacedBy.point) : original;\n};\nconst getCurrentPageBorderBox = (draggable, afterCritical) => {\n const original = draggable.page.borderBox;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? offsetByPosition(original, negate(afterCritical.displacedBy.point)) : original;\n};\n\nvar getClosestDraggable = ({\n pageBorderBoxCenter,\n viewport,\n destination,\n insideDestination,\n afterCritical\n}) => {\n const sorted = insideDestination.filter(draggable => isTotallyVisible({\n target: getCurrentPageBorderBox(draggable, afterCritical),\n destination,\n viewport: viewport.frame,\n withDroppableDisplacement: true\n })).sort((a, b) => {\n const distanceToA = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(a, afterCritical)));\n const distanceToB = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(b, afterCritical)));\n if (distanceToA < distanceToB) {\n return -1;\n }\n if (distanceToB < distanceToA) {\n return 1;\n }\n return a.descriptor.index - b.descriptor.index;\n });\n return sorted[0] || null;\n};\n\nvar getDisplacedBy = memoizeOne(function getDisplacedBy(axis, displaceBy) {\n const displacement = displaceBy[axis.line];\n return {\n value: displacement,\n point: patch(axis.line, displacement)\n };\n});\n\nconst getRequiredGrowthForPlaceholder = (droppable, placeholderSize, draggables) => {\n const axis = droppable.axis;\n if (droppable.descriptor.mode === 'virtual') {\n return patch(axis.line, placeholderSize[axis.line]);\n }\n const availableSpace = droppable.subject.page.contentBox[axis.size];\n const insideDroppable = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n const spaceUsed = insideDroppable.reduce((sum, dimension) => sum + dimension.client.marginBox[axis.size], 0);\n const requiredSpace = spaceUsed + placeholderSize[axis.line];\n const needsToGrowBy = requiredSpace - availableSpace;\n if (needsToGrowBy <= 0) {\n return null;\n }\n return patch(axis.line, needsToGrowBy);\n};\nconst withMaxScroll = (frame, max) => ({\n ...frame,\n scroll: {\n ...frame.scroll,\n max\n }\n});\nconst addPlaceholder = (droppable, draggable, draggables) => {\n const frame = droppable.frame;\n !!isHomeOf(draggable, droppable) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should not add placeholder space to home list') : invariant() : void 0;\n !!droppable.subject.withPlaceholder ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot add placeholder size to a subject when it already has one') : invariant() : void 0;\n const placeholderSize = getDisplacedBy(droppable.axis, draggable.displaceBy).point;\n const requiredGrowth = getRequiredGrowthForPlaceholder(droppable, placeholderSize, draggables);\n const added = {\n placeholderSize,\n increasedBy: requiredGrowth,\n oldFrameMaxScroll: droppable.frame ? droppable.frame.scroll.max : null\n };\n if (!frame) {\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: droppable.frame\n });\n return {\n ...droppable,\n subject\n };\n }\n const maxScroll = requiredGrowth ? add(frame.scroll.max, requiredGrowth) : frame.scroll.max;\n const newFrame = withMaxScroll(frame, maxScroll);\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: newFrame\n });\n return {\n ...droppable,\n subject,\n frame: newFrame\n };\n};\nconst removePlaceholder = droppable => {\n const added = droppable.subject.withPlaceholder;\n !added ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot remove placeholder form subject when there was none') : invariant() : void 0;\n const frame = droppable.frame;\n if (!frame) {\n const subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: null,\n withPlaceholder: null\n });\n return {\n ...droppable,\n subject\n };\n }\n const oldMaxScroll = added.oldFrameMaxScroll;\n !oldMaxScroll ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected droppable with frame to have old max frame scroll when removing placeholder') : invariant() : void 0;\n const newFrame = withMaxScroll(frame, oldMaxScroll);\n const subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: newFrame,\n withPlaceholder: null\n });\n return {\n ...droppable,\n subject,\n frame: newFrame\n };\n};\n\nvar moveToNewDroppable = ({\n previousPageBorderBoxCenter,\n moveRelativeTo,\n insideDestination,\n draggable,\n draggables,\n destination,\n viewport,\n afterCritical\n}) => {\n if (!moveRelativeTo) {\n if (insideDestination.length) {\n return null;\n }\n const proposed = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: 0\n }\n }\n };\n const proposedPageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact: proposed,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const withPlaceholder = isHomeOf(draggable, destination) ? destination : addPlaceholder(destination, draggable, draggables);\n const isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable,\n destination: withPlaceholder,\n newPageBorderBoxCenter: proposedPageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n return isVisibleInNewLocation ? proposed : null;\n }\n const isGoingBeforeTarget = Boolean(previousPageBorderBoxCenter[destination.axis.line] <= moveRelativeTo.page.borderBox.center[destination.axis.line]);\n const proposedIndex = (() => {\n const relativeTo = moveRelativeTo.descriptor.index;\n if (moveRelativeTo.descriptor.id === draggable.descriptor.id) {\n return relativeTo;\n }\n if (isGoingBeforeTarget) {\n return relativeTo;\n }\n return relativeTo + 1;\n })();\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n displacedBy,\n last: emptyGroups,\n index: proposedIndex\n });\n};\n\nvar moveCrossAxis = ({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n isOver,\n draggables,\n droppables,\n viewport,\n afterCritical\n}) => {\n const destination = getBestCrossAxisDroppable({\n isMovingForward,\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n source: isOver,\n droppables,\n viewport\n });\n if (!destination) {\n return null;\n }\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const moveRelativeTo = getClosestDraggable({\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n viewport,\n destination,\n insideDestination,\n afterCritical\n });\n const impact = moveToNewDroppable({\n previousPageBorderBoxCenter,\n destination,\n draggable,\n draggables,\n moveRelativeTo,\n insideDestination,\n viewport,\n afterCritical\n });\n if (!impact) {\n return null;\n }\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n return {\n clientSelection,\n impact,\n scrollJumpRequest: null\n };\n};\n\nvar whatIsDraggedOver = impact => {\n const at = impact.at;\n if (!at) {\n return null;\n }\n if (at.type === 'REORDER') {\n return at.destination.droppableId;\n }\n return at.combine.droppableId;\n};\n\nconst getDroppableOver$1 = (impact, droppables) => {\n const id = whatIsDraggedOver(impact);\n return id ? droppables[id] : null;\n};\nvar moveInDirection = ({\n state,\n type\n}) => {\n const isActuallyOver = getDroppableOver$1(state.impact, state.dimensions.droppables);\n const isMainAxisMovementAllowed = Boolean(isActuallyOver);\n const home = state.dimensions.droppables[state.critical.droppable.id];\n const isOver = isActuallyOver || home;\n const direction = isOver.axis.direction;\n const isMovingOnMainAxis = direction === 'vertical' && (type === 'MOVE_UP' || type === 'MOVE_DOWN') || direction === 'horizontal' && (type === 'MOVE_LEFT' || type === 'MOVE_RIGHT');\n if (isMovingOnMainAxis && !isMainAxisMovementAllowed) {\n return null;\n }\n const isMovingForward = type === 'MOVE_DOWN' || type === 'MOVE_RIGHT';\n const draggable = state.dimensions.draggables[state.critical.draggable.id];\n const previousPageBorderBoxCenter = state.current.page.borderBoxCenter;\n const {\n draggables,\n droppables\n } = state.dimensions;\n return isMovingOnMainAxis ? moveToNextPlace({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n destination: isOver,\n draggables,\n viewport: state.viewport,\n previousClientSelection: state.current.client.selection,\n previousImpact: state.impact,\n afterCritical: state.afterCritical\n }) : moveCrossAxis({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n isOver,\n draggables,\n droppables,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n};\n\nfunction isMovementAllowed(state) {\n return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';\n}\n\nfunction isPositionInFrame(frame) {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return function run(point) {\n return isWithinVertical(point.y) && isWithinHorizontal(point.x);\n };\n}\n\nfunction getHasOverlap(first, second) {\n return first.left < second.right && first.right > second.left && first.top < second.bottom && first.bottom > second.top;\n}\nfunction getFurthestAway({\n pageBorderBox,\n draggable,\n candidates\n}) {\n const startCenter = draggable.page.borderBox.center;\n const sorted = candidates.map(candidate => {\n const axis = candidate.axis;\n const target = patch(candidate.axis.line, pageBorderBox.center[axis.line], candidate.page.borderBox.center[axis.crossAxisLine]);\n return {\n id: candidate.descriptor.id,\n distance: distance(startCenter, target)\n };\n }).sort((a, b) => b.distance - a.distance);\n return sorted[0] ? sorted[0].id : null;\n}\nfunction getDroppableOver({\n pageBorderBox,\n draggable,\n droppables\n}) {\n const candidates = toDroppableList(droppables).filter(item => {\n if (!item.isEnabled) {\n return false;\n }\n const active = item.subject.active;\n if (!active) {\n return false;\n }\n if (!getHasOverlap(pageBorderBox, active)) {\n return false;\n }\n if (isPositionInFrame(active)(pageBorderBox.center)) {\n return true;\n }\n const axis = item.axis;\n const childCenter = active.center[axis.crossAxisLine];\n const crossAxisStart = pageBorderBox[axis.crossAxisStart];\n const crossAxisEnd = pageBorderBox[axis.crossAxisEnd];\n const isContained = isWithin(active[axis.crossAxisStart], active[axis.crossAxisEnd]);\n const isStartContained = isContained(crossAxisStart);\n const isEndContained = isContained(crossAxisEnd);\n if (!isStartContained && !isEndContained) {\n return true;\n }\n if (isStartContained) {\n return crossAxisStart < childCenter;\n }\n return crossAxisEnd > childCenter;\n });\n if (!candidates.length) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0].descriptor.id;\n }\n return getFurthestAway({\n pageBorderBox,\n draggable,\n candidates\n });\n}\n\nconst offsetRectByPosition = (rect, point) => getRect(offsetByPosition(rect, point));\n\nvar withDroppableScroll = (droppable, area) => {\n const frame = droppable.frame;\n if (!frame) {\n return area;\n }\n return offsetRectByPosition(area, frame.scroll.diff.value);\n};\n\nfunction getIsDisplaced({\n displaced,\n id\n}) {\n return Boolean(displaced.visible[id] || displaced.invisible[id]);\n}\n\nfunction atIndex({\n draggable,\n closest,\n inHomeList\n}) {\n if (!closest) {\n return null;\n }\n if (!inHomeList) {\n return closest.descriptor.index;\n }\n if (closest.descriptor.index > draggable.descriptor.index) {\n return closest.descriptor.index - 1;\n }\n return closest.descriptor.index;\n}\nvar getReorderImpact = ({\n pageBorderBoxWithDroppableScroll: targetRect,\n draggable,\n destination,\n insideDestination,\n last,\n viewport,\n afterCritical\n}) => {\n const axis = destination.axis;\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n const displacement = displacedBy.value;\n const targetStart = targetRect[axis.start];\n const targetEnd = targetRect[axis.end];\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const closest = withoutDragging.find(child => {\n const id = child.descriptor.id;\n const childCenter = child.page.borderBox.center[axis.line];\n const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n const isDisplaced = getIsDisplaced({\n displaced: last,\n id\n });\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd <= childCenter;\n }\n return targetStart < childCenter - displacement;\n }\n if (isDisplaced) {\n return targetEnd <= childCenter + displacement;\n }\n return targetStart < childCenter;\n }) || null;\n const newIndex = atIndex({\n draggable,\n closest,\n inHomeList: isHomeOf(draggable, destination)\n });\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last,\n displacedBy,\n index: newIndex\n });\n};\n\nconst combineThresholdDivisor = 4;\nvar getCombineImpact = ({\n draggable,\n pageBorderBoxWithDroppableScroll: targetRect,\n previousImpact,\n destination,\n insideDestination,\n afterCritical\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const axis = destination.axis;\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n const displacement = displacedBy.value;\n const targetStart = targetRect[axis.start];\n const targetEnd = targetRect[axis.end];\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const combineWith = withoutDragging.find(child => {\n const id = child.descriptor.id;\n const childRect = child.page.borderBox;\n const childSize = childRect[axis.size];\n const threshold = childSize / combineThresholdDivisor;\n const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n const isDisplaced = getIsDisplaced({\n displaced: previousImpact.displaced,\n id\n });\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + threshold && targetEnd < childRect[axis.end] - threshold;\n }\n return targetStart > childRect[axis.start] - displacement + threshold && targetStart < childRect[axis.end] - displacement - threshold;\n }\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + displacement + threshold && targetEnd < childRect[axis.end] + displacement - threshold;\n }\n return targetStart > childRect[axis.start] + threshold && targetStart < childRect[axis.end] - threshold;\n });\n if (!combineWith) {\n return null;\n }\n const impact = {\n displacedBy,\n displaced: previousImpact.displaced,\n at: {\n type: 'COMBINE',\n combine: {\n draggableId: combineWith.descriptor.id,\n droppableId: destination.descriptor.id\n }\n }\n };\n return impact;\n};\n\nvar getDragImpact = ({\n pageOffset,\n draggable,\n draggables,\n droppables,\n previousImpact,\n viewport,\n afterCritical\n}) => {\n const pageBorderBox = offsetRectByPosition(draggable.page.borderBox, pageOffset);\n const destinationId = getDroppableOver({\n pageBorderBox,\n draggable,\n droppables\n });\n if (!destinationId) {\n return noImpact;\n }\n const destination = droppables[destinationId];\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const pageBorderBoxWithDroppableScroll = withDroppableScroll(destination, pageBorderBox);\n return getCombineImpact({\n pageBorderBoxWithDroppableScroll,\n draggable,\n previousImpact,\n destination,\n insideDestination,\n afterCritical\n }) || getReorderImpact({\n pageBorderBoxWithDroppableScroll,\n draggable,\n destination,\n insideDestination,\n last: previousImpact.displaced,\n viewport,\n afterCritical\n });\n};\n\nvar patchDroppableMap = (droppables, updated) => ({\n ...droppables,\n [updated.descriptor.id]: updated\n});\n\nconst clearUnusedPlaceholder = ({\n previousImpact,\n impact,\n droppables\n}) => {\n const last = whatIsDraggedOver(previousImpact);\n const now = whatIsDraggedOver(impact);\n if (!last) {\n return droppables;\n }\n if (last === now) {\n return droppables;\n }\n const lastDroppable = droppables[last];\n if (!lastDroppable.subject.withPlaceholder) {\n return droppables;\n }\n const updated = removePlaceholder(lastDroppable);\n return patchDroppableMap(droppables, updated);\n};\nvar recomputePlaceholders = ({\n draggable,\n draggables,\n droppables,\n previousImpact,\n impact\n}) => {\n const cleaned = clearUnusedPlaceholder({\n previousImpact,\n impact,\n droppables\n });\n const isOver = whatIsDraggedOver(impact);\n if (!isOver) {\n return cleaned;\n }\n const droppable = droppables[isOver];\n if (isHomeOf(draggable, droppable)) {\n return cleaned;\n }\n if (droppable.subject.withPlaceholder) {\n return cleaned;\n }\n const patched = addPlaceholder(droppable, draggable, draggables);\n return patchDroppableMap(cleaned, patched);\n};\n\nvar update = ({\n state,\n clientSelection: forcedClientSelection,\n dimensions: forcedDimensions,\n viewport: forcedViewport,\n impact: forcedImpact,\n scrollJumpRequest\n}) => {\n const viewport = forcedViewport || state.viewport;\n const dimensions = forcedDimensions || state.dimensions;\n const clientSelection = forcedClientSelection || state.current.client.selection;\n const offset = subtract(clientSelection, state.initial.client.selection);\n const client = {\n offset,\n selection: clientSelection,\n borderBoxCenter: add(state.initial.client.borderBoxCenter, offset)\n };\n const page = {\n selection: add(client.selection, viewport.scroll.current),\n borderBoxCenter: add(client.borderBoxCenter, viewport.scroll.current),\n offset: add(client.offset, viewport.scroll.diff.value)\n };\n const current = {\n client,\n page\n };\n if (state.phase === 'COLLECTING') {\n return {\n ...state,\n dimensions,\n viewport,\n current\n };\n }\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const newImpact = forcedImpact || getDragImpact({\n pageOffset: page.offset,\n draggable,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact: state.impact,\n viewport,\n afterCritical: state.afterCritical\n });\n const withUpdatedPlaceholders = recomputePlaceholders({\n draggable,\n impact: newImpact,\n previousImpact: state.impact,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables\n });\n const result = {\n ...state,\n current,\n dimensions: {\n draggables: dimensions.draggables,\n droppables: withUpdatedPlaceholders\n },\n impact: newImpact,\n viewport,\n scrollJumpRequest: scrollJumpRequest || null,\n forceShouldAnimate: scrollJumpRequest ? false : null\n };\n return result;\n};\n\nfunction getDraggables(ids, draggables) {\n return ids.map(id => draggables[id]);\n}\nvar recompute = ({\n impact,\n viewport,\n draggables,\n destination,\n forceShouldAnimate\n}) => {\n const last = impact.displaced;\n const afterDragging = getDraggables(last.all, draggables);\n const displaced = getDisplacementGroups({\n afterDragging,\n destination,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n forceShouldAnimate,\n last\n });\n return {\n ...impact,\n displaced\n };\n};\n\nvar getClientBorderBoxCenter = ({\n impact,\n draggable,\n droppable,\n draggables,\n viewport,\n afterCritical\n}) => {\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n });\n return getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n};\n\nvar refreshSnap = ({\n state,\n dimensions: forcedDimensions,\n viewport: forcedViewport\n}) => {\n !(state.movementMode === 'SNAP') ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const needsVisibilityCheck = state.impact;\n const viewport = forcedViewport || state.viewport;\n const dimensions = forcedDimensions || state.dimensions;\n const {\n draggables,\n droppables\n } = dimensions;\n const draggable = draggables[state.critical.draggable.id];\n const isOver = whatIsDraggedOver(needsVisibilityCheck);\n !isOver ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must be over a destination in SNAP movement mode') : invariant() : void 0;\n const destination = droppables[isOver];\n const impact = recompute({\n impact: needsVisibilityCheck,\n viewport,\n destination,\n draggables\n });\n const clientSelection = getClientBorderBoxCenter({\n impact,\n draggable,\n droppable: destination,\n draggables,\n viewport,\n afterCritical: state.afterCritical\n });\n return update({\n impact,\n clientSelection,\n state,\n dimensions,\n viewport\n });\n};\n\nvar getHomeLocation = descriptor => ({\n index: descriptor.index,\n droppableId: descriptor.droppableId\n});\n\nvar getLiftEffect = ({\n draggable,\n home,\n draggables,\n viewport\n}) => {\n const displacedBy = getDisplacedBy(home.axis, draggable.displaceBy);\n const insideHome = getDraggablesInsideDroppable(home.descriptor.id, draggables);\n const rawIndex = insideHome.indexOf(draggable);\n !(rawIndex !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected draggable to be inside home list') : invariant() : void 0;\n const afterDragging = insideHome.slice(rawIndex + 1);\n const effected = afterDragging.reduce((previous, item) => {\n previous[item.descriptor.id] = true;\n return previous;\n }, {});\n const afterCritical = {\n inVirtualList: home.descriptor.mode === 'virtual',\n displacedBy,\n effected\n };\n const displaced = getDisplacementGroups({\n afterDragging,\n destination: home,\n displacedBy,\n last: null,\n viewport: viewport.frame,\n forceShouldAnimate: false\n });\n const impact = {\n displaced,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: getHomeLocation(draggable.descriptor)\n }\n };\n return {\n impact,\n afterCritical\n };\n};\n\nvar patchDimensionMap = (dimensions, updated) => ({\n draggables: dimensions.draggables,\n droppables: patchDroppableMap(dimensions.droppables, updated)\n});\n\nconst start = key => {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\nconst finish = key => {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\n\nvar offsetDraggable = ({\n draggable,\n offset: offset$1,\n initialWindowScroll\n}) => {\n const client = offset(draggable.client, offset$1);\n const page = withScroll(client, initialWindowScroll);\n const moved = {\n ...draggable,\n placeholder: {\n ...draggable.placeholder,\n client\n },\n client,\n page\n };\n return moved;\n};\n\nvar getFrame = droppable => {\n const frame = droppable.frame;\n !frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected Droppable to have a frame') : invariant() : void 0;\n return frame;\n};\n\nvar adjustAdditionsForScrollChanges = ({\n additions,\n updatedDroppables,\n viewport\n}) => {\n const windowScrollChange = viewport.scroll.diff.value;\n return additions.map(draggable => {\n const droppableId = draggable.descriptor.droppableId;\n const modified = updatedDroppables[droppableId];\n const frame = getFrame(modified);\n const droppableScrollChange = frame.scroll.diff.value;\n const totalChange = add(windowScrollChange, droppableScrollChange);\n const moved = offsetDraggable({\n draggable,\n offset: totalChange,\n initialWindowScroll: viewport.scroll.initial\n });\n return moved;\n });\n};\n\nvar publishWhileDraggingInVirtual = ({\n state,\n published\n}) => {\n start();\n const withScrollChange = published.modified.map(update => {\n const existing = state.dimensions.droppables[update.droppableId];\n const scrolled = scrollDroppable(existing, update.scroll);\n return scrolled;\n });\n const droppables = {\n ...state.dimensions.droppables,\n ...toDroppableMap(withScrollChange)\n };\n const updatedAdditions = toDraggableMap(adjustAdditionsForScrollChanges({\n additions: published.additions,\n updatedDroppables: droppables,\n viewport: state.viewport\n }));\n const draggables = {\n ...state.dimensions.draggables,\n ...updatedAdditions\n };\n published.removals.forEach(id => {\n delete draggables[id];\n });\n const dimensions = {\n droppables,\n draggables\n };\n const wasOverId = whatIsDraggedOver(state.impact);\n const wasOver = wasOverId ? dimensions.droppables[wasOverId] : null;\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const home = dimensions.droppables[state.critical.droppable.id];\n const {\n impact: onLiftImpact,\n afterCritical\n } = getLiftEffect({\n draggable,\n home,\n draggables,\n viewport: state.viewport\n });\n const previousImpact = wasOver && wasOver.isCombineEnabled ? state.impact : onLiftImpact;\n const impact = getDragImpact({\n pageOffset: state.current.page.offset,\n draggable: dimensions.draggables[state.critical.draggable.id],\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact,\n viewport: state.viewport,\n afterCritical\n });\n finish();\n const draggingState = {\n ...state,\n phase: 'DRAGGING',\n impact,\n onLiftImpact,\n dimensions,\n afterCritical,\n forceShouldAnimate: false\n };\n if (state.phase === 'COLLECTING') {\n return draggingState;\n }\n const dropPending = {\n ...draggingState,\n phase: 'DROP_PENDING',\n reason: state.reason,\n isWaiting: false\n };\n return dropPending;\n};\n\nconst isSnapping = state => state.movementMode === 'SNAP';\nconst postDroppableChange = (state, updated, isEnabledChanging) => {\n const dimensions = patchDimensionMap(state.dimensions, updated);\n if (!isSnapping(state) || isEnabledChanging) {\n return update({\n state,\n dimensions\n });\n }\n return refreshSnap({\n state,\n dimensions\n });\n};\nfunction removeScrollJumpRequest(state) {\n if (state.isDragging && state.movementMode === 'SNAP') {\n return {\n ...state,\n scrollJumpRequest: null\n };\n }\n return state;\n}\nconst idle$2 = {\n phase: 'IDLE',\n completed: null,\n shouldFlush: false\n};\nvar reducer = (state = idle$2, action) => {\n if (action.type === 'FLUSH') {\n return {\n ...idle$2,\n shouldFlush: true\n };\n }\n if (action.type === 'INITIAL_PUBLISH') {\n !(state.phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'INITIAL_PUBLISH must come after a IDLE phase') : invariant() : void 0;\n const {\n critical,\n clientSelection,\n viewport,\n dimensions,\n movementMode\n } = action.payload;\n const draggable = dimensions.draggables[critical.draggable.id];\n const home = dimensions.droppables[critical.droppable.id];\n const client = {\n selection: clientSelection,\n borderBoxCenter: draggable.client.borderBox.center,\n offset: origin\n };\n const initial = {\n client,\n page: {\n selection: add(client.selection, viewport.scroll.initial),\n borderBoxCenter: add(client.selection, viewport.scroll.initial),\n offset: add(client.selection, viewport.scroll.diff.value)\n }\n };\n const isWindowScrollAllowed = toDroppableList(dimensions.droppables).every(item => !item.isFixedOnPage);\n const {\n impact,\n afterCritical\n } = getLiftEffect({\n draggable,\n home,\n draggables: dimensions.draggables,\n viewport\n });\n const result = {\n phase: 'DRAGGING',\n isDragging: true,\n critical,\n movementMode,\n dimensions,\n initial,\n current: initial,\n isWindowScrollAllowed,\n impact,\n afterCritical,\n onLiftImpact: impact,\n viewport,\n scrollJumpRequest: null,\n forceShouldAnimate: null\n };\n return result;\n }\n if (action.type === 'COLLECTION_STARTING') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Collection cannot start from phase ${state.phase}`) : invariant() : void 0;\n const result = {\n ...state,\n phase: 'COLLECTING'\n };\n return result;\n }\n if (action.type === 'PUBLISH_WHILE_DRAGGING') {\n !(state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unexpected ${action.type} received in phase ${state.phase}`) : invariant() : void 0;\n return publishWhileDraggingInVirtual({\n state,\n published: action.payload\n });\n }\n if (action.type === 'MOVE') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : invariant() : void 0;\n const {\n client: clientSelection\n } = action.payload;\n if (isEqual$1(clientSelection, state.current.client.selection)) {\n return state;\n }\n return update({\n state,\n clientSelection,\n impact: isSnapping(state) ? state.impact : null\n });\n }\n if (action.type === 'UPDATE_DROPPABLE_SCROLL') {\n if (state.phase === 'DROP_PENDING') {\n return removeScrollJumpRequest(state);\n }\n if (state.phase === 'COLLECTING') {\n return removeScrollJumpRequest(state);\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n newScroll\n } = action.payload;\n const target = state.dimensions.droppables[id];\n if (!target) {\n return state;\n }\n const scrolled = scrollDroppable(target, newScroll);\n return postDroppableChange(state, scrolled, false);\n }\n if (action.type === 'UPDATE_DROPPABLE_IS_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n isEnabled\n } = action.payload;\n const target = state.dimensions.droppables[id];\n !target ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its enabled state`) : invariant() : void 0;\n !(target.isEnabled !== isEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Trying to set droppable isEnabled to ${String(isEnabled)}\n but it is already ${String(target.isEnabled)}`) : invariant() : void 0;\n const updated = {\n ...target,\n isEnabled\n };\n return postDroppableChange(state, updated, true);\n }\n if (action.type === 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n isCombineEnabled\n } = action.payload;\n const target = state.dimensions.droppables[id];\n !target ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its isCombineEnabled state`) : invariant() : void 0;\n !(target.isCombineEnabled !== isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Trying to set droppable isCombineEnabled to ${String(isCombineEnabled)}\n but it is already ${String(target.isCombineEnabled)}`) : invariant() : void 0;\n const updated = {\n ...target,\n isCombineEnabled\n };\n return postDroppableChange(state, updated, true);\n }\n if (action.type === 'MOVE_BY_WINDOW_SCROLL') {\n if (state.phase === 'DROP_PENDING' || state.phase === 'DROP_ANIMATING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot move by window in phase ${state.phase}`) : invariant() : void 0;\n !state.isWindowScrollAllowed ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Window scrolling is currently not supported for fixed lists') : invariant() : void 0;\n const newScroll = action.payload.newScroll;\n if (isEqual$1(state.viewport.scroll.current, newScroll)) {\n return removeScrollJumpRequest(state);\n }\n const viewport = scrollViewport(state.viewport, newScroll);\n if (isSnapping(state)) {\n return refreshSnap({\n state,\n viewport\n });\n }\n return update({\n state,\n viewport\n });\n }\n if (action.type === 'UPDATE_VIEWPORT_MAX_SCROLL') {\n if (!isMovementAllowed(state)) {\n return state;\n }\n const maxScroll = action.payload.maxScroll;\n if (isEqual$1(maxScroll, state.viewport.scroll.max)) {\n return state;\n }\n const withMaxScroll = {\n ...state.viewport,\n scroll: {\n ...state.viewport.scroll,\n max: maxScroll\n }\n };\n return {\n ...state,\n viewport: withMaxScroll\n };\n }\n if (action.type === 'MOVE_UP' || action.type === 'MOVE_DOWN' || action.type === 'MOVE_LEFT' || action.type === 'MOVE_RIGHT') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} received while not in DRAGGING phase`) : invariant() : void 0;\n const result = moveInDirection({\n state,\n type: action.type\n });\n if (!result) {\n return state;\n }\n return update({\n state,\n impact: result.impact,\n clientSelection: result.clientSelection,\n scrollJumpRequest: result.scrollJumpRequest\n });\n }\n if (action.type === 'DROP_PENDING') {\n const reason = action.payload.reason;\n !(state.phase === 'COLLECTING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only move into the DROP_PENDING phase from the COLLECTING phase') : invariant() : void 0;\n const newState = {\n ...state,\n phase: 'DROP_PENDING',\n isWaiting: true,\n reason\n };\n return newState;\n }\n if (action.type === 'DROP_ANIMATE') {\n const {\n completed,\n dropDuration,\n newHomeClientOffset\n } = action.payload;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot animate drop from phase ${state.phase}`) : invariant() : void 0;\n const result = {\n phase: 'DROP_ANIMATING',\n completed,\n dropDuration,\n newHomeClientOffset,\n dimensions: state.dimensions\n };\n return result;\n }\n if (action.type === 'DROP_COMPLETE') {\n const {\n completed\n } = action.payload;\n return {\n phase: 'IDLE',\n completed,\n shouldFlush: false\n };\n }\n return state;\n};\n\nfunction guard(action, predicate) {\n return action instanceof Object && 'type' in action && action.type === predicate;\n}\nconst beforeInitialCapture = args => ({\n type: 'BEFORE_INITIAL_CAPTURE',\n payload: args\n});\nconst lift$1 = args => ({\n type: 'LIFT',\n payload: args\n});\nconst initialPublish = args => ({\n type: 'INITIAL_PUBLISH',\n payload: args\n});\nconst publishWhileDragging = args => ({\n type: 'PUBLISH_WHILE_DRAGGING',\n payload: args\n});\nconst collectionStarting = () => ({\n type: 'COLLECTION_STARTING',\n payload: null\n});\nconst updateDroppableScroll = args => ({\n type: 'UPDATE_DROPPABLE_SCROLL',\n payload: args\n});\nconst updateDroppableIsEnabled = args => ({\n type: 'UPDATE_DROPPABLE_IS_ENABLED',\n payload: args\n});\nconst updateDroppableIsCombineEnabled = args => ({\n type: 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED',\n payload: args\n});\nconst move = args => ({\n type: 'MOVE',\n payload: args\n});\nconst moveByWindowScroll = args => ({\n type: 'MOVE_BY_WINDOW_SCROLL',\n payload: args\n});\nconst updateViewportMaxScroll = args => ({\n type: 'UPDATE_VIEWPORT_MAX_SCROLL',\n payload: args\n});\nconst moveUp = () => ({\n type: 'MOVE_UP',\n payload: null\n});\nconst moveDown = () => ({\n type: 'MOVE_DOWN',\n payload: null\n});\nconst moveRight = () => ({\n type: 'MOVE_RIGHT',\n payload: null\n});\nconst moveLeft = () => ({\n type: 'MOVE_LEFT',\n payload: null\n});\nconst flush = () => ({\n type: 'FLUSH',\n payload: null\n});\nconst animateDrop = args => ({\n type: 'DROP_ANIMATE',\n payload: args\n});\nconst completeDrop = args => ({\n type: 'DROP_COMPLETE',\n payload: args\n});\nconst drop = args => ({\n type: 'DROP',\n payload: args\n});\nconst dropPending = args => ({\n type: 'DROP_PENDING',\n payload: args\n});\nconst dropAnimationFinished = () => ({\n type: 'DROP_ANIMATION_FINISHED',\n payload: null\n});\n\nfunction checkIndexes(insideDestination) {\n if (insideDestination.length <= 1) {\n return;\n }\n const indexes = insideDestination.map(d => d.descriptor.index);\n const errors = {};\n for (let i = 1; i < indexes.length; i++) {\n const current = indexes[i];\n const previous = indexes[i - 1];\n if (current !== previous + 1) {\n errors[current] = true;\n }\n }\n if (!Object.keys(errors).length) {\n return;\n }\n const formatted = indexes.map(index => {\n const hasError = Boolean(errors[index]);\n return hasError ? `[🔥${index}]` : `${index}`;\n }).join(', ');\n process.env.NODE_ENV !== \"production\" ? warning(`\n Detected non-consecutive <Draggable /> indexes.\n\n (This can cause unexpected bugs)\n\n ${formatted}\n `) : void 0;\n}\nfunction validateDimensions(critical, dimensions) {\n if (process.env.NODE_ENV !== 'production') {\n const insideDestination = getDraggablesInsideDroppable(critical.droppable.id, dimensions.draggables);\n checkIndexes(insideDestination);\n }\n}\n\nvar lift = marshal => ({\n getState,\n dispatch\n}) => next => action => {\n if (!guard(action, 'LIFT')) {\n next(action);\n return;\n }\n const {\n id,\n clientSelection,\n movementMode\n } = action.payload;\n const initial = getState();\n if (initial.phase === 'DROP_ANIMATING') {\n dispatch(completeDrop({\n completed: initial.completed\n }));\n }\n !(getState().phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase to start a drag') : invariant() : void 0;\n dispatch(flush());\n dispatch(beforeInitialCapture({\n draggableId: id,\n movementMode\n }));\n const scrollOptions = {\n shouldPublishImmediately: movementMode === 'SNAP'\n };\n const request = {\n draggableId: id,\n scrollOptions\n };\n const {\n critical,\n dimensions,\n viewport\n } = marshal.startPublishing(request);\n validateDimensions(critical, dimensions);\n dispatch(initialPublish({\n critical,\n dimensions,\n clientSelection,\n movementMode,\n viewport\n }));\n};\n\nvar style = marshal => () => next => action => {\n if (guard(action, 'INITIAL_PUBLISH')) {\n marshal.dragging();\n }\n if (guard(action, 'DROP_ANIMATE')) {\n marshal.dropping(action.payload.completed.result.reason);\n }\n if (guard(action, 'FLUSH') || guard(action, 'DROP_COMPLETE')) {\n marshal.resting();\n }\n next(action);\n};\n\nconst curves = {\n outOfTheWay: 'cubic-bezier(0.2, 0, 0, 1)',\n drop: 'cubic-bezier(.2,1,.1,1)'\n};\nconst combine = {\n opacity: {\n drop: 0,\n combining: 0.7\n },\n scale: {\n drop: 0.75\n }\n};\nconst timings = {\n outOfTheWay: 0.2,\n minDropTime: 0.33,\n maxDropTime: 0.55\n};\nconst outOfTheWayTiming = `${timings.outOfTheWay}s ${curves.outOfTheWay}`;\nconst transitions = {\n fluid: `opacity ${outOfTheWayTiming}`,\n snap: `transform ${outOfTheWayTiming}, opacity ${outOfTheWayTiming}`,\n drop: duration => {\n const timing = `${duration}s ${curves.drop}`;\n return `transform ${timing}, opacity ${timing}`;\n },\n outOfTheWay: `transform ${outOfTheWayTiming}`,\n placeholder: `height ${outOfTheWayTiming}, width ${outOfTheWayTiming}, margin ${outOfTheWayTiming}`\n};\nconst moveTo = offset => isEqual$1(offset, origin) ? undefined : `translate(${offset.x}px, ${offset.y}px)`;\nconst transforms = {\n moveTo,\n drop: (offset, isCombining) => {\n const translate = moveTo(offset);\n if (!translate) {\n return undefined;\n }\n if (!isCombining) {\n return translate;\n }\n return `${translate} scale(${combine.scale.drop})`;\n }\n};\n\nconst {\n minDropTime,\n maxDropTime\n} = timings;\nconst dropTimeRange = maxDropTime - minDropTime;\nconst maxDropTimeAtDistance = 1500;\nconst cancelDropModifier = 0.6;\nvar getDropDuration = ({\n current,\n destination,\n reason\n}) => {\n const distance$1 = distance(current, destination);\n if (distance$1 <= 0) {\n return minDropTime;\n }\n if (distance$1 >= maxDropTimeAtDistance) {\n return maxDropTime;\n }\n const percentage = distance$1 / maxDropTimeAtDistance;\n const duration = minDropTime + dropTimeRange * percentage;\n const withDuration = reason === 'CANCEL' ? duration * cancelDropModifier : duration;\n return Number(withDuration.toFixed(2));\n};\n\nvar getNewHomeClientOffset = ({\n impact,\n draggable,\n dimensions,\n viewport,\n afterCritical\n}) => {\n const {\n draggables,\n droppables\n } = dimensions;\n const droppableId = whatIsDraggedOver(impact);\n const destination = droppableId ? droppables[droppableId] : null;\n const home = droppables[draggable.descriptor.droppableId];\n const newClientCenter = getClientBorderBoxCenter({\n impact,\n draggable,\n draggables,\n afterCritical,\n droppable: destination || home,\n viewport\n });\n const offset = subtract(newClientCenter, draggable.client.borderBox.center);\n return offset;\n};\n\nvar getDropImpact = ({\n draggables,\n reason,\n lastImpact,\n home,\n viewport,\n onLiftImpact\n}) => {\n if (!lastImpact.at || reason !== 'DROP') {\n const recomputedHomeImpact = recompute({\n draggables,\n impact: onLiftImpact,\n destination: home,\n viewport,\n forceShouldAnimate: true\n });\n return {\n impact: recomputedHomeImpact,\n didDropInsideDroppable: false\n };\n }\n if (lastImpact.at.type === 'REORDER') {\n return {\n impact: lastImpact,\n didDropInsideDroppable: true\n };\n }\n const withoutMovement = {\n ...lastImpact,\n displaced: emptyGroups\n };\n return {\n impact: withoutMovement,\n didDropInsideDroppable: true\n };\n};\n\nconst dropMiddleware = ({\n getState,\n dispatch\n}) => next => action => {\n if (!guard(action, 'DROP')) {\n next(action);\n return;\n }\n const state = getState();\n const reason = action.payload.reason;\n if (state.phase === 'COLLECTING') {\n dispatch(dropPending({\n reason\n }));\n return;\n }\n if (state.phase === 'IDLE') {\n return;\n }\n const isWaitingForDrop = state.phase === 'DROP_PENDING' && state.isWaiting;\n !!isWaitingForDrop ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A DROP action occurred while DROP_PENDING and still waiting') : invariant() : void 0;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot drop in phase: ${state.phase}`) : invariant() : void 0;\n const critical = state.critical;\n const dimensions = state.dimensions;\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const {\n impact,\n didDropInsideDroppable\n } = getDropImpact({\n reason,\n lastImpact: state.impact,\n afterCritical: state.afterCritical,\n onLiftImpact: state.onLiftImpact,\n home: state.dimensions.droppables[state.critical.droppable.id],\n viewport: state.viewport,\n draggables: state.dimensions.draggables\n });\n const destination = didDropInsideDroppable ? tryGetDestination(impact) : null;\n const combine = didDropInsideDroppable ? tryGetCombine(impact) : null;\n const source = {\n index: critical.draggable.index,\n droppableId: critical.droppable.id\n };\n const result = {\n draggableId: draggable.descriptor.id,\n type: draggable.descriptor.type,\n source,\n reason,\n mode: state.movementMode,\n destination,\n combine\n };\n const newHomeClientOffset = getNewHomeClientOffset({\n impact,\n draggable,\n dimensions,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n const completed = {\n critical: state.critical,\n afterCritical: state.afterCritical,\n result,\n impact\n };\n const isAnimationRequired = !isEqual$1(state.current.client.offset, newHomeClientOffset) || Boolean(result.combine);\n if (!isAnimationRequired) {\n dispatch(completeDrop({\n completed\n }));\n return;\n }\n const dropDuration = getDropDuration({\n current: state.current.client.offset,\n destination: newHomeClientOffset,\n reason\n });\n const args = {\n newHomeClientOffset,\n dropDuration,\n completed\n };\n dispatch(animateDrop(args));\n};\n\nvar getWindowScroll = () => ({\n x: window.pageXOffset,\n y: window.pageYOffset\n});\n\nfunction getWindowScrollBinding(update) {\n return {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: event => {\n if (event.target !== window && event.target !== window.document) {\n return;\n }\n update();\n }\n };\n}\nfunction getScrollListener({\n onWindowScroll\n}) {\n function updateScroll() {\n onWindowScroll(getWindowScroll());\n }\n const scheduled = rafSchd(updateScroll);\n const binding = getWindowScrollBinding(scheduled);\n let unbind = noop$2;\n function isActive() {\n return unbind !== noop$2;\n }\n function start() {\n !!isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start scroll listener when already active') : invariant() : void 0;\n unbind = bindEvents(window, [binding]);\n }\n function stop() {\n !isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop scroll listener when not active') : invariant() : void 0;\n scheduled.cancel();\n unbind();\n unbind = noop$2;\n }\n return {\n start,\n stop,\n isActive\n };\n}\n\nconst shouldStop$1 = action => guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATE') || guard(action, 'FLUSH');\nconst scrollListener = store => {\n const listener = getScrollListener({\n onWindowScroll: newScroll => {\n store.dispatch(moveByWindowScroll({\n newScroll\n }));\n }\n });\n return next => action => {\n if (!listener.isActive() && guard(action, 'INITIAL_PUBLISH')) {\n listener.start();\n }\n if (listener.isActive() && shouldStop$1(action)) {\n listener.stop();\n }\n next(action);\n };\n};\n\nvar getExpiringAnnounce = announce => {\n let wasCalled = false;\n let isExpired = false;\n const timeoutId = setTimeout(() => {\n isExpired = true;\n });\n const result = message => {\n if (wasCalled) {\n process.env.NODE_ENV !== \"production\" ? warning('Announcement already made. Not making a second announcement') : void 0;\n return;\n }\n if (isExpired) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Announcements cannot be made asynchronously.\n Default message has already been announced.\n `) : void 0;\n return;\n }\n wasCalled = true;\n announce(message);\n clearTimeout(timeoutId);\n };\n result.wasCalled = () => wasCalled;\n return result;\n};\n\nvar getAsyncMarshal = () => {\n const entries = [];\n const execute = timerId => {\n const index = entries.findIndex(item => item.timerId === timerId);\n !(index !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find timer') : invariant() : void 0;\n const [entry] = entries.splice(index, 1);\n entry.callback();\n };\n const add = fn => {\n const timerId = setTimeout(() => execute(timerId));\n const entry = {\n timerId,\n callback: fn\n };\n entries.push(entry);\n };\n const flush = () => {\n if (!entries.length) {\n return;\n }\n const shallow = [...entries];\n entries.length = 0;\n shallow.forEach(entry => {\n clearTimeout(entry.timerId);\n entry.callback();\n });\n };\n return {\n add,\n flush\n };\n};\n\nconst areLocationsEqual = (first, second) => {\n if (first == null && second == null) {\n return true;\n }\n if (first == null || second == null) {\n return false;\n }\n return first.droppableId === second.droppableId && first.index === second.index;\n};\nconst isCombineEqual = (first, second) => {\n if (first == null && second == null) {\n return true;\n }\n if (first == null || second == null) {\n return false;\n }\n return first.draggableId === second.draggableId && first.droppableId === second.droppableId;\n};\nconst isCriticalEqual = (first, second) => {\n if (first === second) {\n return true;\n }\n const isDraggableEqual = first.draggable.id === second.draggable.id && first.draggable.droppableId === second.draggable.droppableId && first.draggable.type === second.draggable.type && first.draggable.index === second.draggable.index;\n const isDroppableEqual = first.droppable.id === second.droppable.id && first.droppable.type === second.droppable.type;\n return isDraggableEqual && isDroppableEqual;\n};\n\nconst withTimings = (key, fn) => {\n start();\n fn();\n finish();\n};\nconst getDragStart = (critical, mode) => ({\n draggableId: critical.draggable.id,\n type: critical.droppable.type,\n source: {\n droppableId: critical.droppable.id,\n index: critical.draggable.index\n },\n mode\n});\nfunction execute(responder, data, announce, getDefaultMessage) {\n if (!responder) {\n announce(getDefaultMessage(data));\n return;\n }\n const willExpire = getExpiringAnnounce(announce);\n const provided = {\n announce: willExpire\n };\n responder(data, provided);\n if (!willExpire.wasCalled()) {\n announce(getDefaultMessage(data));\n }\n}\nvar getPublisher = (getResponders, announce) => {\n const asyncMarshal = getAsyncMarshal();\n let dragging = null;\n const beforeCapture = (draggableId, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeCapture as a drag start has already been published') : invariant() : void 0;\n withTimings('onBeforeCapture', () => {\n const fn = getResponders().onBeforeCapture;\n if (fn) {\n const before = {\n draggableId,\n mode\n };\n fn(before);\n }\n });\n };\n const beforeStart = (critical, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant() : void 0;\n withTimings('onBeforeDragStart', () => {\n const fn = getResponders().onBeforeDragStart;\n if (fn) {\n fn(getDragStart(critical, mode));\n }\n });\n };\n const start = (critical, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant() : void 0;\n const data = getDragStart(critical, mode);\n dragging = {\n mode,\n lastCritical: critical,\n lastLocation: data.source,\n lastCombine: null\n };\n asyncMarshal.add(() => {\n withTimings('onDragStart', () => execute(getResponders().onDragStart, data, announce, preset.onDragStart));\n });\n };\n const update = (critical, impact) => {\n const location = tryGetDestination(impact);\n const combine = tryGetCombine(impact);\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragMove when onDragStart has not been called') : invariant() : void 0;\n const hasCriticalChanged = !isCriticalEqual(critical, dragging.lastCritical);\n if (hasCriticalChanged) {\n dragging.lastCritical = critical;\n }\n const hasLocationChanged = !areLocationsEqual(dragging.lastLocation, location);\n if (hasLocationChanged) {\n dragging.lastLocation = location;\n }\n const hasGroupingChanged = !isCombineEqual(dragging.lastCombine, combine);\n if (hasGroupingChanged) {\n dragging.lastCombine = combine;\n }\n if (!hasCriticalChanged && !hasLocationChanged && !hasGroupingChanged) {\n return;\n }\n const data = {\n ...getDragStart(critical, dragging.mode),\n combine,\n destination: location\n };\n asyncMarshal.add(() => {\n withTimings('onDragUpdate', () => execute(getResponders().onDragUpdate, data, announce, preset.onDragUpdate));\n });\n };\n const flush = () => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only flush responders while dragging') : invariant() : void 0;\n asyncMarshal.flush();\n };\n const drop = result => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragEnd when there is no matching onDragStart') : invariant() : void 0;\n dragging = null;\n withTimings('onDragEnd', () => execute(getResponders().onDragEnd, result, announce, preset.onDragEnd));\n };\n const abort = () => {\n if (!dragging) {\n return;\n }\n const result = {\n ...getDragStart(dragging.lastCritical, dragging.mode),\n combine: null,\n destination: null,\n reason: 'CANCEL'\n };\n drop(result);\n };\n return {\n beforeCapture,\n beforeStart,\n start,\n update,\n flush,\n drop,\n abort\n };\n};\n\nvar responders = (getResponders, announce) => {\n const publisher = getPublisher(getResponders, announce);\n return store => next => action => {\n if (guard(action, 'BEFORE_INITIAL_CAPTURE')) {\n publisher.beforeCapture(action.payload.draggableId, action.payload.movementMode);\n return;\n }\n if (guard(action, 'INITIAL_PUBLISH')) {\n const critical = action.payload.critical;\n publisher.beforeStart(critical, action.payload.movementMode);\n next(action);\n publisher.start(critical, action.payload.movementMode);\n return;\n }\n if (guard(action, 'DROP_COMPLETE')) {\n const result = action.payload.completed.result;\n publisher.flush();\n next(action);\n publisher.drop(result);\n return;\n }\n next(action);\n if (guard(action, 'FLUSH')) {\n publisher.abort();\n return;\n }\n const state = store.getState();\n if (state.phase === 'DRAGGING') {\n publisher.update(state.critical, state.impact);\n }\n };\n};\n\nconst dropAnimationFinishMiddleware = store => next => action => {\n if (!guard(action, 'DROP_ANIMATION_FINISHED')) {\n next(action);\n return;\n }\n const state = store.getState();\n !(state.phase === 'DROP_ANIMATING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot finish a drop animating when no drop is occurring') : invariant() : void 0;\n store.dispatch(completeDrop({\n completed: state.completed\n }));\n};\n\nconst dropAnimationFlushOnScrollMiddleware = store => {\n let unbind = null;\n let frameId = null;\n function clear() {\n if (frameId) {\n cancelAnimationFrame(frameId);\n frameId = null;\n }\n if (unbind) {\n unbind();\n unbind = null;\n }\n }\n return next => action => {\n if (guard(action, 'FLUSH') || guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATION_FINISHED')) {\n clear();\n }\n next(action);\n if (!guard(action, 'DROP_ANIMATE')) {\n return;\n }\n const binding = {\n eventName: 'scroll',\n options: {\n capture: true,\n passive: false,\n once: true\n },\n fn: function flushDropAnimation() {\n const state = store.getState();\n if (state.phase === 'DROP_ANIMATING') {\n store.dispatch(dropAnimationFinished());\n }\n }\n };\n frameId = requestAnimationFrame(() => {\n frameId = null;\n unbind = bindEvents(window, [binding]);\n });\n };\n};\n\nvar dimensionMarshalStopper = marshal => () => next => action => {\n if (guard(action, 'DROP_COMPLETE') || guard(action, 'FLUSH') || guard(action, 'DROP_ANIMATE')) {\n marshal.stopPublishing();\n }\n next(action);\n};\n\nvar focus = marshal => {\n let isWatching = false;\n return () => next => action => {\n if (guard(action, 'INITIAL_PUBLISH')) {\n isWatching = true;\n marshal.tryRecordFocus(action.payload.critical.draggable.id);\n next(action);\n marshal.tryRestoreFocusRecorded();\n return;\n }\n next(action);\n if (!isWatching) {\n return;\n }\n if (guard(action, 'FLUSH')) {\n isWatching = false;\n marshal.tryRestoreFocusRecorded();\n return;\n }\n if (guard(action, 'DROP_COMPLETE')) {\n isWatching = false;\n const result = action.payload.completed.result;\n if (result.combine) {\n marshal.tryShiftRecord(result.draggableId, result.combine.draggableId);\n }\n marshal.tryRestoreFocusRecorded();\n }\n };\n};\n\nconst shouldStop = action => guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATE') || guard(action, 'FLUSH');\nvar autoScroll = autoScroller => store => next => action => {\n if (shouldStop(action)) {\n autoScroller.stop();\n next(action);\n return;\n }\n if (guard(action, 'INITIAL_PUBLISH')) {\n next(action);\n const state = store.getState();\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected phase to be DRAGGING after INITIAL_PUBLISH') : invariant() : void 0;\n autoScroller.start(state);\n return;\n }\n next(action);\n autoScroller.scroll(store.getState());\n};\n\nconst pendingDrop = store => next => action => {\n next(action);\n if (!guard(action, 'PUBLISH_WHILE_DRAGGING')) {\n return;\n }\n const postActionState = store.getState();\n if (postActionState.phase !== 'DROP_PENDING') {\n return;\n }\n if (postActionState.isWaiting) {\n return;\n }\n store.dispatch(drop({\n reason: postActionState.reason\n }));\n};\n\nconst composeEnhancers = process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n name: '@hello-pangea/dnd'\n}) : compose;\nvar createStore = ({\n dimensionMarshal,\n focusMarshal,\n styleMarshal,\n getResponders,\n announce,\n autoScroller\n}) => createStore$1(reducer, composeEnhancers(applyMiddleware(style(styleMarshal), dimensionMarshalStopper(dimensionMarshal), lift(dimensionMarshal), dropMiddleware, dropAnimationFinishMiddleware, dropAnimationFlushOnScrollMiddleware, pendingDrop, autoScroll(autoScroller), scrollListener, focus(focusMarshal), responders(getResponders, announce))));\n\nconst clean$1 = () => ({\n additions: {},\n removals: {},\n modified: {}\n});\nfunction createPublisher({\n registry,\n callbacks\n}) {\n let staging = clean$1();\n let frameId = null;\n const collect = () => {\n if (frameId) {\n return;\n }\n callbacks.collectionStarting();\n frameId = requestAnimationFrame(() => {\n frameId = null;\n start();\n const {\n additions,\n removals,\n modified\n } = staging;\n const added = Object.keys(additions).map(id => registry.draggable.getById(id).getDimension(origin)).sort((a, b) => a.descriptor.index - b.descriptor.index);\n const updated = Object.keys(modified).map(id => {\n const entry = registry.droppable.getById(id);\n const scroll = entry.callbacks.getScrollWhileDragging();\n return {\n droppableId: id,\n scroll\n };\n });\n const result = {\n additions: added,\n removals: Object.keys(removals),\n modified: updated\n };\n staging = clean$1();\n finish();\n callbacks.publish(result);\n });\n };\n const add = entry => {\n const id = entry.descriptor.id;\n staging.additions[id] = entry;\n staging.modified[entry.descriptor.droppableId] = true;\n if (staging.removals[id]) {\n delete staging.removals[id];\n }\n collect();\n };\n const remove = entry => {\n const descriptor = entry.descriptor;\n staging.removals[descriptor.id] = true;\n staging.modified[descriptor.droppableId] = true;\n if (staging.additions[descriptor.id]) {\n delete staging.additions[descriptor.id];\n }\n collect();\n };\n const stop = () => {\n if (!frameId) {\n return;\n }\n cancelAnimationFrame(frameId);\n frameId = null;\n staging = clean$1();\n };\n return {\n add,\n remove,\n stop\n };\n}\n\nvar getMaxScroll = ({\n scrollHeight,\n scrollWidth,\n height,\n width\n}) => {\n const maxScroll = subtract({\n x: scrollWidth,\n y: scrollHeight\n }, {\n x: width,\n y: height\n });\n const adjustedMaxScroll = {\n x: Math.max(0, maxScroll.x),\n y: Math.max(0, maxScroll.y)\n };\n return adjustedMaxScroll;\n};\n\nvar getDocumentElement = () => {\n const doc = document.documentElement;\n !doc ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.documentElement') : invariant() : void 0;\n return doc;\n};\n\nvar getMaxWindowScroll = () => {\n const doc = getDocumentElement();\n const maxScroll = getMaxScroll({\n scrollHeight: doc.scrollHeight,\n scrollWidth: doc.scrollWidth,\n width: doc.clientWidth,\n height: doc.clientHeight\n });\n return maxScroll;\n};\n\nvar getViewport = () => {\n const scroll = getWindowScroll();\n const maxScroll = getMaxWindowScroll();\n const top = scroll.y;\n const left = scroll.x;\n const doc = getDocumentElement();\n const width = doc.clientWidth;\n const height = doc.clientHeight;\n const right = left + width;\n const bottom = top + height;\n const frame = getRect({\n top,\n left,\n right,\n bottom\n });\n const viewport = {\n frame,\n scroll: {\n initial: scroll,\n current: scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n return viewport;\n};\n\nvar getInitialPublish = ({\n critical,\n scrollOptions,\n registry\n}) => {\n start();\n const viewport = getViewport();\n const windowScroll = viewport.scroll.current;\n const home = critical.droppable;\n const droppables = registry.droppable.getAllByType(home.type).map(entry => entry.callbacks.getDimensionAndWatchScroll(windowScroll, scrollOptions));\n const draggables = registry.draggable.getAllByType(critical.draggable.type).map(entry => entry.getDimension(windowScroll));\n const dimensions = {\n draggables: toDraggableMap(draggables),\n droppables: toDroppableMap(droppables)\n };\n finish();\n const result = {\n dimensions,\n critical,\n viewport\n };\n return result;\n};\n\nfunction shouldPublishUpdate(registry, dragging, entry) {\n if (entry.descriptor.id === dragging.id) {\n return false;\n }\n if (entry.descriptor.type !== dragging.type) {\n return false;\n }\n const home = registry.droppable.getById(entry.descriptor.droppableId);\n if (home.descriptor.mode !== 'virtual') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n You are attempting to add or remove a Draggable [id: ${entry.descriptor.id}]\n while a drag is occurring. This is only supported for virtual lists.\n\n See https://github.com/hello-pangea/dnd/blob/main/docs/patterns/virtual-lists.md\n `) : void 0;\n return false;\n }\n return true;\n}\nvar createDimensionMarshal = (registry, callbacks) => {\n let collection = null;\n const publisher = createPublisher({\n callbacks: {\n publish: callbacks.publishWhileDragging,\n collectionStarting: callbacks.collectionStarting\n },\n registry\n });\n const updateDroppableIsEnabled = (id, isEnabled) => {\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update is enabled flag of Droppable ${id} as it is not registered`) : invariant() : void 0;\n if (!collection) {\n return;\n }\n callbacks.updateDroppableIsEnabled({\n id,\n isEnabled\n });\n };\n const updateDroppableIsCombineEnabled = (id, isCombineEnabled) => {\n if (!collection) {\n return;\n }\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update isCombineEnabled flag of Droppable ${id} as it is not registered`) : invariant() : void 0;\n callbacks.updateDroppableIsCombineEnabled({\n id,\n isCombineEnabled\n });\n };\n const updateDroppableScroll = (id, newScroll) => {\n if (!collection) {\n return;\n }\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update the scroll on Droppable ${id} as it is not registered`) : invariant() : void 0;\n callbacks.updateDroppableScroll({\n id,\n newScroll\n });\n };\n const scrollDroppable = (id, change) => {\n if (!collection) {\n return;\n }\n registry.droppable.getById(id).callbacks.scroll(change);\n };\n const stopPublishing = () => {\n if (!collection) {\n return;\n }\n publisher.stop();\n const home = collection.critical.droppable;\n registry.droppable.getAllByType(home.type).forEach(entry => entry.callbacks.dragStopped());\n collection.unsubscribe();\n collection = null;\n };\n const subscriber = event => {\n !collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should only be subscribed when a collection is occurring') : invariant() : void 0;\n const dragging = collection.critical.draggable;\n if (event.type === 'ADDITION') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.add(event.value);\n }\n }\n if (event.type === 'REMOVAL') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.remove(event.value);\n }\n }\n };\n const startPublishing = request => {\n !!collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start capturing critical dimensions as there is already a collection') : invariant() : void 0;\n const entry = registry.draggable.getById(request.draggableId);\n const home = registry.droppable.getById(entry.descriptor.droppableId);\n const critical = {\n draggable: entry.descriptor,\n droppable: home.descriptor\n };\n const unsubscribe = registry.subscribe(subscriber);\n collection = {\n critical,\n unsubscribe\n };\n return getInitialPublish({\n critical,\n registry,\n scrollOptions: request.scrollOptions\n });\n };\n const marshal = {\n updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled,\n scrollDroppable,\n updateDroppableScroll,\n startPublishing,\n stopPublishing\n };\n return marshal;\n};\n\nvar canStartDrag = (state, id) => {\n if (state.phase === 'IDLE') {\n return true;\n }\n if (state.phase !== 'DROP_ANIMATING') {\n return false;\n }\n if (state.completed.result.draggableId === id) {\n return false;\n }\n return state.completed.result.reason === 'DROP';\n};\n\nvar scrollWindow = change => {\n window.scrollBy(change.x, change.y);\n};\n\nconst getScrollableDroppables = memoizeOne(droppables => toDroppableList(droppables).filter(droppable => {\n if (!droppable.isEnabled) {\n return false;\n }\n if (!droppable.frame) {\n return false;\n }\n return true;\n}));\nconst getScrollableDroppableOver = (target, droppables) => {\n const maybe = getScrollableDroppables(droppables).find(droppable => {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Invalid result') : invariant() : void 0;\n return isPositionInFrame(droppable.frame.pageMarginBox)(target);\n }) || null;\n return maybe;\n};\nvar getBestScrollableDroppable = ({\n center,\n destination,\n droppables\n}) => {\n if (destination) {\n const dimension = droppables[destination];\n if (!dimension.frame) {\n return null;\n }\n return dimension;\n }\n const dimension = getScrollableDroppableOver(center, droppables);\n return dimension;\n};\n\nconst defaultAutoScrollerOptions = {\n startFromPercentage: 0.25,\n maxScrollAtPercentage: 0.05,\n maxPixelScroll: 28,\n ease: percentage => percentage ** 2,\n durationDampening: {\n stopDampeningAt: 1200,\n accelerateAt: 360\n },\n disabled: false\n};\n\nvar getDistanceThresholds = (container, axis, getAutoScrollerOptions = () => defaultAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n const startScrollingFrom = container[axis.size] * autoScrollerOptions.startFromPercentage;\n const maxScrollValueAt = container[axis.size] * autoScrollerOptions.maxScrollAtPercentage;\n const thresholds = {\n startScrollingFrom,\n maxScrollValueAt\n };\n return thresholds;\n};\n\nvar getPercentage = ({\n startOfRange,\n endOfRange,\n current\n}) => {\n const range = endOfRange - startOfRange;\n if (range === 0) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Detected distance range of 0 in the fluid auto scroller\n This is unexpected and would cause a divide by 0 issue.\n Not allowing an auto scroll\n `) : void 0;\n return 0;\n }\n const currentInRange = current - startOfRange;\n const percentage = currentInRange / range;\n return percentage;\n};\n\nvar minScroll = 1;\n\nvar getValueFromDistance = (distanceToEdge, thresholds, getAutoScrollerOptions = () => defaultAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n if (distanceToEdge > thresholds.startScrollingFrom) {\n return 0;\n }\n if (distanceToEdge <= thresholds.maxScrollValueAt) {\n return autoScrollerOptions.maxPixelScroll;\n }\n if (distanceToEdge === thresholds.startScrollingFrom) {\n return minScroll;\n }\n const percentageFromMaxScrollValueAt = getPercentage({\n startOfRange: thresholds.maxScrollValueAt,\n endOfRange: thresholds.startScrollingFrom,\n current: distanceToEdge\n });\n const percentageFromStartScrollingFrom = 1 - percentageFromMaxScrollValueAt;\n const scroll = autoScrollerOptions.maxPixelScroll * autoScrollerOptions.ease(percentageFromStartScrollingFrom);\n return Math.ceil(scroll);\n};\n\nvar dampenValueByTime = (proposedScroll, dragStartTime, getAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n const accelerateAt = autoScrollerOptions.durationDampening.accelerateAt;\n const stopAt = autoScrollerOptions.durationDampening.stopDampeningAt;\n const startOfRange = dragStartTime;\n const endOfRange = stopAt;\n const now = Date.now();\n const runTime = now - startOfRange;\n if (runTime >= stopAt) {\n return proposedScroll;\n }\n if (runTime < accelerateAt) {\n return minScroll;\n }\n const betweenAccelerateAtAndStopAtPercentage = getPercentage({\n startOfRange: accelerateAt,\n endOfRange,\n current: runTime\n });\n const scroll = proposedScroll * autoScrollerOptions.ease(betweenAccelerateAtAndStopAtPercentage);\n return Math.ceil(scroll);\n};\n\nvar getValue = ({\n distanceToEdge,\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const scroll = getValueFromDistance(distanceToEdge, thresholds, getAutoScrollerOptions);\n if (scroll === 0) {\n return 0;\n }\n if (!shouldUseTimeDampening) {\n return scroll;\n }\n return Math.max(dampenValueByTime(scroll, dragStartTime, getAutoScrollerOptions), minScroll);\n};\n\nvar getScrollOnAxis = ({\n container,\n distanceToEdges,\n dragStartTime,\n axis,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const thresholds = getDistanceThresholds(container, axis, getAutoScrollerOptions);\n const isCloserToEnd = distanceToEdges[axis.end] < distanceToEdges[axis.start];\n if (isCloserToEnd) {\n return getValue({\n distanceToEdge: distanceToEdges[axis.end],\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n }\n return -1 * getValue({\n distanceToEdge: distanceToEdges[axis.start],\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n};\n\nvar adjustForSizeLimits = ({\n container,\n subject,\n proposedScroll\n}) => {\n const isTooBigVertically = subject.height > container.height;\n const isTooBigHorizontally = subject.width > container.width;\n if (!isTooBigHorizontally && !isTooBigVertically) {\n return proposedScroll;\n }\n if (isTooBigHorizontally && isTooBigVertically) {\n return null;\n }\n return {\n x: isTooBigHorizontally ? 0 : proposedScroll.x,\n y: isTooBigVertically ? 0 : proposedScroll.y\n };\n};\n\nconst clean = apply(value => value === 0 ? 0 : value);\nvar getScroll$1 = ({\n dragStartTime,\n container,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const distanceToEdges = {\n top: center.y - container.top,\n right: container.right - center.x,\n bottom: container.bottom - center.y,\n left: center.x - container.left\n };\n const y = getScrollOnAxis({\n container,\n distanceToEdges,\n dragStartTime,\n axis: vertical,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n const x = getScrollOnAxis({\n container,\n distanceToEdges,\n dragStartTime,\n axis: horizontal,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n const required = clean({\n x,\n y\n });\n if (isEqual$1(required, origin)) {\n return null;\n }\n const limited = adjustForSizeLimits({\n container,\n subject,\n proposedScroll: required\n });\n if (!limited) {\n return null;\n }\n return isEqual$1(limited, origin) ? null : limited;\n};\n\nconst smallestSigned = apply(value => {\n if (value === 0) {\n return 0;\n }\n return value > 0 ? 1 : -1;\n});\nconst getOverlap = (() => {\n const getRemainder = (target, max) => {\n if (target < 0) {\n return target;\n }\n if (target > max) {\n return target - max;\n }\n return 0;\n };\n return ({\n current,\n max,\n change\n }) => {\n const targetScroll = add(current, change);\n const overlap = {\n x: getRemainder(targetScroll.x, max.x),\n y: getRemainder(targetScroll.y, max.y)\n };\n if (isEqual$1(overlap, origin)) {\n return null;\n }\n return overlap;\n };\n})();\nconst canPartiallyScroll = ({\n max: rawMax,\n current,\n change\n}) => {\n const max = {\n x: Math.max(current.x, rawMax.x),\n y: Math.max(current.y, rawMax.y)\n };\n const smallestChange = smallestSigned(change);\n const overlap = getOverlap({\n max,\n current,\n change: smallestChange\n });\n if (!overlap) {\n return true;\n }\n if (smallestChange.x !== 0 && overlap.x === 0) {\n return true;\n }\n if (smallestChange.y !== 0 && overlap.y === 0) {\n return true;\n }\n return false;\n};\nconst canScrollWindow = (viewport, change) => canPartiallyScroll({\n current: viewport.scroll.current,\n max: viewport.scroll.max,\n change\n});\nconst getWindowOverlap = (viewport, change) => {\n if (!canScrollWindow(viewport, change)) {\n return null;\n }\n const max = viewport.scroll.max;\n const current = viewport.scroll.current;\n return getOverlap({\n current,\n max,\n change\n });\n};\nconst canScrollDroppable = (droppable, change) => {\n const frame = droppable.frame;\n if (!frame) {\n return false;\n }\n return canPartiallyScroll({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change\n });\n};\nconst getDroppableOverlap = (droppable, change) => {\n const frame = droppable.frame;\n if (!frame) {\n return null;\n }\n if (!canScrollDroppable(droppable, change)) {\n return null;\n }\n return getOverlap({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change\n });\n};\n\nvar getWindowScrollChange = ({\n viewport,\n subject,\n center,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const scroll = getScroll$1({\n dragStartTime,\n container: viewport.frame,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n return scroll && canScrollWindow(viewport, scroll) ? scroll : null;\n};\n\nvar getDroppableScrollChange = ({\n droppable,\n subject,\n center,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const frame = droppable.frame;\n if (!frame) {\n return null;\n }\n const scroll = getScroll$1({\n dragStartTime,\n container: frame.pageMarginBox,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n return scroll && canScrollDroppable(droppable, scroll) ? scroll : null;\n};\n\nvar scroll = ({\n state,\n dragStartTime,\n shouldUseTimeDampening,\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions\n}) => {\n const center = state.current.page.borderBoxCenter;\n const draggable = state.dimensions.draggables[state.critical.draggable.id];\n const subject = draggable.page.marginBox;\n if (state.isWindowScrollAllowed) {\n const viewport = state.viewport;\n const change = getWindowScrollChange({\n dragStartTime,\n viewport,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n if (change) {\n scrollWindow(change);\n return;\n }\n }\n const droppable = getBestScrollableDroppable({\n center,\n destination: whatIsDraggedOver(state.impact),\n droppables: state.dimensions.droppables\n });\n if (!droppable) {\n return;\n }\n const change = getDroppableScrollChange({\n dragStartTime,\n droppable,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n if (change) {\n scrollDroppable(droppable.descriptor.id, change);\n }\n};\n\nvar createFluidScroller = ({\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions = () => defaultAutoScrollerOptions\n}) => {\n const scheduleWindowScroll = rafSchd(scrollWindow);\n const scheduleDroppableScroll = rafSchd(scrollDroppable);\n let dragging = null;\n const tryScroll = state => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fluid scroll if not dragging') : invariant() : void 0;\n const {\n shouldUseTimeDampening,\n dragStartTime\n } = dragging;\n scroll({\n state,\n scrollWindow: scheduleWindowScroll,\n scrollDroppable: scheduleDroppableScroll,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n };\n const start$1 = state => {\n start();\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start auto scrolling when already started') : invariant() : void 0;\n const dragStartTime = Date.now();\n let wasScrollNeeded = false;\n const fakeScrollCallback = () => {\n wasScrollNeeded = true;\n };\n scroll({\n state,\n dragStartTime: 0,\n shouldUseTimeDampening: false,\n scrollWindow: fakeScrollCallback,\n scrollDroppable: fakeScrollCallback,\n getAutoScrollerOptions\n });\n dragging = {\n dragStartTime,\n shouldUseTimeDampening: wasScrollNeeded\n };\n finish();\n if (wasScrollNeeded) {\n tryScroll(state);\n }\n };\n const stop = () => {\n if (!dragging) {\n return;\n }\n scheduleWindowScroll.cancel();\n scheduleDroppableScroll.cancel();\n dragging = null;\n };\n return {\n start: start$1,\n stop,\n scroll: tryScroll\n };\n};\n\nvar createJumpScroller = ({\n move,\n scrollDroppable,\n scrollWindow\n}) => {\n const moveByOffset = (state, offset) => {\n const client = add(state.current.client.selection, offset);\n move({\n client\n });\n };\n const scrollDroppableAsMuchAsItCan = (droppable, change) => {\n if (!canScrollDroppable(droppable, change)) {\n return change;\n }\n const overlap = getDroppableOverlap(droppable, change);\n if (!overlap) {\n scrollDroppable(droppable.descriptor.id, change);\n return null;\n }\n const whatTheDroppableCanScroll = subtract(change, overlap);\n scrollDroppable(droppable.descriptor.id, whatTheDroppableCanScroll);\n const remainder = subtract(change, whatTheDroppableCanScroll);\n return remainder;\n };\n const scrollWindowAsMuchAsItCan = (isWindowScrollAllowed, viewport, change) => {\n if (!isWindowScrollAllowed) {\n return change;\n }\n if (!canScrollWindow(viewport, change)) {\n return change;\n }\n const overlap = getWindowOverlap(viewport, change);\n if (!overlap) {\n scrollWindow(change);\n return null;\n }\n const whatTheWindowCanScroll = subtract(change, overlap);\n scrollWindow(whatTheWindowCanScroll);\n const remainder = subtract(change, whatTheWindowCanScroll);\n return remainder;\n };\n const jumpScroller = state => {\n const request = state.scrollJumpRequest;\n if (!request) {\n return;\n }\n const destination = whatIsDraggedOver(state.impact);\n !destination ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot perform a jump scroll when there is no destination') : invariant() : void 0;\n const droppableRemainder = scrollDroppableAsMuchAsItCan(state.dimensions.droppables[destination], request);\n if (!droppableRemainder) {\n return;\n }\n const viewport = state.viewport;\n const windowRemainder = scrollWindowAsMuchAsItCan(state.isWindowScrollAllowed, viewport, droppableRemainder);\n if (!windowRemainder) {\n return;\n }\n moveByOffset(state, windowRemainder);\n };\n return jumpScroller;\n};\n\nvar createAutoScroller = ({\n scrollDroppable,\n scrollWindow,\n move,\n getAutoScrollerOptions\n}) => {\n const fluidScroller = createFluidScroller({\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions\n });\n const jumpScroll = createJumpScroller({\n move,\n scrollWindow,\n scrollDroppable\n });\n const scroll = state => {\n const autoScrollerOptions = getAutoScrollerOptions();\n if (autoScrollerOptions.disabled || state.phase !== 'DRAGGING') {\n return;\n }\n if (state.movementMode === 'FLUID') {\n fluidScroller.scroll(state);\n return;\n }\n if (!state.scrollJumpRequest) {\n return;\n }\n jumpScroll(state);\n };\n const scroller = {\n scroll,\n start: fluidScroller.start,\n stop: fluidScroller.stop\n };\n return scroller;\n};\n\nconst prefix = 'data-rfd';\nconst dragHandle = (() => {\n const base = `${prefix}-drag-handle`;\n return {\n base,\n draggableId: `${base}-draggable-id`,\n contextId: `${base}-context-id`\n };\n})();\nconst draggable = (() => {\n const base = `${prefix}-draggable`;\n return {\n base,\n contextId: `${base}-context-id`,\n id: `${base}-id`\n };\n})();\nconst droppable = (() => {\n const base = `${prefix}-droppable`;\n return {\n base,\n contextId: `${base}-context-id`,\n id: `${base}-id`\n };\n})();\nconst scrollContainer = {\n contextId: `${prefix}-scroll-container-context-id`\n};\n\nconst makeGetSelector = context => attribute => `[${attribute}=\"${context}\"]`;\nconst getStyles = (rules, property) => rules.map(rule => {\n const value = rule.styles[property];\n if (!value) {\n return '';\n }\n return `${rule.selector} { ${value} }`;\n}).join(' ');\nconst noPointerEvents = 'pointer-events: none;';\nvar getStyles$1 = contextId => {\n const getSelector = makeGetSelector(contextId);\n const dragHandle$1 = (() => {\n const grabCursor = `\n cursor: -webkit-grab;\n cursor: grab;\n `;\n return {\n selector: getSelector(dragHandle.contextId),\n styles: {\n always: `\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n touch-action: manipulation;\n `,\n resting: grabCursor,\n dragging: noPointerEvents,\n dropAnimating: grabCursor\n }\n };\n })();\n const draggable$1 = (() => {\n const transition = `\n transition: ${transitions.outOfTheWay};\n `;\n return {\n selector: getSelector(draggable.contextId),\n styles: {\n dragging: transition,\n dropAnimating: transition,\n userCancel: transition\n }\n };\n })();\n const droppable$1 = {\n selector: getSelector(droppable.contextId),\n styles: {\n always: `overflow-anchor: none;`\n }\n };\n const body = {\n selector: 'body',\n styles: {\n dragging: `\n cursor: grabbing;\n cursor: -webkit-grabbing;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n overflow-anchor: none;\n `\n }\n };\n const rules = [draggable$1, dragHandle$1, droppable$1, body];\n return {\n always: getStyles(rules, 'always'),\n resting: getStyles(rules, 'resting'),\n dragging: getStyles(rules, 'dragging'),\n dropAnimating: getStyles(rules, 'dropAnimating'),\n userCancel: getStyles(rules, 'userCancel')\n };\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\nconst getHead = () => {\n const head = document.querySelector('head');\n !head ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find the head to append a style to') : invariant() : void 0;\n return head;\n};\nconst createStyleEl = nonce => {\n const el = document.createElement('style');\n if (nonce) {\n el.setAttribute('nonce', nonce);\n }\n el.type = 'text/css';\n return el;\n};\nfunction useStyleMarshal(contextId, nonce) {\n const styles = useMemo(() => getStyles$1(contextId), [contextId]);\n const alwaysRef = useRef(null);\n const dynamicRef = useRef(null);\n const setDynamicStyle = useCallback(memoizeOne(proposed => {\n const el = dynamicRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant() : void 0;\n el.textContent = proposed;\n }), []);\n const setAlwaysStyle = useCallback(proposed => {\n const el = alwaysRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant() : void 0;\n el.textContent = proposed;\n }, []);\n useIsomorphicLayoutEffect(() => {\n !(!alwaysRef.current && !dynamicRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'style elements already mounted') : invariant() : void 0;\n const always = createStyleEl(nonce);\n const dynamic = createStyleEl(nonce);\n alwaysRef.current = always;\n dynamicRef.current = dynamic;\n always.setAttribute(`${prefix}-always`, contextId);\n dynamic.setAttribute(`${prefix}-dynamic`, contextId);\n getHead().appendChild(always);\n getHead().appendChild(dynamic);\n setAlwaysStyle(styles.always);\n setDynamicStyle(styles.resting);\n return () => {\n const remove = ref => {\n const current = ref.current;\n !current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot unmount ref as it is not set') : invariant() : void 0;\n getHead().removeChild(current);\n ref.current = null;\n };\n remove(alwaysRef);\n remove(dynamicRef);\n };\n }, [nonce, setAlwaysStyle, setDynamicStyle, styles.always, styles.resting, contextId]);\n const dragging = useCallback(() => setDynamicStyle(styles.dragging), [setDynamicStyle, styles.dragging]);\n const dropping = useCallback(reason => {\n if (reason === 'DROP') {\n setDynamicStyle(styles.dropAnimating);\n return;\n }\n setDynamicStyle(styles.userCancel);\n }, [setDynamicStyle, styles.dropAnimating, styles.userCancel]);\n const resting = useCallback(() => {\n if (!dynamicRef.current) {\n return;\n }\n setDynamicStyle(styles.resting);\n }, [setDynamicStyle, styles.resting]);\n const marshal = useMemo(() => ({\n dragging,\n dropping,\n resting\n }), [dragging, dropping, resting]);\n return marshal;\n}\n\nfunction querySelectorAll(parentNode, selector) {\n return Array.from(parentNode.querySelectorAll(selector));\n}\n\nvar getWindowFromEl = el => {\n if (el && el.ownerDocument && el.ownerDocument.defaultView) {\n return el.ownerDocument.defaultView;\n }\n return window;\n};\n\nfunction isHtmlElement(el) {\n return el instanceof getWindowFromEl(el).HTMLElement;\n}\n\nfunction findDragHandle(contextId, draggableId) {\n const selector = `[${dragHandle.contextId}=\"${contextId}\"]`;\n const possible = querySelectorAll(document, selector);\n if (!possible.length) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find any drag handles in the context \"${contextId}\"`) : void 0;\n return null;\n }\n const handle = possible.find(el => {\n return el.getAttribute(dragHandle.draggableId) === draggableId;\n });\n if (!handle) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find drag handle with id \"${draggableId}\" as no handle with a matching id was found`) : void 0;\n return null;\n }\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle needs to be a HTMLElement') : void 0;\n return null;\n }\n return handle;\n}\n\nfunction useFocusMarshal(contextId) {\n const entriesRef = useRef({});\n const recordRef = useRef(null);\n const restoreFocusFrameRef = useRef(null);\n const isMountedRef = useRef(false);\n const register = useCallback(function register(id, focus) {\n const entry = {\n id,\n focus\n };\n entriesRef.current[id] = entry;\n return function unregister() {\n const entries = entriesRef.current;\n const current = entries[id];\n if (current !== entry) {\n delete entries[id];\n }\n };\n }, []);\n const tryGiveFocus = useCallback(function tryGiveFocus(tryGiveFocusTo) {\n const handle = findDragHandle(contextId, tryGiveFocusTo);\n if (handle && handle !== document.activeElement) {\n handle.focus();\n }\n }, [contextId]);\n const tryShiftRecord = useCallback(function tryShiftRecord(previous, redirectTo) {\n if (recordRef.current === previous) {\n recordRef.current = redirectTo;\n }\n }, []);\n const tryRestoreFocusRecorded = useCallback(function tryRestoreFocusRecorded() {\n if (restoreFocusFrameRef.current) {\n return;\n }\n if (!isMountedRef.current) {\n return;\n }\n restoreFocusFrameRef.current = requestAnimationFrame(() => {\n restoreFocusFrameRef.current = null;\n const record = recordRef.current;\n if (record) {\n tryGiveFocus(record);\n }\n });\n }, [tryGiveFocus]);\n const tryRecordFocus = useCallback(function tryRecordFocus(id) {\n recordRef.current = null;\n const focused = document.activeElement;\n if (!focused) {\n return;\n }\n if (focused.getAttribute(dragHandle.draggableId) !== id) {\n return;\n }\n recordRef.current = id;\n }, []);\n useIsomorphicLayoutEffect(() => {\n isMountedRef.current = true;\n return function clearFrameOnUnmount() {\n isMountedRef.current = false;\n const frameId = restoreFocusFrameRef.current;\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n };\n }, []);\n const marshal = useMemo(() => ({\n register,\n tryRecordFocus,\n tryRestoreFocusRecorded,\n tryShiftRecord\n }), [register, tryRecordFocus, tryRestoreFocusRecorded, tryShiftRecord]);\n return marshal;\n}\n\nfunction createRegistry() {\n const entries = {\n draggables: {},\n droppables: {}\n };\n const subscribers = [];\n function subscribe(cb) {\n subscribers.push(cb);\n return function unsubscribe() {\n const index = subscribers.indexOf(cb);\n if (index === -1) {\n return;\n }\n subscribers.splice(index, 1);\n };\n }\n function notify(event) {\n if (subscribers.length) {\n subscribers.forEach(cb => cb(event));\n }\n }\n function findDraggableById(id) {\n return entries.draggables[id] || null;\n }\n function getDraggableById(id) {\n const entry = findDraggableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find draggable entry with id [${id}]`) : invariant() : void 0;\n return entry;\n }\n const draggableAPI = {\n register: entry => {\n entries.draggables[entry.descriptor.id] = entry;\n notify({\n type: 'ADDITION',\n value: entry\n });\n },\n update: (entry, last) => {\n const current = entries.draggables[last.descriptor.id];\n if (!current) {\n return;\n }\n if (current.uniqueId !== entry.uniqueId) {\n return;\n }\n delete entries.draggables[last.descriptor.id];\n entries.draggables[entry.descriptor.id] = entry;\n },\n unregister: entry => {\n const draggableId = entry.descriptor.id;\n const current = findDraggableById(draggableId);\n if (!current) {\n return;\n }\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n delete entries.draggables[draggableId];\n if (entries.droppables[entry.descriptor.droppableId]) {\n notify({\n type: 'REMOVAL',\n value: entry\n });\n }\n },\n getById: getDraggableById,\n findById: findDraggableById,\n exists: id => Boolean(findDraggableById(id)),\n getAllByType: type => Object.values(entries.draggables).filter(entry => entry.descriptor.type === type)\n };\n function findDroppableById(id) {\n return entries.droppables[id] || null;\n }\n function getDroppableById(id) {\n const entry = findDroppableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find droppable entry with id [${id}]`) : invariant() : void 0;\n return entry;\n }\n const droppableAPI = {\n register: entry => {\n entries.droppables[entry.descriptor.id] = entry;\n },\n unregister: entry => {\n const current = findDroppableById(entry.descriptor.id);\n if (!current) {\n return;\n }\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n delete entries.droppables[entry.descriptor.id];\n },\n getById: getDroppableById,\n findById: findDroppableById,\n exists: id => Boolean(findDroppableById(id)),\n getAllByType: type => Object.values(entries.droppables).filter(entry => entry.descriptor.type === type)\n };\n function clean() {\n entries.draggables = {};\n entries.droppables = {};\n subscribers.length = 0;\n }\n return {\n draggable: draggableAPI,\n droppable: droppableAPI,\n subscribe,\n clean\n };\n}\n\nfunction useRegistry() {\n const registry = useMemo(createRegistry, []);\n useEffect(() => {\n return function unmount() {\n registry.clean();\n };\n }, [registry]);\n return registry;\n}\n\nvar StoreContext = React.createContext(null);\n\nvar getBodyElement = () => {\n const body = document.body;\n !body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.body') : invariant() : void 0;\n return body;\n};\n\nconst visuallyHidden = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n border: '0',\n padding: '0',\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n 'clip-path': 'inset(100%)'\n};\n\nconst getId = contextId => `rfd-announcement-${contextId}`;\nfunction useAnnouncer(contextId) {\n const id = useMemo(() => getId(contextId), [contextId]);\n const ref = useRef(null);\n useEffect(function setup() {\n const el = document.createElement('div');\n ref.current = el;\n el.id = id;\n el.setAttribute('aria-live', 'assertive');\n el.setAttribute('aria-atomic', 'true');\n _extends(el.style, visuallyHidden);\n getBodyElement().appendChild(el);\n return function cleanup() {\n setTimeout(function remove() {\n const body = getBodyElement();\n if (body.contains(el)) {\n body.removeChild(el);\n }\n if (el === ref.current) {\n ref.current = null;\n }\n });\n };\n }, [id]);\n const announce = useCallback(message => {\n const el = ref.current;\n if (el) {\n el.textContent = message;\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n A screen reader message was trying to be announced but it was unable to do so.\n This can occur if you unmount your <DragDropContext /> in your onDragEnd.\n Consider calling provided.announce() before the unmount so that the instruction will\n not be lost for users relying on a screen reader.\n\n Message not passed to screen reader:\n\n \"${message}\"\n `) : void 0;\n }, []);\n return announce;\n}\n\nconst defaults = {\n separator: '::'\n};\nfunction useUniqueId(prefix, options = defaults) {\n const id = React.useId();\n return useMemo(() => `${prefix}${options.separator}${id}`, [options.separator, prefix, id]);\n}\n\nfunction getElementId({\n contextId,\n uniqueId\n}) {\n return `rfd-hidden-text-${contextId}-${uniqueId}`;\n}\nfunction useHiddenTextElement({\n contextId,\n text\n}) {\n const uniqueId = useUniqueId('hidden-text', {\n separator: '-'\n });\n const id = useMemo(() => getElementId({\n contextId,\n uniqueId\n }), [uniqueId, contextId]);\n useEffect(function mount() {\n const el = document.createElement('div');\n el.id = id;\n el.textContent = text;\n el.style.display = 'none';\n getBodyElement().appendChild(el);\n return function unmount() {\n const body = getBodyElement();\n if (body.contains(el)) {\n body.removeChild(el);\n }\n };\n }, [id, text]);\n return id;\n}\n\nvar AppContext = React.createContext(null);\n\nvar peerDependencies = {\n\treact: \"^18.0.0 || ^19.0.0\"};\n\nconst semver = /(\\d+)\\.(\\d+)\\.(\\d+)/;\nconst getVersion = value => {\n const result = semver.exec(value);\n !(result != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unable to parse React version ${value}`) : invariant() : void 0;\n const major = Number(result[1]);\n const minor = Number(result[2]);\n const patch = Number(result[3]);\n return {\n major,\n minor,\n patch,\n raw: value\n };\n};\nconst isSatisfied = (expected, actual) => {\n if (actual.major > expected.major) {\n return true;\n }\n if (actual.major < expected.major) {\n return false;\n }\n if (actual.minor > expected.minor) {\n return true;\n }\n if (actual.minor < expected.minor) {\n return false;\n }\n return actual.patch >= expected.patch;\n};\nvar checkReactVersion = (peerDepValue, actualValue) => {\n const peerDep = getVersion(peerDepValue);\n const actual = getVersion(actualValue);\n if (isSatisfied(peerDep, actual)) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n React version: [${actual.raw}]\n does not satisfy expected peer dependency version: [${peerDep.raw}]\n\n This can result in run time bugs, and even fatal crashes\n `) : void 0;\n};\n\nconst suffix = `\n We expect a html5 doctype: <!doctype html>\n This is to ensure consistent browser layout and measurement\n\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/doctype.md\n`;\nvar checkDoctype = doc => {\n const doctype = doc.doctype;\n if (!doctype) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n No <!doctype html> found.\n\n ${suffix}\n `) : void 0;\n return;\n }\n if (doctype.name.toLowerCase() !== 'html') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Unexpected <!doctype> found: (${doctype.name})\n\n ${suffix}\n `) : void 0;\n }\n if (doctype.publicId !== '') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Unexpected <!doctype> publicId found: (${doctype.publicId})\n A html5 doctype does not have a publicId\n\n ${suffix}\n `) : void 0;\n }\n};\n\nfunction useDev(useHook) {\n if (process.env.NODE_ENV !== 'production') {\n useHook();\n }\n}\n\nfunction useDevSetupWarning(fn, inputs) {\n useDev(() => {\n useEffect(() => {\n try {\n fn();\n } catch (e) {\n error(`\n A setup problem was encountered.\n\n > ${e.message}\n `);\n }\n }, inputs);\n });\n}\n\nfunction useStartupValidation() {\n useDevSetupWarning(() => {\n checkReactVersion(peerDependencies.react, React.version);\n checkDoctype(document);\n }, []);\n}\n\nfunction usePrevious(current) {\n const ref = useRef(current);\n useEffect(() => {\n ref.current = current;\n });\n return ref;\n}\n\nfunction create() {\n let lock = null;\n function isClaimed() {\n return Boolean(lock);\n }\n function isActive(value) {\n return value === lock;\n }\n function claim(abandon) {\n !!lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot claim lock as it is already claimed') : invariant() : void 0;\n const newLock = {\n abandon\n };\n lock = newLock;\n return newLock;\n }\n function release() {\n !lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot release lock when there is no lock') : invariant() : void 0;\n lock = null;\n }\n function tryAbandon() {\n if (lock) {\n lock.abandon();\n release();\n }\n }\n return {\n isClaimed,\n isActive,\n claim,\n release,\n tryAbandon\n };\n}\n\nfunction isDragging(state) {\n if (state.phase === 'IDLE' || state.phase === 'DROP_ANIMATING') {\n return false;\n }\n return state.isDragging;\n}\n\nconst tab = 9;\nconst enter = 13;\nconst escape = 27;\nconst space = 32;\nconst pageUp = 33;\nconst pageDown = 34;\nconst end = 35;\nconst home = 36;\nconst arrowLeft = 37;\nconst arrowUp = 38;\nconst arrowRight = 39;\nconst arrowDown = 40;\n\nconst preventedKeys = {\n [enter]: true,\n [tab]: true\n};\nvar preventStandardKeyEvents = event => {\n if (preventedKeys[event.keyCode]) {\n event.preventDefault();\n }\n};\n\nconst supportedEventName = (() => {\n const base = 'visibilitychange';\n if (typeof document === 'undefined') {\n return base;\n }\n const candidates = [base, `ms${base}`, `webkit${base}`, `moz${base}`, `o${base}`];\n const supported = candidates.find(eventName => `on${eventName}` in document);\n return supported || base;\n})();\n\nconst primaryButton = 0;\nconst sloppyClickThreshold = 5;\nfunction isSloppyClickThresholdExceeded(original, current) {\n return Math.abs(current.x - original.x) >= sloppyClickThreshold || Math.abs(current.y - original.y) >= sloppyClickThreshold;\n}\nconst idle$1 = {\n type: 'IDLE'\n};\nfunction getCaptureBindings({\n cancel,\n completed,\n getPhase,\n setPhase\n}) {\n return [{\n eventName: 'mousemove',\n fn: event => {\n const {\n button,\n clientX,\n clientY\n } = event;\n if (button !== primaryButton) {\n return;\n }\n const point = {\n x: clientX,\n y: clientY\n };\n const phase = getPhase();\n if (phase.type === 'DRAGGING') {\n event.preventDefault();\n phase.actions.move(point);\n return;\n }\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot be IDLE') : invariant() : void 0;\n const pending = phase.point;\n if (!isSloppyClickThresholdExceeded(pending, point)) {\n return;\n }\n event.preventDefault();\n const actions = phase.actions.fluidLift(point);\n setPhase({\n type: 'DRAGGING',\n actions\n });\n }\n }, {\n eventName: 'mouseup',\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'mousedown',\n fn: event => {\n if (getPhase().type === 'DRAGGING') {\n event.preventDefault();\n }\n cancel();\n }\n }, {\n eventName: 'keydown',\n fn: event => {\n const phase = getPhase();\n if (phase.type === 'PENDING') {\n cancel();\n return;\n }\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: () => {\n if (getPhase().type === 'PENDING') {\n cancel();\n }\n }\n }, {\n eventName: 'webkitmouseforcedown',\n fn: event => {\n const phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase') : invariant() : void 0;\n if (phase.actions.shouldRespectForcePress()) {\n cancel();\n return;\n }\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useMouseSensor(api) {\n const phaseRef = useRef(idle$1);\n const unbindEventsRef = useRef(noop$2);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'mousedown',\n fn: function onMouseDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (event.button !== primaryButton) {\n return;\n }\n if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!actions) {\n return;\n }\n event.preventDefault();\n const point = {\n x: event.clientX,\n y: event.clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n }), [api]);\n const preventForcePressBinding = useMemo(() => ({\n eventName: 'webkitmouseforcewillbegin',\n fn: event => {\n if (event.defaultPrevented) {\n return;\n }\n const id = api.findClosestDraggableId(event);\n if (!id) {\n return;\n }\n const options = api.findOptionsForDraggable(id);\n if (!options) {\n return;\n }\n if (options.shouldRespectForcePress) {\n return;\n }\n if (!api.canGetLock(id)) {\n return;\n }\n event.preventDefault();\n }\n }), [api]);\n const listenForCapture = useCallback(function listenForCapture() {\n const options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [preventForcePressBinding, startCaptureBinding], options);\n }, [preventForcePressBinding, startCaptureBinding]);\n const stop = useCallback(() => {\n const current = phaseRef.current;\n if (current.type === 'IDLE') {\n return;\n }\n phaseRef.current = idle$1;\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture]);\n const cancel = useCallback(() => {\n const phase = phaseRef.current;\n stop();\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n const bindCapturingEvents = useCallback(function bindCapturingEvents() {\n const options = {\n capture: true,\n passive: false\n };\n const bindings = getCaptureBindings({\n cancel,\n completed: stop,\n getPhase: () => phaseRef.current,\n setPhase: phase => {\n phaseRef.current = phase;\n }\n });\n unbindEventsRef.current = bindEvents(window, bindings, options);\n }, [cancel, stop]);\n const startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(phaseRef.current.type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant() : void 0;\n phaseRef.current = {\n type: 'PENDING',\n point,\n actions\n };\n bindCapturingEvents();\n }, [bindCapturingEvents]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nfunction noop$1() {}\nconst scrollJumpKeys = {\n [pageDown]: true,\n [pageUp]: true,\n [home]: true,\n [end]: true\n};\nfunction getDraggingBindings(actions, stop) {\n function cancel() {\n stop();\n actions.cancel();\n }\n function drop() {\n stop();\n actions.drop();\n }\n return [{\n eventName: 'keydown',\n fn: event => {\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n if (event.keyCode === space) {\n event.preventDefault();\n drop();\n return;\n }\n if (event.keyCode === arrowDown) {\n event.preventDefault();\n actions.moveDown();\n return;\n }\n if (event.keyCode === arrowUp) {\n event.preventDefault();\n actions.moveUp();\n return;\n }\n if (event.keyCode === arrowRight) {\n event.preventDefault();\n actions.moveRight();\n return;\n }\n if (event.keyCode === arrowLeft) {\n event.preventDefault();\n actions.moveLeft();\n return;\n }\n if (scrollJumpKeys[event.keyCode]) {\n event.preventDefault();\n return;\n }\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'mousedown',\n fn: cancel\n }, {\n eventName: 'mouseup',\n fn: cancel\n }, {\n eventName: 'click',\n fn: cancel\n }, {\n eventName: 'touchstart',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'wheel',\n fn: cancel,\n options: {\n passive: true\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useKeyboardSensor(api) {\n const unbindEventsRef = useRef(noop$1);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'keydown',\n fn: function onKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (event.keyCode !== space) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const preDrag = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!preDrag) {\n return;\n }\n event.preventDefault();\n let isCapturing = true;\n const actions = preDrag.snapLift();\n unbindEventsRef.current();\n function stop() {\n !isCapturing ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop capturing a keyboard drag when not capturing') : invariant() : void 0;\n isCapturing = false;\n unbindEventsRef.current();\n listenForCapture();\n }\n unbindEventsRef.current = bindEvents(window, getDraggingBindings(actions, stop), {\n capture: true,\n passive: false\n });\n }\n }), [api]);\n const listenForCapture = useCallback(function tryStartCapture() {\n const options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nconst idle = {\n type: 'IDLE'\n};\nconst timeForLongPress = 120;\nconst forcePressThreshold = 0.15;\nfunction getWindowBindings({\n cancel,\n getPhase\n}) {\n return [{\n eventName: 'orientationchange',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'contextmenu',\n fn: event => {\n event.preventDefault();\n }\n }, {\n eventName: 'keydown',\n fn: event => {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n if (event.keyCode === escape) {\n event.preventDefault();\n }\n cancel();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction getHandleBindings({\n cancel,\n completed,\n getPhase\n}) {\n return [{\n eventName: 'touchmove',\n options: {\n capture: false\n },\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n phase.hasMoved = true;\n const {\n clientX,\n clientY\n } = event.touches[0];\n const point = {\n x: clientX,\n y: clientY\n };\n event.preventDefault();\n phase.actions.move(point);\n }\n }, {\n eventName: 'touchend',\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'touchcancel',\n fn: event => {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n cancel();\n }\n }, {\n eventName: 'touchforcechange',\n fn: event => {\n const phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const touch = event.touches[0];\n if (!touch) {\n return;\n }\n const isForcePress = touch.force >= forcePressThreshold;\n if (!isForcePress) {\n return;\n }\n const shouldRespect = phase.actions.shouldRespectForcePress();\n if (phase.type === 'PENDING') {\n if (shouldRespect) {\n cancel();\n }\n return;\n }\n if (shouldRespect) {\n if (phase.hasMoved) {\n event.preventDefault();\n return;\n }\n cancel();\n return;\n }\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useTouchSensor(api) {\n const phaseRef = useRef(idle);\n const unbindEventsRef = useRef(noop$2);\n const getPhase = useCallback(function getPhase() {\n return phaseRef.current;\n }, []);\n const setPhase = useCallback(function setPhase(phase) {\n phaseRef.current = phase;\n }, []);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'touchstart',\n fn: function onTouchStart(event) {\n if (event.defaultPrevented) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!actions) {\n return;\n }\n const touch = event.touches[0];\n const {\n clientX,\n clientY\n } = touch;\n const point = {\n x: clientX,\n y: clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n }), [api]);\n const listenForCapture = useCallback(function listenForCapture() {\n const options = {\n capture: true,\n passive: false\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n const stop = useCallback(() => {\n const current = phaseRef.current;\n if (current.type === 'IDLE') {\n return;\n }\n if (current.type === 'PENDING') {\n clearTimeout(current.longPressTimerId);\n }\n setPhase(idle);\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture, setPhase]);\n const cancel = useCallback(() => {\n const phase = phaseRef.current;\n stop();\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n const bindCapturingEvents = useCallback(function bindCapturingEvents() {\n const options = {\n capture: true,\n passive: false\n };\n const args = {\n cancel,\n completed: stop,\n getPhase\n };\n const unbindTarget = bindEvents(window, getHandleBindings(args), options);\n const unbindWindow = bindEvents(window, getWindowBindings(args), options);\n unbindEventsRef.current = function unbindAll() {\n unbindTarget();\n unbindWindow();\n };\n }, [cancel, getPhase, stop]);\n const startDragging = useCallback(function startDragging() {\n const phase = getPhase();\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot start dragging from phase ${phase.type}`) : invariant() : void 0;\n const actions = phase.actions.fluidLift(phase.point);\n setPhase({\n type: 'DRAGGING',\n actions,\n hasMoved: false\n });\n }, [getPhase, setPhase]);\n const startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(getPhase().type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant() : void 0;\n const longPressTimerId = setTimeout(startDragging, timeForLongPress);\n setPhase({\n type: 'PENDING',\n point,\n actions,\n longPressTimerId\n });\n bindCapturingEvents();\n }, [bindCapturingEvents, getPhase, setPhase, startDragging]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n const phase = getPhase();\n if (phase.type === 'PENDING') {\n clearTimeout(phase.longPressTimerId);\n setPhase(idle);\n }\n };\n }, [getPhase, listenForCapture, setPhase]);\n useIsomorphicLayoutEffect(function webkitHack() {\n const unbind = bindEvents(window, [{\n eventName: 'touchmove',\n fn: () => {},\n options: {\n capture: false,\n passive: false\n }\n }]);\n return unbind;\n }, []);\n}\n\nfunction useValidateSensorHooks(sensorHooks) {\n useDev(() => {\n const previousRef = usePrevious(sensorHooks);\n useDevSetupWarning(() => {\n !(previousRef.current.length === sensorHooks.length) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot change the amount of sensor hooks after mounting') : invariant(false) : void 0;\n });\n });\n}\n\nconst interactiveTagNames = ['input', 'button', 'textarea', 'select', 'option', 'optgroup', 'video', 'audio'];\nfunction isAnInteractiveElement(parent, current) {\n if (current == null) {\n return false;\n }\n const hasAnInteractiveTag = interactiveTagNames.includes(current.tagName.toLowerCase());\n if (hasAnInteractiveTag) {\n return true;\n }\n const attribute = current.getAttribute('contenteditable');\n if (attribute === 'true' || attribute === '') {\n return true;\n }\n if (current === parent) {\n return false;\n }\n return isAnInteractiveElement(parent, current.parentElement);\n}\nfunction isEventInInteractiveElement(draggable, event) {\n const target = event.target;\n if (!isHtmlElement(target)) {\n return false;\n }\n return isAnInteractiveElement(draggable, target);\n}\n\nvar getBorderBoxCenterPosition = el => getRect(el.getBoundingClientRect()).center;\n\nfunction isElement(el) {\n return el instanceof getWindowFromEl(el).Element;\n}\n\nconst supportedMatchesName = (() => {\n const base = 'matches';\n if (typeof document === 'undefined') {\n return base;\n }\n const candidates = [base, 'msMatchesSelector', 'webkitMatchesSelector'];\n const value = candidates.find(name => name in Element.prototype);\n return value || base;\n})();\nfunction closestPonyfill(el, selector) {\n if (el == null) {\n return null;\n }\n if (el[supportedMatchesName](selector)) {\n return el;\n }\n return closestPonyfill(el.parentElement, selector);\n}\nfunction closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n return closestPonyfill(el, selector);\n}\n\nfunction getSelector(contextId) {\n return `[${dragHandle.contextId}=\"${contextId}\"]`;\n}\nfunction findClosestDragHandleFromEvent(contextId, event) {\n const target = event.target;\n if (!isElement(target)) {\n process.env.NODE_ENV !== \"production\" ? warning('event.target must be a Element') : void 0;\n return null;\n }\n const selector = getSelector(contextId);\n const handle = closest(target, selector);\n if (!handle) {\n return null;\n }\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle must be a HTMLElement') : void 0;\n return null;\n }\n return handle;\n}\nfunction tryGetClosestDraggableIdFromEvent(contextId, event) {\n const handle = findClosestDragHandleFromEvent(contextId, event);\n if (!handle) {\n return null;\n }\n return handle.getAttribute(dragHandle.draggableId);\n}\n\nfunction findDraggable(contextId, draggableId) {\n const selector = `[${draggable.contextId}=\"${contextId}\"]`;\n const possible = querySelectorAll(document, selector);\n const draggable$1 = possible.find(el => {\n return el.getAttribute(draggable.id) === draggableId;\n });\n if (!draggable$1) {\n return null;\n }\n if (!isHtmlElement(draggable$1)) {\n process.env.NODE_ENV !== \"production\" ? warning('Draggable element is not a HTMLElement') : void 0;\n return null;\n }\n return draggable$1;\n}\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\nfunction isActive({\n expected,\n phase,\n isLockActive,\n shouldWarn\n}) {\n if (!isLockActive()) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Cannot perform action.\n The sensor no longer has an action lock.\n\n Tips:\n\n - Throw away your action handlers when forceStop() is called\n - Check actions.isActive() if you really need to\n `) : void 0;\n }\n return false;\n }\n if (expected !== phase) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Cannot perform action.\n The actions you used belong to an outdated phase\n\n Current phase: ${expected}\n You called an action from outdated phase: ${phase}\n\n Tips:\n\n - Do not use preDragActions actions after calling preDragActions.lift()\n `) : void 0;\n }\n return false;\n }\n return true;\n}\nfunction canStart({\n lockAPI,\n store,\n registry,\n draggableId\n}) {\n if (lockAPI.isClaimed()) {\n return false;\n }\n const entry = registry.draggable.findById(draggableId);\n if (!entry) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find draggable with id: ${draggableId}`) : void 0;\n return false;\n }\n if (!entry.options.isEnabled) {\n return false;\n }\n if (!canStartDrag(store.getState(), draggableId)) {\n return false;\n }\n return true;\n}\nfunction tryStart({\n lockAPI,\n contextId,\n store,\n registry,\n draggableId,\n forceSensorStop,\n sourceEvent\n}) {\n const shouldStart = canStart({\n lockAPI,\n store,\n registry,\n draggableId\n });\n if (!shouldStart) {\n return null;\n }\n const entry = registry.draggable.getById(draggableId);\n const el = findDraggable(contextId, entry.descriptor.id);\n if (!el) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find draggable element with id: ${draggableId}`) : void 0;\n return null;\n }\n if (sourceEvent && !entry.options.canDragInteractiveElements && isEventInInteractiveElement(el, sourceEvent)) {\n return null;\n }\n const lock = lockAPI.claim(forceSensorStop || noop$2);\n let phase = 'PRE_DRAG';\n function getShouldRespectForcePress() {\n return entry.options.shouldRespectForcePress;\n }\n function isLockActive() {\n return lockAPI.isActive(lock);\n }\n function tryDispatch(expected, getAction) {\n if (isActive({\n expected,\n phase,\n isLockActive,\n shouldWarn: true\n })) {\n store.dispatch(getAction());\n }\n }\n const tryDispatchWhenDragging = tryDispatch.bind(null, 'DRAGGING');\n function lift(args) {\n function completed() {\n lockAPI.release();\n phase = 'COMPLETED';\n }\n if (phase !== 'PRE_DRAG') {\n completed();\n process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot lift in phase ${phase}`) : invariant() ;\n }\n store.dispatch(lift$1(args.liftActionArgs));\n phase = 'DRAGGING';\n function finish(reason, options = {\n shouldBlockNextClick: false\n }) {\n args.cleanup();\n if (options.shouldBlockNextClick) {\n const unbind = bindEvents(window, [{\n eventName: 'click',\n fn: preventDefault,\n options: {\n once: true,\n passive: false,\n capture: true\n }\n }]);\n setTimeout(unbind);\n }\n completed();\n store.dispatch(drop({\n reason\n }));\n }\n return {\n isActive: () => isActive({\n expected: 'DRAGGING',\n phase,\n isLockActive,\n shouldWarn: false\n }),\n shouldRespectForcePress: getShouldRespectForcePress,\n drop: options => finish('DROP', options),\n cancel: options => finish('CANCEL', options),\n ...args.actions\n };\n }\n function fluidLift(clientSelection) {\n const move$1 = rafSchd(client => {\n tryDispatchWhenDragging(() => move({\n client\n }));\n });\n const api = lift({\n liftActionArgs: {\n id: draggableId,\n clientSelection,\n movementMode: 'FLUID'\n },\n cleanup: () => move$1.cancel(),\n actions: {\n move: move$1\n }\n });\n return {\n ...api,\n move: move$1\n };\n }\n function snapLift() {\n const actions = {\n moveUp: () => tryDispatchWhenDragging(moveUp),\n moveRight: () => tryDispatchWhenDragging(moveRight),\n moveDown: () => tryDispatchWhenDragging(moveDown),\n moveLeft: () => tryDispatchWhenDragging(moveLeft)\n };\n return lift({\n liftActionArgs: {\n id: draggableId,\n clientSelection: getBorderBoxCenterPosition(el),\n movementMode: 'SNAP'\n },\n cleanup: noop$2,\n actions\n });\n }\n function abortPreDrag() {\n const shouldRelease = isActive({\n expected: 'PRE_DRAG',\n phase,\n isLockActive,\n shouldWarn: true\n });\n if (shouldRelease) {\n lockAPI.release();\n }\n }\n const preDrag = {\n isActive: () => isActive({\n expected: 'PRE_DRAG',\n phase,\n isLockActive,\n shouldWarn: false\n }),\n shouldRespectForcePress: getShouldRespectForcePress,\n fluidLift,\n snapLift,\n abort: abortPreDrag\n };\n return preDrag;\n}\nconst defaultSensors = [useMouseSensor, useKeyboardSensor, useTouchSensor];\nfunction useSensorMarshal({\n contextId,\n store,\n registry,\n customSensors,\n enableDefaultSensors\n}) {\n const useSensors = [...(enableDefaultSensors ? defaultSensors : []), ...(customSensors || [])];\n const lockAPI = useState(() => create())[0];\n const tryAbandonLock = useCallback(function tryAbandonLock(previous, current) {\n if (isDragging(previous) && !isDragging(current)) {\n lockAPI.tryAbandon();\n }\n }, [lockAPI]);\n useIsomorphicLayoutEffect(function listenToStore() {\n let previous = store.getState();\n const unsubscribe = store.subscribe(() => {\n const current = store.getState();\n tryAbandonLock(previous, current);\n previous = current;\n });\n return unsubscribe;\n }, [lockAPI, store, tryAbandonLock]);\n useIsomorphicLayoutEffect(() => {\n return lockAPI.tryAbandon;\n }, [lockAPI.tryAbandon]);\n const canGetLock = useCallback(draggableId => {\n return canStart({\n lockAPI,\n registry,\n store,\n draggableId\n });\n }, [lockAPI, registry, store]);\n const tryGetLock = useCallback((draggableId, forceStop, options) => tryStart({\n lockAPI,\n registry,\n contextId,\n store,\n draggableId,\n forceSensorStop: forceStop || null,\n sourceEvent: options && options.sourceEvent ? options.sourceEvent : null\n }), [contextId, lockAPI, registry, store]);\n const findClosestDraggableId = useCallback(event => tryGetClosestDraggableIdFromEvent(contextId, event), [contextId]);\n const findOptionsForDraggable = useCallback(id => {\n const entry = registry.draggable.findById(id);\n return entry ? entry.options : null;\n }, [registry.draggable]);\n const tryReleaseLock = useCallback(function tryReleaseLock() {\n if (!lockAPI.isClaimed()) {\n return;\n }\n lockAPI.tryAbandon();\n if (store.getState().phase !== 'IDLE') {\n store.dispatch(flush());\n }\n }, [lockAPI, store]);\n const isLockClaimed = useCallback(() => lockAPI.isClaimed(), [lockAPI]);\n const api = useMemo(() => ({\n canGetLock,\n tryGetLock,\n findClosestDraggableId,\n findOptionsForDraggable,\n tryReleaseLock,\n isLockClaimed\n }), [canGetLock, tryGetLock, findClosestDraggableId, findOptionsForDraggable, tryReleaseLock, isLockClaimed]);\n useValidateSensorHooks(useSensors);\n for (let i = 0; i < useSensors.length; i++) {\n useSensors[i](api);\n }\n}\n\nconst createResponders = props => ({\n onBeforeCapture: t => {\n const onBeforeCapureCallback = () => {\n if (props.onBeforeCapture) {\n props.onBeforeCapture(t);\n }\n };\n flushSync(onBeforeCapureCallback);\n },\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragEnd: props.onDragEnd,\n onDragUpdate: props.onDragUpdate\n});\nconst createAutoScrollerOptions = props => ({\n ...defaultAutoScrollerOptions,\n ...props.autoScrollerOptions,\n durationDampening: {\n ...defaultAutoScrollerOptions.durationDampening,\n ...props.autoScrollerOptions\n }\n});\nfunction getStore(lazyRef) {\n !lazyRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find store from lazy ref') : invariant() : void 0;\n return lazyRef.current;\n}\nfunction App(props) {\n const {\n contextId,\n setCallbacks,\n sensors,\n nonce,\n dragHandleUsageInstructions\n } = props;\n const lazyStoreRef = useRef(null);\n useStartupValidation();\n const lastPropsRef = usePrevious(props);\n const getResponders = useCallback(() => {\n return createResponders(lastPropsRef.current);\n }, [lastPropsRef]);\n const getAutoScrollerOptions = useCallback(() => {\n return createAutoScrollerOptions(lastPropsRef.current);\n }, [lastPropsRef]);\n const announce = useAnnouncer(contextId);\n const dragHandleUsageInstructionsId = useHiddenTextElement({\n contextId,\n text: dragHandleUsageInstructions\n });\n const styleMarshal = useStyleMarshal(contextId, nonce);\n const lazyDispatch = useCallback(action => {\n getStore(lazyStoreRef).dispatch(action);\n }, []);\n const marshalCallbacks = useMemo(() => bindActionCreators({\n publishWhileDragging,\n updateDroppableScroll,\n updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled,\n collectionStarting\n }, lazyDispatch), [lazyDispatch]);\n const registry = useRegistry();\n const dimensionMarshal = useMemo(() => {\n return createDimensionMarshal(registry, marshalCallbacks);\n }, [registry, marshalCallbacks]);\n const autoScroller = useMemo(() => createAutoScroller({\n scrollWindow,\n scrollDroppable: dimensionMarshal.scrollDroppable,\n getAutoScrollerOptions,\n ...bindActionCreators({\n move\n }, lazyDispatch)\n }), [dimensionMarshal.scrollDroppable, lazyDispatch, getAutoScrollerOptions]);\n const focusMarshal = useFocusMarshal(contextId);\n const store = useMemo(() => createStore({\n announce,\n autoScroller,\n dimensionMarshal,\n focusMarshal,\n getResponders,\n styleMarshal\n }), [announce, autoScroller, dimensionMarshal, focusMarshal, getResponders, styleMarshal]);\n if (process.env.NODE_ENV !== 'production') {\n if (lazyStoreRef.current && lazyStoreRef.current !== store) {\n process.env.NODE_ENV !== \"production\" ? warning('unexpected store change') : void 0;\n }\n }\n lazyStoreRef.current = store;\n const tryResetStore = useCallback(() => {\n const current = getStore(lazyStoreRef);\n const state = current.getState();\n if (state.phase !== 'IDLE') {\n current.dispatch(flush());\n }\n }, []);\n const isDragging = useCallback(() => {\n const state = getStore(lazyStoreRef).getState();\n if (state.phase === 'DROP_ANIMATING') {\n return true;\n }\n if (state.phase === 'IDLE') {\n return false;\n }\n return state.isDragging;\n }, []);\n const appCallbacks = useMemo(() => ({\n isDragging,\n tryAbort: tryResetStore\n }), [isDragging, tryResetStore]);\n setCallbacks(appCallbacks);\n const getCanLift = useCallback(id => canStartDrag(getStore(lazyStoreRef).getState(), id), []);\n const getIsMovementAllowed = useCallback(() => isMovementAllowed(getStore(lazyStoreRef).getState()), []);\n const appContext = useMemo(() => ({\n marshal: dimensionMarshal,\n focus: focusMarshal,\n contextId,\n canLift: getCanLift,\n isMovementAllowed: getIsMovementAllowed,\n dragHandleUsageInstructionsId,\n registry\n }), [contextId, dimensionMarshal, dragHandleUsageInstructionsId, focusMarshal, getCanLift, getIsMovementAllowed, registry]);\n useSensorMarshal({\n contextId,\n store,\n registry,\n customSensors: sensors || null,\n enableDefaultSensors: props.enableDefaultSensors !== false\n });\n useEffect(() => {\n return tryResetStore;\n }, [tryResetStore]);\n return React.createElement(AppContext.Provider, {\n value: appContext\n }, React.createElement(Provider, {\n context: StoreContext,\n store: store\n }, props.children));\n}\n\nfunction useUniqueContextId() {\n return React.useId();\n}\n\nfunction DragDropContext(props) {\n const contextId = useUniqueContextId();\n const dragHandleUsageInstructions = props.dragHandleUsageInstructions || preset.dragHandleUsageInstructions;\n return React.createElement(ErrorBoundary, null, setCallbacks => React.createElement(App, {\n nonce: props.nonce,\n contextId: contextId,\n setCallbacks: setCallbacks,\n dragHandleUsageInstructions: dragHandleUsageInstructions,\n enableDefaultSensors: props.enableDefaultSensors,\n sensors: props.sensors,\n onBeforeCapture: props.onBeforeCapture,\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragUpdate: props.onDragUpdate,\n onDragEnd: props.onDragEnd,\n autoScrollerOptions: props.autoScrollerOptions\n }, props.children));\n}\n\nconst zIndexOptions = {\n dragging: 5000,\n dropAnimating: 4500\n};\nconst getDraggingTransition = (shouldAnimateDragMovement, dropping) => {\n if (dropping) {\n return transitions.drop(dropping.duration);\n }\n if (shouldAnimateDragMovement) {\n return transitions.snap;\n }\n return transitions.fluid;\n};\nconst getDraggingOpacity = (isCombining, isDropAnimating) => {\n if (!isCombining) {\n return undefined;\n }\n return isDropAnimating ? combine.opacity.drop : combine.opacity.combining;\n};\nconst getShouldDraggingAnimate = dragging => {\n if (dragging.forceShouldAnimate != null) {\n return dragging.forceShouldAnimate;\n }\n return dragging.mode === 'SNAP';\n};\nfunction getDraggingStyle(dragging) {\n const dimension = dragging.dimension;\n const box = dimension.client;\n const {\n offset,\n combineWith,\n dropping\n } = dragging;\n const isCombining = Boolean(combineWith);\n const shouldAnimate = getShouldDraggingAnimate(dragging);\n const isDropAnimating = Boolean(dropping);\n const transform = isDropAnimating ? transforms.drop(offset, isCombining) : transforms.moveTo(offset);\n const style = {\n position: 'fixed',\n top: box.marginBox.top,\n left: box.marginBox.left,\n boxSizing: 'border-box',\n width: box.borderBox.width,\n height: box.borderBox.height,\n transition: getDraggingTransition(shouldAnimate, dropping),\n transform,\n opacity: getDraggingOpacity(isCombining, isDropAnimating),\n zIndex: isDropAnimating ? zIndexOptions.dropAnimating : zIndexOptions.dragging,\n pointerEvents: 'none'\n };\n return style;\n}\nfunction getSecondaryStyle(secondary) {\n return {\n transform: transforms.moveTo(secondary.offset),\n transition: secondary.shouldAnimateDisplacement ? undefined : 'none'\n };\n}\nfunction getStyle$1(mapped) {\n return mapped.type === 'DRAGGING' ? getDraggingStyle(mapped) : getSecondaryStyle(mapped);\n}\n\nfunction getDimension$1(descriptor, el, windowScroll = origin) {\n const computedStyles = window.getComputedStyle(el);\n const borderBox = el.getBoundingClientRect();\n const client = calculateBox(borderBox, computedStyles);\n const page = withScroll(client, windowScroll);\n const placeholder = {\n client,\n tagName: el.tagName.toLowerCase(),\n display: computedStyles.display\n };\n const displaceBy = {\n x: client.marginBox.width,\n y: client.marginBox.height\n };\n const dimension = {\n descriptor,\n placeholder,\n displaceBy,\n client,\n page\n };\n return dimension;\n}\n\nfunction useDraggablePublisher(args) {\n const uniqueId = useUniqueId('draggable');\n const {\n descriptor,\n registry,\n getDraggableRef,\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n } = args;\n const options = useMemo(() => ({\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n }), [canDragInteractiveElements, isEnabled, shouldRespectForcePress]);\n const getDimension = useCallback(windowScroll => {\n const el = getDraggableRef();\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get dimension when no ref is set') : invariant() : void 0;\n return getDimension$1(descriptor, el, windowScroll);\n }, [descriptor, getDraggableRef]);\n const entry = useMemo(() => ({\n uniqueId,\n descriptor,\n options,\n getDimension\n }), [descriptor, getDimension, options, uniqueId]);\n const publishedRef = useRef(entry);\n const isFirstPublishRef = useRef(true);\n useIsomorphicLayoutEffect(() => {\n registry.draggable.register(publishedRef.current);\n return () => registry.draggable.unregister(publishedRef.current);\n }, [registry.draggable]);\n useIsomorphicLayoutEffect(() => {\n if (isFirstPublishRef.current) {\n isFirstPublishRef.current = false;\n return;\n }\n const last = publishedRef.current;\n publishedRef.current = entry;\n registry.draggable.update(entry, last);\n }, [entry, registry.draggable]);\n}\n\nvar DroppableContext = React.createContext(null);\n\nfunction checkIsValidInnerRef(el) {\n !(el && isHtmlElement(el)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `\n provided.innerRef has not been provided with a HTMLElement.\n\n You can find a guide on using the innerRef callback functions at:\n https://github.com/hello-pangea/dnd/blob/main/docs/guides/using-inner-ref.md\n `) : invariant() : void 0;\n}\n\nfunction useValidation$1(props, contextId, getRef) {\n useDevSetupWarning(() => {\n function prefix(id) {\n return `Draggable[id: ${id}]: `;\n }\n const id = props.draggableId;\n !id ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable requires a draggableId') : invariant(false) : void 0;\n !(typeof id === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Draggable requires a [string] draggableId.\n Provided: [type: ${typeof id}] (value: ${id})`) : invariant(false) : void 0;\n !Number.isInteger(props.index) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${prefix(id)} requires an integer index prop`) : invariant(false) : void 0;\n if (props.mapped.type === 'DRAGGING') {\n return;\n }\n checkIsValidInnerRef(getRef());\n if (props.isEnabled) {\n !findDragHandle(contextId, id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${prefix(id)} Unable to find drag handle`) : invariant(false) : void 0;\n }\n });\n}\nfunction useClonePropValidation(isClone) {\n useDev(() => {\n const initialRef = useRef(isClone);\n useDevSetupWarning(() => {\n !(isClone === initialRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable isClone prop value changed during component life') : invariant(false) : void 0;\n }, [isClone]);\n });\n}\n\nfunction useRequiredContext(Context) {\n const result = useContext(Context);\n !result ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find required context') : invariant() : void 0;\n return result;\n}\n\nfunction preventHtml5Dnd(event) {\n event.preventDefault();\n}\nconst Draggable = props => {\n const ref = useRef(null);\n const setRef = useCallback((el = null) => {\n ref.current = el;\n }, []);\n const getRef = useCallback(() => ref.current, []);\n const {\n contextId,\n dragHandleUsageInstructionsId,\n registry\n } = useRequiredContext(AppContext);\n const {\n type,\n droppableId\n } = useRequiredContext(DroppableContext);\n const descriptor = useMemo(() => ({\n id: props.draggableId,\n index: props.index,\n type,\n droppableId\n }), [props.draggableId, props.index, type, droppableId]);\n const {\n children,\n draggableId,\n isEnabled,\n shouldRespectForcePress,\n canDragInteractiveElements,\n isClone,\n mapped,\n dropAnimationFinished: dropAnimationFinishedAction\n } = props;\n useValidation$1(props, contextId, getRef);\n useClonePropValidation(isClone);\n if (!isClone) {\n const forPublisher = useMemo(() => ({\n descriptor,\n registry,\n getDraggableRef: getRef,\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n }), [descriptor, registry, getRef, canDragInteractiveElements, shouldRespectForcePress, isEnabled]);\n useDraggablePublisher(forPublisher);\n }\n const dragHandleProps = useMemo(() => isEnabled ? {\n tabIndex: 0,\n role: 'button',\n 'aria-describedby': dragHandleUsageInstructionsId,\n 'data-rfd-drag-handle-draggable-id': draggableId,\n 'data-rfd-drag-handle-context-id': contextId,\n draggable: false,\n onDragStart: preventHtml5Dnd\n } : null, [contextId, dragHandleUsageInstructionsId, draggableId, isEnabled]);\n const onMoveEnd = useCallback(event => {\n if (mapped.type !== 'DRAGGING') {\n return;\n }\n if (!mapped.dropping) {\n return;\n }\n if (event.propertyName !== 'transform') {\n return;\n }\n flushSync(dropAnimationFinishedAction);\n }, [dropAnimationFinishedAction, mapped]);\n const provided = useMemo(() => {\n const style = getStyle$1(mapped);\n const onTransitionEnd = mapped.type === 'DRAGGING' && mapped.dropping ? onMoveEnd : undefined;\n const result = {\n innerRef: setRef,\n draggableProps: {\n 'data-rfd-draggable-context-id': contextId,\n 'data-rfd-draggable-id': draggableId,\n style,\n onTransitionEnd\n },\n dragHandleProps\n };\n return result;\n }, [contextId, dragHandleProps, draggableId, mapped, onMoveEnd, setRef]);\n const rubric = useMemo(() => ({\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n }), [descriptor.droppableId, descriptor.id, descriptor.index, descriptor.type]);\n return React.createElement(React.Fragment, null, children(provided, mapped.snapshot, rubric));\n};\n\nvar isStrictEqual = (a, b) => a === b;\n\nvar whatIsDraggedOverFromResult = result => {\n const {\n combine,\n destination\n } = result;\n if (destination) {\n return destination.droppableId;\n }\n if (combine) {\n return combine.droppableId;\n }\n return null;\n};\n\nconst getCombineWithFromResult = result => {\n return result.combine ? result.combine.draggableId : null;\n};\nconst getCombineWithFromImpact = impact => {\n return impact.at && impact.at.type === 'COMBINE' ? impact.at.combine.draggableId : null;\n};\nfunction getDraggableSelector() {\n const memoizedOffset = memoizeOne((x, y) => ({\n x,\n y\n }));\n const getMemoizedSnapshot = memoizeOne((mode, isClone, draggingOver = null, combineWith = null, dropping = null) => ({\n isDragging: true,\n isClone,\n isDropAnimating: Boolean(dropping),\n dropAnimation: dropping,\n mode,\n draggingOver,\n combineWith,\n combineTargetFor: null\n }));\n const getMemoizedProps = memoizeOne((offset, mode, dimension, isClone, draggingOver = null, combineWith = null, forceShouldAnimate = null) => ({\n mapped: {\n type: 'DRAGGING',\n dropping: null,\n draggingOver,\n combineWith,\n mode,\n offset,\n dimension,\n forceShouldAnimate,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, null)\n }\n }));\n const selector = (state, ownProps) => {\n if (isDragging(state)) {\n if (state.critical.draggable.id !== ownProps.draggableId) {\n return null;\n }\n const offset = state.current.client.offset;\n const dimension = state.dimensions.draggables[ownProps.draggableId];\n const draggingOver = whatIsDraggedOver(state.impact);\n const combineWith = getCombineWithFromImpact(state.impact);\n const forceShouldAnimate = state.forceShouldAnimate;\n return getMemoizedProps(memoizedOffset(offset.x, offset.y), state.movementMode, dimension, ownProps.isClone, draggingOver, combineWith, forceShouldAnimate);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (completed.result.draggableId !== ownProps.draggableId) {\n return null;\n }\n const isClone = ownProps.isClone;\n const dimension = state.dimensions.draggables[ownProps.draggableId];\n const result = completed.result;\n const mode = result.mode;\n const draggingOver = whatIsDraggedOverFromResult(result);\n const combineWith = getCombineWithFromResult(result);\n const duration = state.dropDuration;\n const dropping = {\n duration,\n curve: curves.drop,\n moveTo: state.newHomeClientOffset,\n opacity: combineWith ? combine.opacity.drop : null,\n scale: combineWith ? combine.scale.drop : null\n };\n return {\n mapped: {\n type: 'DRAGGING',\n offset: state.newHomeClientOffset,\n dimension,\n dropping,\n draggingOver,\n combineWith,\n mode,\n forceShouldAnimate: null,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, dropping)\n }\n };\n }\n return null;\n };\n return selector;\n}\nfunction getSecondarySnapshot(combineTargetFor = null) {\n return {\n isDragging: false,\n isDropAnimating: false,\n isClone: false,\n dropAnimation: null,\n mode: null,\n draggingOver: null,\n combineTargetFor,\n combineWith: null\n };\n}\nconst atRest = {\n mapped: {\n type: 'SECONDARY',\n offset: origin,\n combineTargetFor: null,\n shouldAnimateDisplacement: true,\n snapshot: getSecondarySnapshot(null)\n }\n};\nfunction getSecondarySelector() {\n const memoizedOffset = memoizeOne((x, y) => ({\n x,\n y\n }));\n const getMemoizedSnapshot = memoizeOne(getSecondarySnapshot);\n const getMemoizedProps = memoizeOne((offset, combineTargetFor = null, shouldAnimateDisplacement) => ({\n mapped: {\n type: 'SECONDARY',\n offset,\n combineTargetFor,\n shouldAnimateDisplacement,\n snapshot: getMemoizedSnapshot(combineTargetFor)\n }\n }));\n const getFallback = combineTargetFor => {\n return combineTargetFor ? getMemoizedProps(origin, combineTargetFor, true) : null;\n };\n const getProps = (ownId, draggingId, impact, afterCritical) => {\n const visualDisplacement = impact.displaced.visible[ownId];\n const isAfterCriticalInVirtualList = Boolean(afterCritical.inVirtualList && afterCritical.effected[ownId]);\n const combine = tryGetCombine(impact);\n const combineTargetFor = combine && combine.draggableId === ownId ? draggingId : null;\n if (!visualDisplacement) {\n if (!isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n if (impact.displaced.invisible[ownId]) {\n return null;\n }\n const change = negate(afterCritical.displacedBy.point);\n const offset = memoizedOffset(change.x, change.y);\n return getMemoizedProps(offset, combineTargetFor, true);\n }\n if (isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n const displaceBy = impact.displacedBy.point;\n const offset = memoizedOffset(displaceBy.x, displaceBy.y);\n return getMemoizedProps(offset, combineTargetFor, visualDisplacement.shouldAnimate);\n };\n const selector = (state, ownProps) => {\n if (isDragging(state)) {\n if (state.critical.draggable.id === ownProps.draggableId) {\n return null;\n }\n return getProps(ownProps.draggableId, state.critical.draggable.id, state.impact, state.afterCritical);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (completed.result.draggableId === ownProps.draggableId) {\n return null;\n }\n return getProps(ownProps.draggableId, completed.result.draggableId, completed.impact, completed.afterCritical);\n }\n return null;\n };\n return selector;\n}\nconst makeMapStateToProps$1 = () => {\n const draggingSelector = getDraggableSelector();\n const secondarySelector = getSecondarySelector();\n const selector = (state, ownProps) => draggingSelector(state, ownProps) || secondarySelector(state, ownProps) || atRest;\n return selector;\n};\nconst mapDispatchToProps$1 = {\n dropAnimationFinished: dropAnimationFinished\n};\nconst ConnectedDraggable = connect(makeMapStateToProps$1, mapDispatchToProps$1, null, {\n context: StoreContext,\n areStatePropsEqual: isStrictEqual\n})(Draggable);\n\nfunction PrivateDraggable(props) {\n const droppableContext = useRequiredContext(DroppableContext);\n const isUsingCloneFor = droppableContext.isUsingCloneFor;\n if (isUsingCloneFor === props.draggableId && !props.isClone) {\n return null;\n }\n return React.createElement(ConnectedDraggable, props);\n}\nfunction PublicDraggable(props) {\n const isEnabled = typeof props.isDragDisabled === 'boolean' ? !props.isDragDisabled : true;\n const canDragInteractiveElements = Boolean(props.disableInteractiveElementBlocking);\n const shouldRespectForcePress = Boolean(props.shouldRespectForcePress);\n return React.createElement(PrivateDraggable, _extends({}, props, {\n isClone: false,\n isEnabled: isEnabled,\n canDragInteractiveElements: canDragInteractiveElements,\n shouldRespectForcePress: shouldRespectForcePress\n }));\n}\n\nconst isEqual = base => value => base === value;\nconst isScroll = isEqual('scroll');\nconst isAuto = isEqual('auto');\nconst isVisible = isEqual('visible');\nconst isEither = (overflow, fn) => fn(overflow.overflowX) || fn(overflow.overflowY);\nconst isBoth = (overflow, fn) => fn(overflow.overflowX) && fn(overflow.overflowY);\nconst isElementScrollable = el => {\n const style = window.getComputedStyle(el);\n const overflow = {\n overflowX: style.overflowX,\n overflowY: style.overflowY\n };\n return isEither(overflow, isScroll) || isEither(overflow, isAuto);\n};\nconst isBodyScrollable = () => {\n if (process.env.NODE_ENV === 'production') {\n return false;\n }\n const body = getBodyElement();\n const html = document.documentElement;\n !html ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n if (!isElementScrollable(body)) {\n return false;\n }\n const htmlStyle = window.getComputedStyle(html);\n const htmlOverflow = {\n overflowX: htmlStyle.overflowX,\n overflowY: htmlStyle.overflowY\n };\n if (isBoth(htmlOverflow, isVisible)) {\n return false;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n We have detected that your <body> element might be a scroll container.\n We have found no reliable way of detecting whether the <body> element is a scroll container.\n Under most circumstances a <body> scroll bar will be on the <html> element (document.documentElement)\n\n Because we cannot determine if the <body> is a scroll container, and generally it is not one,\n we will be treating the <body> as *not* a scroll container\n\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/how-we-detect-scroll-containers.md\n `) : void 0;\n return false;\n};\nconst getClosestScrollable = el => {\n if (el == null) {\n return null;\n }\n if (el === document.body) {\n return isBodyScrollable() ? el : null;\n }\n if (el === document.documentElement) {\n return null;\n }\n if (!isElementScrollable(el)) {\n return getClosestScrollable(el.parentElement);\n }\n return el;\n};\n\nvar checkForNestedScrollContainers = scrollable => {\n if (!scrollable) {\n return;\n }\n const anotherScrollParent = getClosestScrollable(scrollable.parentElement);\n if (!anotherScrollParent) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n Droppable: unsupported nested scroll container detected.\n A Droppable can only have one scroll parent (which can be itself)\n Nested scroll containers are currently not supported.\n\n We hope to support nested scroll containers soon: https://github.com/atlassian/react-beautiful-dnd/issues/131\n `) : void 0;\n};\n\nvar getScroll = el => ({\n x: el.scrollLeft,\n y: el.scrollTop\n});\n\nconst getIsFixed = el => {\n if (!el) {\n return false;\n }\n const style = window.getComputedStyle(el);\n if (style.position === 'fixed') {\n return true;\n }\n return getIsFixed(el.parentElement);\n};\nvar getEnv = start => {\n const closestScrollable = getClosestScrollable(start);\n const isFixedOnPage = getIsFixed(start);\n return {\n closestScrollable,\n isFixedOnPage\n };\n};\n\nvar getDroppableDimension = ({\n descriptor,\n isEnabled,\n isCombineEnabled,\n isFixedOnPage,\n direction,\n client,\n page,\n closest\n}) => {\n const frame = (() => {\n if (!closest) {\n return null;\n }\n const {\n scrollSize,\n client: frameClient\n } = closest;\n const maxScroll = getMaxScroll({\n scrollHeight: scrollSize.scrollHeight,\n scrollWidth: scrollSize.scrollWidth,\n height: frameClient.paddingBox.height,\n width: frameClient.paddingBox.width\n });\n return {\n pageMarginBox: closest.page.marginBox,\n frameClient,\n scrollSize,\n shouldClipSubject: closest.shouldClipSubject,\n scroll: {\n initial: closest.scroll,\n current: closest.scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n })();\n const axis = direction === 'vertical' ? vertical : horizontal;\n const subject = getSubject({\n page,\n withPlaceholder: null,\n axis,\n frame\n });\n const dimension = {\n descriptor,\n isCombineEnabled,\n isFixedOnPage,\n axis,\n isEnabled,\n client,\n page,\n frame,\n subject\n };\n return dimension;\n};\n\nconst getClient = (targetRef, closestScrollable) => {\n const base = getBox(targetRef);\n if (!closestScrollable) {\n return base;\n }\n if (targetRef !== closestScrollable) {\n return base;\n }\n const top = base.paddingBox.top - closestScrollable.scrollTop;\n const left = base.paddingBox.left - closestScrollable.scrollLeft;\n const bottom = top + closestScrollable.scrollHeight;\n const right = left + closestScrollable.scrollWidth;\n const paddingBox = {\n top,\n right,\n bottom,\n left\n };\n const borderBox = expand(paddingBox, base.border);\n const client = createBox({\n borderBox,\n margin: base.margin,\n border: base.border,\n padding: base.padding\n });\n return client;\n};\nvar getDimension = ({\n ref,\n descriptor,\n env,\n windowScroll,\n direction,\n isDropDisabled,\n isCombineEnabled,\n shouldClipSubject\n}) => {\n const closestScrollable = env.closestScrollable;\n const client = getClient(ref, closestScrollable);\n const page = withScroll(client, windowScroll);\n const closest = (() => {\n if (!closestScrollable) {\n return null;\n }\n const frameClient = getBox(closestScrollable);\n const scrollSize = {\n scrollHeight: closestScrollable.scrollHeight,\n scrollWidth: closestScrollable.scrollWidth\n };\n return {\n client: frameClient,\n page: withScroll(frameClient, windowScroll),\n scroll: getScroll(closestScrollable),\n scrollSize,\n shouldClipSubject\n };\n })();\n const dimension = getDroppableDimension({\n descriptor,\n isEnabled: !isDropDisabled,\n isCombineEnabled,\n isFixedOnPage: env.isFixedOnPage,\n direction,\n client,\n page,\n closest\n });\n return dimension;\n};\n\nconst immediate = {\n passive: false\n};\nconst delayed = {\n passive: true\n};\nvar getListenerOptions = options => options.shouldPublishImmediately ? immediate : delayed;\n\nconst getClosestScrollableFromDrag = dragging => dragging && dragging.env.closestScrollable || null;\nfunction useDroppablePublisher(args) {\n const whileDraggingRef = useRef(null);\n const appContext = useRequiredContext(AppContext);\n const uniqueId = useUniqueId('droppable');\n const {\n registry,\n marshal\n } = appContext;\n const previousRef = usePrevious(args);\n const descriptor = useMemo(() => ({\n id: args.droppableId,\n type: args.type,\n mode: args.mode\n }), [args.droppableId, args.mode, args.type]);\n const publishedDescriptorRef = useRef(descriptor);\n const memoizedUpdateScroll = useMemo(() => memoizeOne((x, y) => {\n !whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only update scroll when dragging') : invariant() : void 0;\n const scroll = {\n x,\n y\n };\n marshal.updateDroppableScroll(descriptor.id, scroll);\n }), [descriptor.id, marshal]);\n const getClosestScroll = useCallback(() => {\n const dragging = whileDraggingRef.current;\n if (!dragging || !dragging.env.closestScrollable) {\n return origin;\n }\n return getScroll(dragging.env.closestScrollable);\n }, []);\n const updateScroll = useCallback(() => {\n const scroll = getClosestScroll();\n memoizedUpdateScroll(scroll.x, scroll.y);\n }, [getClosestScroll, memoizedUpdateScroll]);\n const scheduleScrollUpdate = useMemo(() => rafSchd(updateScroll), [updateScroll]);\n const onClosestScroll = useCallback(() => {\n const dragging = whileDraggingRef.current;\n const closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find scroll options while scrolling') : invariant() : void 0;\n const options = dragging.scrollOptions;\n if (options.shouldPublishImmediately) {\n updateScroll();\n return;\n }\n scheduleScrollUpdate();\n }, [scheduleScrollUpdate, updateScroll]);\n const getDimensionAndWatchScroll = useCallback((windowScroll, options) => {\n !!whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect a droppable while a drag is occurring') : invariant() : void 0;\n const previous = previousRef.current;\n const ref = previous.getDroppableRef();\n !ref ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect without a droppable ref') : invariant() : void 0;\n const env = getEnv(ref);\n const dragging = {\n ref,\n descriptor,\n env,\n scrollOptions: options\n };\n whileDraggingRef.current = dragging;\n const dimension = getDimension({\n ref,\n descriptor,\n env,\n windowScroll,\n direction: previous.direction,\n isDropDisabled: previous.isDropDisabled,\n isCombineEnabled: previous.isCombineEnabled,\n shouldClipSubject: !previous.ignoreContainerClipping\n });\n const scrollable = env.closestScrollable;\n if (scrollable) {\n scrollable.setAttribute(scrollContainer.contextId, appContext.contextId);\n scrollable.addEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n if (process.env.NODE_ENV !== 'production') {\n checkForNestedScrollContainers(scrollable);\n }\n }\n return dimension;\n }, [appContext.contextId, descriptor, onClosestScroll, previousRef]);\n const getScrollWhileDragging = useCallback(() => {\n const dragging = whileDraggingRef.current;\n const closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only recollect Droppable client for Droppables that have a scroll container') : invariant() : void 0;\n return getScroll(closest);\n }, []);\n const dragStopped = useCallback(() => {\n const dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop drag when no active drag') : invariant() : void 0;\n const closest = getClosestScrollableFromDrag(dragging);\n whileDraggingRef.current = null;\n if (!closest) {\n return;\n }\n scheduleScrollUpdate.cancel();\n closest.removeAttribute(scrollContainer.contextId);\n closest.removeEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n }, [onClosestScroll, scheduleScrollUpdate]);\n const scroll = useCallback(change => {\n const dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll when there is no drag') : invariant() : void 0;\n const closest = getClosestScrollableFromDrag(dragging);\n !closest ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll a droppable with no closest scrollable') : invariant() : void 0;\n closest.scrollTop += change.y;\n closest.scrollLeft += change.x;\n }, []);\n const callbacks = useMemo(() => {\n return {\n getDimensionAndWatchScroll,\n getScrollWhileDragging,\n dragStopped,\n scroll\n };\n }, [dragStopped, getDimensionAndWatchScroll, getScrollWhileDragging, scroll]);\n const entry = useMemo(() => ({\n uniqueId,\n descriptor,\n callbacks\n }), [callbacks, descriptor, uniqueId]);\n useIsomorphicLayoutEffect(() => {\n publishedDescriptorRef.current = entry.descriptor;\n registry.droppable.register(entry);\n return () => {\n if (whileDraggingRef.current) {\n process.env.NODE_ENV !== \"production\" ? warning('Unsupported: changing the droppableId or type of a Droppable during a drag') : void 0;\n dragStopped();\n }\n registry.droppable.unregister(entry);\n };\n }, [callbacks, descriptor, dragStopped, entry, marshal, registry.droppable]);\n useIsomorphicLayoutEffect(() => {\n if (!whileDraggingRef.current) {\n return;\n }\n marshal.updateDroppableIsEnabled(publishedDescriptorRef.current.id, !args.isDropDisabled);\n }, [args.isDropDisabled, marshal]);\n useIsomorphicLayoutEffect(() => {\n if (!whileDraggingRef.current) {\n return;\n }\n marshal.updateDroppableIsCombineEnabled(publishedDescriptorRef.current.id, args.isCombineEnabled);\n }, [args.isCombineEnabled, marshal]);\n}\n\nfunction noop() {}\nconst empty = {\n width: 0,\n height: 0,\n margin: noSpacing\n};\nconst getSize = ({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n}) => {\n if (isAnimatingOpenOnMount) {\n return empty;\n }\n if (animate === 'close') {\n return empty;\n }\n return {\n height: placeholder.client.borderBox.height,\n width: placeholder.client.borderBox.width,\n margin: placeholder.client.margin\n };\n};\nconst getStyle = ({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n}) => {\n const size = getSize({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n });\n return {\n display: placeholder.display,\n boxSizing: 'border-box',\n width: size.width,\n height: size.height,\n marginTop: size.margin.top,\n marginRight: size.margin.right,\n marginBottom: size.margin.bottom,\n marginLeft: size.margin.left,\n flexShrink: '0',\n flexGrow: '0',\n pointerEvents: 'none',\n transition: animate !== 'none' ? transitions.placeholder : null\n };\n};\nconst Placeholder = props => {\n const animateOpenTimerRef = useRef(null);\n const tryClearAnimateOpenTimer = useCallback(() => {\n if (!animateOpenTimerRef.current) {\n return;\n }\n clearTimeout(animateOpenTimerRef.current);\n animateOpenTimerRef.current = null;\n }, []);\n const {\n animate,\n onTransitionEnd,\n onClose,\n contextId\n } = props;\n const [isAnimatingOpenOnMount, setIsAnimatingOpenOnMount] = useState(props.animate === 'open');\n useEffect(() => {\n if (!isAnimatingOpenOnMount) {\n return noop;\n }\n if (animate !== 'open') {\n tryClearAnimateOpenTimer();\n setIsAnimatingOpenOnMount(false);\n return noop;\n }\n if (animateOpenTimerRef.current) {\n return noop;\n }\n animateOpenTimerRef.current = setTimeout(() => {\n animateOpenTimerRef.current = null;\n setIsAnimatingOpenOnMount(false);\n });\n return tryClearAnimateOpenTimer;\n }, [animate, isAnimatingOpenOnMount, tryClearAnimateOpenTimer]);\n const onSizeChangeEnd = useCallback(event => {\n if (event.propertyName !== 'height') {\n return;\n }\n onTransitionEnd();\n if (animate === 'close') {\n onClose();\n }\n }, [animate, onClose, onTransitionEnd]);\n const style = getStyle({\n isAnimatingOpenOnMount,\n animate: props.animate,\n placeholder: props.placeholder\n });\n return React.createElement(props.placeholder.tagName, {\n style,\n 'data-rfd-placeholder-context-id': contextId,\n onTransitionEnd: onSizeChangeEnd,\n ref: props.innerRef\n });\n};\nvar Placeholder$1 = React.memo(Placeholder);\n\nfunction isBoolean(value) {\n return typeof value === 'boolean';\n}\nfunction runChecks(args, checks) {\n checks.forEach(check => check(args));\n}\nconst shared = [function required({\n props\n}) {\n !props.droppableId ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A Droppable requires a droppableId prop') : invariant() : void 0;\n !(typeof props.droppableId === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `A Droppable requires a [string] droppableId. Provided: [${typeof props.droppableId}]`) : invariant() : void 0;\n}, function boolean({\n props\n}) {\n !isBoolean(props.isDropDisabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isDropDisabled must be a boolean') : invariant() : void 0;\n !isBoolean(props.isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isCombineEnabled must be a boolean') : invariant() : void 0;\n !isBoolean(props.ignoreContainerClipping) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'ignoreContainerClipping must be a boolean') : invariant() : void 0;\n}, function ref({\n getDroppableRef\n}) {\n checkIsValidInnerRef(getDroppableRef());\n}];\nconst standard = [function placeholder({\n props,\n getPlaceholderRef\n}) {\n if (!props.placeholder) {\n return;\n }\n const ref = getPlaceholderRef();\n if (ref) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n Droppable setup issue [droppableId: \"${props.droppableId}\"]:\n DroppableProvided > placeholder could not be found.\n\n Please be sure to add the {provided.placeholder} React Node as a child of your Droppable.\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/api/droppable.md\n `) : void 0;\n}];\nconst virtual = [function hasClone({\n props\n}) {\n !props.renderClone ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must provide a clone render function (renderClone) for virtual lists') : invariant() : void 0;\n}, function hasNoPlaceholder({\n getPlaceholderRef\n}) {\n !!getPlaceholderRef() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected virtual list to not have a placeholder') : invariant() : void 0;\n}];\nfunction useValidation(args) {\n useDevSetupWarning(() => {\n runChecks(args, shared);\n if (args.props.mode === 'standard') {\n runChecks(args, standard);\n }\n if (args.props.mode === 'virtual') {\n runChecks(args, virtual);\n }\n });\n}\n\nclass AnimateInOut extends React.PureComponent {\n constructor(...args) {\n super(...args);\n this.state = {\n isVisible: Boolean(this.props.on),\n data: this.props.on,\n animate: this.props.shouldAnimate && this.props.on ? 'open' : 'none'\n };\n this.onClose = () => {\n if (this.state.animate !== 'close') {\n return;\n }\n this.setState({\n isVisible: false\n });\n };\n }\n static getDerivedStateFromProps(props, state) {\n if (!props.shouldAnimate) {\n return {\n isVisible: Boolean(props.on),\n data: props.on,\n animate: 'none'\n };\n }\n if (props.on) {\n return {\n isVisible: true,\n data: props.on,\n animate: 'open'\n };\n }\n if (state.isVisible) {\n return {\n isVisible: true,\n data: state.data,\n animate: 'close'\n };\n }\n return {\n isVisible: false,\n animate: 'close',\n data: null\n };\n }\n render() {\n if (!this.state.isVisible) {\n return null;\n }\n const provided = {\n onClose: this.onClose,\n data: this.state.data,\n animate: this.state.animate\n };\n return this.props.children(provided);\n }\n}\n\nconst Droppable = props => {\n const appContext = useContext(AppContext);\n !appContext ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find app context') : invariant() : void 0;\n const {\n contextId,\n isMovementAllowed\n } = appContext;\n const droppableRef = useRef(null);\n const placeholderRef = useRef(null);\n const {\n children,\n droppableId,\n type,\n mode,\n direction,\n ignoreContainerClipping,\n isDropDisabled,\n isCombineEnabled,\n snapshot,\n useClone,\n updateViewportMaxScroll,\n getContainerForClone\n } = props;\n const getDroppableRef = useCallback(() => droppableRef.current, []);\n const setDroppableRef = useCallback((value = null) => {\n droppableRef.current = value;\n }, []);\n const getPlaceholderRef = useCallback(() => placeholderRef.current, []);\n const setPlaceholderRef = useCallback((value = null) => {\n placeholderRef.current = value;\n }, []);\n useValidation({\n props,\n getDroppableRef,\n getPlaceholderRef\n });\n const onPlaceholderTransitionEnd = useCallback(() => {\n if (isMovementAllowed()) {\n updateViewportMaxScroll({\n maxScroll: getMaxWindowScroll()\n });\n }\n }, [isMovementAllowed, updateViewportMaxScroll]);\n useDroppablePublisher({\n droppableId,\n type,\n mode,\n direction,\n isDropDisabled,\n isCombineEnabled,\n ignoreContainerClipping,\n getDroppableRef\n });\n const placeholder = useMemo(() => React.createElement(AnimateInOut, {\n on: props.placeholder,\n shouldAnimate: props.shouldAnimatePlaceholder\n }, ({\n onClose,\n data,\n animate\n }) => React.createElement(Placeholder$1, {\n placeholder: data,\n onClose: onClose,\n innerRef: setPlaceholderRef,\n animate: animate,\n contextId: contextId,\n onTransitionEnd: onPlaceholderTransitionEnd\n })), [contextId, onPlaceholderTransitionEnd, props.placeholder, props.shouldAnimatePlaceholder, setPlaceholderRef]);\n const provided = useMemo(() => ({\n innerRef: setDroppableRef,\n placeholder,\n droppableProps: {\n 'data-rfd-droppable-id': droppableId,\n 'data-rfd-droppable-context-id': contextId\n }\n }), [contextId, droppableId, placeholder, setDroppableRef]);\n const isUsingCloneFor = useClone ? useClone.dragging.draggableId : null;\n const droppableContext = useMemo(() => ({\n droppableId,\n type,\n isUsingCloneFor\n }), [droppableId, isUsingCloneFor, type]);\n function getClone() {\n if (!useClone) {\n return null;\n }\n const {\n dragging,\n render\n } = useClone;\n const node = React.createElement(PrivateDraggable, {\n draggableId: dragging.draggableId,\n index: dragging.source.index,\n isClone: true,\n isEnabled: true,\n shouldRespectForcePress: false,\n canDragInteractiveElements: true\n }, (draggableProvided, draggableSnapshot) => render(draggableProvided, draggableSnapshot, dragging));\n return ReactDOM.createPortal(node, getContainerForClone());\n }\n return React.createElement(DroppableContext.Provider, {\n value: droppableContext\n }, children(provided, snapshot), getClone());\n};\n\nfunction getBody() {\n !document.body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'document.body is not ready') : invariant() : void 0;\n return document.body;\n}\nconst defaultProps = {\n mode: 'standard',\n type: 'DEFAULT',\n direction: 'vertical',\n isDropDisabled: false,\n isCombineEnabled: false,\n ignoreContainerClipping: false,\n renderClone: null,\n getContainerForClone: getBody\n};\nconst attachDefaultPropsToOwnProps = ownProps => {\n let mergedProps = {\n ...ownProps\n };\n let defaultPropKey;\n for (defaultPropKey in defaultProps) {\n if (ownProps[defaultPropKey] === undefined) {\n mergedProps = {\n ...mergedProps,\n [defaultPropKey]: defaultProps[defaultPropKey]\n };\n }\n }\n return mergedProps;\n};\nconst isMatchingType = (type, critical) => type === critical.droppable.type;\nconst getDraggable = (critical, dimensions) => dimensions.draggables[critical.draggable.id];\nconst makeMapStateToProps = () => {\n const idleWithAnimation = {\n placeholder: null,\n shouldAnimatePlaceholder: true,\n snapshot: {\n isDraggingOver: false,\n draggingOverWith: null,\n draggingFromThisWith: null,\n isUsingPlaceholder: false\n },\n useClone: null\n };\n const idleWithoutAnimation = {\n ...idleWithAnimation,\n shouldAnimatePlaceholder: false\n };\n const getDraggableRubric = memoizeOne(descriptor => ({\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n }));\n const getMapProps = memoizeOne((id, isEnabled, isDraggingOverForConsumer, isDraggingOverForImpact, dragging, renderClone) => {\n const draggableId = dragging.descriptor.id;\n const isHome = dragging.descriptor.droppableId === id;\n if (isHome) {\n const useClone = renderClone ? {\n render: renderClone,\n dragging: getDraggableRubric(dragging.descriptor)\n } : null;\n const snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: isDraggingOverForConsumer ? draggableId : null,\n draggingFromThisWith: draggableId,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: false,\n snapshot,\n useClone\n };\n }\n if (!isEnabled) {\n return idleWithoutAnimation;\n }\n if (!isDraggingOverForImpact) {\n return idleWithAnimation;\n }\n const snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: draggableId,\n draggingFromThisWith: null,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: true,\n snapshot,\n useClone: null\n };\n });\n const selector = (state, ownProps) => {\n const ownPropsWithDefaultProps = attachDefaultPropsToOwnProps(ownProps);\n const id = ownPropsWithDefaultProps.droppableId;\n const type = ownPropsWithDefaultProps.type;\n const isEnabled = !ownPropsWithDefaultProps.isDropDisabled;\n const renderClone = ownPropsWithDefaultProps.renderClone;\n if (isDragging(state)) {\n const critical = state.critical;\n if (!isMatchingType(type, critical)) {\n return idleWithoutAnimation;\n }\n const dragging = getDraggable(critical, state.dimensions);\n const isDraggingOver = whatIsDraggedOver(state.impact) === id;\n return getMapProps(id, isEnabled, isDraggingOver, isDraggingOver, dragging, renderClone);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n const dragging = getDraggable(completed.critical, state.dimensions);\n return getMapProps(id, isEnabled, whatIsDraggedOverFromResult(completed.result) === id, whatIsDraggedOver(completed.impact) === id, dragging, renderClone);\n }\n if (state.phase === 'IDLE' && state.completed && !state.shouldFlush) {\n const completed = state.completed;\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n const wasOver = whatIsDraggedOver(completed.impact) === id;\n const wasCombining = Boolean(completed.impact.at && completed.impact.at.type === 'COMBINE');\n const isHome = completed.critical.droppable.id === id;\n if (wasOver) {\n return wasCombining ? idleWithAnimation : idleWithoutAnimation;\n }\n if (isHome) {\n return idleWithAnimation;\n }\n return idleWithoutAnimation;\n }\n return idleWithoutAnimation;\n };\n return selector;\n};\nconst mapDispatchToProps = {\n updateViewportMaxScroll: updateViewportMaxScroll\n};\nconst ConnectedDroppable = connect(makeMapStateToProps, mapDispatchToProps, (stateProps, dispatchProps, ownProps) => {\n return {\n ...attachDefaultPropsToOwnProps(ownProps),\n ...stateProps,\n ...dispatchProps\n };\n}, {\n context: StoreContext,\n areStatePropsEqual: isStrictEqual\n})(Droppable);\n\nexport { DragDropContext, PublicDraggable as Draggable, ConnectedDroppable as Droppable, useKeyboardSensor, useMouseSensor, useTouchSensor };\n","// ========================================\r\n// KanbanBoard Component\r\n// ========================================\r\n// Drag-and-drop kanban board for loops and tasks\r\n\r\nimport { useCallback } from 'react';\r\nimport {\r\n DragDropContext,\r\n Droppable,\r\n Draggable,\r\n type DropResult,\r\n type DraggableProvided,\r\n type DroppableProvided,\r\n} from '@hello-pangea/dnd';\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 KanbanItem {\r\n id: string;\r\n title?: string;\r\n status: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface KanbanColumn<T extends KanbanItem = KanbanItem> {\r\n id: string;\r\n title: string;\r\n items: T[];\r\n color?: string;\r\n icon?: React.ReactNode;\r\n}\r\n\r\nexport interface KanbanBoardProps<T extends KanbanItem = KanbanItem> {\r\n columns: KanbanColumn<T>[];\r\n onDragEnd?: (result: DropResult, sourceColumn: string, destColumn: string) => void;\r\n onItemClick?: (item: T) => void;\r\n renderItem?: (item: T, provided: DraggableProvided) => React.ReactNode;\r\n className?: string;\r\n columnClassName?: string;\r\n itemClassName?: string;\r\n emptyColumnMessage?: string;\r\n isLoading?: boolean;\r\n}\r\n\r\n// ========== Default Item Renderer ==========\r\n\r\nfunction DefaultItemRenderer<T extends KanbanItem>({\r\n item,\r\n provided,\r\n onClick,\r\n className,\r\n}: {\r\n item: T;\r\n provided: DraggableProvided;\r\n onClick?: () => void;\r\n className?: string;\r\n}) {\r\n return (\r\n <div\r\n ref={provided.innerRef}\r\n {...provided.draggableProps}\r\n {...provided.dragHandleProps}\r\n onClick={onClick}\r\n className={cn(\r\n 'p-3 bg-card border border-border rounded-lg shadow-sm cursor-pointer',\r\n 'hover:shadow-md hover:border-primary/50 transition-all',\r\n 'focus:outline-none focus:ring-2 focus:ring-primary/50',\r\n className\r\n )}\r\n >\r\n <p className=\"text-sm font-medium text-foreground truncate\">\r\n {item.title || item.id}\r\n </p>\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Column Component ==========\r\n\r\nfunction KanbanColumnComponent<T extends KanbanItem>({\r\n column,\r\n onItemClick,\r\n renderItem,\r\n itemClassName,\r\n emptyMessage,\r\n}: {\r\n column: KanbanColumn<T>;\r\n onItemClick?: (item: T) => void;\r\n renderItem?: (item: T, provided: DraggableProvided) => React.ReactNode;\r\n itemClassName?: string;\r\n emptyMessage?: string;\r\n}) {\r\n return (\r\n <Droppable droppableId={column.id}>\r\n {(provided: DroppableProvided, snapshot) => (\r\n <div\r\n ref={provided.innerRef}\r\n {...provided.droppableProps}\r\n className={cn(\r\n 'min-h-[200px] p-2 space-y-2 rounded-lg transition-colors',\r\n snapshot.isDraggingOver && 'bg-primary/5'\r\n )}\r\n >\r\n {column.items.length === 0 ? (\r\n <p className=\"text-center text-sm text-muted-foreground py-8\">\r\n {emptyMessage || 'No items'}\r\n </p>\r\n ) : (\r\n column.items.map((item, index) => (\r\n <Draggable key={item.id} draggableId={item.id} index={index}>\r\n {(dragProvided: DraggableProvided) =>\r\n renderItem ? (\r\n renderItem(item, dragProvided)\r\n ) : (\r\n <DefaultItemRenderer\r\n item={item}\r\n provided={dragProvided}\r\n onClick={() => onItemClick?.(item)}\r\n className={itemClassName}\r\n />\r\n )\r\n }\r\n </Draggable>\r\n ))\r\n )}\r\n {provided.placeholder}\r\n </div>\r\n )}\r\n </Droppable>\r\n );\r\n}\r\n\r\n// ========== Main Kanban Board Component ==========\r\n\r\nexport function KanbanBoard<T extends KanbanItem = KanbanItem>({\r\n columns,\r\n onDragEnd,\r\n onItemClick,\r\n renderItem,\r\n className,\r\n columnClassName,\r\n itemClassName,\r\n emptyColumnMessage,\r\n isLoading = false,\r\n}: KanbanBoardProps<T>) {\r\n const handleDragEnd = useCallback(\r\n (result: DropResult) => {\r\n if (!result.destination) return;\r\n\r\n const { source, destination } = result;\r\n if (\r\n source.droppableId === destination.droppableId &&\r\n source.index === destination.index\r\n ) {\r\n return;\r\n }\r\n\r\n onDragEnd?.(result, source.droppableId, destination.droppableId);\r\n },\r\n [onDragEnd]\r\n );\r\n\r\n if (isLoading) {\r\n return (\r\n <div className={cn('grid gap-4', className)} style={{ gridTemplateColumns: `repeat(${columns.length}, minmax(0, 1fr))` }}>\r\n {columns.map((column) => (\r\n <Card key={column.id} className={cn('p-4', columnClassName)}>\r\n <div className=\"h-6 w-24 bg-muted animate-pulse rounded mb-4\" />\r\n <div className=\"space-y-2\">\r\n {[1, 2, 3].map((i) => (\r\n <div key={i} className=\"h-16 bg-muted animate-pulse rounded\" />\r\n ))}\r\n </div>\r\n </Card>\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <DragDropContext onDragEnd={handleDragEnd}>\r\n <div\r\n className={cn('grid gap-4', className)}\r\n style={{ gridTemplateColumns: `repeat(${columns.length}, minmax(0, 1fr))` }}\r\n >\r\n {columns.map((column) => (\r\n <Card key={column.id} className={cn('p-4', columnClassName)}>\r\n {/* Column Header */}\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <div className=\"flex items-center gap-2\">\r\n {column.icon}\r\n <h3 className=\"font-medium text-foreground\">{column.title}</h3>\r\n </div>\r\n <Badge\r\n variant=\"secondary\"\r\n className={cn(column.color && `bg-${column.color}/10 text-${column.color}`)}\r\n >\r\n {column.items.length}\r\n </Badge>\r\n </div>\r\n\r\n {/* Column Content */}\r\n <KanbanColumnComponent\r\n column={column}\r\n onItemClick={onItemClick}\r\n renderItem={renderItem}\r\n itemClassName={itemClassName}\r\n emptyMessage={emptyColumnMessage}\r\n />\r\n </Card>\r\n ))}\r\n </div>\r\n </DragDropContext>\r\n );\r\n}\r\n\r\n// ========== Loop-specific Kanban ==========\r\n\r\nexport interface LoopKanbanItem extends KanbanItem {\r\n status: 'created' | 'running' | 'paused' | 'completed' | 'failed';\r\n currentStep?: number;\r\n totalSteps?: number;\r\n prompt?: string;\r\n tool?: string;\r\n}\r\n\r\nexport function useLoopKanbanColumns(loopsByStatus: Record<string, LoopKanbanItem[]>): KanbanColumn<LoopKanbanItem>[] {\r\n return [\r\n {\r\n id: 'created',\r\n title: 'Pending',\r\n items: loopsByStatus.created || [],\r\n color: 'muted',\r\n },\r\n {\r\n id: 'running',\r\n title: 'Running',\r\n items: loopsByStatus.running || [],\r\n color: 'primary',\r\n },\r\n {\r\n id: 'paused',\r\n title: 'Paused',\r\n items: loopsByStatus.paused || [],\r\n color: 'warning',\r\n },\r\n {\r\n id: 'completed',\r\n title: 'Completed',\r\n items: loopsByStatus.completed || [],\r\n color: 'success',\r\n },\r\n {\r\n id: 'failed',\r\n title: 'Failed',\r\n items: loopsByStatus.failed || [],\r\n color: 'destructive',\r\n },\r\n ];\r\n}\r\n\r\nexport default KanbanBoard;\r\n","// ========================================\n// Issues Panel\n// ========================================\n// Unified issue list panel with list/board view toggle\n\nimport { useState, useMemo, useCallback, useEffect } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n Search,\n CheckCircle,\n Clock,\n AlertTriangle,\n AlertCircle,\n LayoutGrid,\n List,\n} from 'lucide-react';\nimport type { DropResult } from '@hello-pangea/dnd';\nimport { Card } from '@/components/ui/Card';\nimport { Input } from '@/components/ui/Input';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/Select';\nimport { IssueCard } from '@/components/shared/IssueCard';\nimport { IssueDrawer } from '@/components/issue/hub/IssueDrawer';\nimport { KanbanBoard, type KanbanColumn, type KanbanItem } from '@/components/shared/KanbanBoard';\nimport { useIssues, useIssueMutations } from '@/hooks';\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\nimport { cn } from '@/lib/utils';\nimport type { Issue } from '@/lib/api';\n\ntype StatusFilter = 'all' | Issue['status'];\ntype PriorityFilter = 'all' | Issue['priority'];\ntype ViewMode = 'list' | 'board';\n\n// Board columns matching backend status with Chinese defaults\nconst BOARD_COLUMNS: Array<{ id: Issue['status']; titleKey: string; defaultLabel: string }> = [\n { id: 'registered', titleKey: 'issues.status.registered', defaultLabel: '新注册' },\n { id: 'planning', titleKey: 'issues.status.planning', defaultLabel: '规划中' },\n { id: 'planned', titleKey: 'issues.status.planned', defaultLabel: '已规划' },\n { id: 'executing', titleKey: 'issues.status.executing', defaultLabel: '执行中' },\n { id: 'completed', titleKey: 'issues.status.completed', defaultLabel: '已完成' },\n];\n\ninterface IssuesPanelProps {\n onCreateIssue?: () => void;\n}\n\ninterface IssueListProps {\n issues: Issue[];\n isLoading: boolean;\n onIssueClick: (issue: Issue) => void;\n onIssueEdit: (issue: Issue) => void;\n onIssueDelete: (issue: Issue) => void;\n onStatusChange: (issue: Issue, status: Issue['status']) => void;\n}\n\nfunction IssueList({ issues, isLoading, onIssueClick, onIssueEdit, onIssueDelete, onStatusChange }: IssueListProps) {\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"h-32 bg-muted animate-pulse rounded-lg\" />\n ))}\n </div>\n );\n }\n\n if (issues.length === 0) {\n return (\n <Card className=\"p-8 text-center\">\n <AlertCircle className=\"w-12 h-12 mx-auto text-muted-foreground/50\" />\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">{formatMessage({ id: 'issues.emptyState.title' })}</h3>\n <p className=\"mt-2 text-muted-foreground\">{formatMessage({ id: 'issues.emptyState.message' })}</p>\n </Card>\n );\n }\n\n return (\n <div className=\"grid gap-3 md:grid-cols-2 lg:grid-cols-3\">\n {issues.map((issue) => (\n <IssueCard\n key={issue.id}\n issue={issue}\n onClick={onIssueClick}\n onEdit={onIssueEdit}\n onDelete={onIssueDelete}\n onStatusChange={onStatusChange}\n />\n ))}\n </div>\n );\n}\n\n// Local storage key for board order\nfunction storageKey(projectPath: string | null | undefined): string {\n const base = projectPath ? encodeURIComponent(projectPath) : 'global';\n return `ccw.issues.board.order:${base}`;\n}\n\ntype BoardOrder = Partial<Record<Issue['status'], string[]>>;\n\nfunction safeParseOrder(value: string | null): BoardOrder {\n if (!value) return {};\n try {\n const parsed = JSON.parse(value) as unknown;\n if (!parsed || typeof parsed !== 'object') return {};\n return parsed as BoardOrder;\n } catch {\n return {};\n }\n}\n\nfunction buildColumns(\n issues: Issue[],\n order: BoardOrder,\n formatTitle: (statusId: Issue['status']) => string\n): KanbanColumn<Issue & KanbanItem>[] {\n const byId = new Map(issues.map((i) => [i.id, i]));\n const columns: KanbanColumn<Issue & KanbanItem>[] = [];\n\n for (const col of BOARD_COLUMNS) {\n const desired = (order[col.id] ?? []).map((id) => byId.get(id)).filter(Boolean) as Issue[];\n const desiredIds = new Set(desired.map((i) => i.id));\n\n const remaining = issues\n .filter((i) => i.status === col.id && !desiredIds.has(i.id))\n .sort((a, b) => {\n const at = a.updatedAt || a.createdAt || '';\n const bt = b.updatedAt || b.createdAt || '';\n return bt.localeCompare(at);\n });\n\n const items = [...desired, ...remaining].map((issue) => ({\n ...issue,\n id: issue.id,\n title: issue.title,\n status: issue.status,\n }));\n\n columns.push({\n id: col.id,\n title: formatTitle(col.id),\n items,\n icon: <LayoutGrid className=\"w-4 h-4\" />,\n });\n }\n\n return columns;\n}\n\nfunction syncOrderWithIssues(prev: BoardOrder, issues: Issue[]): BoardOrder {\n const statusById = new Map(issues.map((i) => [i.id, i.status]));\n const next: BoardOrder = {};\n\n for (const { id: status } of BOARD_COLUMNS) {\n const existing = prev[status] ?? [];\n const filtered = existing.filter((id) => statusById.get(id) === status);\n const present = new Set(filtered);\n\n const missing = issues\n .filter((i) => i.status === status && !present.has(i.id))\n .map((i) => i.id);\n\n next[status] = [...filtered, ...missing];\n }\n\n return next;\n}\n\nfunction reorderIds(list: string[], from: number, to: number): string[] {\n const next = [...list];\n const [moved] = next.splice(from, 1);\n if (moved === undefined) return list;\n next.splice(to, 0, moved);\n return next;\n}\n\nexport function IssuesPanel({ onCreateIssue: _onCreateIssue }: IssuesPanelProps) {\n const { formatMessage } = useIntl();\n const projectPath = useWorkflowStore(selectProjectPath);\n\n // View mode state\n const [viewMode, setViewMode] = useState<ViewMode>('list');\n\n // Filter state\n const [searchQuery, setSearchQuery] = useState('');\n const [statusFilter, setStatusFilter] = useState<StatusFilter>('all');\n const [priorityFilter, setPriorityFilter] = useState<PriorityFilter>('all');\n const [selectedIssue, setSelectedIssue] = useState<Issue | null>(null);\n\n // Board order state\n const [order, setOrder] = useState<BoardOrder>({});\n\n // Load board order when project changes\n useEffect(() => {\n const key = storageKey(projectPath);\n const loaded = safeParseOrder(localStorage.getItem(key));\n setOrder(loaded);\n }, [projectPath]);\n\n const { issues, criticalCount, isLoading } = useIssues({\n filter: {\n search: searchQuery || undefined,\n status: statusFilter !== 'all' ? [statusFilter] : undefined,\n priority: priorityFilter !== 'all' ? [priorityFilter] : undefined,\n },\n });\n\n const { updateIssue, deleteIssue } = useIssueMutations();\n\n // Keep order consistent with current issues\n useEffect(() => {\n setOrder((prev) => syncOrderWithIssues(prev, issues));\n }, [issues]);\n\n // Persist order\n useEffect(() => {\n const key = storageKey(projectPath);\n try {\n localStorage.setItem(key, JSON.stringify(order));\n } catch {\n // ignore quota errors\n }\n }, [order, projectPath]);\n\n // Status counts using backend statuses\n const statusCounts = useMemo(() => ({\n all: issues.length,\n registered: issues.filter(i => i.status === 'registered').length,\n planning: issues.filter(i => i.status === 'planning').length,\n planned: issues.filter(i => i.status === 'planned').length,\n executing: issues.filter(i => i.status === 'executing').length,\n completed: issues.filter(i => i.status === 'completed').length,\n failed: issues.filter(i => i.status === 'failed').length,\n }), [issues]);\n\n // Build kanban columns\n const columns = useMemo(\n () =>\n buildColumns(issues, order, (statusId) => {\n const col = BOARD_COLUMNS.find((c) => c.id === statusId);\n if (!col) return statusId;\n return formatMessage({ id: col.titleKey, defaultMessage: col.defaultLabel });\n }),\n [issues, order, formatMessage]\n );\n\n const idsByStatus = useMemo(() => {\n const map: Record<string, string[]> = {};\n for (const col of columns) {\n map[col.id] = col.items.map((i) => i.id);\n }\n return map;\n }, [columns]);\n\n const handleEditIssue = (_issue: Issue) => {};\n\n const handleDeleteIssue = async (issue: Issue) => {\n if (confirm(`Delete issue \"${issue.title}\"?`)) {\n await deleteIssue(issue.id);\n }\n };\n\n const handleStatusChange = async (issue: Issue, status: Issue['status']) => {\n await updateIssue(issue.id, { status });\n };\n\n const handleIssueClick = (issue: Issue) => {\n setSelectedIssue(issue);\n };\n\n const handleCloseDrawer = () => {\n setSelectedIssue(null);\n };\n\n // Board drag handler\n const handleDragEnd = useCallback(\n async (result: DropResult, sourceColumn: string, destColumn: string) => {\n const issueId = result.draggableId;\n const issue = issues.find((i) => i.id === issueId);\n if (!issue) return;\n\n const sourceStatus = sourceColumn as Issue['status'];\n const destStatus = destColumn as Issue['status'];\n const sourceIds = idsByStatus[sourceStatus] ?? [];\n const destIds = idsByStatus[destStatus] ?? [];\n\n // Update local order first (optimistic)\n setOrder((prev) => {\n const next = { ...prev };\n if (sourceStatus === destStatus) {\n next[sourceStatus] = reorderIds(sourceIds, result.source.index, result.destination!.index);\n return next;\n }\n\n const nextSource = [...sourceIds];\n nextSource.splice(result.source.index, 1);\n\n const nextDest = [...destIds];\n nextDest.splice(result.destination!.index, 0, issueId);\n\n next[sourceStatus] = nextSource;\n next[destStatus] = nextDest;\n return next;\n });\n\n // Status update\n if (sourceStatus !== destStatus) {\n try {\n await updateIssue(issueId, { status: destStatus });\n } catch (e) {\n console.error('Failed to update issue status:', e);\n }\n }\n },\n [issues, idsByStatus, updateIssue]\n );\n\n return (\n <div className=\"space-y-4\">\n {/* Stats Cards */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <AlertCircle className=\"w-5 h-5 text-info\" />\n <span className=\"text-2xl font-bold\">{statusCounts.registered}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{formatMessage({ id: 'issues.status.registered', defaultMessage: '新注册' })}</p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <Clock className=\"w-5 h-5 text-warning\" />\n <span className=\"text-2xl font-bold\">{statusCounts.executing}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{formatMessage({ id: 'issues.status.executing', defaultMessage: '执行中' })}</p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <AlertTriangle className=\"w-5 h-5 text-destructive\" />\n <span className=\"text-2xl font-bold\">{criticalCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{formatMessage({ id: 'issues.priority.critical' })}</p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"w-5 h-5 text-success\" />\n <span className=\"text-2xl font-bold\">{statusCounts.completed}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{formatMessage({ id: 'issues.status.completed', defaultMessage: '已完成' })}</p>\n </Card>\n </div>\n\n {/* Toolbar */}\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n placeholder={formatMessage({ id: 'common.actions.searchIssues' })}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n\n {/* View Mode Toggle */}\n <div className=\"flex border border-border rounded-md overflow-hidden\">\n <Button\n variant={viewMode === 'list' ? 'default' : 'ghost'}\n size=\"sm\"\n className=\"rounded-none\"\n onClick={() => setViewMode('list')}\n >\n <List className=\"w-4 h-4 mr-1\" />\n {formatMessage({ id: 'common.view.list', defaultMessage: '列表' })}\n </Button>\n <Button\n variant={viewMode === 'board' ? 'default' : 'ghost'}\n size=\"sm\"\n className=\"rounded-none\"\n onClick={() => setViewMode('board')}\n >\n <LayoutGrid className=\"w-4 h-4 mr-1\" />\n {formatMessage({ id: 'common.view.board', defaultMessage: '看板' })}\n </Button>\n </div>\n\n <div className=\"flex gap-2\">\n <Select value={statusFilter} onValueChange={(v) => setStatusFilter(v as StatusFilter)}>\n <SelectTrigger className=\"w-[140px]\">\n <SelectValue placeholder={formatMessage({ id: 'common.status.label' })} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.filters.all' })}</SelectItem>\n <SelectItem value=\"registered\">{formatMessage({ id: 'issues.status.registered', defaultMessage: '新注册' })}</SelectItem>\n <SelectItem value=\"planning\">{formatMessage({ id: 'issues.status.planning', defaultMessage: '规划中' })}</SelectItem>\n <SelectItem value=\"planned\">{formatMessage({ id: 'issues.status.planned', defaultMessage: '已规划' })}</SelectItem>\n <SelectItem value=\"executing\">{formatMessage({ id: 'issues.status.executing', defaultMessage: '执行中' })}</SelectItem>\n <SelectItem value=\"completed\">{formatMessage({ id: 'issues.status.completed', defaultMessage: '已完成' })}</SelectItem>\n <SelectItem value=\"failed\">{formatMessage({ id: 'issues.status.failed', defaultMessage: '失败' })}</SelectItem>\n </SelectContent>\n </Select>\n <Select value={priorityFilter} onValueChange={(v) => setPriorityFilter(v as PriorityFilter)}>\n <SelectTrigger className=\"w-[140px]\">\n <SelectValue placeholder={formatMessage({ id: 'issues.priority.label' })} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.filters.byPriority' })}</SelectItem>\n <SelectItem value=\"critical\">{formatMessage({ id: 'issues.priority.critical' })}</SelectItem>\n <SelectItem value=\"high\">{formatMessage({ id: 'issues.priority.high' })}</SelectItem>\n <SelectItem value=\"medium\">{formatMessage({ id: 'issues.priority.medium' })}</SelectItem>\n <SelectItem value=\"low\">{formatMessage({ id: 'issues.priority.low' })}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Status Filter Pills - only in list mode */}\n {viewMode === 'list' && (\n <div className=\"flex flex-wrap gap-2\">\n <Button variant={statusFilter === 'all' ? 'default' : 'outline'} size=\"sm\" onClick={() => setStatusFilter('all')}>\n {formatMessage({ id: 'issues.filters.all' })} ({statusCounts.all})\n </Button>\n <Button variant={statusFilter === 'registered' ? 'default' : 'outline'} size=\"sm\" onClick={() => setStatusFilter('registered')}>\n <Badge variant=\"info\" className=\"mr-2\">{statusCounts.registered}</Badge>\n {formatMessage({ id: 'issues.status.registered', defaultMessage: '新注册' })}\n </Button>\n <Button variant={statusFilter === 'executing' ? 'default' : 'outline'} size=\"sm\" onClick={() => setStatusFilter('executing')}>\n <Badge variant=\"warning\" className=\"mr-2\">{statusCounts.executing}</Badge>\n {formatMessage({ id: 'issues.status.executing', defaultMessage: '执行中' })}\n </Button>\n <Button variant={priorityFilter === 'critical' ? 'destructive' : 'outline'} size=\"sm\" onClick={() => { setPriorityFilter(priorityFilter === 'critical' ? 'all' : 'critical'); setStatusFilter('all'); }}>\n <Badge variant=\"destructive\" className=\"mr-2\">{criticalCount}</Badge>\n {formatMessage({ id: 'issues.priority.critical' })}\n </Button>\n </div>\n )}\n\n {/* Content Area */}\n {viewMode === 'list' ? (\n <IssueList\n issues={issues}\n isLoading={isLoading}\n onIssueClick={handleIssueClick}\n onIssueEdit={handleEditIssue}\n onIssueDelete={handleDeleteIssue}\n onStatusChange={handleStatusChange}\n />\n ) : (\n <KanbanBoard<Issue & KanbanItem>\n columns={columns}\n onDragEnd={handleDragEnd}\n onItemClick={(item) => handleIssueClick(item as unknown as Issue)}\n isLoading={isLoading}\n emptyColumnMessage={formatMessage({ id: 'issues.emptyState.message' })}\n className={cn('gap-4', 'grid')}\n renderItem={(item, provided) => (\n <IssueCard\n issue={item as unknown as Issue}\n compact\n showActions={false}\n onClick={(i) => handleIssueClick(i)}\n innerRef={provided.innerRef}\n draggableProps={provided.draggableProps}\n dragHandleProps={provided.dragHandleProps}\n className=\"w-full\"\n />\n )}\n />\n )}\n\n {/* Issue Detail Drawer */}\n <IssueDrawer\n issue={selectedIssue}\n isOpen={selectedIssue !== null}\n onClose={handleCloseDrawer}\n />\n </div>\n );\n}\n","// ========================================\r\n// ExecutionGroup Component\r\n// ========================================\r\n// Expandable execution group for queue items\r\n\r\nimport { useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { ChevronDown, ChevronRight, GitMerge, ArrowRight } from 'lucide-react';\r\nimport { Card, CardHeader } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { cn } from '@/lib/utils';\r\nimport type { QueueItem } from '@/lib/api';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface ExecutionGroupProps {\r\n group: string;\r\n items: QueueItem[];\r\n type?: 'parallel' | 'sequential';\r\n onItemClick?: (item: QueueItem) => void;\r\n}\r\n\r\n// ========== Component ==========\r\n\r\nexport function ExecutionGroup({ group, items, type = 'sequential', onItemClick }: ExecutionGroupProps) {\r\n const { formatMessage } = useIntl();\r\n const [isExpanded, setIsExpanded] = useState(false);\r\n const isParallel = type === 'parallel';\r\n\r\n return (\r\n <Card className=\"overflow-hidden\">\r\n <CardHeader\r\n className=\"py-3 px-4 cursor-pointer hover:bg-muted/50 transition-colors\"\r\n onClick={() => setIsExpanded(!isExpanded)}\r\n >\r\n <div className=\"flex items-center justify-between gap-2\">\r\n <div className=\"flex items-center gap-2\">\r\n {isExpanded ? (\r\n <ChevronDown className=\"w-4 h-4 text-muted-foreground\" />\r\n ) : (\r\n <ChevronRight className=\"w-4 h-4 text-muted-foreground\" />\r\n )}\r\n <Badge\r\n variant={isParallel ? 'info' : 'secondary'}\r\n className=\"gap-1\"\r\n >\r\n {isParallel ? (\r\n <GitMerge className=\"w-3 h-3\" />\r\n ) : (\r\n <ArrowRight className=\"w-3 h-3\" />\r\n )}\r\n {group}\r\n </Badge>\r\n <span className=\"text-sm text-muted-foreground\">\r\n {isParallel\r\n ? formatMessage({ id: 'issues.queue.parallelGroup' })\r\n : formatMessage({ id: 'issues.queue.sequentialGroup' })}\r\n </span>\r\n </div>\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n {formatMessage({ id: 'issues.queue.itemCount' }, { count: items.length })}\r\n </Badge>\r\n </div>\r\n </CardHeader>\r\n\r\n {isExpanded && (\r\n <div className=\"px-4 pb-4 pt-0\">\r\n <div className={cn(\r\n \"space-y-1 mt-2\",\r\n isParallel ? \"grid grid-cols-1 sm:grid-cols-2 gap-2\" : \"space-y-1\"\r\n )}>\r\n {items.map((item, index) => {\r\n // Parse item_id to extract type and ID\r\n const [itemType, ...idParts] = item.item_id.split('-');\r\n const displayId = idParts.join('-');\r\n const typeLabel = itemType === 'issue' ? formatMessage({ id: 'issues.solution.shortIssue' })\r\n : itemType === 'solution' ? formatMessage({ id: 'issues.solution.shortSolution' })\r\n : itemType;\r\n\r\n return (\r\n <div\r\n key={item.item_id}\r\n onClick={() => onItemClick?.(item)}\r\n className={cn(\r\n \"flex items-center gap-2 p-2 rounded-md bg-muted/50 text-sm\",\r\n \"hover:bg-muted transition-colors cursor-pointer\"\r\n )}\r\n >\r\n <span className=\"text-muted-foreground text-xs w-6\">\r\n {isParallel ? '' : `${index + 1}.`}\r\n </span>\r\n <span className=\"text-xs text-muted-foreground shrink-0\">\r\n {typeLabel}\r\n </span>\r\n <span className=\"font-mono text-xs truncate flex-1\">\r\n {displayId}\r\n </span>\r\n <Badge variant=\"outline\" className=\"text-xs shrink-0\">\r\n {formatMessage({ id: `issues.queue.status.${item.status}` })}\r\n </Badge>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n </Card>\r\n );\r\n}\r\n\r\nexport default ExecutionGroup;\r\n","// ========================================\r\n// QueueActions Component\r\n// ========================================\r\n// Queue operations with direct action buttons (no dropdown menu)\r\n\r\nimport { useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { Play, Pause, Trash2, Merge, GitBranch, Loader2 } from 'lucide-react';\r\nimport {\r\n AlertDialog,\r\n AlertDialogContent,\r\n AlertDialogHeader,\r\n AlertDialogTitle,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n} from '@/components/ui/AlertDialog';\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogHeader,\r\n DialogTitle,\r\n DialogFooter,\r\n} from '@/components/ui/Dialog';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Input } from '@/components/ui/Input';\r\nimport { Checkbox } from '@/components/ui/Checkbox';\r\nimport { cn } from '@/lib/utils';\r\nimport type { IssueQueue, QueueItem } from '@/lib/api';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface QueueActionsProps {\n queue: IssueQueue;\n queueId?: string;\n isActive?: boolean;\n onActivate?: (queueId: string) => void;\n onDeactivate?: () => void;\n onDelete?: (queueId: string) => void;\n onMerge?: (sourceId: string, targetId: string) => void;\r\n onSplit?: (sourceQueueId: string, itemIds: string[]) => void;\r\n isActivating?: boolean;\r\n isDeactivating?: boolean;\r\n isDeleting?: boolean;\r\n isMerging?: boolean;\r\n isSplitting?: boolean;\r\n}\r\n\r\n// ========== Component ==========\r\n\r\nexport function QueueActions({\n queue,\n queueId: queueIdProp,\n isActive = false,\n onActivate,\n onDeactivate,\n onDelete,\n onMerge,\n onSplit,\r\n isActivating = false,\r\n isDeactivating = false,\r\n isDeleting = false,\r\n isMerging = false,\r\n isSplitting = false,\r\n}: QueueActionsProps) {\n const { formatMessage } = useIntl();\n const [isDeleteOpen, setIsDeleteOpen] = useState(false);\r\n const [isMergeOpen, setIsMergeOpen] = useState(false);\r\n const [isSplitOpen, setIsSplitOpen] = useState(false);\r\n const [mergeTargetId, setMergeTargetId] = useState('');\r\n const [selectedItemIds, setSelectedItemIds] = useState<string[]>([]);\r\n\r\n const queueId = queueIdProp;\n\r\n // Get all items from grouped_items for split dialog\r\n const allItems: QueueItem[] = Object.values(queue.grouped_items || {}).flat();\r\n\r\n const handleDelete = () => {\n if (!queueId) return;\n onDelete?.(queueId);\n setIsDeleteOpen(false);\n };\n\r\n const handleMerge = () => {\n if (mergeTargetId.trim()) {\n if (!queueId) return;\n onMerge?.(queueId, mergeTargetId.trim());\n setIsMergeOpen(false);\n setMergeTargetId('');\n }\n };\n\r\n const handleSplit = () => {\n if (selectedItemIds.length > 0 && selectedItemIds.length < allItems.length) {\n if (!queueId) return;\n onSplit?.(queueId, selectedItemIds);\n setIsSplitOpen(false);\n setSelectedItemIds([]);\n }\n };\n\r\n const toggleItemSelection = (itemId: string) => {\r\n setSelectedItemIds(prev =>\r\n prev.includes(itemId)\r\n ? prev.filter(id => id !== itemId)\r\n : [...prev, itemId]\r\n );\r\n };\r\n\r\n const selectAll = () => {\r\n setSelectedItemIds(allItems.map(item => item.item_id));\r\n };\r\n\r\n const clearAll = () => {\r\n setSelectedItemIds([]);\r\n };\r\n\r\n // Calculate item count\r\n const totalItems = (queue.tasks?.length || 0) + (queue.solutions?.length || 0);\r\n const canSplit = totalItems > 1;\r\n\r\n return (\r\n <>\r\n {/* Direct action buttons */}\r\n <div className=\"flex items-center gap-1\">\r\n {/* Activate/Deactivate button */}\r\n {!isActive && onActivate && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0\"\n onClick={() => {\n if (queueId) onActivate(queueId);\n }}\n disabled={isActivating || !queueId}\n title={formatMessage({ id: 'issues.queue.actions.activate' })}\n >\n {isActivating ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n ) : (\r\n <Play className=\"w-4 h-4 text-success\" />\r\n )}\r\n </Button>\r\n )}\r\n {isActive && onDeactivate && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-8 w-8 p-0\"\r\n onClick={() => onDeactivate()}\r\n disabled={isDeactivating}\r\n title={formatMessage({ id: 'issues.queue.actions.deactivate' })}\r\n >\r\n {isDeactivating ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n ) : (\r\n <Pause className=\"w-4 h-4 text-warning\" />\r\n )}\r\n </Button>\r\n )}\r\n\r\n {/* Merge button */}\r\n <Button\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-8 w-8 p-0\"\r\n onClick={() => setIsMergeOpen(true)}\n disabled={isMerging || !queueId}\n title={formatMessage({ id: 'issues.queue.actions.merge' })}\n >\n {isMerging ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n ) : (\r\n <Merge className=\"w-4 h-4 text-info\" />\r\n )}\r\n </Button>\r\n\r\n {/* Split button - only show if more than 1 item */}\r\n {canSplit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0\"\n onClick={() => setIsSplitOpen(true)}\n disabled={isSplitting || !queueId}\n title={formatMessage({ id: 'issues.queue.actions.split' })}\n >\n {isSplitting ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n ) : (\r\n <GitBranch className=\"w-4 h-4 text-muted-foreground\" />\r\n )}\r\n </Button>\r\n )}\r\n\r\n {/* Delete button */}\r\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0\"\n onClick={() => setIsDeleteOpen(true)}\n disabled={isDeleting || !queueId}\n title={formatMessage({ id: 'issues.queue.actions.delete' })}\n >\n {isDeleting ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin text-destructive\" />\r\n ) : (\r\n <Trash2 className=\"w-4 h-4 text-destructive\" />\r\n )}\r\n </Button>\r\n </div>\r\n\r\n {/* Delete Confirmation Dialog */}\r\n <AlertDialog open={isDeleteOpen} onOpenChange={setIsDeleteOpen}>\r\n <AlertDialogContent>\r\n <AlertDialogHeader>\r\n <AlertDialogTitle>\r\n {formatMessage({ id: 'issues.queue.deleteDialog.title' })}\r\n </AlertDialogTitle>\r\n <AlertDialogDescription>\r\n {formatMessage({ id: 'issues.queue.deleteDialog.description' })}\r\n </AlertDialogDescription>\r\n </AlertDialogHeader>\r\n <AlertDialogFooter>\r\n <AlertDialogCancel>\r\n {formatMessage({ id: 'common.actions.cancel' })}\r\n </AlertDialogCancel>\r\n <AlertDialogAction onClick={handleDelete} className=\"bg-destructive hover:bg-destructive/90\">\r\n {isDeleting ? (\r\n <>\r\n <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />\r\n {formatMessage({ id: 'common.actions.deleting' })}\r\n </>\r\n ) : (\r\n formatMessage({ id: 'issues.queue.actions.delete' })\r\n )}\r\n </AlertDialogAction>\r\n </AlertDialogFooter>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n\r\n {/* Merge Dialog */}\r\n <Dialog open={isMergeOpen} onOpenChange={setIsMergeOpen}>\r\n <DialogContent>\r\n <DialogHeader>\r\n <DialogTitle>\r\n {formatMessage({ id: 'issues.queue.mergeDialog.title' })}\r\n </DialogTitle>\r\n </DialogHeader>\r\n <div className=\"space-y-4 py-4\">\r\n <div>\r\n <label htmlFor=\"merge-target\" className=\"text-sm font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.queue.mergeDialog.targetQueueLabel' })}\r\n </label>\r\n <Input\r\n id=\"merge-target\"\r\n value={mergeTargetId}\r\n onChange={(e) => setMergeTargetId(e.target.value)}\r\n placeholder={formatMessage({ id: 'issues.queue.mergeDialog.targetQueuePlaceholder' })}\r\n className=\"mt-1\"\r\n />\r\n </div>\r\n </div>\r\n <DialogFooter>\r\n <Button\r\n variant=\"outline\"\r\n onClick={() => {\r\n setIsMergeOpen(false);\r\n setMergeTargetId('');\r\n }}\r\n >\r\n {formatMessage({ id: 'common.actions.cancel' })}\r\n </Button>\r\n <Button\r\n onClick={handleMerge}\r\n disabled={!mergeTargetId.trim() || isMerging}\r\n >\r\n {isMerging ? (\r\n <>\r\n <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />\r\n {formatMessage({ id: 'common.actions.merging' })}\r\n </>\r\n ) : (\r\n <>\r\n <Merge className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.queue.actions.merge' })}\r\n </>\r\n )}\r\n </Button>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n\r\n {/* Split Dialog */}\r\n <Dialog open={isSplitOpen} onOpenChange={setIsSplitOpen}>\r\n <DialogContent className=\"max-w-2xl max-h-[80vh] overflow-hidden flex flex-col\">\r\n <DialogHeader>\r\n <DialogTitle>\r\n {formatMessage({ id: 'issues.queue.splitDialog.title' })}\r\n </DialogTitle>\r\n </DialogHeader>\r\n <div className=\"flex-1 overflow-hidden flex flex-col py-4\">\r\n {/* Selection info */}\r\n <div className=\"flex items-center justify-between mb-4 pb-4 border-b\">\r\n <span className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.queue.splitDialog.selected' }, { count: selectedItemIds.length, total: allItems.length })}\r\n </span>\r\n <div className=\"flex gap-2\">\r\n <Button variant=\"outline\" size=\"sm\" onClick={selectAll}>\r\n {formatMessage({ id: 'issues.queue.splitDialog.selectAll' })}\r\n </Button>\r\n <Button variant=\"outline\" size=\"sm\" onClick={clearAll}>\r\n {formatMessage({ id: 'issues.queue.splitDialog.clearAll' })}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Items list with checkboxes */}\r\n <div className=\"flex-1 overflow-y-auto space-y-2 pr-2\">\r\n {allItems.map((item) => {\r\n const isSelected = selectedItemIds.includes(item.item_id);\r\n return (\r\n <div\r\n key={item.item_id}\r\n className={cn(\r\n \"flex items-center gap-3 p-3 rounded-md border transition-colors cursor-pointer\",\r\n isSelected ? \"bg-primary/10 border-primary\" : \"bg-card hover:bg-muted/50\"\r\n )}\r\n onClick={() => toggleItemSelection(item.item_id)}\r\n >\r\n <Checkbox\r\n checked={isSelected}\r\n onChange={() => toggleItemSelection(item.item_id)}\r\n />\r\n <span className=\"font-mono text-xs flex-1 truncate\">\r\n {item.item_id}\r\n </span>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatMessage({ id: `issues.queue.status.${item.status}` })}\r\n </span>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Validation message */}\r\n {selectedItemIds.length === 0 && (\r\n <p className=\"text-sm text-muted-foreground text-center py-2\">\r\n {formatMessage({ id: 'issues.queue.splitDialog.noSelection' })}\r\n </p>\r\n )}\r\n {selectedItemIds.length >= allItems.length && (\r\n <p className=\"text-sm text-destructive text-center py-2\">\r\n {formatMessage({ id: 'issues.queue.splitDialog.cannotSplitAll' })}\r\n </p>\r\n )}\r\n </div>\r\n <DialogFooter>\r\n <Button\r\n variant=\"outline\"\r\n onClick={() => {\r\n setIsSplitOpen(false);\r\n setSelectedItemIds([]);\r\n }}\r\n >\r\n {formatMessage({ id: 'common.actions.cancel' })}\r\n </Button>\r\n <Button\r\n onClick={handleSplit}\r\n disabled={selectedItemIds.length === 0 || selectedItemIds.length >= allItems.length || isSplitting}\r\n >\r\n {isSplitting ? (\r\n <>\r\n <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />\r\n {formatMessage({ id: 'common.actions.splitting' })}\r\n </>\r\n ) : (\r\n <>\r\n <GitBranch className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.queue.actions.split' })}\r\n </>\r\n )}\r\n </Button>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n </>\r\n );\r\n}\r\n\r\nexport default QueueActions;\r\n","// ========================================\r\n// QueueCard Component\r\n// ========================================\r\n// Card component for displaying queue information and actions\r\n\r\nimport { useIntl } from 'react-intl';\r\nimport { ListTodo, CheckCircle2, AlertCircle } from 'lucide-react';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { ExecutionGroup } from './ExecutionGroup';\r\nimport { QueueActions } from './QueueActions';\r\nimport { cn } from '@/lib/utils';\r\nimport type { IssueQueue } from '@/lib/api';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface QueueCardProps {\r\n queue: IssueQueue;\r\n isActive?: boolean;\r\n onActivate?: (queueId: string) => void;\r\n onDeactivate?: () => void;\r\n onDelete?: (queueId: string) => void;\r\n onMerge?: (sourceId: string, targetId: string) => void;\r\n onSplit?: (sourceQueueId: string, itemIds: string[]) => void;\r\n onItemClick?: (item: import('@/lib/api').QueueItem) => void;\r\n isActivating?: boolean;\r\n isDeactivating?: boolean;\r\n isDeleting?: boolean;\r\n isMerging?: boolean;\r\n isSplitting?: boolean;\r\n className?: string;\r\n}\r\n\r\n// ========== Component ==========\r\n\r\nexport function QueueCard({\n queue,\n isActive = false,\n onActivate,\r\n onDeactivate,\r\n onDelete,\r\n onMerge,\r\n onSplit,\r\n onItemClick,\r\n isActivating = false,\r\n isDeactivating = false,\r\n isDeleting = false,\r\n isMerging = false,\r\n isSplitting = false,\r\n className,\r\n}: QueueCardProps) {\n const { formatMessage } = useIntl();\n\n const queueId = queue.id;\n\r\n // Calculate item counts\r\n const taskCount = queue.tasks?.length || 0;\r\n const solutionCount = queue.solutions?.length || 0;\r\n const conflictCount = queue.conflicts?.length || 0;\r\n const totalItems = taskCount + solutionCount;\r\n const groupCount = Object.keys(queue.grouped_items || {}).length;\r\n\r\n // Get execution groups from grouped_items\r\n const executionGroups = Object.entries(queue.grouped_items || {}).map(([name, items]) => ({\r\n id: name,\r\n type: name.toLowerCase().includes('parallel') ? 'parallel' as const : 'sequential' as const,\r\n items: items || [],\r\n }));\r\n\r\n return (\r\n <Card className={cn(\r\n \"p-4 transition-all\",\r\n isActive && \"border-primary shadow-sm\",\r\n className\r\n )}>\r\n {/* Header */}\r\n <div className=\"flex items-start justify-between gap-3 mb-4\">\r\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\r\n <div className={cn(\r\n \"p-2 rounded-lg\",\r\n isActive ? \"bg-primary/10 text-primary\" : \"bg-muted text-muted-foreground\"\r\n )}>\r\n <ListTodo className=\"w-5 h-5\" />\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <h3 className=\"font-medium text-foreground truncate\">\r\n {formatMessage({ id: 'issues.queue.title' })}\r\n </h3>\r\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {(queueId || 'legacy').substring(0, 20)}{(queueId || 'legacy').length > 20 ? '...' : ''}\n </p>\n </div>\n </div>\n\r\n {isActive && (\r\n <Badge variant=\"success\" className=\"gap-1 shrink-0\">\r\n <CheckCircle2 className=\"w-3 h-3\" />\r\n {formatMessage({ id: 'issues.queue.status.active' })}\r\n </Badge>\r\n )}\r\n\r\n <QueueActions\n queue={queue}\n queueId={queueId}\n isActive={isActive}\n onActivate={onActivate}\n onDeactivate={onDeactivate}\n onDelete={onDelete}\n onMerge={onMerge}\n onSplit={onSplit}\r\n isActivating={isActivating}\r\n isDeactivating={isDeactivating}\r\n isDeleting={isDeleting}\r\n isMerging={isMerging}\r\n isSplitting={isSplitting}\r\n />\r\n </div>\r\n\r\n {/* Stats */}\r\n <div className=\"grid grid-cols-2 gap-2 mb-4\">\r\n <div className=\"flex items-center gap-2 text-sm\">\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'issues.queue.items' })}:</span>\r\n <span className=\"font-medium\">{totalItems}</span>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-sm\">\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'issues.queue.groups' })}:</span>\r\n <span className=\"font-medium\">{groupCount}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Conflicts Warning */}\r\n {conflictCount > 0 && (\r\n <div className=\"flex items-center gap-2 p-2 mb-4 bg-destructive/10 rounded-md\">\r\n <AlertCircle className=\"w-4 h-4 text-destructive shrink-0\" />\r\n <span className=\"text-sm text-destructive\">\r\n {conflictCount} {formatMessage({ id: 'issues.queue.conflicts' })}\r\n </span>\r\n </div>\r\n )}\r\n\r\n {/* Execution Groups */}\r\n {executionGroups.length > 0 && (\r\n <div className=\"space-y-2\">\r\n <p className=\"text-xs font-medium text-muted-foreground uppercase\">\r\n {formatMessage({ id: 'issues.queue.executionGroups' })}\r\n </p>\r\n <div className=\"space-y-2\">\r\n {executionGroups.map((group) => (\r\n <ExecutionGroup\r\n key={group.id}\r\n group={group.id}\r\n items={group.items}\r\n type={group.type}\r\n onItemClick={onItemClick}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Empty State */}\r\n {executionGroups.length === 0 && totalItems === 0 && (\r\n <div className=\"text-center py-8 text-muted-foreground\">\r\n <ListTodo className=\"w-8 h-8 mx-auto mb-2 opacity-50\" />\r\n <p className=\"text-sm\">{formatMessage({ id: 'issues.queue.empty' })}</p>\r\n </div>\r\n )}\r\n </Card>\r\n );\r\n}\r\n\r\nexport default QueueCard;\r\n","// ========================================\n// QueueBoard\n// ========================================\n// Kanban-style view of queue execution groups with DnD reordering/moving.\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { DropResult } from '@hello-pangea/dnd';\nimport { useIntl } from 'react-intl';\nimport { LayoutGrid } from 'lucide-react';\nimport { KanbanBoard, type KanbanColumn, type KanbanItem } from '@/components/shared/KanbanBoard';\nimport { Badge } from '@/components/ui/Badge';\nimport { cn } from '@/lib/utils';\nimport { useQueueMutations } from '@/hooks';\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\nimport type { IssueQueue, QueueItem } from '@/lib/api';\n\ntype QueueBoardItem = QueueItem & KanbanItem;\n\nfunction groupSortKey(groupId: string): [number, string] {\n const n = parseInt(groupId.match(/\\d+/)?.[0] || '999');\n return [Number.isFinite(n) ? n : 999, groupId];\n}\n\nfunction buildColumns(queue: IssueQueue): KanbanColumn<QueueBoardItem>[] {\n const entries = Object.entries(queue.grouped_items || {});\n entries.sort(([a], [b]) => {\n const [an, aid] = groupSortKey(a);\n const [bn, bid] = groupSortKey(b);\n if (an !== bn) return an - bn;\n return aid.localeCompare(bid);\n });\n\n return entries.map(([groupId, items]) => {\n const sorted = [...(items || [])].sort((a, b) => (a.execution_order || 0) - (b.execution_order || 0));\n const mapped = sorted.map((it) => ({\n ...it,\n id: it.item_id,\n title: `${it.issue_id} · ${it.solution_id}`,\n status: it.status,\n }));\n return {\n id: groupId,\n title: groupId,\n items: mapped,\n icon: <LayoutGrid className=\"w-4 h-4\" />,\n };\n });\n}\n\nfunction applyDrag(columns: KanbanColumn<QueueBoardItem>[], result: DropResult): KanbanColumn<QueueBoardItem>[] {\n if (!result.destination) return columns;\n const { source, destination, draggableId } = result;\n\n const startCol = columns.find(c => c.id === source.droppableId);\n const endCol = columns.find(c => c.id === destination.droppableId);\n if (!startCol || !endCol) return columns;\n\n const itemToMove = startCol.items.find(item => item.id === draggableId);\n if (!itemToMove) return columns;\n\n // 如果在同一列中移动\n if (startCol.id === endCol.id) {\n const items = [...startCol.items];\n const [reorderedItem] = items.splice(source.index, 1);\n items.splice(destination.index, 0, reorderedItem);\n return columns.map(c => c.id === startCol.id ? { ...c, items } : c);\n }\n\n // 如果跨列移动\n const newStartItems = startCol.items.filter(item => item.id !== draggableId);\n const newEndItems = [\n ...endCol.items.slice(0, destination.index),\n itemToMove,\n ...endCol.items.slice(destination.index),\n ];\n\n return columns.map(c => {\n if (c.id === startCol.id) return { ...c, items: newStartItems };\n if (c.id === endCol.id) return { ...c, items: newEndItems };\n return c;\n });\n}\n\nexport function QueueBoard({\n queue,\n onItemClick,\n className,\n}: {\n queue: IssueQueue;\n onItemClick?: (item: QueueItem) => void;\n className?: string;\n}) {\n const { formatMessage } = useIntl();\n const projectPath = useWorkflowStore(selectProjectPath);\n const { reorderQueueGroup, moveQueueItem, isReordering, isMoving } = useQueueMutations();\n\n const baseColumns = useMemo(() => buildColumns(queue), [queue]);\n const [columns, setColumns] = useState<KanbanColumn<QueueBoardItem>[]>(baseColumns);\n\n useEffect(() => {\n setColumns(baseColumns);\n }, [baseColumns]);\n\n const handleDragEnd = useCallback(\n async (result: DropResult, sourceColumn: string, destColumn: string) => {\n if (!projectPath) return;\n if (!result.destination) return;\n if (sourceColumn === destColumn && result.source.index === result.destination.index) return;\n\n try {\n const nextColumns = applyDrag(columns, result);\n setColumns(nextColumns);\n\n const itemId = result.draggableId;\n\n if (sourceColumn === destColumn) {\n const column = nextColumns.find((c) => c.id === sourceColumn);\n const nextOrder = (column?.items ?? []).map((i) => i.item_id);\n await reorderQueueGroup(sourceColumn, nextOrder);\n } else {\n await moveQueueItem(itemId, destColumn, result.destination.index);\n }\n } catch (e) {\n // Revert by resetting to server-derived columns\n setColumns(baseColumns);\n }\n },\n [baseColumns, columns, moveQueueItem, projectPath, reorderQueueGroup]\n );\n\n return (\n <div className={cn('space-y-2', className)}>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Badge variant=\"secondary\" className=\"gap-1\">\n {formatMessage({ id: 'issues.queue.stats.executionGroups' })}\n </Badge>\n {(isReordering || isMoving) && (\n <span>\n {formatMessage({ id: 'common.status.running' })}\n </span>\n )}\n </div>\n\n <KanbanBoard<QueueBoardItem>\n columns={columns}\n onDragEnd={handleDragEnd}\n onItemClick={(item) => onItemClick?.(item as unknown as QueueItem)}\n emptyColumnMessage={formatMessage({ id: 'issues.queue.empty' })}\n renderItem={(item, provided) => (\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n onClick={() => onItemClick?.(item as unknown as QueueItem)}\n className={cn(\n 'p-3 bg-card border border-border rounded-lg shadow-sm cursor-pointer',\n 'hover:shadow-md hover:border-primary/50 transition-all',\n item.status === 'blocked' && 'border-destructive/50 bg-destructive/5',\n item.status === 'failed' && 'border-destructive/50 bg-destructive/5',\n item.status === 'executing' && 'border-primary/40'\n )}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <div className=\"text-xs font-mono text-muted-foreground\">{item.item_id}</div>\n <div className=\"text-sm font-medium text-foreground truncate\">\n {item.issue_id} · {item.solution_id}\n </div>\n </div>\n <Badge variant=\"outline\" className=\"text-xs shrink-0\">\n {formatMessage({ id: `issues.queue.status.${item.status}` })}\n </Badge>\n </div>\n {item.depends_on?.length ? (\n <div className=\"mt-2 text-xs text-muted-foreground\">\n {formatMessage({ id: 'issues.solution.overview.dependencies' })}: {item.depends_on.length}\n </div>\n ) : null}\n </div>\n )}\n />\n </div>\n );\n}\n\nexport default QueueBoard;\n","// ========================================\n// CliExecutionSettings Component\n// ========================================\n// Shared execution parameter controls (tool, mode, resumeStrategy)\n// extracted from QueueExecuteInSession and QueueSendToOrchestrator.\n\nimport { useIntl } from 'react-intl';\nimport { Card, CardContent } from '@/components/ui/Card';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/Select';\nimport { cn } from '@/lib/utils';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ToolName = 'claude' | 'codex' | 'gemini' | 'qwen';\nexport type ExecutionMode = 'analysis' | 'write';\nexport type ResumeStrategy = 'nativeResume' | 'promptConcat';\n\nexport interface CliExecutionSettingsProps {\n /** Currently selected tool. */\n tool: ToolName;\n /** Currently selected execution mode. */\n mode: ExecutionMode;\n /** Currently selected resume strategy. */\n resumeStrategy: ResumeStrategy;\n /** Callback when tool changes. */\n onToolChange: (tool: ToolName) => void;\n /** Callback when mode changes. */\n onModeChange: (mode: ExecutionMode) => void;\n /** Callback when resume strategy changes. */\n onResumeStrategyChange: (strategy: ResumeStrategy) => void;\n /** Available tool options. Defaults to claude, codex, gemini, qwen. */\n toolOptions?: ToolName[];\n /** Additional CSS class. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Default tool list\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_TOOL_OPTIONS: ToolName[] = ['claude', 'codex', 'gemini', 'qwen'];\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function CliExecutionSettings({\n tool,\n mode,\n resumeStrategy,\n onToolChange,\n onModeChange,\n onResumeStrategyChange,\n toolOptions = DEFAULT_TOOL_OPTIONS,\n className,\n}: CliExecutionSettingsProps) {\n const { formatMessage } = useIntl();\n\n return (\n <Card className={cn('', className)}>\n <CardContent className=\"p-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-3\">\n {/* Tool selector */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {formatMessage({ id: 'issues.terminal.exec.tool' })}\n </label>\n <Select\n value={tool}\n onValueChange={(v) => onToolChange(v as ToolName)}\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {toolOptions.map((t) => (\n <SelectItem key={t} value={t}>\n {t}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Mode selector */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {formatMessage({ id: 'issues.terminal.exec.mode' })}\n </label>\n <Select\n value={mode}\n onValueChange={(v) => onModeChange(v as ExecutionMode)}\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"analysis\">analysis</SelectItem>\n <SelectItem value=\"write\">write</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Resume strategy selector */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {formatMessage({ id: 'issues.terminal.exec.resumeStrategy' })}\n </label>\n <Select\n value={resumeStrategy}\n onValueChange={(v) =>\n onResumeStrategyChange(v as ResumeStrategy)\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"nativeResume\">nativeResume</SelectItem>\n <SelectItem value=\"promptConcat\">promptConcat</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}\n","// ========================================\n// Queue Prompt Builder\n// ========================================\n// Unified prompt/instruction builder for queue item execution.\n// Merges buildQueueItemPrompt (QueueExecuteInSession) and\n// buildQueueItemInstruction (QueueSendToOrchestrator) into a single function.\n\nimport type { QueueItem } from '@/lib/api';\n\n// ---------------------------------------------------------------------------\n// Minimal interfaces for the issue data consumed by buildQueueItemContext.\n// The backend may return solution.tasks[] which is not part of the core\n// IssueSolution interface, so we define a local superset here.\n// ---------------------------------------------------------------------------\n\n/** A lightweight task entry nested inside a solution from the backend. */\ninterface SolutionTask {\n id: string;\n title?: string;\n description?: string;\n}\n\n/** Solution shape as consumed by the prompt builder (superset of IssueSolution). */\ninterface PromptSolution {\n id: string;\n description?: string;\n approach?: string;\n tasks?: SolutionTask[];\n}\n\n/** Minimal issue shape consumed by the prompt builder. */\nexport interface QueueItemIssue {\n title?: string;\n context?: string;\n solutions?: PromptSolution[];\n}\n\n/**\n * Build a context string for executing a queue item.\n *\n * This produces the same output that both `buildQueueItemPrompt` and\n * `buildQueueItemInstruction` used to produce. The only difference between\n * the two originals was that the \"in-session\" variant included the matched\n * task block from `solution.tasks[]`; this unified version always includes\n * it when available, which is strictly a superset.\n */\nexport function buildQueueItemContext(\n item: QueueItem,\n issue: QueueItemIssue | undefined\n): string {\n const lines: string[] = [];\n\n // Header\n lines.push(`Queue Item: ${item.item_id}`);\n lines.push(`Issue: ${item.issue_id}`);\n lines.push(`Solution: ${item.solution_id}`);\n if (item.task_id) lines.push(`Task: ${item.task_id}`);\n lines.push('');\n\n if (issue) {\n if (issue.title) lines.push(`Title: ${issue.title}`);\n if (issue.context) {\n lines.push('');\n lines.push('Context:');\n lines.push(String(issue.context));\n }\n\n const solution = Array.isArray(issue.solutions)\n ? issue.solutions.find((s) => s?.id === item.solution_id)\n : undefined;\n\n if (solution) {\n lines.push('');\n lines.push('Solution Description:');\n if (solution.description) lines.push(String(solution.description));\n if (solution.approach) {\n lines.push('');\n lines.push('Approach:');\n lines.push(String(solution.approach));\n }\n\n // Include matched task from solution.tasks when available\n const tasks = Array.isArray(solution.tasks) ? solution.tasks : [];\n const task = item.task_id\n ? tasks.find((t) => t?.id === item.task_id)\n : undefined;\n if (task) {\n lines.push('');\n lines.push('Task:');\n if (task.title) lines.push(`- ${task.title}`);\n if (task.description) lines.push(String(task.description));\n }\n }\n }\n\n // Footer instruction\n lines.push('');\n lines.push('Instruction:');\n lines.push(\n 'Implement the above queue item in this repository. Prefer small, testable changes; run relevant tests; report blockers if any.'\n );\n\n return lines.join('\\n');\n}\n","// ========================================\r\n// QueueItemExecutor\r\n// ========================================\r\n// Unified execution component for queue items with Tab switching\r\n// between Session (direct PTY) and Orchestrator (flow-based) modes.\r\n// Replaces QueueExecuteInSession and QueueSendToOrchestrator.\r\n\r\nimport { useMemo, useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { Plus, RefreshCw, Terminal, Workflow } from 'lucide-react';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '@/components/ui/Select';\r\nimport { cn } from '@/lib/utils';\r\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\r\nimport { toast, useExecutionStore, useFlowStore } from '@/stores';\r\nimport { useIssues } from '@/hooks';\r\nimport {\r\n executeInCliSession,\r\n createOrchestratorFlow,\r\n executeOrchestratorFlow,\r\n type QueueItem,\r\n} from '@/lib/api';\r\nimport { useTerminalPanelStore } from '@/stores/terminalPanelStore';\r\nimport { useCliSessionCore } from '@/hooks/useCliSessionCore';\r\nimport {\r\n CliExecutionSettings,\r\n type ToolName,\r\n type ExecutionMode,\r\n type ResumeStrategy,\r\n} from '@/components/shared/CliExecutionSettings';\r\nimport { buildQueueItemContext } from '@/lib/queue-prompt';\r\nimport { useQueueExecutionStore, type QueueExecution } from '@/stores/queueExecutionStore';\r\nimport type { Flow } from '@/types/flow';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\ntype ExecutionTab = 'session' | 'orchestrator';\r\n\r\nexport interface QueueItemExecutorProps {\r\n item: QueueItem;\r\n className?: string;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction generateId(prefix: string): string {\r\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Component\r\n// ---------------------------------------------------------------------------\r\n\r\nexport function QueueItemExecutor({ item, className }: QueueItemExecutorProps) {\r\n const { formatMessage } = useIntl();\r\n const navigate = useNavigate();\r\n const projectPath = useWorkflowStore(selectProjectPath);\r\n\r\n // Resolve the parent issue for context building\r\n const { issues } = useIssues();\r\n const issue = useMemo(\r\n () => issues.find((i) => i.id === item.issue_id),\r\n [issues, item.issue_id]\r\n );\r\n\r\n // Shared session management via useCliSessionCore\r\n const {\r\n sessions,\r\n selectedSessionKey,\r\n setSelectedSessionKey,\r\n refreshSessions,\r\n ensureSession,\r\n handleCreateSession,\r\n isLoading,\r\n error: sessionError,\r\n } = useCliSessionCore({ autoSelectLast: true, resumeKey: item.issue_id });\r\n\r\n // Shared execution settings state\r\n const [tool, setTool] = useState<ToolName>('claude');\r\n const [mode, setMode] = useState<ExecutionMode>('write');\r\n const [resumeStrategy, setResumeStrategy] = useState<ResumeStrategy>('nativeResume');\r\n\r\n // Execution state\r\n const [activeTab, setActiveTab] = useState<ExecutionTab>('session');\r\n const [isExecuting, setIsExecuting] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [lastResult, setLastResult] = useState<string | null>(null);\r\n\r\n // Combine errors from session core and local execution\r\n const displayError = error || sessionError || null;\r\n\r\n // Store reference for recording executions\r\n const addExecution = useQueueExecutionStore((s) => s.addExecution);\r\n\r\n // ========== Session Execution ==========\r\n\r\n const handleSessionExecute = async () => {\r\n setIsExecuting(true);\r\n setError(null);\r\n setLastResult(null);\r\n try {\r\n const sessionKey = await ensureSession();\r\n const prompt = buildQueueItemContext(item, issue);\r\n const result = await executeInCliSession(\r\n sessionKey,\r\n {\r\n tool,\r\n prompt,\r\n mode,\r\n workingDir: projectPath,\r\n category: 'user',\r\n resumeKey: item.issue_id,\r\n resumeStrategy,\r\n },\r\n projectPath\r\n );\r\n\r\n // Record to queueExecutionStore\r\n const execution: QueueExecution = {\r\n id: result.executionId,\r\n queueItemId: item.item_id,\r\n issueId: item.issue_id,\r\n solutionId: item.solution_id,\r\n type: 'session',\r\n sessionKey,\r\n tool,\r\n mode,\r\n status: 'running',\r\n startedAt: new Date().toISOString(),\r\n };\r\n addExecution(execution);\r\n\r\n setLastResult(result.executionId);\r\n\r\n // Open terminal panel to show output\r\n useTerminalPanelStore.getState().openTerminal(sessionKey);\r\n } catch (e) {\r\n setError(e instanceof Error ? e.message : String(e));\r\n } finally {\r\n setIsExecuting(false);\r\n }\r\n };\r\n\r\n // ========== Orchestrator Execution ==========\r\n\r\n const handleOrchestratorExecute = async () => {\r\n setIsExecuting(true);\r\n setError(null);\r\n setLastResult(null);\r\n try {\r\n const sessionKey = await ensureSession();\r\n const instruction = buildQueueItemContext(item, issue);\r\n\r\n const nodeId = generateId('node');\r\n const flowName = `Queue ${item.issue_id} / ${item.solution_id}${item.task_id ? ` / ${item.task_id}` : ''}`;\r\n const flowDescription = `Queue item ${item.item_id} -> Orchestrator`;\r\n\r\n const created = await createOrchestratorFlow(\r\n {\r\n name: flowName,\r\n description: flowDescription,\r\n version: '1.0.0',\r\n nodes: [\r\n {\r\n id: nodeId,\r\n type: 'prompt-template',\r\n position: { x: 100, y: 100 },\r\n data: {\r\n label: flowName,\r\n instruction,\r\n tool,\r\n mode,\r\n delivery: 'sendToSession',\r\n targetSessionKey: sessionKey,\r\n resumeKey: item.issue_id,\r\n resumeStrategy,\r\n tags: ['queue', item.item_id, item.issue_id, item.solution_id].filter(Boolean),\r\n },\r\n },\r\n ],\r\n edges: [],\r\n variables: {},\r\n metadata: {\r\n source: 'local',\r\n tags: ['queue', item.item_id, item.issue_id, item.solution_id].filter(Boolean),\r\n },\r\n },\r\n projectPath || undefined\r\n );\r\n\r\n if (!created.success) {\r\n throw new Error('Failed to create flow');\r\n }\r\n\r\n // Hydrate Orchestrator stores -- convert OrchestratorFlowDto to Flow\r\n const flowDto = created.data;\r\n const parsedVersion = parseInt(String(flowDto.version ?? '1'), 10);\r\n const flowForStore: Flow = {\r\n ...flowDto,\r\n version: Number.isFinite(parsedVersion) ? parsedVersion : 1,\r\n } as unknown as Flow;\r\n useFlowStore.getState().setCurrentFlow(flowForStore);\r\n\r\n // Execute the flow\r\n const executed = await executeOrchestratorFlow(\r\n created.data.id,\r\n {},\r\n projectPath || undefined\r\n );\r\n if (!executed.success) {\r\n throw new Error('Failed to execute flow');\r\n }\r\n\r\n const execId = executed.data.execId;\r\n useExecutionStore.getState().startExecution(execId, created.data.id);\r\n useExecutionStore.getState().setMonitorPanelOpen(true);\r\n\r\n // Record to queueExecutionStore\r\n const execution: QueueExecution = {\r\n id: generateId('qexec'),\r\n queueItemId: item.item_id,\r\n issueId: item.issue_id,\r\n solutionId: item.solution_id,\r\n type: 'orchestrator',\r\n flowId: created.data.id,\r\n execId,\r\n tool,\r\n mode,\r\n status: 'running',\r\n startedAt: new Date().toISOString(),\r\n };\r\n addExecution(execution);\r\n\r\n setLastResult(`${created.data.id} / ${execId}`);\r\n toast.success(\r\n formatMessage({ id: 'issues.queue.orchestrator.sentTitle' }),\r\n formatMessage(\r\n { id: 'issues.queue.orchestrator.sentDesc' },\r\n { flowId: created.data.id }\r\n )\r\n );\r\n\r\n navigate('/orchestrator');\r\n } catch (e) {\r\n const message = e instanceof Error ? e.message : String(e);\r\n setError(message);\r\n toast.error(formatMessage({ id: 'issues.queue.orchestrator.sendFailed' }), message);\r\n } finally {\r\n setIsExecuting(false);\r\n }\r\n };\r\n\r\n // ========== Render ==========\r\n\r\n return (\r\n <div className={cn('space-y-3', className)}>\r\n {/* Header with session controls */}\r\n <div className=\"flex items-center justify-between gap-2\">\r\n <h3 className=\"text-sm font-semibold text-foreground\">\r\n {formatMessage({ id: 'issues.queue.exec.title' })}\r\n </h3>\r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={refreshSessions}\r\n disabled={isLoading}\r\n className=\"gap-2\"\r\n >\r\n <RefreshCw className={cn('h-4 w-4', isLoading && 'animate-spin')} />\r\n {formatMessage({ id: 'issues.terminal.session.refresh' })}\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={handleCreateSession}\r\n className=\"gap-2\"\r\n >\r\n <Plus className=\"h-4 w-4\" />\r\n {formatMessage({ id: 'issues.terminal.session.new' })}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Session selector */}\r\n <div>\r\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.terminal.session.select' })}\r\n </label>\r\n <Select value={selectedSessionKey} onValueChange={setSelectedSessionKey}>\r\n <SelectTrigger>\r\n <SelectValue\r\n placeholder={formatMessage({ id: 'issues.terminal.session.none' })}\r\n />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {sessions.length === 0 ? (\r\n <SelectItem value=\"__none__\" disabled>\r\n {formatMessage({ id: 'issues.terminal.session.none' })}\r\n </SelectItem>\r\n ) : (\r\n sessions.map((s) => (\r\n <SelectItem key={s.sessionKey} value={s.sessionKey}>\r\n {(s.tool || 'cli') + ' \\u00B7 ' + s.sessionKey}\r\n </SelectItem>\r\n ))\r\n )}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n\r\n {/* Shared execution settings */}\r\n <CliExecutionSettings\r\n tool={tool}\r\n mode={mode}\r\n resumeStrategy={resumeStrategy}\r\n onToolChange={setTool}\r\n onModeChange={setMode}\r\n onResumeStrategyChange={setResumeStrategy}\r\n />\r\n\r\n {/* Execution mode tabs */}\r\n <Tabs\r\n value={activeTab}\r\n onValueChange={(v) => setActiveTab(v as ExecutionTab)}\r\n className=\"w-full\"\r\n >\r\n <TabsList className=\"w-full\">\r\n <TabsTrigger value=\"session\" className=\"flex-1 gap-2\">\r\n <Terminal className=\"h-4 w-4\" />\r\n {formatMessage({ id: 'issues.queue.exec.sessionTab' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"orchestrator\" className=\"flex-1 gap-2\">\r\n <Workflow className=\"h-4 w-4\" />\r\n {formatMessage({ id: 'issues.queue.exec.orchestratorTab' })}\r\n </TabsTrigger>\r\n </TabsList>\r\n\r\n {/* Session Tab */}\r\n <TabsContent value=\"session\" className=\"mt-3\">\r\n <div className=\"flex items-center justify-end\">\r\n <Button\r\n onClick={handleSessionExecute}\r\n disabled={isExecuting || !projectPath}\r\n className=\"gap-2\"\r\n >\r\n {isExecuting ? (\r\n <>\r\n <RefreshCw className=\"h-4 w-4 animate-spin\" />\r\n {formatMessage({ id: 'issues.terminal.exec.run' })}\r\n </>\r\n ) : (\r\n formatMessage({ id: 'issues.terminal.exec.run' })\r\n )}\r\n </Button>\r\n </div>\r\n </TabsContent>\r\n\r\n {/* Orchestrator Tab */}\r\n <TabsContent value=\"orchestrator\" className=\"mt-3\">\r\n <div className=\"flex items-center justify-end\">\r\n <Button\r\n onClick={handleOrchestratorExecute}\r\n disabled={isExecuting || !projectPath}\r\n className=\"gap-2\"\r\n >\r\n {isExecuting ? (\r\n <>\r\n <RefreshCw className=\"h-4 w-4 animate-spin\" />\r\n {formatMessage({ id: 'issues.queue.orchestrator.sending' })}\r\n </>\r\n ) : (\r\n formatMessage({ id: 'issues.queue.orchestrator.send' })\r\n )}\r\n </Button>\r\n </div>\r\n </TabsContent>\r\n </Tabs>\r\n\r\n {/* Error display */}\r\n {displayError && (\r\n <div className=\"text-sm text-destructive\">{displayError}</div>\r\n )}\r\n\r\n {/* Last result */}\r\n {lastResult && (\r\n <div className=\"text-xs text-muted-foreground font-mono break-all\">\r\n {lastResult}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default QueueItemExecutor;\r\n","// ========================================\n// SolutionDrawer Component\n// ========================================\n// Right-side solution detail drawer\n\nimport { useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { X, FileText, CheckCircle, Circle, Loader2, XCircle, Clock, AlertTriangle, Terminal } from 'lucide-react';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\nimport { QueueItemExecutor } from '@/components/issue/queue/QueueItemExecutor';\nimport { useOpenTerminalPanel } from '@/stores/terminalPanelStore';\nimport { useIssueQueue } from '@/hooks';\nimport { cn } from '@/lib/utils';\nimport type { QueueItem } from '@/lib/api';\n\n// ========== Types ==========\nexport interface SolutionDrawerProps {\n item: QueueItem | null;\n isOpen: boolean;\n onClose: () => void;\n}\n\ntype TabValue = 'overview' | 'tasks' | 'terminal' | 'json';\n\n// ========== Status Configuration ==========\nconst statusConfig: Record<string, { label: string; variant: 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'info'; icon: React.ComponentType<{ className?: string }> }> = {\n pending: { label: 'issues.queue.status.pending', variant: 'secondary', icon: Circle },\n ready: { label: 'issues.queue.status.ready', variant: 'info', icon: Clock },\n executing: { label: 'issues.queue.status.executing', variant: 'warning', icon: Loader2 },\n completed: { label: 'issues.queue.status.completed', variant: 'success', icon: CheckCircle },\n failed: { label: 'issues.queue.status.failed', variant: 'destructive', icon: XCircle },\n blocked: { label: 'issues.queue.status.blocked', variant: 'destructive', icon: AlertTriangle },\n};\n\n// ========== Component ==========\n\nexport function SolutionDrawer({ item, isOpen, onClose }: SolutionDrawerProps) {\n const { formatMessage } = useIntl();\n const openTerminal = useOpenTerminalPanel();\n const [activeTab, setActiveTab] = useState<TabValue>('overview');\n const { data: queue } = useIssueQueue();\n const itemId = item?.item_id;\n const solutionId = item?.solution_id;\n\n // ESC key to close\n useEffect(() => {\n if (!isOpen) return;\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n window.addEventListener('keydown', handleEsc);\n return () => window.removeEventListener('keydown', handleEsc);\n }, [isOpen, onClose]);\n\n // Reset tab when switching items\n useEffect(() => {\n if (!isOpen || !itemId) return;\n setActiveTab('overview');\n }, [itemId, isOpen]);\n\n const tasksForSolution = useMemo(() => {\n if (!solutionId) return [];\n const allItems = Object.values(queue?.grouped_items || {}).flat();\n const isTaskItem = (qi: QueueItem) => Boolean(qi.task_id) || qi.item_id.startsWith('task-');\n return allItems\n .filter((qi) => qi.solution_id === solutionId && isTaskItem(qi))\n .sort((a, b) => a.execution_order - b.execution_order);\n }, [queue?.grouped_items, solutionId]);\n\n if (!item || !isOpen) {\n return null;\n }\n\n const status = statusConfig[item.status] || statusConfig.pending;\n const StatusIcon = status.icon;\n\n // Get solution details (would need to fetch full solution data)\n const issueId = item.issue_id;\n\n return (\n <>\n {/* Overlay */}\n <div\n className={cn(\n 'fixed inset-0 bg-black/40 transition-opacity z-40',\n isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'\n )}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n\n {/* Drawer */}\n <div\n className={cn(\n 'fixed top-0 right-0 h-full w-1/2 bg-background border-l border-border shadow-2xl z-50 flex flex-col transition-transform duration-300 ease-in-out',\n isOpen ? 'translate-x-0' : 'translate-x-full'\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n style={{ minWidth: '400px', maxWidth: '800px' }}\n >\n {/* Header */}\n <div className=\"flex items-start justify-between p-6 border-b border-border bg-card\">\n <div className=\"flex-1 min-w-0 mr-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n <span className=\"text-xs font-mono text-muted-foreground\">{item.item_id}</span>\n <Badge variant={status.variant} className=\"gap-1\">\n <StatusIcon className=\"h-3 w-3\" />\n {formatMessage({ id: status.label })}\n </Badge>\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-sm text-muted-foreground\">\n {formatMessage({ id: 'issues.solution.issue' })}: <span className=\"font-mono\">{issueId}</span>\n </p>\n <p className=\"text-sm text-muted-foreground\">\n {formatMessage({ id: 'issues.solution.solution' })}: <span className=\"font-mono\">{solutionId}</span>\n </p>\n </div>\n </div>\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose} className=\"flex-shrink-0 hover:bg-secondary\">\n <X className=\"h-5 w-5\" />\n </Button>\n </div>\n\n {/* Tabs */}\n <div className=\"px-6 pt-4 bg-card\">\n <Tabs value={activeTab} onValueChange={(v) => setActiveTab(v as TabValue)} className=\"w-full\">\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"overview\" className=\"flex-1\">\n <FileText className=\"h-4 w-4 mr-2\" />\n {formatMessage({ id: 'issues.solution.tabs.overview' })}\n </TabsTrigger>\n <TabsTrigger value=\"tasks\" className=\"flex-1\">\n <CheckCircle className=\"h-4 w-4 mr-2\" />\n {formatMessage({ id: 'issues.solution.tabs.tasks' })}\n </TabsTrigger>\n <TabsTrigger value=\"terminal\" className=\"flex-1\">\n <Terminal className=\"h-4 w-4 mr-2\" />\n {formatMessage({ id: 'issues.solution.tabs.terminal' })}\n </TabsTrigger>\n <TabsTrigger value=\"json\" className=\"flex-1\">\n <FileText className=\"h-4 w-4 mr-2\" />\n {formatMessage({ id: 'issues.solution.tabs.json' })}\n </TabsTrigger>\n </TabsList>\n\n {/* Tab Content */}\n <div className=\"overflow-y-auto pr-2\" style={{ height: 'calc(100vh - 200px)' }}>\n {/* Overview Tab */}\n <TabsContent value=\"overview\" className=\"mt-4 pb-6 focus-visible:outline-none\">\n <div className=\"space-y-6\">\n {/* Execution Info */}\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n {formatMessage({ id: 'issues.solution.overview.executionInfo' })}\n </h3>\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"p-3 bg-muted/50 rounded-md\">\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.solution.overview.executionOrder' })}</p>\n <p className=\"text-lg font-semibold\">{item.execution_order}</p>\n </div>\n <div className=\"p-3 bg-muted/50 rounded-md\">\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.solution.overview.semanticPriority' })}</p>\n <p className=\"text-lg font-semibold\">{item.semantic_priority}</p>\n </div>\n <div className=\"p-3 bg-muted/50 rounded-md\">\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.solution.overview.group' })}</p>\n <p className=\"text-sm font-mono truncate\">{item.execution_group}</p>\n </div>\n <div className=\"p-3 bg-muted/50 rounded-md\">\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'issues.solution.overview.taskCount' })}</p>\n <p className=\"text-lg font-semibold\">{item.task_count || '-'}</p>\n </div>\n </div>\n </div>\n\n {/* Unified Execution */}\n <QueueItemExecutor item={item} />\n\n {/* Dependencies */}\n {item.depends_on && item.depends_on.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\n {formatMessage({ id: 'issues.solution.overview.dependencies' })}\n </h3>\n <div className=\"flex flex-wrap gap-2\">\n {item.depends_on.map((dep, index) => (\n <Badge key={index} variant=\"outline\" className=\"font-mono text-xs\">\n {dep}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {/* Files Touched */}\n {item.files_touched && item.files_touched.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2\">\n {formatMessage({ id: 'issues.solution.overview.filesTouched' })}\n </h3>\n <div className=\"space-y-1\">\n {item.files_touched.map((file, index) => (\n <div key={index} className=\"p-2 bg-muted/50 rounded-md\">\n <span className=\"text-sm font-mono\">{file}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </TabsContent>\n\n {/* Tasks Tab */}\n <TabsContent value=\"tasks\" className=\"mt-4 pb-6 focus-visible:outline-none\">\n {tasksForSolution.length === 0 ? (\n <div className=\"text-center py-12 text-muted-foreground\">\n <FileText className=\"h-12 w-12 mx-auto mb-4 opacity-50\" />\n <p className=\"text-sm\">{formatMessage({ id: 'issues.solution.tasks.empty' })}</p>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {tasksForSolution.map((task) => {\n const taskStatus = statusConfig[task.status] || statusConfig.pending;\n const TaskStatusIcon = taskStatus.icon;\n const taskId = task.task_id || task.item_id;\n\n return (\n <div\n key={task.item_id}\n className=\"flex items-center justify-between gap-3 p-3 bg-muted/50 rounded-md\"\n >\n <div className=\"min-w-0\">\n <p className=\"text-sm font-mono truncate\">{taskId}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {formatMessage({ id: 'issues.solution.overview.executionOrder' })}: {task.execution_order}\n {' · '}\n {formatMessage({ id: 'issues.solution.overview.group' })}: {task.execution_group}\n </p>\n </div>\n <Badge variant={taskStatus.variant} className=\"gap-1 shrink-0\">\n <TaskStatusIcon\n className={cn('h-3 w-3', task.status === 'executing' && 'animate-spin')}\n />\n {formatMessage({ id: taskStatus.label })}\n </Badge>\n </div>\n );\n })}\n </div>\n )}\n </TabsContent>\n\n {/* Terminal Tab - Link to Terminal Panel */}\n <TabsContent value=\"terminal\" className=\"mt-4 pb-6 focus-visible:outline-none\">\n <div className=\"flex flex-col items-center justify-center py-12 text-muted-foreground\">\n <Terminal className=\"h-12 w-12 mb-4 opacity-50\" />\n <p className=\"text-sm mb-4\">{formatMessage({ id: 'home.terminalPanel.openInPanel' })}</p>\n <Button\n onClick={() => {\n openTerminal(issueId);\n onClose();\n }}\n >\n <Terminal className=\"h-4 w-4 mr-2\" />\n {formatMessage({ id: 'home.terminalPanel.openInPanel' })}\n </Button>\n </div>\n </TabsContent>\n\n {/* JSON Tab */}\n <TabsContent value=\"json\" className=\"mt-4 pb-6 focus-visible:outline-none\">\n <pre className=\"p-4 bg-muted rounded-md overflow-x-auto text-xs\">\n {JSON.stringify(item, null, 2)}\n </pre>\n </TabsContent>\n </div>\n </Tabs>\n </div>\n </div>\n </>\n );\n}\n\nexport default SolutionDrawer;\n","// ========================================\n// Queue Panel\n// ========================================\n// Content panel for Queue tab in IssueHub\n\nimport { useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n AlertCircle,\n CheckCircle,\n Clock,\n ListTodo,\n GitMerge,\n} from 'lucide-react';\nimport { Card } from '@/components/ui/Card';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/Select';\nimport { QueueCard } from '@/components/issue/queue/QueueCard';\nimport { QueueBoard } from '@/components/issue/queue/QueueBoard';\nimport { SolutionDrawer } from '@/components/issue/queue/SolutionDrawer';\nimport { useIssueQueue, useIssueQueueById, useQueueHistory, useQueueMutations } from '@/hooks';\nimport type { QueueItem } from '@/lib/api';\n\n// ========== Loading Skeleton ==========\n\nfunction QueuePanelSkeleton() {\n return (\n <div className=\"space-y-6\">\n {/* Stats Cards Skeleton */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Card key={i} className=\"p-4\">\n <div className=\"h-6 bg-muted animate-pulse rounded w-16 mb-2\" />\n <div className=\"h-4 bg-muted animate-pulse rounded w-24\" />\n </Card>\n ))}\n </div>\n\n {/* Queue Cards Skeleton */}\n <div className=\"grid gap-4 md:grid-cols-2\">\n {[1, 2].map((i) => (\n <Card key={i} className=\"p-4\">\n <div className=\"h-6 bg-muted animate-pulse rounded w-32 mb-4\" />\n <div className=\"h-4 bg-muted animate-pulse rounded w-full mb-2\" />\n <div className=\"h-4 bg-muted animate-pulse rounded w-3/4\" />\n </Card>\n ))}\n </div>\n </div>\n );\n}\n\n// ========== Empty State ==========\n\nfunction QueueEmptyState() {\n const { formatMessage } = useIntl();\n\n return (\n <Card className=\"p-12 text-center\">\n <AlertCircle className=\"w-16 h-16 mx-auto text-muted-foreground/50\" />\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\n {formatMessage({ id: 'issues.queue.emptyState.title' })}\n </h3>\n <p className=\"mt-2 text-muted-foreground\">\n {formatMessage({ id: 'issues.queue.emptyState.description' })}\n </p>\n </Card>\n );\n}\n\n// ========== Main Panel Component ==========\n\nexport function QueuePanel() {\n const { formatMessage } = useIntl();\n const [selectedItem, setSelectedItem] = useState<QueueItem | null>(null);\n const [selectedQueueId, setSelectedQueueId] = useState<string>('');\n\n const activeQueueQuery = useIssueQueue();\n const { data: historyIndex } = useQueueHistory();\n const selectedQueueQuery = useIssueQueueById(selectedQueueId);\n const {\n activateQueue,\n deactivateQueue,\n deleteQueue,\n mergeQueues,\n splitQueue,\n isActivating,\n isDeactivating,\n isDeleting,\n isMerging,\n isSplitting,\n } = useQueueMutations();\n\n const queue = selectedQueueId && selectedQueueQuery.data ? selectedQueueQuery.data : activeQueueQuery.data;\n const isLoading =\n activeQueueQuery.isLoading ||\n (selectedQueueId ? selectedQueueQuery.isLoading && !selectedQueueQuery.data : false);\n const error = activeQueueQuery.error || selectedQueueQuery.error;\n\n const taskCount = queue?.tasks?.length || 0;\n const solutionCount = queue?.solutions?.length || 0;\n const conflictCount = queue?.conflicts?.length || 0;\n const groupCount = Object.keys(queue?.grouped_items || {}).length;\n const totalItems = taskCount + solutionCount;\n const activeQueueId = historyIndex?.active_queue_id || null;\n const activeQueueIds = historyIndex?.active_queue_ids || [];\n const queueId = queue?.id;\n\n // Keep selector in sync with active queue id\n useEffect(() => {\n if (selectedQueueId) return;\n if (activeQueueId) setSelectedQueueId(activeQueueId);\n else if (queueId) setSelectedQueueId(queueId);\n }, [activeQueueId, queueId, selectedQueueId]);\n\n const handleActivate = async (queueId: string) => {\n try {\n await activateQueue(queueId);\n } catch (err) {\n console.error('Failed to activate queue:', err);\n }\n };\n\n const handleDeactivate = async () => {\n try {\n await deactivateQueue();\n } catch (err) {\n console.error('Failed to deactivate queue:', err);\n }\n };\n\n const handleDelete = async (queueId: string) => {\n try {\n await deleteQueue(queueId);\n } catch (err) {\n console.error('Failed to delete queue:', err);\n }\n };\n\n const handleMerge = async (sourceId: string, targetId: string) => {\n try {\n await mergeQueues(sourceId, targetId);\n } catch (err) {\n console.error('Failed to merge queues:', err);\n }\n };\n\n const handleSplit = async (sourceQueueId: string, itemIds: string[]) => {\n try {\n await splitQueue(sourceQueueId, itemIds);\n } catch (err) {\n console.error('Failed to split queue:', err);\n }\n };\n\n const handleItemClick = (item: QueueItem) => {\n setSelectedItem(item);\n };\n\n const handleCloseDrawer = () => {\n setSelectedItem(null);\n };\n\n if (isLoading) {\n return <QueuePanelSkeleton />;\n }\n\n if (error) {\n return (\n <Card className=\"p-12 text-center\">\n <AlertCircle className=\"w-16 h-16 mx-auto text-destructive/50\" />\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\n {formatMessage({ id: 'issues.queue.error.title' })}\n </h3>\n <p className=\"mt-2 text-muted-foreground\">\n {(error as Error).message || formatMessage({ id: 'issues.queue.error.message' })}\n </p>\n </Card>\n );\n }\n\n if (!queue || totalItems === 0) {\n return <QueueEmptyState />;\n }\n\n // Check if queue is active (multi-queue index preferred)\n const isActive = queueId ? activeQueueIds.includes(queueId) : totalItems > 0 && conflictCount === 0;\n\n return (\n <div className=\"space-y-6\">\n {/* Queue History / Active Queue Selector */}\n {historyIndex && (\n <Card className=\"p-4\">\n <div className=\"flex flex-col md:flex-row md:items-center gap-3 justify-between\">\n <div className=\"min-w-0\">\n <div className=\"text-sm font-semibold text-foreground\">\n {formatMessage({ id: 'issues.queue.history.title' })}\n </div>\n <div className=\"text-xs text-muted-foreground mt-1 font-mono\">\n {formatMessage({ id: 'issues.queue.history.active' })}:{' '}\n {activeQueueId || '—'}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Select value={selectedQueueId} onValueChange={(v) => setSelectedQueueId(v)}>\n <SelectTrigger className=\"w-[260px]\">\n <SelectValue placeholder={formatMessage({ id: 'issues.queue.history.select' })} />\n </SelectTrigger>\n <SelectContent>\n {(historyIndex.queues || []).length === 0 ? (\n <SelectItem value=\"__none__\" disabled>\n {formatMessage({ id: 'issues.queue.history.empty' })}\n </SelectItem>\n ) : (\n historyIndex.queues.map((q) => (\n <SelectItem key={q.id} value={q.id}>\n {q.id}\n </SelectItem>\n ))\n )}\n </SelectContent>\n </Select>\n <Button\n variant=\"outline\"\n disabled={!selectedQueueId || isActivating}\n onClick={() => activateQueue(selectedQueueId)}\n >\n {formatMessage({ id: 'issues.queue.history.activate' })}\n </Button>\n <Button\n variant=\"outline\"\n disabled={isDeactivating}\n onClick={() => deactivateQueue()}\n >\n {formatMessage({ id: 'issues.queue.actions.deactivate' })}\n </Button>\n </div>\n </div>\n </Card>\n )}\n\n {/* Stats Cards */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <ListTodo className=\"w-5 h-5 text-info\" />\n <span className=\"text-2xl font-bold\">{totalItems}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'issues.queue.stats.totalItems' })}\n </p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <GitMerge className=\"w-5 h-5 text-warning\" />\n <span className=\"text-2xl font-bold\">{groupCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'issues.queue.stats.groups' })}\n </p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <Clock className=\"w-5 h-5 text-warning\" />\n <span className=\"text-2xl font-bold\">{taskCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'issues.queue.stats.tasks' })}\n </p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"w-5 h-5 text-success\" />\n <span className=\"text-2xl font-bold\">{solutionCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'issues.queue.stats.solutions' })}\n </p>\n </Card>\n </div>\n\n {/* Conflicts Warning */}\n {conflictCount > 0 && (\n <Card className=\"p-4 border-destructive/50 bg-destructive/5\">\n <div className=\"flex items-center gap-3\">\n <AlertCircle className=\"w-5 h-5 text-destructive shrink-0\" />\n <div className=\"flex-1\">\n <h4 className=\"font-medium text-destructive\">\n {formatMessage({ id: 'issues.queue.conflicts.title' })}\n </h4>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {conflictCount} {formatMessage({ id: 'issues.queue.conflicts.description' })}\n </p>\n </div>\n </div>\n </Card>\n )}\n\n {/* Queue Card (actions + summary) */}\n <QueueCard\n key={queue.id || 'legacy'}\n queue={queue}\n isActive={isActive}\n onActivate={handleActivate}\n onDeactivate={handleDeactivate}\n onDelete={handleDelete}\n onMerge={handleMerge}\n onSplit={handleSplit}\n onItemClick={handleItemClick}\n isActivating={isActivating}\n isDeactivating={isDeactivating}\n isDeleting={isDeleting}\n isMerging={isMerging}\n isSplitting={isSplitting}\n />\n\n {/* Queue Board (DnD reorder/move) */}\n <QueueBoard queue={queue} onItemClick={handleItemClick} />\n\n {/* Solution Detail Drawer */}\n <SolutionDrawer\n item={selectedItem}\n isOpen={selectedItem !== null}\n onClose={handleCloseDrawer}\n />\n\n {/* Status Footer */}\n <div className=\"flex items-center justify-between p-4 bg-muted/50 rounded-lg\">\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n {isActive ? (\n <>\n <CheckCircle className=\"w-4 h-4 text-success\" />\n {formatMessage({ id: 'issues.queue.status.ready' })}\n </>\n ) : (\n <>\n <Clock className=\"w-4 h-4 text-warning\" />\n {formatMessage({ id: 'issues.queue.status.pending' })}\n </>\n )}\n </div>\n <Badge variant={isActive ? 'success' : 'secondary'} className=\"gap-1\">\n {isActive ? (\n <CheckCircle className=\"w-3 h-3\" />\n ) : (\n <Clock className=\"w-3 h-3\" />\n )}\n {isActive\n ? formatMessage({ id: 'issues.queue.status.active' })\n : formatMessage({ id: 'issues.queue.status.inactive' })\n }\n </Badge>\n </div>\n </div>\n );\n}\n","// ========================================\r\n// Discovery Card Component\r\n// ========================================\r\n// Displays a discovery session card with status, progress, and findings count\r\n\r\nimport { useIntl } from 'react-intl';\r\nimport { Radar, CheckCircle, XCircle, Clock } from 'lucide-react';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Progress } from '@/components/ui/Progress';\r\nimport { cn } from '@/lib/utils';\r\nimport type { DiscoverySession } from '@/lib/api';\r\n\r\ninterface DiscoveryCardProps {\r\n session: DiscoverySession;\r\n isActive: boolean;\r\n onClick: () => void;\r\n}\r\n\r\nconst statusConfig = {\r\n running: {\r\n icon: Clock,\r\n variant: 'warning' as const,\r\n label: 'issues.discovery.session.status.running',\r\n },\r\n completed: {\r\n icon: CheckCircle,\r\n variant: 'success' as const,\r\n label: 'issues.discovery.session.status.completed',\r\n },\r\n failed: {\r\n icon: XCircle,\r\n variant: 'destructive' as const,\r\n label: 'issues.discovery.session.status.failed',\r\n },\r\n};\r\n\r\nexport function DiscoveryCard({ session, isActive, onClick }: DiscoveryCardProps) {\r\n const { formatMessage } = useIntl();\r\n const config = statusConfig[session.status];\r\n const StatusIcon = config.icon;\r\n\r\n const formatDate = (dateString: string) => {\r\n return new Date(dateString).toLocaleString();\r\n };\r\n\r\n return (\r\n <Card\r\n className={cn(\r\n 'p-4 cursor-pointer transition-all hover:shadow-md',\r\n isActive && 'ring-2 ring-primary'\r\n )}\r\n onClick={onClick}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-start justify-between mb-3\">\r\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\r\n <Radar className=\"w-5 h-5 text-primary flex-shrink-0\" />\r\n <h3 className=\"font-medium text-foreground truncate\">{session.name}</h3>\r\n </div>\r\n <Badge variant={config.variant} className=\"flex-shrink-0\">\r\n <StatusIcon className=\"w-3 h-3 mr-1\" />\r\n {formatMessage({ id: config.label })}\r\n </Badge>\r\n </div>\r\n\r\n {/* Progress Bar for Running Sessions */}\r\n {session.status === 'running' && (\r\n <div className=\"mb-3\">\r\n <div className=\"flex items-center justify-between text-xs text-muted-foreground mb-1\">\r\n <span>{formatMessage({ id: 'issues.discovery.progress' })}</span>\r\n <span>{session.progress}%</span>\r\n </div>\r\n <Progress value={session.progress} className=\"h-2\" />\r\n </div>\r\n )}\r\n\r\n {/* Findings Count */}\r\n <div className=\"flex items-center justify-between text-sm\">\r\n <div className=\"flex items-center gap-4\">\r\n <div className=\"flex items-center gap-1\">\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'issues.discovery.session.findings' }, { count: session.findings_count })}:</span>\r\n <span className=\"font-medium text-foreground\">{session.findings_count}</span>\r\n </div>\r\n </div>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatDate(session.created_at)}\r\n </span>\r\n </div>\r\n </Card>\r\n );\r\n}\r\n","// ========================================\n// FindingDrawer Component\n// ========================================\n// Right-side finding detail drawer for displaying discovery finding details\n\nimport { useEffect } from 'react';\nimport { useIntl } from 'react-intl';\nimport { X, FileText, AlertTriangle, ExternalLink, MapPin, Code, Lightbulb, Target } from 'lucide-react';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { cn } from '@/lib/utils';\nimport type { Finding } from '@/lib/api';\n\n// ========== Types ==========\nexport interface FindingDrawerProps {\n finding: Finding | null;\n isOpen: boolean;\n onClose: () => void;\n}\n\n// ========== Severity Configuration ==========\nconst severityConfig: Record<string, { label: string; variant: 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'info' }> = {\n critical: { label: 'issues.discovery.findings.severity.critical', variant: 'destructive' },\n high: { label: 'issues.discovery.findings.severity.high', variant: 'destructive' },\n medium: { label: 'issues.discovery.findings.severity.medium', variant: 'warning' },\n low: { label: 'issues.discovery.findings.severity.low', variant: 'secondary' },\n};\n\nfunction getSeverityConfig(severity: string) {\n return severityConfig[severity] || { label: 'issues.discovery.findings.severity.unknown', variant: 'outline' };\n}\n\n// ========== Component ==========\n\nexport function FindingDrawer({ finding, isOpen, onClose }: FindingDrawerProps) {\n const { formatMessage } = useIntl();\n\n // ESC key to close\n useEffect(() => {\n if (!isOpen) return;\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n window.addEventListener('keydown', handleEsc);\n return () => window.removeEventListener('keydown', handleEsc);\n }, [isOpen, onClose]);\n\n if (!finding || !isOpen) {\n return null;\n }\n\n const severity = getSeverityConfig(finding.severity);\n\n return (\n <>\n {/* Overlay */}\n <div\n className={cn(\n 'fixed inset-0 bg-black/40 transition-opacity z-40',\n isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'\n )}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n\n {/* Drawer */}\n <div\n className={cn(\n 'fixed top-0 right-0 h-full w-1/2 bg-background border-l border-border shadow-2xl z-50 flex flex-col transition-transform duration-300 ease-in-out',\n isOpen ? 'translate-x-0' : 'translate-x-full'\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n style={{ minWidth: '400px', maxWidth: '800px' }}\n >\n {/* Header */}\n <div className=\"flex items-start justify-between p-6 border-b border-border bg-card\">\n <div className=\"flex-1 min-w-0 mr-4\">\n <div className=\"flex items-center gap-2 mb-2 flex-wrap\">\n <span className=\"text-xs font-mono text-muted-foreground\">{finding.id}</span>\n <Badge variant={severity.variant}>\n {formatMessage({ id: severity.label })}\n </Badge>\n {finding.type && (\n <Badge variant=\"outline\">{finding.type}</Badge>\n )}\n {finding.category && (\n <Badge variant=\"info\">{finding.category}</Badge>\n )}\n </div>\n <h2 className=\"text-lg font-semibold text-foreground\">\n {finding.title}\n </h2>\n </div>\n <Button variant=\"ghost\" size=\"icon\" onClick={onClose} className=\"flex-shrink-0 hover:bg-secondary\">\n <X className=\"h-5 w-5\" />\n </Button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto p-6 space-y-6\">\n {/* Description */}\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <AlertTriangle className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.description' })}\n </h3>\n <p className=\"text-sm text-muted-foreground whitespace-pre-wrap\">\n {finding.description}\n </p>\n </div>\n\n {/* File Location */}\n {finding.file && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <MapPin className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.location' })}\n </h3>\n <div className=\"flex items-center gap-2 text-sm\">\n <FileText className=\"h-4 w-4 text-muted-foreground\" />\n <code className=\"px-2 py-1 bg-muted rounded text-xs\">\n {finding.file}\n {finding.line && `:${finding.line}`}\n </code>\n </div>\n </div>\n )}\n\n {/* Code Snippet */}\n {finding.code_snippet && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <Code className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.codeSnippet' })}\n </h3>\n <pre className=\"p-3 bg-muted rounded-md overflow-x-auto text-xs border border-border\">\n <code>{finding.code_snippet}</code>\n </pre>\n </div>\n )}\n\n {/* Suggested Fix */}\n {finding.suggested_issue && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <Lightbulb className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.suggestedFix' })}\n </h3>\n <p className=\"text-sm text-muted-foreground whitespace-pre-wrap\">\n {finding.suggested_issue}\n </p>\n </div>\n )}\n\n {/* Confidence */}\n {finding.confidence !== undefined && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <Target className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.confidence' })}\n </h3>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-1 h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className={cn(\n \"h-full transition-all\",\n finding.confidence >= 0.9 ? \"bg-green-500\" :\n finding.confidence >= 0.7 ? \"bg-yellow-500\" : \"bg-red-500\"\n )}\n style={{ width: `${finding.confidence * 100}%` }}\n />\n </div>\n <span className=\"text-sm font-medium\">\n {Math.round(finding.confidence * 100)}%\n </span>\n </div>\n </div>\n )}\n\n {/* Reference */}\n {finding.reference && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-2\">\n <ExternalLink className=\"h-4 w-4\" />\n {formatMessage({ id: 'issues.discovery.findings.reference' })}\n </h3>\n <a\n href={finding.reference}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm text-primary hover:underline break-all\"\n >\n {finding.reference}\n </a>\n </div>\n )}\n\n {/* Perspective */}\n {finding.perspective && (\n <div className=\"pt-4 border-t border-border\">\n <Badge variant=\"secondary\" className=\"text-xs\">\n {formatMessage({ id: 'issues.discovery.findings.perspective' })}: {finding.perspective}\n </Badge>\n </div>\n )}\n </div>\n </div>\n </>\n );\n}\n\nexport default FindingDrawer;\n","// ========================================\r\n// Finding List Component\r\n// ========================================\r\n// Displays findings with filters and severity badges\r\n\r\nimport { useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { Search, FileCode, AlertTriangle, ExternalLink, Check } from 'lucide-react';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Input } from '@/components/ui/Input';\r\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/Select';\r\nimport { cn } from '@/lib/utils';\r\nimport type { Finding } from '@/lib/api';\r\nimport type { FindingFilters } from '@/hooks/useIssues';\r\n\r\ninterface FindingListProps {\r\n findings: Finding[];\r\n filters: FindingFilters;\r\n onFilterChange: (filters: FindingFilters) => void;\r\n onFindingClick?: (finding: Finding) => void;\r\n selectedIds?: string[];\r\n onSelectionChange?: (selectedIds: string[]) => void;\r\n}\r\n\r\nconst severityConfig: Record<string, { variant: 'destructive' | 'warning' | 'secondary' | 'outline' | 'success' | 'info' | 'default'; label: string }> = {\r\n critical: { variant: 'destructive', label: 'issues.discovery.findings.severity.critical' },\r\n high: { variant: 'destructive', label: 'issues.discovery.findings.severity.high' },\r\n medium: { variant: 'warning', label: 'issues.discovery.findings.severity.medium' },\r\n low: { variant: 'secondary', label: 'issues.discovery.findings.severity.low' },\r\n};\r\n\r\nfunction getSeverityConfig(severity: string) {\r\n return severityConfig[severity] || { variant: 'outline', label: 'issues.discovery.findings.severity.unknown' };\r\n}\r\n\r\nexport function FindingList({\r\n findings,\r\n filters,\r\n onFilterChange,\r\n onFindingClick,\r\n selectedIds = [],\r\n onSelectionChange,\r\n}: FindingListProps) {\r\n const { formatMessage } = useIntl();\r\n const [internalSelection, setInternalSelection] = useState<Set<string>>(new Set());\r\n\r\n // Use external selection if provided, otherwise use internal state\r\n const selectionSet = onSelectionChange\r\n ? new Set(selectedIds)\r\n : internalSelection;\r\n\r\n const handleToggleSelection = (findingId: string) => {\r\n const newSet = new Set(selectionSet);\r\n if (newSet.has(findingId)) {\r\n newSet.delete(findingId);\r\n } else {\r\n newSet.add(findingId);\r\n }\r\n if (onSelectionChange) {\r\n onSelectionChange(Array.from(newSet));\r\n } else {\r\n setInternalSelection(newSet);\r\n }\r\n };\r\n\r\n const handleToggleAll = () => {\r\n const allSelected = selectionSet.size === findings.length && findings.length > 0;\r\n const newSet = allSelected ? new Set<string>() : new Set(findings.map(f => f.id));\r\n if (onSelectionChange) {\r\n onSelectionChange(Array.from(newSet));\r\n } else {\r\n setInternalSelection(newSet);\r\n }\r\n };\r\n\r\n const isAllSelected = findings.length > 0 && selectionSet.size === findings.length;\r\n const isSomeSelected = selectionSet.size > 0 && selectionSet.size < findings.length;\r\n\r\n // Extract unique types for filter\r\n const uniqueTypes = Array.from(new Set(findings.map(f => f.type))).sort();\r\n\r\n if (findings.length === 0) {\r\n return (\r\n <Card className=\"p-8 text-center\">\r\n <AlertTriangle className=\"w-12 h-12 mx-auto text-muted-foreground/50\" />\r\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.discovery.findings.noFindings' })}\r\n </h3>\r\n <p className=\"mt-2 text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.findings.noFindingsDescription' })}\r\n </p>\r\n </Card>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n {/* Filters */}\r\n <div className=\"flex flex-col sm:flex-row gap-3\">\r\n <div className=\"relative flex-1\">\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={formatMessage({ id: 'issues.discovery.findings.searchPlaceholder' })}\r\n value={filters.search || ''}\r\n onChange={(e) => onFilterChange({ ...filters, search: e.target.value || undefined })}\r\n className=\"pl-9\"\r\n />\r\n </div>\r\n <Select\r\n value={filters.severity || 'all'}\r\n onValueChange={(v) => onFilterChange({ ...filters, severity: v === 'all' ? undefined : v as Finding['severity'] })}\r\n >\r\n <SelectTrigger className=\"w-[140px]\">\r\n <SelectValue placeholder={formatMessage({ id: 'issues.discovery.findings.filterBySeverity' })} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.discovery.findings.severity.all' })}</SelectItem>\r\n <SelectItem value=\"critical\">{formatMessage({ id: 'issues.discovery.findings.severity.critical' })}</SelectItem>\r\n <SelectItem value=\"high\">{formatMessage({ id: 'issues.discovery.findings.severity.high' })}</SelectItem>\r\n <SelectItem value=\"medium\">{formatMessage({ id: 'issues.discovery.findings.severity.medium' })}</SelectItem>\r\n <SelectItem value=\"low\">{formatMessage({ id: 'issues.discovery.findings.severity.low' })}</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n {uniqueTypes.length > 0 && (\r\n <Select\r\n value={filters.type || 'all'}\r\n onValueChange={(v) => onFilterChange({ ...filters, type: v === 'all' ? undefined : v })}\r\n >\r\n <SelectTrigger className=\"w-[140px]\">\r\n <SelectValue placeholder={formatMessage({ id: 'issues.discovery.findings.filterByType' })} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.discovery.findings.type.all' })}</SelectItem>\r\n {uniqueTypes.map(type => (\r\n <SelectItem key={type} value={type}>{type}</SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n )}\r\n <Select\r\n value={filters.exported === undefined ? 'all' : filters.exported ? 'exported' : 'notExported'}\r\n onValueChange={(v) => {\r\n if (v === 'all') {\r\n onFilterChange({ ...filters, exported: undefined });\r\n } else if (v === 'exported') {\r\n onFilterChange({ ...filters, exported: true });\r\n } else {\r\n onFilterChange({ ...filters, exported: false });\r\n }\r\n }}\r\n >\r\n <SelectTrigger className=\"w-[140px]\">\r\n <SelectValue placeholder={formatMessage({ id: 'issues.discovery.findings.filterByExported' })} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.discovery.findings.exportedStatus.all' })}</SelectItem>\r\n <SelectItem value=\"exported\">{formatMessage({ id: 'issues.discovery.findings.exportedStatus.exported' })}</SelectItem>\r\n <SelectItem value=\"notExported\">{formatMessage({ id: 'issues.discovery.findings.exportedStatus.notExported' })}</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n <Select\r\n value={filters.hasIssue === undefined ? 'all' : filters.hasIssue ? 'hasIssue' : 'noIssue'}\r\n onValueChange={(v) => {\r\n if (v === 'all') {\r\n onFilterChange({ ...filters, hasIssue: undefined });\r\n } else if (v === 'hasIssue') {\r\n onFilterChange({ ...filters, hasIssue: true });\r\n } else {\r\n onFilterChange({ ...filters, hasIssue: false });\r\n }\r\n }}\r\n >\r\n <SelectTrigger className=\"w-[140px]\">\r\n <SelectValue placeholder={formatMessage({ id: 'issues.discovery.findings.filterByIssue' })} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"all\">{formatMessage({ id: 'issues.discovery.findings.issueStatus.all' })}</SelectItem>\r\n <SelectItem value=\"hasIssue\">{formatMessage({ id: 'issues.discovery.findings.issueStatus.hasIssue' })}</SelectItem>\r\n <SelectItem value=\"noIssue\">{formatMessage({ id: 'issues.discovery.findings.issueStatus.noIssue' })}</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n\r\n {/* Select All */}\r\n {onSelectionChange && (\r\n <button\r\n onClick={handleToggleAll}\r\n className=\"flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors\"\r\n >\r\n <div className=\"w-4 h-4 border rounded flex items-center justify-center\">\r\n {isAllSelected ? (\r\n <Check className=\"w-3 h-3\" />\r\n ) : isSomeSelected ? (\r\n <div className=\"w-2 h-2 bg-foreground rounded-sm\" />\r\n ) : null}\r\n </div>\r\n {isAllSelected\r\n ? formatMessage({ id: 'issues.discovery.findings.deselectAll' })\r\n : formatMessage({ id: 'issues.discovery.findings.selectAll' })}\r\n </button>\r\n )}\r\n\r\n {/* Findings List */}\r\n <div className=\"space-y-3\">\r\n {findings.map((finding) => {\r\n const config = getSeverityConfig(finding.severity);\r\n const isSelected = selectionSet.has(finding.id);\r\n return (\r\n <Card\r\n key={finding.id}\r\n className={cn(\r\n \"p-4 transition-colors\",\r\n onFindingClick && \"cursor-pointer hover:bg-muted/50\"\r\n )}\r\n onClick={(e) => {\r\n // Don't trigger finding click when clicking checkbox\r\n if ((e.target as HTMLElement).closest('.selection-checkbox')) return;\r\n onFindingClick?.(finding);\r\n }}\r\n >\r\n <div className=\"flex items-start gap-3\">\r\n {/* Checkbox */}\r\n {onSelectionChange && (\r\n <div\r\n className=\"selection-checkbox flex-shrink-0 mt-1\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleToggleSelection(finding.id);\r\n }}\r\n >\r\n <div className={cn(\r\n \"w-4 h-4 border rounded flex items-center justify-center cursor-pointer transition-colors\",\r\n isSelected ? \"bg-primary border-primary\" : \"border-border hover:border-primary\"\r\n )}>\r\n {isSelected && <Check className=\"w-3 h-3 text-primary-foreground\" />}\r\n </div>\r\n </div>\r\n )}\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-start justify-between gap-3 mb-2\">\r\n <div className=\"flex items-center gap-2 flex-wrap\">\r\n <Badge variant={config.variant}>\r\n {formatMessage({ id: config.label })}\r\n </Badge>\r\n {finding.type && (\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n {finding.type}\r\n </Badge>\r\n )}\r\n {finding.exported && (\r\n <Badge variant=\"success\" className=\"text-xs gap-1\">\r\n <ExternalLink className=\"w-3 h-3\" />\r\n {formatMessage({ id: 'issues.discovery.findings.exported' })}\r\n </Badge>\r\n )}\r\n {finding.issue_id && (\r\n <Badge variant=\"info\" className=\"text-xs\">\r\n {formatMessage({ id: 'issues.discovery.findings.hasIssue' })}: {finding.issue_id}\r\n </Badge>\r\n )}\r\n </div>\r\n {finding.file && (\r\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\r\n <FileCode className=\"w-3 h-3\" />\r\n <span>{finding.file}</span>\r\n {finding.line && <span>:{finding.line}</span>}\r\n </div>\r\n )}\r\n </div>\r\n <h4 className=\"font-medium text-foreground mb-1\">{finding.title}</h4>\r\n <p className=\"text-sm text-muted-foreground line-clamp-2\">{finding.description}</p>\r\n {finding.code_snippet && (\r\n <pre className=\"mt-2 p-2 bg-muted rounded text-xs overflow-x-auto\">\r\n <code>{finding.code_snippet}</code>\r\n </pre>\r\n )}\r\n </div>\r\n </div>\r\n </Card>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Count */}\r\n <div className=\"text-center text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.findings.showingCount' }, { count: findings.length })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default FindingList;\r\n","// ========================================\r\n// Discovery Detail Component\r\n// ========================================\r\n// Displays findings detail panel with tabs and export functionality\r\n\r\nimport { useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { Download, FileText, BarChart3, Info, Upload } from 'lucide-react';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Progress } from '@/components/ui/Progress';\r\nimport { IssueDrawer } from '@/components/issue/hub/IssueDrawer';\r\nimport { FindingDrawer } from './FindingDrawer';\r\nimport type { DiscoverySession, Finding } from '@/lib/api';\r\nimport type { Issue } from '@/lib/api';\r\nimport type { FindingFilters } from '@/hooks/useIssues';\r\nimport { FindingList } from './FindingList';\r\n\r\ninterface DiscoveryDetailProps {\r\n sessionId: string;\r\n session: DiscoverySession | null;\r\n findings: Finding[];\r\n filters: FindingFilters;\r\n onFilterChange: (filters: FindingFilters) => void;\r\n onExport: () => void;\r\n onExportSelected?: (findingIds: string[]) => Promise<{ success: boolean; message?: string; exported?: number }>;\r\n isExporting?: boolean;\r\n issues?: Issue[]; // Optional: pass issues to find related ones\r\n}\r\n\r\nexport function DiscoveryDetail({\r\n sessionId: _sessionId,\r\n session,\r\n findings,\r\n filters,\r\n onFilterChange,\r\n onExport,\r\n onExportSelected,\r\n isExporting = false,\r\n issues = [],\r\n}: DiscoveryDetailProps) {\r\n const { formatMessage } = useIntl();\r\n const [activeTab, setActiveTab] = useState('findings');\r\n const [selectedIssue, setSelectedIssue] = useState<Issue | null>(null);\r\n const [selectedFinding, setSelectedFinding] = useState<Finding | null>(null);\r\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\r\n\r\n const handleFindingClick = (finding: Finding) => {\r\n // If finding has an associated issue_id, find and show that issue\r\n if (finding.issue_id) {\r\n const relatedIssue = issues.find(i => i.id === finding.issue_id);\r\n if (relatedIssue) {\r\n setSelectedIssue(relatedIssue);\r\n return;\r\n }\r\n }\r\n // Otherwise, show the finding details in FindingDrawer\r\n setSelectedFinding(finding);\r\n };\r\n\r\n const handleCloseIssueDrawer = () => {\r\n setSelectedIssue(null);\r\n };\r\n\r\n const handleCloseFindingDrawer = () => {\r\n setSelectedFinding(null);\r\n };\r\n\r\n const handleExportSelected = async () => {\r\n if (onExportSelected && selectedIds.length > 0) {\r\n await onExportSelected(selectedIds);\r\n setSelectedIds([]); // Clear selection after export\r\n }\r\n };\r\n\r\n if (!session) {\r\n return (\r\n <Card className=\"p-8 text-center\">\r\n <FileText className=\"w-12 h-12 mx-auto text-muted-foreground/50\" />\r\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.discovery.noSessionSelected' })}\r\n </h3>\r\n <p className=\"mt-2 text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.selectSession' })}\r\n </p>\r\n </Card>\r\n );\r\n }\r\n\r\n const severityCounts = findings.reduce((acc, f) => {\r\n acc[f.severity] = (acc[f.severity] || 0) + 1;\r\n return acc;\r\n }, { critical: 0, high: 0, medium: 0, low: 0 });\r\n\r\n const typeCounts = findings.reduce((acc, f) => {\r\n acc[f.type] = (acc[f.type] || 0) + 1;\r\n return acc;\r\n }, {} as Record<string, number>);\r\n\r\n const formatDate = (dateString: string) => {\r\n return new Date(dateString).toLocaleString();\r\n };\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h2 className=\"text-lg font-semibold text-foreground\">{session.name}</h2>\r\n <p className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.sessionId' })}: {session.id}\r\n </p>\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n {selectedIds.length > 0 && onExportSelected && (\r\n <Button\r\n variant=\"default\"\r\n onClick={handleExportSelected}\r\n disabled={isExporting || selectedIds.length === 0}\r\n >\r\n <Upload className=\"w-4 h-4 mr-2\" />\r\n {isExporting\r\n ? formatMessage({ id: 'issues.discovery.exporting' })\r\n : formatMessage({ id: 'issues.discovery.exportSelected' }, { count: selectedIds.length })\r\n }\r\n </Button>\r\n )}\r\n <Button variant=\"outline\" onClick={onExport} disabled={findings.length === 0}>\r\n <Download className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.discovery.export' })}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Status Badge */}\r\n <div className=\"flex items-center gap-3\">\r\n <Badge\r\n variant={session.status === 'completed' ? 'success' : session.status === 'failed' ? 'destructive' : 'warning'}\r\n >\r\n {formatMessage({ id: `issues.discovery.session.status.${session.status}` })}\r\n </Badge>\r\n <span className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.createdAt' })}: {formatDate(session.created_at)}\r\n </span>\r\n {session.completed_at && (\r\n <span className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.completedAt' })}: {formatDate(session.completed_at)}\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Progress Bar for Running Sessions */}\r\n {session.status === 'running' && (\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center justify-between text-sm mb-2\">\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'issues.discovery.progress' })}</span>\r\n <span className=\"font-medium\">{session.progress}%</span>\r\n </div>\r\n <Progress value={session.progress} className=\"h-2\" />\r\n </Card>\r\n )}\r\n\r\n {/* Tabs */}\r\n <Tabs value={activeTab} onValueChange={setActiveTab}>\r\n <TabsList>\r\n <TabsTrigger value=\"findings\">\r\n <FileText className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.discovery.tabFindings' })} ({findings.length})\r\n </TabsTrigger>\r\n <TabsTrigger value=\"progress\">\r\n <BarChart3 className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.discovery.tabProgress' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"info\">\r\n <Info className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.discovery.tabInfo' })}\r\n </TabsTrigger>\r\n </TabsList>\r\n\r\n <TabsContent value=\"findings\" className=\"mt-4\">\r\n <FindingList\r\n findings={findings}\r\n filters={filters}\r\n onFilterChange={onFilterChange}\r\n onFindingClick={handleFindingClick}\r\n selectedIds={selectedIds}\r\n onSelectionChange={onExportSelected ? setSelectedIds : undefined}\r\n />\r\n </TabsContent>\r\n\r\n <TabsContent value=\"progress\" className=\"mt-4 space-y-4\">\r\n <Card className=\"p-6\">\r\n <h3 className=\"text-lg font-medium text-foreground mb-4\">\r\n {formatMessage({ id: 'issues.discovery.severityBreakdown' })}\r\n </h3>\r\n <div className=\"space-y-3\">\r\n {Object.entries(severityCounts).map(([severity, count]) => (\r\n <div key={severity} className=\"flex items-center justify-between\">\r\n <Badge\r\n variant={severity === 'critical' || severity === 'high' ? 'destructive' : severity === 'medium' ? 'warning' : 'secondary'}\r\n >\r\n {formatMessage({ id: `issues.discovery.findings.severity.${severity}` })}\r\n </Badge>\r\n <span className=\"font-medium\">{count}</span>\r\n </div>\r\n ))}\r\n </div>\r\n </Card>\r\n\r\n {Object.keys(typeCounts).length > 0 && (\r\n <Card className=\"p-6\">\r\n <h3 className=\"text-lg font-medium text-foreground mb-4\">\r\n {formatMessage({ id: 'issues.discovery.typeBreakdown' })}\r\n </h3>\r\n <div className=\"space-y-3\">\r\n {Object.entries(typeCounts)\r\n .sort(([, a], [, b]) => b - a)\r\n .map(([type, count]) => (\r\n <div key={type} className=\"flex items-center justify-between\">\r\n <Badge variant=\"outline\">{type}</Badge>\r\n <span className=\"font-medium\">{count}</span>\r\n </div>\r\n ))}\r\n </div>\r\n </Card>\r\n )}\r\n </TabsContent>\r\n\r\n <TabsContent value=\"info\" className=\"mt-4\">\r\n <Card className=\"p-6 space-y-4\">\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.sessionId' })}\r\n </h3>\r\n <p className=\"text-foreground font-mono text-sm\">{session.id}</p>\r\n </div>\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.name' })}\r\n </h3>\r\n <p className=\"text-foreground\">{session.name}</p>\r\n </div>\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.status' })}\r\n </h3>\r\n <Badge\r\n variant={session.status === 'completed' ? 'success' : session.status === 'failed' ? 'destructive' : 'warning'}\r\n >\r\n {formatMessage({ id: `issues.discovery.session.status.${session.status}` })}\r\n </Badge>\r\n </div>\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.progress' })}\r\n </h3>\r\n <p className=\"text-foreground\">{session.progress}%</p>\r\n </div>\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.findingsCount' })}\r\n </h3>\r\n <p className=\"text-foreground\">{session.findings_count}</p>\r\n </div>\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.createdAt' })}\r\n </h3>\r\n <p className=\"text-foreground\">{formatDate(session.created_at)}</p>\r\n </div>\r\n {session.completed_at && (\r\n <div>\r\n <h3 className=\"text-sm font-medium text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'issues.discovery.completedAt' })}\r\n </h3>\r\n <p className=\"text-foreground\">{formatDate(session.completed_at)}</p>\r\n </div>\r\n )}\r\n </Card>\r\n </TabsContent>\r\n </Tabs>\r\n\r\n {/* Issue Detail Drawer */}\r\n <IssueDrawer\r\n issue={selectedIssue}\r\n isOpen={selectedIssue !== null}\r\n onClose={handleCloseIssueDrawer}\r\n />\r\n\r\n {/* Finding Detail Drawer */}\r\n <FindingDrawer\r\n finding={selectedFinding}\r\n isOpen={selectedFinding !== null}\r\n onClose={handleCloseFindingDrawer}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport default DiscoveryDetail;\r\n","// ========================================\r\n// Discovery Panel\r\n// ========================================\r\n// Content panel for Discovery tab in IssueHub\r\n\r\nimport { useIntl } from 'react-intl';\r\nimport { Radar, AlertCircle, Loader2 } from 'lucide-react';\r\nimport { Card } from '@/components/ui/Card';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { useIssueDiscovery, useIssues } from '@/hooks/useIssues';\r\nimport { DiscoveryCard } from '@/components/issue/discovery/DiscoveryCard';\r\nimport { DiscoveryDetail } from '@/components/issue/discovery/DiscoveryDetail';\r\n\r\n// ========== Main Panel Component ==========\r\n\r\nexport function DiscoveryPanel() {\r\n const { formatMessage } = useIntl();\r\n\r\n const {\r\n sessions,\r\n activeSession,\r\n findings,\r\n isLoadingSessions,\r\n isLoadingFindings,\r\n error,\r\n filters,\r\n setFilters,\r\n selectSession,\r\n exportFindings,\r\n exportSelectedFindings,\r\n isExporting,\r\n } = useIssueDiscovery({ refetchInterval: 3000 });\r\n\r\n // Fetch issues to find related ones when clicking findings\r\n const { issues } = useIssues({\r\n // Don't apply filters to get all issues for matching\r\n filter: undefined\r\n });\r\n\r\n if (error) {\r\n return (\r\n <Card className=\"p-8 text-center\">\r\n <AlertCircle className=\"w-12 h-12 mx-auto text-destructive\" />\r\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'common.error' })}\r\n </h3>\r\n <p className=\"mt-2 text-muted-foreground\">{error.message}</p>\r\n </Card>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n {/* Stats Cards */}\r\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <Radar className=\"w-5 h-5 text-primary\" />\r\n <span className=\"text-2xl font-bold\">{sessions.length}</span>\r\n </div>\r\n <p className=\"text-sm text-muted-foreground mt-1\">\r\n {formatMessage({ id: 'issues.discovery.totalSessions' })}\r\n </p>\r\n </Card>\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <Badge variant=\"success\" className=\"w-5 h-5 flex items-center justify-center p-0\">\r\n {sessions.filter(s => s.status === 'completed').length}\r\n </Badge>\r\n <span className=\"text-2xl font-bold\">{sessions.filter(s => s.status === 'completed').length}</span>\r\n </div>\r\n <p className=\"text-sm text-muted-foreground mt-1\">\r\n {formatMessage({ id: 'issues.discovery.completedSessions' })}\r\n </p>\r\n </Card>\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <Badge variant=\"warning\" className=\"w-5 h-5 flex items-center justify-center p-0\">\r\n {sessions.filter(s => s.status === 'running').length}\r\n </Badge>\r\n <span className=\"text-2xl font-bold\">{sessions.filter(s => s.status === 'running').length}</span>\r\n </div>\r\n <p className=\"text-sm text-muted-foreground mt-1\">\r\n {formatMessage({ id: 'issues.discovery.runningSessions' })}\r\n </p>\r\n </Card>\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-2xl font-bold\">\r\n {sessions.reduce((sum, s) => sum + s.findings_count, 0)}\r\n </span>\r\n </div>\r\n <p className=\"text-sm text-muted-foreground mt-1\">\r\n {formatMessage({ id: 'issues.discovery.totalFindings' })}\r\n </p>\r\n </Card>\r\n </div>\r\n\r\n {/* Main Content: Split Pane */}\r\n <div className=\"grid md:grid-cols-3 gap-6\">\r\n {/* Left: Session List */}\r\n <div className=\"md:col-span-1 space-y-4\">\r\n <h2 className=\"text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.discovery.sessionList' })}\r\n </h2>\r\n\r\n {isLoadingSessions ? (\r\n <div className=\"space-y-3\">\r\n {[1, 2, 3].map((i) => (\r\n <div key={i} className=\"h-32 bg-muted animate-pulse rounded-lg\" />\r\n ))}\r\n </div>\r\n ) : sessions.length === 0 ? (\r\n <Card className=\"p-8 text-center\">\r\n <Radar className=\"w-12 h-12 mx-auto text-muted-foreground/50\" />\r\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.discovery.noSessions' })}\r\n </h3>\r\n <p className=\"mt-2 text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'issues.discovery.noSessionsDescription' })}\r\n </p>\r\n </Card>\r\n ) : (\r\n <div className=\"space-y-3\">\r\n {sessions.map((session) => (\r\n <DiscoveryCard\r\n key={session.id}\r\n session={session}\r\n isActive={activeSession?.id === session.id}\r\n onClick={() => selectSession(session.id)}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Right: Findings Detail */}\r\n <div className=\"md:col-span-2 space-y-4\">\r\n <h2 className=\"text-lg font-medium text-foreground\">\r\n {formatMessage({ id: 'issues.discovery.findingsDetail' })}\r\n </h2>\r\n\r\n {isLoadingFindings ? (\r\n <div className=\"flex items-center justify-center p-8\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-muted-foreground\" />\r\n </div>\r\n ) : (\r\n <DiscoveryDetail\r\n sessionId={activeSession?.id || ''}\r\n session={activeSession}\r\n findings={findings}\r\n filters={filters}\r\n onFilterChange={setFilters}\r\n onExport={exportFindings}\r\n onExportSelected={exportSelectedFindings}\r\n isExporting={isExporting}\r\n issues={issues}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","// ========================================\r\n// Issue Hub Page\r\n// ========================================\r\n// Unified page for issues, queue, and discovery with tab navigation\r\n\r\nimport { useState, useCallback, useEffect } from 'react';\r\nimport { useSearchParams } from 'react-router-dom';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n Plus,\r\n RefreshCw,\r\n Github,\r\n Loader2,\r\n Maximize2,\r\n Minimize2,\r\n} from 'lucide-react';\r\nimport { IssueHubHeader } from '@/components/issue/hub/IssueHubHeader';\r\nimport { IssueHubTabs, type IssueTab } from '@/components/issue/hub/IssueHubTabs';\r\n\r\nconst VALID_TABS: IssueTab[] = ['issues', 'queue', 'discovery'];\r\nimport { IssuesPanel } from '@/components/issue/hub/IssuesPanel';\r\nimport { QueuePanel } from '@/components/issue/hub/QueuePanel';\r\nimport { DiscoveryPanel } from '@/components/issue/hub/DiscoveryPanel';\r\n// ExecutionPanel hidden - import { ExecutionPanel } from '@/components/issue/hub/ExecutionPanel';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Input } from '@/components/ui/Input';\r\nimport { Label } from '@/components/ui/Label';\r\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/Dialog';\r\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/Select';\r\nimport { useIssues, useIssueMutations, useIssueQueue, useNotifications } from '@/hooks';\r\nimport { pullIssuesFromGitHub, uploadAttachments } from '@/lib/api';\r\nimport type { Issue } from '@/lib/api';\r\nimport { cn } from '@/lib/utils';\r\nimport { useAppStore, selectIsImmersiveMode } from '@/stores/appStore';\r\n\r\n// Issue types\r\ntype IssueType = 'bug' | 'feature' | 'improvement' | 'other';\r\n\r\nconst ISSUE_TYPE_CONFIG: Record<IssueType, { label: string; description: string; color: string }> = {\r\n bug: { label: 'Bug', description: '功能异常或错误', color: 'bg-red-500' },\r\n feature: { label: 'Feature', description: '新功能需求', color: 'bg-green-500' },\r\n improvement: { label: 'Improvement', description: '现有功能改进', color: 'bg-blue-500' },\r\n other: { label: 'Other', description: '其他类型', color: 'bg-gray-500' },\r\n};\r\n\r\nfunction NewIssueDialog({ open, onOpenChange, onSubmit, isCreating }: {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n onSubmit: (data: { title: string; context?: string; priority?: Issue['priority']; type?: IssueType; attachments?: File[] }) => void;\r\n isCreating: boolean;\r\n}) {\r\n const { formatMessage } = useIntl();\r\n const [title, setTitle] = useState('');\r\n const [context, setContext] = useState('');\r\n const [priority, setPriority] = useState<Issue['priority']>('medium');\r\n const [type, setType] = useState<IssueType>('other');\r\n const [attachments, setAttachments] = useState<File[]>([]);\r\n const [dragOver, setDragOver] = useState(false);\r\n\r\n const handleFileSelect = (files: FileList | null) => {\r\n if (!files) return;\r\n const validFiles = Array.from(files).filter(file => {\r\n const validTypes = ['image/', 'text/', 'application/pdf', '.md', '.txt', '.json'];\r\n return validTypes.some(t => file.type.includes(t) || file.name.endsWith(t));\r\n });\r\n setAttachments(prev => [...prev, ...validFiles]);\r\n };\r\n\r\n const removeAttachment = (index: number) => {\r\n setAttachments(prev => prev.filter((_, i) => i !== index));\r\n };\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (title.trim()) {\r\n onSubmit({ \r\n title: title.trim(), \r\n context: context.trim() || undefined, \r\n priority, \r\n type,\r\n attachments: attachments.length > 0 ? attachments : undefined \r\n });\r\n // Reset\r\n setTitle('');\r\n setContext('');\r\n setPriority('medium');\r\n setType('other');\r\n setAttachments([]);\r\n onOpenChange(false);\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n setDragOver(true);\r\n };\r\n\r\n const handleDragLeave = () => {\r\n setDragOver(false);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n setDragOver(false);\r\n handleFileSelect(e.dataTransfer.files);\r\n };\r\n\r\n return (\r\n <Dialog open={open} onOpenChange={onOpenChange}>\r\n <DialogContent className=\"sm:max-w-[600px] max-h-[90vh] overflow-y-auto\">\r\n <DialogHeader>\r\n <DialogTitle>{formatMessage({ id: 'issues.createDialog.title' })}</DialogTitle>\r\n </DialogHeader>\r\n \r\n <form onSubmit={handleSubmit} className=\"space-y-5 mt-4\">\r\n {/* 标题 */}\r\n <div>\r\n <Label className=\"text-sm font-medium\">\r\n {formatMessage({ id: 'issues.createDialog.labels.title' })}\r\n <span className=\"text-destructive ml-1\">*</span>\r\n </Label>\r\n <Input\r\n value={title}\r\n onChange={(e) => setTitle(e.target.value)}\r\n placeholder={formatMessage({ id: 'issues.createDialog.placeholders.title' })}\r\n className=\"mt-1.5\"\r\n required\r\n autoFocus\r\n />\r\n <p className=\"text-xs text-muted-foreground mt-1\">{title.length}/200</p>\r\n </div>\r\n\r\n {/* 描述 */}\r\n <div>\r\n <Label className=\"text-sm font-medium\">\r\n {formatMessage({ id: 'issues.createDialog.labels.context' })}\r\n </Label>\r\n <textarea\r\n value={context}\r\n onChange={(e) => setContext(e.target.value)}\r\n placeholder={formatMessage({ id: 'issues.createDialog.placeholders.context' })}\r\n className=\"mt-1.5 w-full min-h-[120px] p-3 bg-background border border-input rounded-md text-sm resize-y focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent\"\r\n />\r\n <p className=\"text-xs text-muted-foreground mt-1\">{context.length}/10000</p>\r\n </div>\r\n\r\n {/* 类型选择 */}\r\n <div>\r\n <Label className=\"text-sm font-medium\">\r\n {formatMessage({ id: 'issues.createDialog.labels.type', defaultMessage: '类型' })}\r\n </Label>\r\n <div className=\"grid grid-cols-4 gap-2 mt-1.5\">\r\n {(Object.keys(ISSUE_TYPE_CONFIG) as IssueType[]).map((t) => (\r\n <button\r\n key={t}\r\n type=\"button\"\r\n onClick={() => setType(t)}\r\n className={cn(\r\n 'px-3 py-2 rounded-md border text-sm transition-all',\r\n type === t\r\n ? 'border-primary bg-primary/10 ring-1 ring-primary'\r\n : 'border-border hover:border-primary/50 hover:bg-muted/50'\r\n )}\r\n >\r\n <div className=\"flex items-center justify-center gap-1.5\">\r\n <span className={cn('w-2 h-2 rounded-full', ISSUE_TYPE_CONFIG[t].color)} />\r\n <span>{ISSUE_TYPE_CONFIG[t].label}</span>\r\n </div>\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* 优先级 */}\r\n <div>\r\n <Label className=\"text-sm font-medium\">\r\n {formatMessage({ id: 'issues.createDialog.labels.priority' })}\r\n </Label>\r\n <Select value={priority} onValueChange={(v) => setPriority(v as Issue['priority'])}>\r\n <SelectTrigger className=\"mt-1.5\">\r\n <SelectValue />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"low\">{formatMessage({ id: 'issues.priority.low' })}</SelectItem>\r\n <SelectItem value=\"medium\">{formatMessage({ id: 'issues.priority.medium' })}</SelectItem>\r\n <SelectItem value=\"high\">{formatMessage({ id: 'issues.priority.high' })}</SelectItem>\r\n <SelectItem value=\"critical\">{formatMessage({ id: 'issues.priority.critical' })}</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n\r\n {/* 文件/图片上传 */}\r\n <div>\r\n <Label className=\"text-sm font-medium\">\r\n {formatMessage({ id: 'issues.createDialog.labels.attachments', defaultMessage: '附件' })}\r\n </Label>\r\n <div\r\n className={cn(\r\n 'mt-1.5 border-2 border-dashed rounded-lg p-4 transition-colors cursor-pointer',\r\n dragOver ? 'border-primary bg-primary/5' : 'border-border hover:border-primary/50'\r\n )}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n onClick={() => {\r\n const input = document.createElement('input');\r\n input.type = 'file';\r\n input.multiple = true;\r\n input.accept = 'image/*,.md,.txt,.json,.pdf';\r\n input.onchange = (e) => handleFileSelect((e.target as HTMLInputElement).files);\r\n input.click();\r\n }}\r\n >\r\n <div className=\"flex flex-col items-center justify-center text-muted-foreground py-2\">\r\n <svg className=\"w-8 h-8 mb-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" />\r\n </svg>\r\n <p className=\"text-sm\">拖拽文件到此处,或点击上传</p>\r\n <p className=\"text-xs mt-1\">支持图片、Markdown、文本、PDF</p>\r\n </div>\r\n </div>\r\n\r\n {/* 已上传文件列表 */}\r\n {attachments.length > 0 && (\r\n <div className=\"mt-2 space-y-1.5\">\r\n {attachments.map((file, index) => (\r\n <div key={index} className=\"flex items-center justify-between p-2 bg-muted/50 rounded-md\">\r\n <div className=\"flex items-center gap-2 min-w-0\">\r\n {file.type.startsWith('image/') ? (\r\n <img \r\n src={URL.createObjectURL(file)} \r\n alt={file.name}\r\n className=\"w-8 h-8 object-cover rounded\"\r\n />\r\n ) : (\r\n <svg className=\"w-8 h-8 text-muted-foreground\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\r\n </svg>\r\n )}\r\n <span className=\"text-sm truncate\">{file.name}</span>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {(file.size / 1024).toFixed(1)}KB\r\n </span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n onClick={(e) => { e.stopPropagation(); removeAttachment(index); }}\r\n className=\"text-muted-foreground hover:text-destructive transition-colors\"\r\n >\r\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* 按钮 */}\r\n <div className=\"flex justify-end gap-2 pt-2\">\r\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\r\n {formatMessage({ id: 'issues.createDialog.buttons.cancel' })}\r\n </Button>\r\n <Button type=\"submit\" disabled={isCreating || !title.trim()}>\r\n {isCreating ? (\r\n <>\r\n <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />\r\n {formatMessage({ id: 'issues.createDialog.buttons.creating' })}\r\n </>\r\n ) : (\r\n <>\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.createDialog.buttons.create' })}\r\n </>\r\n )}\r\n </Button>\r\n </div>\r\n </form>\r\n </DialogContent>\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport function IssueHubPage() {\r\n const { formatMessage } = useIntl();\r\n const [searchParams, setSearchParams] = useSearchParams();\r\n const rawTab = searchParams.get('tab') as IssueTab;\r\n const currentTab = VALID_TABS.includes(rawTab) ? rawTab : 'issues';\r\n const { error: showError, success } = useNotifications();\r\n\r\n // Redirect invalid tabs to 'issues'\r\n useEffect(() => {\r\n if (!VALID_TABS.includes(rawTab)) {\r\n setSearchParams({ tab: 'issues' });\r\n }\r\n }, [rawTab, setSearchParams]);\r\n\r\n const [isNewIssueOpen, setIsNewIssueOpen] = useState(false);\r\n const [isGithubSyncing, setIsGithubSyncing] = useState(false);\r\n const [isUploadingAttachments, setIsUploadingAttachments] = useState(false);\r\n\r\n // Immersive mode (fullscreen) - hide app chrome\r\n const isImmersiveMode = useAppStore(selectIsImmersiveMode);\r\n const toggleImmersiveMode = useAppStore((s) => s.toggleImmersiveMode);\r\n\r\n // Issues data\r\n const { refetch: refetchIssues, isFetching: isFetchingIssues } = useIssues();\r\n // Queue data\r\n const { refetch: refetchQueue, isFetching: isFetchingQueue } = useIssueQueue();\r\n\r\n const { createIssue, isCreating } = useIssueMutations();\r\n\r\n const setCurrentTab = (tab: IssueTab) => {\r\n setSearchParams({ tab });\r\n };\r\n\r\n // Issues tab handlers\r\n const handleIssuesRefresh = useCallback(() => {\r\n refetchIssues();\r\n }, [refetchIssues]);\r\n\r\n const handleGithubSync = useCallback(async () => {\r\n setIsGithubSyncing(true);\r\n try {\r\n const result = await pullIssuesFromGitHub({ state: 'open', limit: 100 });\r\n success(formatMessage({ id: 'issues.notifications.githubSyncSuccess' }, { count: result.total }));\r\n await refetchIssues();\r\n } catch (error) {\r\n showError(formatMessage({ id: 'issues.notifications.githubSyncFailed' }), error instanceof Error ? error.message : String(error));\r\n console.error('GitHub sync failed:', error);\r\n } finally {\r\n setIsGithubSyncing(false);\r\n }\r\n }, [refetchIssues, success, showError, formatMessage]);\r\n\r\n const handleCreateIssue = async (data: { title: string; context?: string; priority?: Issue['priority']; type?: IssueType; attachments?: File[] }) => {\r\n try {\r\n // Create the issue first\r\n const newIssue = await createIssue({\r\n title: data.title,\r\n context: data.context,\r\n priority: data.priority,\r\n });\r\n success(formatMessage({ id: 'issues.notifications.createSuccess' }), newIssue.id);\r\n\r\n // Upload attachments if any\r\n if (data.attachments && data.attachments.length > 0 && newIssue.id) {\r\n setIsUploadingAttachments(true);\r\n try {\r\n await uploadAttachments(newIssue.id, data.attachments);\r\n success(formatMessage({ id: 'issues.notifications.attachmentSuccess' }));\r\n } catch (uploadError) {\r\n showError(formatMessage({ id: 'issues.notifications.attachmentFailed' }), uploadError instanceof Error ? uploadError.message : String(uploadError));\r\n console.error('Failed to upload attachments:', uploadError);\r\n // Don't fail the whole operation, just log the error\r\n } finally {\r\n setIsUploadingAttachments(false);\r\n }\r\n }\r\n\r\n setIsNewIssueOpen(false);\r\n } catch (error) {\r\n showError(formatMessage({ id: 'issues.notifications.createFailed' }), error instanceof Error ? error.message : String(error));\r\n console.error('Failed to create issue:', error);\r\n }\r\n };\r\n\r\n // Queue tab handler\r\n const handleQueueRefresh = useCallback(() => {\r\n refetchQueue();\r\n }, [refetchQueue]);\r\n\r\n // Render action buttons based on current tab\r\n const renderActionButtons = () => {\r\n switch (currentTab) {\r\n case 'issues':\r\n return (\r\n <>\r\n <Button variant=\"outline\" onClick={handleIssuesRefresh} disabled={isFetchingIssues}>\r\n <RefreshCw className={cn('w-4 h-4 mr-2', isFetchingIssues && 'animate-spin')} />\r\n {formatMessage({ id: 'common.actions.refresh' })}\r\n </Button>\r\n <Button variant=\"outline\" onClick={handleGithubSync} disabled={isGithubSyncing}>\r\n <Github className={cn('w-4 h-4 mr-2', isGithubSyncing && 'animate-spin')} />\r\n {formatMessage({ id: 'issues.actions.github' })}\r\n </Button>\r\n <Button onClick={() => setIsNewIssueOpen(true)}>\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {formatMessage({ id: 'issues.actions.create' })}\r\n </Button>\r\n </>\r\n );\r\n\r\n case 'queue':\r\n return (\r\n <>\r\n <Button variant=\"outline\" onClick={handleQueueRefresh} disabled={isFetchingQueue}>\r\n <RefreshCw className={cn('w-4 h-4 mr-2', isFetchingQueue && 'animate-spin')} />\r\n {formatMessage({ id: 'common.actions.refresh' })}\r\n </Button>\r\n </>\r\n );\r\n\r\n case 'discovery':\r\n return null; // Discovery panel has its own controls\r\n\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"space-y-6\", isImmersiveMode && \"h-screen overflow-hidden\")}>\r\n {/* Header and action buttons on same row */}\r\n <div className=\"flex items-center justify-between\">\r\n <IssueHubHeader currentTab={currentTab} />\r\n\r\n <div className=\"flex items-center gap-2\">\r\n {/* Action buttons - dynamic based on current tab */}\r\n {renderActionButtons()}\r\n\r\n {/* Fullscreen toggle */}\r\n <button\r\n onClick={toggleImmersiveMode}\r\n className={cn(\r\n 'p-2 rounded-md transition-colors',\r\n isImmersiveMode\r\n ? 'bg-primary/10 text-primary'\r\n : 'text-muted-foreground hover:text-foreground hover:bg-muted'\r\n )}\r\n title={isImmersiveMode\r\n ? formatMessage({ id: 'issueHub.exitFullscreen', defaultMessage: 'Exit Fullscreen' })\r\n : formatMessage({ id: 'issueHub.fullscreen', defaultMessage: 'Fullscreen' })\r\n }\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 <IssueHubTabs currentTab={currentTab} onTabChange={setCurrentTab} />\r\n {currentTab === 'issues' && <IssuesPanel onCreateIssue={() => setIsNewIssueOpen(true)} />}\r\n {currentTab === 'queue' && <QueuePanel />}\r\n {currentTab === 'discovery' && <DiscoveryPanel />}\r\n\r\n <NewIssueDialog open={isNewIssueOpen} onOpenChange={setIsNewIssueOpen} onSubmit={handleCreateIssue} isCreating={isCreating || isUploadingAttachments} />\r\n </div>\r\n );\r\n}\r\n\r\nexport default IssueHubPage;\r\n"],"names":["GitMerge","createLucideIcon","Github","ListTodo","Merge","Radar","useCliSessionCore","options","autoSelectLast","resumeKey","preferredShell","createSessionDefaults","projectPath","useWorkflowStore","selectProjectPath","sessionsByKey","useCliSessionStore","s","setSessions","upsertSession","sessions","useMemo","a","b","selectedSessionKey","setSelectedSessionKey","useState","isLoading","setIsLoading","error","setError","clearError","useCallback","refreshSessions","r","fetchCliSessions","e","useEffect","_a","ensureSession","created","createCliSession","handleCreateSession","_extends","n","t","IssueHubHeader","currentTab","formatMessage","useIntl","tabConfig","jsx","AlertCircle","LayoutGrid","config","jsxs","IssueHubTabs","onTabChange","tabs","tab","Button","cn","priorityVariantConfig","AlertTriangle","Info","priorityLabelKeys","statusVariantConfig","Clock","Loader2","CheckCircle","XCircle","statusLabelKeys","PriorityBadge","priority","Badge","Icon","label","StatusBadge","status","IssueCard","issue","onEdit","onDelete","onClick","onStatusChange","className","compact","showActions","draggableProps","dragHandleProps","innerRef","isMenuOpen","setIsMenuOpen","handleClick","handleEdit","handleDelete","Card","DropdownMenu","DropdownMenuTrigger","MoreVertical","DropdownMenuContent","DropdownMenuItem","Edit","Trash2","ExternalLink","statusConfig","Circle","priorityConfig","IssueDrawer","isOpen","onClose","initialTab","openTerminal","useOpenTerminalPanel","activeTab","setActiveTab","CLI_TOOLS","selectedTool","setSelectedTool","selectedMode","setSelectedMode","isLaunching","setIsLaunching","handleEsc","handleLaunchSession","err","Fragment","X","Tabs","v","TabsList","TabsTrigger","FileText","History","Terminal","Hash","TabsContent","index","Tag","solution","m","Play","formatProdErrorMessage","code","$$observable","symbol_observable_default","randomString","ActionTypes","actionTypes_default","isPlainObject","obj","proto","createStore","reducer","preloadedState","enhancer","currentReducer","currentState","currentListeners","nextListeners","listenerIdCounter","isDispatching","ensureCanMutateNextListeners","listener","key","getState","subscribe","isSubscribed","listenerId","dispatch","action","replaceReducer","nextReducer","observable","outerSubscribe","observer","observeState","observerAsObserver","bindActionCreator","actionCreator","args","bindActionCreators","actionCreators","boundActionCreators","compose","funcs","arg","applyMiddleware","middlewares","createStore2","store","middlewareAPI","chain","middleware","React","require$$0","is","x","y","objectIs","useSyncExternalStore","useRef","useDebugValue","useSyncExternalStoreWithSelector_production","getSnapshot","getServerSnapshot","selector","isEqual","instRef","inst","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","value","withSelectorModule","IS_REACT_19","React.version","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","ForwardRef","Memo","typeOf","object","$$typeof","isMemo","pureFinalPropsSelectorFactory","mapStateToProps","mapDispatchToProps","mergeProps","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","state","ownProps","stateProps","dispatchProps","mergedProps","handleFirstCall","firstState","firstOwnProps","handleNewPropsAndNewState","handleNewProps","handleNewState","nextStateProps","statePropsChanged","handleSubsequentCalls","nextState","nextOwnProps","propsChanged","stateChanged","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","wrapMapToPropsConstant","getConstant","constant","constantSelector","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","methodName","displayName","proxy","stateOrDispatch","props","createInvalidArgFactory","name","mapDispatchToPropsFactory","mapStateToPropsFactory","defaultMergeProps","wrapMergePropsFunc","areMergedPropsEqual","hasRunOnce","nextMergedProps","mergePropsFactory","defaultNoopBatch","callback","createListenerCollection","first","last","listeners","nullListeners","createSubscription","parentSub","unsubscribe","subscriptionsAmount","selfSubscribed","addNestedSub","trySubscribe","cleanupListener","removed","tryUnsubscribe","notifyNestedSubs","handleChangeWrapper","subscription","trySubscribeSelf","tryUnsubscribeSelf","canUseDOM","isDOM","isRunningInReactNative","isReactNative","getUseIsomorphicLayoutEffect","React.useLayoutEffect","React.useEffect","useIsomorphicLayoutEffect","shallowEqual","objA","objB","keysA","keysB","REACT_STATICS","KNOWN_STATICS","FORWARD_REF_STATICS","MEMO_STATICS","TYPE_STATICS","getStatics","component","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","inheritedComponent","keys","targetStatics","sourceStatics","i","descriptor","ContextKey","gT","getContext","React.createContext","contextMap","realContext","ReactReduxContext","NO_SUBSCRIPTION_ARRAY","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","dependencies","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","childPropsFromStoreUpdate","subscribeUpdates","shouldHandleStateChanges","childPropsSelector","isMounted","additionalSubscribeListener","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","newChildProps","strictEqual","connect","pure","forwardRef","context","Context","WrappedComponent","wrappedComponentName","selectorFactoryOptions","ConnectFunction","propsContext","reactReduxForwardedRef","React.useMemo","reactReduxForwardedRef2","wrapperProps2","ContextToUse","ResultContext","contextValue","React.useContext","didStoreComeFromProps","didStoreComeFromContext","getServerState","subscription2","notifyNestedSubs2","overriddenContextValue","React.useRef","latestSubscriptionCallbackError","actualChildPropsSelector","subscribeForReact","reactListener","actualChildProps","React.useSyncExternalStore","renderedWrappedComponent","React.createElement","Connect","React.memo","forwarded","React.forwardRef","ref","connect_default","Provider","providerProps","children","serverState","previousState","Provider_default","getRect","_ref","top","right","bottom","left","width","height","rect","expand","target","expandBy","shrink","shrinkBy","shift","shiftBy","noSpacing","createBox","_ref2","borderBox","_ref2$margin","margin","_ref2$border","border","_ref2$padding","padding","marginBox","paddingBox","contentBox","parse","raw","suffix","result","invariant","getWindowScroll","offset","original","change","shifted","withScroll","scroll","calculateBox","styles","getBox","el","rafSchd","fn","lastArgs","frameId","wrapperFn","_len","_key","log","type","message","noop$2","getOptions","shared","fromBinding","bindEvents","bindings","sharedOptions","unbindings","binding","unbind","prefix$1","RbdInvariant","condition","ErrorBoundary","event","callbacks","dragHandleUsageInstructions","position","onDragStart","start","withLocation","source","destination","isInHomeList","startPosition","endPosition","withCombine","id","combine","onDragUpdate","update","location","returnedToStart","onDragEnd","preset","isEqual$2","second","areInputsEqual","newInputs","lastInputs","getResult","inputs","initial","isFirstRun","committed","cache","origin","add","point1","point2","subtract","isEqual$1","negate","point","patch","line","otherValue","distance","closest$1","points","apply","executeClip","frame","subject","offsetByPosition","spacing","getCorners","scroll$1","increase","axis","withPlaceholder","clip","getSubject","page","scrolled","increased","clipped","scrollDroppable","droppable","newScroll","scrollable","scrollDiff","scrollDisplacement","memoizeOne","resultFn","memoized","newArgs","lastResult","toDroppableMap","droppables","previous","current","toDraggableMap","draggables","toDroppableList","toDraggableList","getDraggablesInsideDroppable","droppableId","draggable","tryGetDestination","impact","tryGetCombine","removeDraggableFromList","remove","list","item","moveToNextCombine","isMovingForward","insideDestination","previousImpact","getImpact","at","all","closestId","withoutDraggable","indexOfClosest","d","proposedIndex","before","isHomeOf","noDisplacedBy","emptyGroups","noImpact","isWithin","lowerBound","upperBound","isPartiallyVisibleThroughFrame","isWithinVertical","isWithinHorizontal","isPartiallyVisibleVertically","isPartiallyVisibleHorizontally","isBiggerVertically","isBiggerHorizontally","isTotallyVisibleThroughFrame","vertical","horizontal","isTotallyVisibleThroughFrameOnAxis","getDroppableDisplaced","displacement","isVisibleInDroppable","isVisibleThroughFrameFn","isVisibleInViewport","viewport","isVisible$1","toBeDisplaced","withDroppableDisplacement","displacedTarget","isPartiallyVisible","isTotallyVisible","isTotallyVisibleOnAxis","getShouldAnimate","forceShouldAnimate","invisible","visible","getTarget","displacedBy","getDisplacementGroups","afterDragging","groups","shouldAnimate","getIndexOfLastItem","indexOfLastItem","goAtEnd","inHomeList","newIndex","calculateReorderImpact","match","withoutDragging","sliceFrom","impacted","didStartAfterCritical","draggableId","afterCritical","fromCombine","combineId","combineWithIndex","fromReorder","currentIndex","firstIndex","lastIndex","moveToNextIndex","wasAt","getCombinedItemDisplacement","displaced","combineWith","isDisplaced","whenCombining","center","displaceBy","distanceFromStartToBorderBoxCenter","box","distanceFromEndToBorderBoxCenter","getCrossAxisBorderBoxCenter","isMoving","goAfter","moveRelativeTo","goBefore","goIntoStart","moveInto","whenReordering","draggablePage","closestAfter","closest","withDisplacement","getResultWithoutDroppableDisplacement","getPageBorderBoxCenterFromImpact","withoutDisplacement","scrollViewport","diff","getDraggables$1","ids","tryGetVisible","speculativelyIncrease","maxScrollChange","scrolledViewport","scrolledDroppable","withViewportScroll","withDroppableScroll","withViewportDisplacement","getClientFromPageBorderBoxCenter","pageBorderBoxCenter","withoutPageScrollChange","isTotallyVisibleInNewLocation","newPageBorderBoxCenter","onlyOnMainAxis","changeNeeded","moveToNextPlace","previousPageBorderBoxCenter","previousClientSelection","cautious","getKnownActive","getBestCrossAxisDroppable","active","isBetweenSourceClipped","candidates","activeOfTarget","isBetweenDestinationClipped","array","contains","getCurrentPageBorderBoxCenter","getCurrentPageBorderBox","getClosestDraggable","distanceToA","distanceToB","getDisplacedBy","getRequiredGrowthForPlaceholder","placeholderSize","availableSpace","needsToGrowBy","sum","dimension","withMaxScroll","max","addPlaceholder","requiredGrowth","added","maxScroll","newFrame","removePlaceholder","oldMaxScroll","moveToNewDroppable","proposed","proposedPageBorderBoxCenter","isGoingBeforeTarget","relativeTo","moveCrossAxis","isOver","whatIsDraggedOver","getDroppableOver$1","moveInDirection","isActuallyOver","isMainAxisMovementAllowed","home","direction","isMovingOnMainAxis","isMovementAllowed","isPositionInFrame","getHasOverlap","getFurthestAway","pageBorderBox","startCenter","sorted","candidate","getDroppableOver","childCenter","crossAxisStart","crossAxisEnd","isContained","isStartContained","isEndContained","offsetRectByPosition","area","getIsDisplaced","atIndex","getReorderImpact","targetRect","targetStart","targetEnd","child","didStartAfterCritical$1","combineThresholdDivisor","getCombineImpact","childRect","threshold","getDragImpact","pageOffset","destinationId","pageBorderBoxWithDroppableScroll","patchDroppableMap","updated","clearUnusedPlaceholder","now","lastDroppable","recomputePlaceholders","cleaned","patched","forcedClientSelection","forcedDimensions","forcedViewport","forcedImpact","scrollJumpRequest","dimensions","clientSelection","client","newImpact","withUpdatedPlaceholders","getDraggables","recompute","getClientBorderBoxCenter","refreshSnap","needsVisibilityCheck","getHomeLocation","getLiftEffect","insideHome","rawIndex","effected","patchDimensionMap","offsetDraggable","offset$1","initialWindowScroll","getFrame","adjustAdditionsForScrollChanges","additions","updatedDroppables","windowScrollChange","modified","droppableScrollChange","totalChange","publishWhileDraggingInVirtual","published","withScrollChange","existing","updatedAdditions","wasOverId","wasOver","onLiftImpact","draggingState","isSnapping","postDroppableChange","isEnabledChanging","removeScrollJumpRequest","idle$2","critical","movementMode","isWindowScrollAllowed","isEnabled","isCombineEnabled","reason","completed","dropDuration","newHomeClientOffset","guard","predicate","beforeInitialCapture","lift$1","initialPublish","publishWhileDragging","collectionStarting","updateDroppableScroll","updateDroppableIsEnabled","updateDroppableIsCombineEnabled","move","moveByWindowScroll","updateViewportMaxScroll","moveUp","moveDown","moveRight","moveLeft","flush","animateDrop","completeDrop","drop","dropPending","dropAnimationFinished","lift","next","request","marshal","style","curves","timings","outOfTheWayTiming","transitions","duration","timing","moveTo","transforms","isCombining","translate","minDropTime","maxDropTime","dropTimeRange","maxDropTimeAtDistance","cancelDropModifier","getDropDuration","distance$1","percentage","withDuration","getNewHomeClientOffset","newClientCenter","getDropImpact","lastImpact","dropMiddleware","didDropInsideDroppable","getWindowScrollBinding","getScrollListener","onWindowScroll","updateScroll","scheduled","isActive","stop","shouldStop$1","scrollListener","getExpiringAnnounce","announce","wasCalled","isExpired","timeoutId","getAsyncMarshal","entries","execute","timerId","entry","shallow","areLocationsEqual","isCombineEqual","isCriticalEqual","isDraggableEqual","isDroppableEqual","withTimings","getDragStart","mode","responder","data","getDefaultMessage","willExpire","getPublisher","getResponders","asyncMarshal","dragging","beforeCapture","beforeStart","hasCriticalChanged","hasLocationChanged","hasGroupingChanged","responders","publisher","dropAnimationFinishMiddleware","dropAnimationFlushOnScrollMiddleware","clear","dimensionMarshalStopper","focus","isWatching","shouldStop","autoScroll","autoScroller","pendingDrop","postActionState","composeEnhancers","dimensionMarshal","focusMarshal","styleMarshal","createStore$1","clean$1","createPublisher","registry","staging","collect","removals","getMaxScroll","scrollHeight","scrollWidth","getDocumentElement","doc","getMaxWindowScroll","getViewport","getInitialPublish","scrollOptions","windowScroll","shouldPublishUpdate","createDimensionMarshal","collection","stopPublishing","subscriber","canStartDrag","scrollWindow","getScrollableDroppables","getScrollableDroppableOver","getBestScrollableDroppable","defaultAutoScrollerOptions","getDistanceThresholds","container","getAutoScrollerOptions","autoScrollerOptions","startScrollingFrom","maxScrollValueAt","getPercentage","startOfRange","endOfRange","range","minScroll","getValueFromDistance","distanceToEdge","thresholds","percentageFromStartScrollingFrom","dampenValueByTime","proposedScroll","dragStartTime","accelerateAt","stopAt","runTime","betweenAccelerateAtAndStopAtPercentage","getValue","shouldUseTimeDampening","getScrollOnAxis","distanceToEdges","adjustForSizeLimits","isTooBigVertically","isTooBigHorizontally","clean","getScroll$1","required","limited","smallestSigned","getOverlap","getRemainder","targetScroll","overlap","canPartiallyScroll","rawMax","smallestChange","canScrollWindow","getWindowOverlap","canScrollDroppable","getDroppableOverlap","getWindowScrollChange","getDroppableScrollChange","createFluidScroller","scheduleWindowScroll","scheduleDroppableScroll","tryScroll","wasScrollNeeded","fakeScrollCallback","createJumpScroller","moveByOffset","scrollDroppableAsMuchAsItCan","whatTheDroppableCanScroll","scrollWindowAsMuchAsItCan","whatTheWindowCanScroll","droppableRemainder","windowRemainder","createAutoScroller","fluidScroller","jumpScroll","prefix","dragHandle","base","scrollContainer","makeGetSelector","attribute","getStyles","rules","property","rule","noPointerEvents","getStyles$1","contextId","getSelector","dragHandle$1","grabCursor","draggable$1","transition","droppable$1","useLayoutEffect","getHead","head","createStyleEl","nonce","useStyleMarshal","alwaysRef","dynamicRef","setDynamicStyle","setAlwaysStyle","always","dynamic","dropping","resting","querySelectorAll","parentNode","getWindowFromEl","isHtmlElement","findDragHandle","possible","handle","useFocusMarshal","entriesRef","recordRef","restoreFocusFrameRef","isMountedRef","register","tryGiveFocus","tryGiveFocusTo","tryShiftRecord","redirectTo","tryRestoreFocusRecorded","record","tryRecordFocus","focused","createRegistry","subscribers","cb","notify","findDraggableById","getDraggableById","draggableAPI","findDroppableById","getDroppableById","droppableAPI","useRegistry","StoreContext","getBodyElement","body","visuallyHidden","getId","useAnnouncer","defaults","useUniqueId","getElementId","uniqueId","useHiddenTextElement","text","AppContext","usePrevious","create","lock","isClaimed","claim","abandon","newLock","release","tryAbandon","isDragging","enter","escape","space","pageUp","pageDown","end","arrowLeft","arrowUp","arrowRight","arrowDown","preventedKeys","preventStandardKeyEvents","supportedEventName","eventName","primaryButton","sloppyClickThreshold","isSloppyClickThresholdExceeded","idle$1","getCaptureBindings","cancel","getPhase","setPhase","button","clientX","clientY","phase","pending","actions","useMouseSensor","api","phaseRef","unbindEventsRef","startCaptureBinding","startPendingDrag","preventForcePressBinding","listenForCapture","bindCapturingEvents","noop$1","scrollJumpKeys","getDraggingBindings","useKeyboardSensor","preDrag","isCapturing","idle","timeForLongPress","forcePressThreshold","getWindowBindings","getHandleBindings","touch","shouldRespect","useTouchSensor","unbindTarget","unbindWindow","startDragging","longPressTimerId","interactiveTagNames","isAnInteractiveElement","parent","isEventInInteractiveElement","getBorderBoxCenterPosition","isElement","supportedMatchesName","closestPonyfill","findClosestDragHandleFromEvent","tryGetClosestDraggableIdFromEvent","findDraggable","preventDefault","expected","isLockActive","shouldWarn","canStart","lockAPI","tryStart","forceSensorStop","sourceEvent","getShouldRespectForcePress","tryDispatch","getAction","tryDispatchWhenDragging","finish","fluidLift","move$1","snapLift","abortPreDrag","defaultSensors","useSensorMarshal","customSensors","enableDefaultSensors","useSensors","tryAbandonLock","canGetLock","tryGetLock","forceStop","findClosestDraggableId","findOptionsForDraggable","tryReleaseLock","isLockClaimed","createResponders","onBeforeCapureCallback","flushSync","createAutoScrollerOptions","getStore","lazyRef","App","setCallbacks","sensors","lazyStoreRef","lastPropsRef","dragHandleUsageInstructionsId","lazyDispatch","marshalCallbacks","tryResetStore","appCallbacks","getCanLift","getIsMovementAllowed","appContext","useUniqueContextId","DragDropContext","zIndexOptions","getDraggingTransition","shouldAnimateDragMovement","getDraggingOpacity","isDropAnimating","getShouldDraggingAnimate","getDraggingStyle","transform","getSecondaryStyle","secondary","getStyle$1","mapped","getDimension$1","computedStyles","placeholder","useDraggablePublisher","getDraggableRef","canDragInteractiveElements","shouldRespectForcePress","getDimension","publishedRef","isFirstPublishRef","DroppableContext","useRequiredContext","useContext","preventHtml5Dnd","Draggable","setRef","getRef","isClone","dropAnimationFinishedAction","forPublisher","onMoveEnd","provided","onTransitionEnd","rubric","isStrictEqual","whatIsDraggedOverFromResult","getCombineWithFromResult","getCombineWithFromImpact","getDraggableSelector","memoizedOffset","getMemoizedSnapshot","draggingOver","getMemoizedProps","getSecondarySnapshot","combineTargetFor","atRest","getSecondarySelector","shouldAnimateDisplacement","getFallback","getProps","ownId","draggingId","visualDisplacement","isAfterCriticalInVirtualList","makeMapStateToProps$1","draggingSelector","secondarySelector","mapDispatchToProps$1","ConnectedDraggable","PrivateDraggable","PublicDraggable","isScroll","isAuto","isEither","overflow","isElementScrollable","isBodyScrollable","getClosestScrollable","getScroll","getIsFixed","getEnv","closestScrollable","isFixedOnPage","getDroppableDimension","scrollSize","frameClient","getClient","targetRef","env","isDropDisabled","shouldClipSubject","immediate","delayed","getListenerOptions","getClosestScrollableFromDrag","useDroppablePublisher","whileDraggingRef","previousRef","publishedDescriptorRef","memoizedUpdateScroll","getClosestScroll","scheduleScrollUpdate","onClosestScroll","getDimensionAndWatchScroll","getScrollWhileDragging","dragStopped","noop","empty","getSize","isAnimatingOpenOnMount","animate","getStyle","size","Placeholder","animateOpenTimerRef","tryClearAnimateOpenTimer","setIsAnimatingOpenOnMount","onSizeChangeEnd","Placeholder$1","AnimateInOut","Droppable","droppableRef","placeholderRef","ignoreContainerClipping","snapshot","useClone","getContainerForClone","getDroppableRef","setDroppableRef","setPlaceholderRef","onPlaceholderTransitionEnd","isUsingCloneFor","droppableContext","getClone","render","node","draggableProvided","draggableSnapshot","ReactDOM","getBody","defaultProps","attachDefaultPropsToOwnProps","defaultPropKey","isMatchingType","getDraggable","makeMapStateToProps","idleWithAnimation","idleWithoutAnimation","getDraggableRubric","getMapProps","isDraggingOverForConsumer","isDraggingOverForImpact","renderClone","ownPropsWithDefaultProps","isDraggingOver","wasCombining","isHome","ConnectedDroppable","DefaultItemRenderer","KanbanColumnComponent","column","onItemClick","renderItem","itemClassName","emptyMessage","dragProvided","KanbanBoard","columns","columnClassName","emptyColumnMessage","handleDragEnd","BOARD_COLUMNS","IssueList","issues","onIssueClick","onIssueEdit","onIssueDelete","storageKey","safeParseOrder","parsed","buildColumns","order","formatTitle","byId","col","desired","desiredIds","remaining","items","syncOrderWithIssues","prev","statusById","filtered","present","missing","reorderIds","from","to","moved","IssuesPanel","_onCreateIssue","viewMode","setViewMode","searchQuery","setSearchQuery","statusFilter","setStatusFilter","priorityFilter","setPriorityFilter","selectedIssue","setSelectedIssue","setOrder","loaded","criticalCount","useIssues","updateIssue","deleteIssue","useIssueMutations","statusCounts","statusId","c","idsByStatus","map","handleEditIssue","_issue","handleDeleteIssue","handleStatusChange","handleIssueClick","handleCloseDrawer","sourceColumn","destColumn","issueId","sourceStatus","destStatus","sourceIds","destIds","nextSource","nextDest","Search","Input","List","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","ExecutionGroup","group","isExpanded","setIsExpanded","isParallel","CardHeader","ChevronDown","ChevronRight","ArrowRight","itemType","idParts","displayId","typeLabel","QueueActions","queue","queueIdProp","onActivate","onDeactivate","onMerge","onSplit","isActivating","isDeactivating","isDeleting","isMerging","isSplitting","isDeleteOpen","setIsDeleteOpen","isMergeOpen","setIsMergeOpen","isSplitOpen","setIsSplitOpen","mergeTargetId","setMergeTargetId","selectedItemIds","setSelectedItemIds","queueId","allItems","handleMerge","handleSplit","toggleItemSelection","itemId","selectAll","clearAll","canSplit","_b","Pause","GitBranch","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","Dialog","DialogContent","DialogHeader","DialogTitle","DialogFooter","isSelected","Checkbox","QueueCard","taskCount","solutionCount","conflictCount","_c","totalItems","groupCount","executionGroups","CheckCircle2","groupSortKey","groupId","an","aid","bn","bid","it","applyDrag","startCol","endCol","itemToMove","reorderedItem","newStartItems","newEndItems","QueueBoard","reorderQueueGroup","moveQueueItem","isReordering","useQueueMutations","baseColumns","setColumns","nextColumns","nextOrder","DEFAULT_TOOL_OPTIONS","CliExecutionSettings","tool","resumeStrategy","onToolChange","onModeChange","onResumeStrategyChange","toolOptions","CardContent","buildQueueItemContext","lines","tasks","task","generateId","QueueItemExecutor","navigate","useNavigate","sessionError","setTool","setMode","setResumeStrategy","isExecuting","setIsExecuting","setLastResult","displayError","addExecution","useQueueExecutionStore","handleSessionExecute","sessionKey","prompt","executeInCliSession","execution","useTerminalPanelStore","handleOrchestratorExecute","instruction","nodeId","flowName","flowDescription","createOrchestratorFlow","flowDto","parsedVersion","flowForStore","useFlowStore","executed","executeOrchestratorFlow","execId","useExecutionStore","toast","RefreshCw","Plus","Workflow","SolutionDrawer","useIssueQueue","solutionId","tasksForSolution","isTaskItem","qi","StatusIcon","dep","file","taskStatus","TaskStatusIcon","taskId","QueuePanelSkeleton","QueueEmptyState","QueuePanel","selectedItem","setSelectedItem","selectedQueueId","setSelectedQueueId","activeQueueQuery","historyIndex","useQueueHistory","selectedQueueQuery","useIssueQueueById","activateQueue","deactivateQueue","deleteQueue","mergeQueues","splitQueue","activeQueueId","activeQueueIds","handleActivate","handleDeactivate","sourceId","targetId","sourceQueueId","itemIds","handleItemClick","q","DiscoveryCard","session","formatDate","dateString","Progress","severityConfig","getSeverityConfig","severity","FindingDrawer","finding","MapPin","Code","Lightbulb","Target","FindingList","findings","filters","onFilterChange","onFindingClick","selectedIds","onSelectionChange","internalSelection","setInternalSelection","selectionSet","handleToggleSelection","findingId","newSet","handleToggleAll","f","isAllSelected","isSomeSelected","uniqueTypes","Check","FileCode","DiscoveryDetail","_sessionId","onExport","onExportSelected","isExporting","selectedFinding","setSelectedFinding","setSelectedIds","handleFindingClick","relatedIssue","handleCloseIssueDrawer","handleCloseFindingDrawer","handleExportSelected","severityCounts","acc","typeCounts","Upload","Download","BarChart3","count","DiscoveryPanel","activeSession","isLoadingSessions","isLoadingFindings","setFilters","selectSession","exportFindings","exportSelectedFindings","useIssueDiscovery","VALID_TABS","ISSUE_TYPE_CONFIG","NewIssueDialog","open","onOpenChange","onSubmit","isCreating","title","setTitle","setContext","setPriority","setType","attachments","setAttachments","dragOver","setDragOver","handleFileSelect","files","validFiles","removeAttachment","_","handleSubmit","handleDragOver","handleDragLeave","handleDrop","Label","input","IssueHubPage","searchParams","setSearchParams","useSearchParams","rawTab","showError","success","useNotifications","isNewIssueOpen","setIsNewIssueOpen","isGithubSyncing","setIsGithubSyncing","isUploadingAttachments","setIsUploadingAttachments","isImmersiveMode","useAppStore","selectIsImmersiveMode","toggleImmersiveMode","refetchIssues","isFetchingIssues","refetchQueue","isFetchingQueue","createIssue","setCurrentTab","handleIssuesRefresh","handleGithubSync","pullIssuesFromGitHub","handleCreateIssue","newIssue","uploadAttachments","uploadError","handleQueueRefresh","renderActionButtons","Minimize2","Maximize2"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,6,11,12,13,14,15,16,17]}
|