@aiworker/web 1.22.0 → 1.22.2
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/README.md +4 -4
- package/bin/cli.js +7 -4
- package/bin/cli.test.js +165 -73
- package/bin/lib/cli-api-target.js +2 -2
- package/bin/lib/cli-args.js +119 -119
- package/bin/lib/cli-lifecycle.js +9 -9
- package/bin/lib/cli-network.js +3 -3
- package/bin/lib/cli-paths.js +3 -3
- package/bin/lib/cli-ports.js +2 -2
- package/bin/lib/cli-process.js +4 -4
- package/bin/lib/cli-startup.js +64 -15
- package/bin/lib/cli-tunnel-profiles.js +1 -1
- package/bin/lib/cli-tunnel-utils.js +2 -2
- package/bin/lib/commands-connect-url.js +19 -19
- package/bin/lib/commands-lifecycle.js +27 -27
- package/bin/lib/commands-logs.js +5 -5
- package/bin/lib/commands-models.js +1 -1
- package/bin/lib/commands-projects.js +1 -1
- package/bin/lib/commands-schedule.js +1 -1
- package/bin/lib/commands-serve.js +29 -29
- package/bin/lib/commands-session.js +1 -1
- package/bin/lib/commands-startup.js +45 -10
- package/bin/lib/commands-status.js +1 -1
- package/bin/lib/commands-tunnel.js +40 -40
- package/bin/lib/commands-update.js +1 -1
- package/bin/lib/commands-update.test.js +6 -6
- package/dist/assets/{CodeMirrorCommentWidgets-B3u7UIcE.js → CodeMirrorCommentWidgets-CSICpWQD.js} +1 -1
- package/dist/assets/{DiffView-DluiRSla.js → DiffView-hDBKesA_.js} +3 -3
- package/dist/assets/DirtyBranchSwitchDialog-C22HdWj4.js +1 -0
- package/dist/assets/FilesView-CdWzeOp9.js +17 -0
- package/dist/assets/GitView-VQQkYuUw.js +6 -0
- package/dist/assets/{JsonTreeView-B0BdZEHG.js → JsonTreeView-6lrhwD3q.js} +1 -1
- package/dist/assets/LinearIssuesView-Ba6Q9569.js +1 -0
- package/dist/assets/{MarkdownImageGallery-ClOvuZxC.js → MarkdownImageGallery-Czv_mhvS.js} +1 -1
- package/dist/assets/MarkdownRendererImpl-BrMcswiy.js +12 -0
- package/dist/assets/{OnboardingScreen-D2DG7K6b.js → OnboardingScreen-ChxQoAkx.js} +1 -1
- package/dist/assets/{PatchDiff-DvfqDql7.js → PatchDiff-BzcZPlOq.js} +1 -1
- package/dist/assets/{PierreDiffViewer-B7m3f0d7.js → PierreDiffViewer-BchBtZlp.js} +2 -2
- package/dist/assets/PlanView-DyDt_nZ_.js +5 -0
- package/dist/assets/SettingsView-BKf5xBsP.js +28 -0
- package/dist/assets/{SettingsWindow-i45U1Cy1.js → SettingsWindow-DDQYaKWQ.js} +1 -1
- package/dist/assets/{ToolOutputDialog-BTwyh5OF.js → ToolOutputDialog-iYF8Y2bz.js} +6 -6
- package/dist/assets/ToolPartDiffPreview-CdjbOVMM.js +8 -0
- package/dist/assets/{VirtualizedFileDiff-DD8lDVej.js → VirtualizedFileDiff-fFFm2QgH.js} +1 -1
- package/dist/assets/{WalkthroughView-egQgxel3.js → WalkthroughView-DOeCsMju.js} +2 -2
- package/dist/assets/{computeVirtualFileMetrics-BMIRgMHv.js → computeVirtualFileMetrics-CzgLum_K.js} +2 -2
- package/dist/assets/{contextPanelEmbeddedChat-C3fjDbdg.js → contextPanelEmbeddedChat-C0ZLAepL.js} +1 -1
- package/dist/assets/{de-C1P6X5Rs.js → de-B5JaA3SA.js} +6 -5
- package/dist/assets/{es-CDgaF1_t.js → es-EPIH88ii.js} +6 -5
- package/dist/assets/{fr-Bgxqvvz_.js → fr-CAMfxUdZ.js} +6 -5
- package/dist/assets/{index-CODwDsU_.js → index-Bl3LSbjn.js} +1 -1
- package/dist/assets/index-DF5kMP-i.js +39 -0
- package/dist/assets/index-Dl3xbAB_.css +1 -0
- package/dist/assets/{isDiffPlainText-BqayB8d3.js → isDiffPlainText-Dx-dB_8l.js} +1 -1
- package/dist/assets/{isFilePlainText-QfoiKJNY.js → isFilePlainText-CWFPwmnU.js} +1 -1
- package/dist/assets/{ja-BDRrEcNP.js → ja-CifOE1VN.js} +7 -6
- package/dist/assets/{ko-Ba8sQV79.js → ko-BBDyAyYQ.js} +7 -6
- package/dist/assets/{main-C5DVOxc6.js → main-DnBAoktx.js} +2 -2
- package/dist/assets/main-MhSaOZoB.js +930 -0
- package/dist/assets/{markdownCore-CZwzz5gw.js → markdownCore-BrBwOOMn.js} +2 -2
- package/dist/assets/{miniChat-DUJ4irZc.js → miniChat-BKyvLseN.js} +2 -2
- package/dist/assets/{mobile-CcaxB0n4.js → mobile-DKjeFgMN.js} +2 -2
- package/dist/assets/{patchFileDiff-yNfWXN4E.js → patchFileDiff-o8ms1me8.js} +1 -1
- package/dist/assets/pl-DgEHYfFM.js +16 -0
- package/dist/assets/{pt-BR-DIs6ElwV.js → pt-BR-DuWHojUw.js} +6 -5
- package/dist/assets/{renderElectronMiniChatApp-BcKLHXKe.js → renderElectronMiniChatApp-CDgBwwCS.js} +2 -2
- package/dist/assets/renderMobileApp-DJIKIK1r.js +25 -0
- package/dist/assets/runtimeEndpointReset-CYJ9O_xX.js +17 -0
- package/dist/assets/{scheduledTasksApi-DLW0mkQK.js → scheduledTasksApi-D8yamh1b.js} +1 -1
- package/dist/assets/{shikiHighlight-DYOWuY65.js → shikiHighlight-TEQCmzW8.js} +1 -1
- package/dist/assets/tr-D5m2yIWL.js +7 -0
- package/dist/assets/{uk-ZrCNjM7Y.js → uk-D_q60oog.js} +6 -5
- package/dist/assets/{useAppFontEffects-CjrntdL0.js → useAppFontEffects-D7sNpuL2.js} +161 -190
- package/dist/assets/useInlineCommentController-Brz_cLcQ.js +2 -0
- package/dist/assets/{useRootScrollLock-BHYPkrLv.js → useRootScrollLock-lXEnWlaU.js} +1 -1
- package/dist/assets/{vendor-codemirror-language-data-DFZik9R2.js → vendor-codemirror-language-data-Dp3KMRQG.js} +2 -2
- package/dist/assets/vendor-zod-CK21ihK-.js +39 -0
- package/dist/assets/{web-components-Bhg83tjf.js → web-components-_mNEMjFY.js} +1 -1
- package/dist/assets/{zh-CN-iv_AV4EC.js → zh-CN-D8QvsVeg.js} +6 -5
- package/dist/assets/{zh-TW-CzEUk38j.js → zh-TW-B9t7rQQO.js} +6 -5
- package/dist/index.html +22 -22
- package/dist/mini-chat.html +7 -7
- package/dist/mobile.html +5 -5
- package/package.json +3 -3
- package/server/index.js +118 -85
- package/server/lib/agent-memory/actions.js +2 -2
- package/server/lib/agent-memory/feature-flag.js +1 -1
- package/server/lib/agent-memory/feature-flag.test.js +8 -8
- package/server/lib/agent-memory/routes.js +2 -2
- package/server/lib/agent-tool/runtime.js +37 -54
- package/server/lib/agent-tool/runtime.test.js +59 -59
- package/server/lib/browser-control/broker.js +3 -3
- package/server/lib/browser-control/broker.test.js +1 -1
- package/server/lib/changelog/update-notes.js +82 -0
- package/server/lib/changelog/update-notes.test.js +59 -0
- package/server/lib/client-auth/remote-clients.test.js +5 -5
- package/server/lib/context-obligatory/runtime.js +7 -7
- package/server/lib/context-obligatory/runtime.test.js +5 -5
- package/server/lib/dev-servers/parse.js +2 -2
- package/server/lib/dev-servers/parse.test.js +2 -2
- package/server/lib/dev-servers/routes.js +1 -1
- package/server/lib/dev-tunnel/DOCUMENTATION.md +13 -4
- package/server/lib/dev-tunnel/client.js +1 -1
- package/server/lib/dev-tunnel/runtime.js +5 -5
- package/server/lib/dev-tunnel/tunnel.test.js +21 -1
- package/server/lib/dictation/local/model-catalog.js +1 -1
- package/server/lib/dictation/local/worker-process.js +2 -2
- package/server/lib/event-stream/directory-ws-bridge.js +1 -1
- package/server/lib/event-stream/global-ws-bridge.js +1 -1
- package/server/lib/event-stream/protocol.test.js +4 -4
- package/server/lib/event-stream/runtime.test.js +6 -6
- package/server/lib/fs/DOCUMENTATION.md +2 -0
- package/server/lib/fs/routes.js +37 -26
- package/server/lib/fs/routes.test.js +98 -21
- package/server/lib/git/DOCUMENTATION.md +3 -1
- package/server/lib/git/identity-storage.js +1 -1
- package/server/lib/git/issue-2746-longpaths.test.js +4 -4
- package/server/lib/git/routes.js +17 -1
- package/server/lib/git/service.js +116 -26
- package/server/lib/git/service.test.js +174 -3
- package/server/lib/github/auth.js +8 -8
- package/server/lib/github/pr-status.js +1 -1
- package/server/lib/github/routes.js +2 -2
- package/server/lib/inherited-env.js +1 -1
- package/server/lib/inherited-env.test.js +2 -2
- package/server/lib/linear/auth.js +8 -8
- package/server/lib/linear/auth.test.js +24 -24
- package/server/lib/linear/issues.test.js +6 -6
- package/server/lib/linear/mapping.test.js +4 -4
- package/server/lib/linear/oauth.js +2 -2
- package/server/lib/linear/oauth.test.js +14 -14
- package/server/lib/linear/routes.js +5 -5
- package/server/lib/linear/routes.test.js +16 -16
- package/server/lib/linear/status-runtime.test.js +9 -9
- package/server/lib/linear/status.js +1 -1
- package/server/lib/linear/status.test.js +15 -15
- package/server/lib/linear/teams.test.js +4 -4
- package/server/lib/magic-prompts/routes.js +2 -2
- package/server/lib/mcp-reconnect/DOCUMENTATION.md +55 -0
- package/server/lib/mcp-reconnect/runtime.js +122 -0
- package/server/lib/mcp-reconnect/runtime.test.js +140 -0
- package/server/lib/message-queue/DOCUMENTATION.md +158 -0
- package/server/lib/message-queue/runtime.js +870 -0
- package/server/lib/message-queue/runtime.test.js +482 -0
- package/server/lib/notifications/apns-runtime.js +17 -17
- package/server/lib/notifications/apns-runtime.test.js +11 -11
- package/server/lib/notifications/emitter-runtime.js +1 -1
- package/server/lib/notifications/emitter-runtime.test.js +1 -1
- package/server/lib/notifications/push-runtime.js +7 -7
- package/server/lib/notifications/routes.js +1 -1
- package/server/lib/notifications/runtime.js +1 -1
- package/server/lib/openchamber-control/action-resolution.test.js +10 -10
- package/server/lib/openchamber-control/actions.js +24 -24
- package/server/lib/openchamber-control/error.js +4 -4
- package/server/lib/openchamber-control/routes.js +2 -2
- package/server/lib/openchamber-control/routes.test.js +5 -5
- package/server/lib/openchamber-control/screenshots.js +1 -1
- package/server/lib/openchamber-control/screenshots.test.js +1 -1
- package/server/lib/openchamber-control/service.js +50 -50
- package/server/lib/openchamber-control/service.test.js +5 -5
- package/server/lib/openchamber-sessions/routes.js +124 -22
- package/server/lib/openchamber-sessions/routes.test.js +99 -11
- package/server/lib/opencode/DOCUMENTATION.md +13 -5
- package/server/lib/opencode/auth.js +1 -1
- package/server/lib/opencode/bootstrap-runtime.js +6 -6
- package/server/lib/opencode/cli-options.js +8 -8
- package/server/lib/opencode/config-paths.test.js +116 -0
- package/server/lib/opencode/core-routes.js +8 -7
- package/server/lib/opencode/core-routes.test.js +11 -11
- package/server/lib/opencode/env-config.js +5 -5
- package/server/lib/opencode/env-config.test.js +7 -7
- package/server/lib/opencode/env-runtime.js +10 -10
- package/server/lib/opencode/env-runtime.test.js +18 -18
- package/server/lib/opencode/feature-routes-runtime.js +17 -12
- package/server/lib/opencode/hmr-state-runtime.js +2 -2
- package/server/lib/opencode/hmr-state-runtime.test.js +1 -1
- package/server/lib/opencode/input-history-scope.js +14 -0
- package/server/lib/opencode/lifecycle.js +8 -8
- package/server/lib/opencode/lifecycle.test.js +4 -4
- package/server/lib/opencode/managed-plugin-config.js +35 -0
- package/server/lib/opencode/managed-process-registry.js +3 -3
- package/server/lib/opencode/mcp-oauth-callback.test.js +2 -2
- package/server/lib/opencode/openchamber-routes.js +15 -15
- package/server/lib/opencode/openchamber-routes.test.js +11 -11
- package/server/lib/opencode/plugins.js +2 -2
- package/server/lib/opencode/plugins.test.js +1 -1
- package/server/lib/opencode/project-icon-routes.js +2 -2
- package/server/lib/opencode/project-icon-routes.test.js +1 -1
- package/server/lib/opencode/providers.js +44 -2
- package/server/lib/opencode/providers.test.js +131 -4
- package/server/lib/opencode/proxy.js +2 -2
- package/server/lib/opencode/pwa-manifest-routes.js +1 -1
- package/server/lib/opencode/restart-session-recovery.test.js +1 -1
- package/server/lib/opencode/routes-upgrade.test.js +4 -4
- package/server/lib/opencode/routes.js +14 -14
- package/server/lib/opencode/server-startup-runtime.js +6 -6
- package/server/lib/opencode/session-runtime.js +3 -3
- package/server/lib/opencode/session-runtime.test.js +6 -6
- package/server/lib/opencode/settings-helpers.js +31 -3
- package/server/lib/opencode/settings-helpers.test.js +189 -12
- package/server/lib/opencode/settings-runtime.js +2 -2
- package/server/lib/opencode/settings-runtime.test.js +29 -0
- package/server/lib/opencode/shared.js +5 -2
- package/server/lib/opencode/shared.test.js +7 -7
- package/server/lib/opencode/shutdown-runtime.js +2 -0
- package/server/lib/opencode/skill-routes.js +2 -1
- package/server/lib/opencode/snippets.js +1 -2
- package/server/lib/opencode/startup-performance.js +1 -1
- package/server/lib/opencode/startup-performance.test.js +6 -6
- package/server/lib/opencode/static-routes-runtime.js +8 -8
- package/server/lib/opencode/static-routes-runtime.test.js +7 -7
- package/server/lib/opencode/upgrade-capability.js +2 -2
- package/server/lib/opencode/upgrade-capability.test.js +3 -3
- package/server/lib/package-manager.js +17 -42
- package/server/lib/package-manager.test.js +19 -19
- package/server/lib/permission-auto-accept/runtime.js +1 -1
- package/server/lib/project-context/routes.js +1 -1
- package/server/lib/projects/project-config.js +2 -2
- package/server/lib/quota/DOCUMENTATION.md +9 -1
- package/server/lib/quota/credentials/providers.js +4 -0
- package/server/lib/quota/credentials/store.js +4 -4
- package/server/lib/quota/credentials/store.test.js +8 -8
- package/server/lib/quota/index.js +1 -0
- package/server/lib/quota/providers/exe-dev.js +75 -0
- package/server/lib/quota/providers/exe-dev.test.js +47 -0
- package/server/lib/quota/providers/hyper.js +118 -0
- package/server/lib/quota/providers/hyper.test.js +126 -0
- package/server/lib/quota/providers/index.js +15 -0
- package/server/lib/quota/providers/ollama-cloud.js +1 -1
- package/server/lib/quota/providers/opencode-go.js +2 -1
- package/server/lib/quota/providers/opencode-go.test.js +9 -5
- package/server/lib/quota/providers/xai.js +1 -1
- package/server/lib/quota/routes.js +2 -0
- package/server/lib/quota/utils/auth.js +1 -1
- package/server/lib/relay/DOCUMENTATION.md +1 -1
- package/server/lib/relay/host-client.js +1 -1
- package/server/lib/relay/host-client.test.js +9 -1
- package/server/lib/relay/host-lock.js +1 -1
- package/server/lib/relay/service.js +5 -5
- package/server/lib/relay/tunnel-host.js +3 -1
- package/server/lib/relay/tunnel-host.test.js +9 -1
- package/server/lib/scheduled-tasks/issue-2710-double-execution.test.js +2 -2
- package/server/lib/scheduled-tasks/routes.js +5 -5
- package/server/lib/scheduled-tasks/service.js +25 -25
- package/server/lib/scheduled-tasks/service.test.js +1 -1
- package/server/lib/security/bind-host.js +4 -4
- package/server/lib/security/bind-host.test.js +1 -1
- package/server/lib/security/request-security.js +11 -5
- package/server/lib/security/request-security.test.js +14 -14
- package/server/lib/session-assist/runtime.js +10 -9
- package/server/lib/session-folders/routes.js +2 -2
- package/server/lib/session-folders/routes.test.js +8 -8
- package/server/lib/session-goal/DOCUMENTATION.md +20 -7
- package/server/lib/session-goal/create.js +4 -2
- package/server/lib/session-goal/create.test.js +1 -1
- package/server/lib/session-goal/objectives.js +4 -4
- package/server/lib/session-goal/routes.js +1 -1
- package/server/lib/session-goal/runtime.js +88 -22
- package/server/lib/session-goal/runtime.test.js +428 -2
- package/server/lib/session-knowledge/runtime.js +11 -11
- package/server/lib/session-knowledge/runtime.test.js +5 -5
- package/server/lib/skills-catalog/DOCUMENTATION.md +1 -1
- package/server/lib/skills-catalog/cache.test.js +2 -2
- package/server/lib/skills-catalog/disk-cache.js +5 -5
- package/server/lib/skills-catalog/github-meta.test.js +2 -2
- package/server/lib/skills-catalog/install.js +3 -2
- package/server/lib/small-model/DOCUMENTATION.md +4 -0
- package/server/lib/small-model/call.js +9 -3
- package/server/lib/small-model/call.test.js +29 -6
- package/server/lib/small-model/index.js +8 -7
- package/server/lib/small-model/index.test.js +1 -1
- package/server/lib/small-model/resolve.js +1 -1
- package/server/lib/small-model/resolve.test.js +1 -1
- package/server/lib/small-model/routes.js +2 -1
- package/server/lib/system-prompt/runtime.js +3 -22
- package/server/lib/system-prompt/runtime.test.js +3 -3
- package/server/lib/terminal/DOCUMENTATION.md +11 -7
- package/server/lib/terminal/runtime.js +180 -26
- package/server/lib/terminal/runtime.test.js +554 -27
- package/server/lib/terminal/shells.js +20 -3
- package/server/lib/terminal/shells.test.js +33 -2
- package/server/lib/tts/base-url.js +3 -3
- package/server/lib/tts/routes.test.js +20 -20
- package/server/lib/ui-auth/ui-auth.js +12 -9
- package/server/lib/ui-auth/ui-auth.test.js +19 -3
- package/server/lib/ui-auth/ui-passkeys.js +7 -7
- package/server/lib/walkthrough/index.js +1 -0
- package/server/lib/walkthrough/jobs.test.js +1 -1
- package/server/lib/walkthrough/language.test.js +1 -1
- package/server/lib/walkthrough/model-settings.js +3 -3
- package/server/lib/walkthrough/model-settings.test.js +1 -1
- package/server/lib/walkthrough/pull-request.test.js +5 -5
- package/server/lib/walkthrough/reproduce-2607.test.js +2 -2
- package/server/lib/walkthrough/routes.test.js +26 -5
- package/server/lib/walkthrough/store.js +3 -3
- package/server/lib/walkthrough/store.test.js +1 -1
- package/server/opencode-proxy.test.js +2 -2
- package/server/proxy-headers.js +1 -1
- package/server/sse-routes.test.js +4 -4
- package/README.md.bak +0 -250
- package/bin/lib/DOCUMENTATION.md.bak +0 -163
- package/dist/assets/CommitSection-SGBCAW0w.js +0 -1
- package/dist/assets/FilesView-Bdq8ppva.js +0 -17
- package/dist/assets/GitView-Znn7VJcP.js +0 -6
- package/dist/assets/LinearIssuesView-jP-hXyac.js +0 -1
- package/dist/assets/MarkdownRendererImpl-Dt9mjTRN.js +0 -12
- package/dist/assets/PlanView-B0F3BtPZ.js +0 -5
- package/dist/assets/SettingsView-BBW-S-gh.js +0 -28
- package/dist/assets/ToolPartDiffPreview-CUNe28U1.js +0 -8
- package/dist/assets/index-C57jT0Sa.css +0 -1
- package/dist/assets/index-DW_E3rnL.js +0 -7
- package/dist/assets/main-Bv5Pkngh.js +0 -928
- package/dist/assets/pl-Dioz29BI.js +0 -15
- package/dist/assets/renderMobileApp-D9yQJy0L.js +0 -25
- package/dist/assets/runtimeEndpointReset-CjhvxLH0.js +0 -16
- package/dist/assets/tr-DFnMlPxY.js +0 -6
- package/dist/assets/useInlineCommentController-CDEuSlPH.js +0 -2
- package/dist/assets/vendor-zod-BLfBSgBh.js +0 -39
- package/server/index.d.ts.bak +0 -39
- package/server/lib/agent-tool/DOCUMENTATION.md.bak +0 -119
- package/server/lib/browser-control/DOCUMENTATION.md.bak +0 -50
- package/server/lib/context-obligatory/DOCUMENTATION.md.bak +0 -19
- package/server/lib/dev-tunnel/DOCUMENTATION.md.bak +0 -57
- package/server/lib/dictation/DOCUMENTATION.md.bak +0 -100
- package/server/lib/event-stream/DOCUMENTATION.md.bak +0 -62
- package/server/lib/fs/DOCUMENTATION.md.bak +0 -47
- package/server/lib/git/DOCUMENTATION.md.bak +0 -193
- package/server/lib/github/DOCUMENTATION.md.bak +0 -183
- package/server/lib/linear/DOCUMENTATION.md.bak +0 -97
- package/server/lib/linear/OAUTH-BROKER-HANDOFF.md.bak +0 -91
- package/server/lib/markdown-image-grants/DOCUMENTATION.md.bak +0 -40
- package/server/lib/notifications/APNS.md.bak +0 -135
- package/server/lib/notifications/DOCUMENTATION.md.bak +0 -138
- package/server/lib/openchamber-control/DOCUMENTATION.md.bak +0 -64
- package/server/lib/opencode/DOCUMENTATION.md.bak +0 -431
- package/server/lib/opencode/managed-process-registry.d.ts.bak +0 -13
- package/server/lib/opencode/provider-env-aliases.d.ts.bak +0 -3
- package/server/lib/permission-auto-accept/DOCUMENTATION.md.bak +0 -34
- package/server/lib/project-context/DOCUMENTATION.md.bak +0 -160
- package/server/lib/quota/DOCUMENTATION.md.bak +0 -123
- package/server/lib/relay/DOCUMENTATION.md.bak +0 -100
- package/server/lib/scheduled-tasks/DOCUMENTATION.md.bak +0 -182
- package/server/lib/session-assist/DOCUMENTATION.md.bak +0 -66
- package/server/lib/session-goal/DOCUMENTATION.md.bak +0 -213
- package/server/lib/session-knowledge/DOCUMENTATION.md.bak +0 -89
- package/server/lib/skills-catalog/DOCUMENTATION.md.bak +0 -151
- package/server/lib/small-model/DOCUMENTATION.md.bak +0 -212
- package/server/lib/system-prompt/DOCUMENTATION.md.bak +0 -36
- package/server/lib/terminal/DOCUMENTATION.md.bak +0 -50
- package/server/lib/text/DOCUMENTATION.md.bak +0 -35
- package/server/lib/tts/DOCUMENTATION.md.bak +0 -147
- package/server/lib/tunnels/DOCUMENTATION.md.bak +0 -21
- package/server/lib/ui-auth/DOCUMENTATION.md.bak +0 -44
- package/server/lib/walkthrough/DOCUMENTATION.md.bak +0 -411
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import{f as pt,R as n,c as Vn,j as r,r as us}from"./vendor-react-BUCujlKS.js";import{W as fa,X as ma,Y as ha,Z as pa,n as Ge,u as ht,dy as ga,C as En,w as xa,r as Dn,$ as Pn,e as va,dw as wa,a2 as ba,dx as ya,a as ja}from"./index-DF5kMP-i.js";import{f as $t,y as Mn,ac as ri,bR as Fa,h as G,ht as Na,fm as Ca,T as nr,B as z,I as y,W as Sa,N as ka,b7 as Ra,ae as Ta,c6 as Va,eb as zn,hu as Ln,hv as Ea,g_ as Da,fn as Pa,t as Y,l as An,ao as ds,c1 as sr,cD as Ma,b as za,hw as Tr,bE as La,ap as fs,hx as In,c2 as On,c3 as Bn,ge as Aa,hy as Ia,hz as Oa,hA as Ba,bF as si,bG as ni,bH as ii,bI as ai,bJ as oi,bK as li,b6 as vs,b3 as ws,ar as Er,b5 as bs,b2 as Dr,c0 as ms,aq as hs,bZ as $n,a7 as Lt,a8 as At,a9 as It,bC as $a,bD as Wa,g as Mr,b4 as _a,bf as Ua}from"./useAppFontEffects-D7sNpuL2.js";import{a6 as Ka,G as Ha,H as Ga,I as qa,J as Xa,K as Ja}from"./runtimeEndpointReset-CYJ9O_xX.js";import{c as Wn,s as Ya,C as _n,P as ps}from"./shikiHighlight-TEQCmzW8.js";import{a as Za}from"./vendor-codemirror-state-C9awkmn-.js";import{E as jt}from"./vendor-codemirror-view-CiLROUVV.js";import{J as Qa,F as eo}from"./JsonTreeView-6lrhwD3q.js";import{ensurePierreThemeRegistered as Un,getResolvedShikiTheme as to}from"./appThemeRegistry-BK0dHKa6.js";import{V as ro,W as so}from"./Virtualizer-CZlLSacm.js";import{V as no}from"./Virtualizer-D_a8gKmg.js";import{u as Vr,c as io,e as ao}from"./scheduledTasksApi-D8yamh1b.js";import{D as oo}from"./vendor-react-drawio-Ct3Q0DsD.js";import{I as lo,u as co,n as uo}from"./useInlineCommentController-Brz_cLcQ.js";import{b as fo}from"./CodeMirrorCommentWidgets-CSICpWQD.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-zod-CK21ihK-.js";import"./vendor-opencode-sdk-BJ73u-bH.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-base-ui-BeMD8X_w.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./contextPanelEmbeddedChat-C0ZLAepL.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-livSKyyV.js";import"./vendor-motion-dom-D_o3BTI3.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-g05Cx3z9.js";import"./vendor-tanstack-virtual-core-Dubg10g5.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-Dp3KMRQG.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-legendapp-list-gg7YLRW7.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./vendor-codemirror-search-BmS-GmcX.js";import"./vendor-replit-codemirror-vim-B2DJlAhT.js";import"./vendor-replit-codemirror-vim-core-FHzKdNUS.js";import"./web-components-_mNEMjFY.js";import"./computeVirtualFileMetrics-CzgLum_K.js";import"./vendor-shiki-Bbf2GEcE.js";import"./vendor-shikijs-core-CGM_jqPK.js";import"./vendor-shikijs-types-CPSbSeK6.js";import"./vendor-shikijs-vscode-textmate-BgLrS_2D.js";import"./vendor-hast-util-to-html-BKBhbTDb.js";import"./vendor-html-void-elements-CkdplsNl.js";import"./vendor-property-information-rJCbAzvX.js";import"./vendor-zwitch-C2o2j-tx.js";import"./vendor-stringify-entities-CsH1VEn9.js";import"./vendor-character-entities-legacy-BpoLgcEt.js";import"./vendor-character-entities-html4-D7taRCQ7.js";import"./vendor-ccount-c2V3InAJ.js";import"./vendor-comma-separated-tokens-D8TqSuIK.js";import"./vendor-space-separated-tokens-DD3iYX1K.js";import"./vendor-hast-util-whitespace-D4Wp6AEg.js";import"./vendor-shikijs-engine-oniguruma-DPWuIF1G.js";import"./themeResolver-BmJyTmjJ.js";import"./vendor-pierre-theming-C6Z4M5_u.js";import"./vendor-shikijs-engine-javascript-Cme4830A.js";import"./vendor-oniguruma-to-es-DLBnFDCE.js";import"./vendor-oniguruma-parser-C0D4_9rT.js";import"./vendor-regex-BBWcyTkg.js";import"./vendor-regex-utilities-2BQyy0xI.js";import"./vendor-regex-recursion-JU4mF-dD.js";import"./vendor-shikijs-transformers-CZWsLLKm.js";import"./isFilePlainText-CWFPwmnU.js";import"./registerCustomTheme-BBXUCRnG.js";function Kn(a){const e=pt.c(41),{containerRef:s,filePath:d,fileContent:x}=a,{t:g}=$t(),v=Mn(bo),b=Mn(wo),f=ri(),C=Fa(vo),[p,F]=n.useState(null),[N,R]=n.useState(""),[j,T]=n.useState(!1),o=n.useRef(!1),A=n.useRef(null),I=n.useRef(null),[W,L]=n.useState(null);let E;e[0]===Symbol.for("react.memo_cache_sentinel")?(E=()=>{F(null),R(""),T(!1),o.current=!1,I.current=null,L(null)},e[0]=E):E=e[0];const V=E;let S,M;e[1]!==s?(S=()=>{const B=s.current;if(!B)return;const H=()=>{if(o.current)return;const se=window.getSelection(),Se=se?.toString().trim()??"";if(!se||!Se||se.rangeCount===0){V();return}const ae=se.getRangeAt(0);if(!B.contains(ae.commonAncestorContainer)){V();return}const oe=ae.getBoundingClientRect();I.current=ae.cloneRange(),R(Se),F({x:oe.left+oe.width/2,y:oe.top-10})},re=se=>{A.current?.contains(se.target)||o.current&&V()};return document.addEventListener("selectionchange",H),document.addEventListener("pointerdown",re),()=>{document.removeEventListener("selectionchange",H),document.removeEventListener("pointerdown",re)}},M=[s,V],e[1]=s,e[2]=S,e[3]=M):(S=e[2],M=e[3]),n.useEffect(S,M);let $;e[4]!==x?($=B=>{const H=de=>x.slice(0,de).split(`
|
|
2
|
+
`).length,re=go,se=(de,Ve)=>{for(const Ee of re(de)){const ke=x.indexOf(Ee,Ve);if(ke>=0)return ke}return-1},Se=B.length>=8?x.indexOf(B):-1;if(Se>=0){const de=H(Se);return{start:de,end:de+B.split(`
|
|
3
|
+
`).length-1}}const ae=B.split(`
|
|
4
|
+
`).map(po).filter(Boolean);if(ae.length===0)return null;const oe=se(ae[0],0);if(oe<0)return null;const be=H(oe);if(ae.length===1)return{start:be,end:be};const Te=se(ae[ae.length-1],oe);return Te<0?null:{start:be,end:Math.max(be,H(Te))}},e[4]=x,e[5]=$):$=e[5];const P=$;let X;e[6]===Symbol.for("react.memo_cache_sentinel")?(X=()=>{const B=I.current;if(!B){L(null);return}L(Na(B))},e[6]=X):X=e[6];const Ne=X;let _,Z;e[7]!==j?(_=()=>{if(!j)return;let B=null;const H=()=>{B===null&&(B=window.requestAnimationFrame(()=>{B=null,Ne()}))};return document.addEventListener("scroll",H,{capture:!0,passive:!0}),window.addEventListener("resize",H),()=>{B!==null&&window.cancelAnimationFrame(B),document.removeEventListener("scroll",H,{capture:!0}),window.removeEventListener("resize",H)}},Z=[j,Ne],e[7]=j,e[8]=_,e[9]=Z):(_=e[8],Z=e[9]),n.useEffect(_,Z);let ee;e[10]!==N?(ee=()=>{N&&(T(!0),o.current=!0,Ne(),window.getSelection()?.removeAllRanges())},e[10]=N,e[11]=ee):ee=e[11];const le=ee;let te;e[12]!==C||e[13]!==v||e[14]!==f||e[15]!==d||e[16]!==b||e[17]!==P||e[18]!==N?(te=B=>{const H=v??(b?"draft":null);if(!N||!H||!f){V();return}const re=P(N);C({directory:f,sessionKey:H},{source:"file-quote",fileLabel:d,startLine:re?.start??0,endLine:re?.end??0,code:N,language:"",text:B.trim()}),V(),queueMicrotask(ho)},e[12]=C,e[13]=v,e[14]=f,e[15]=d,e[16]=b,e[17]=P,e[18]=N,e[19]=te):te=e[19];const Ce=te;if(!p)return null;let O;e[20]!==j||e[21]!==P||e[22]!==N?(O=j?P(N):null,e[20]=j,e[21]=P,e[22]=N,e[23]=O):O=e[23];const xe=O;let ve;e[24]!==p.x||e[25]!==p.y?(ve={left:p.x,top:p.y,transform:"translate(-50%, -100%)"},e[24]=p.x,e[25]=p.y,e[26]=ve):ve=e[26];let ce;e[27]!==j||e[28]!==W?(ce=j&&W&&W.length>0?Vn.createPortal(r.jsx("div",{className:"pointer-events-none fixed inset-0 z-40",children:W.map(mo)}),document.body):null,e[27]=j,e[28]=W,e[29]=ce):ce=e[29];let ue;e[30]!==j||e[31]!==d||e[32]!==xe||e[33]!==le||e[34]!==Ce||e[35]!==g?(ue=j?r.jsx("div",{className:"w-[min(420px,80vw)]",children:r.jsx(lo,{fileLabel:d,lineRange:xe?{start:xe.start,end:xe.end}:void 0,onSave:Ce,onCancel:V})}):r.jsx("div",{className:G("flex items-center whitespace-nowrap","oc-glass-popover rounded-full border border-[var(--interactive-border)]","shadow-[0_4px_16px_-4px_rgb(0_0_0_/_0.12)]","p-1"),children:r.jsx("button",{type:"button",onClick:le,className:G("px-3.5 py-1.5 rounded-full","text-sm font-medium","text-[var(--surface-foreground)]","hover:bg-[var(--interactive-hover)]","transition-colors duration-150"),title:g("chat.textSelection.title.commentOnSelection"),children:g("chat.textSelection.actions.comment")})}),e[30]=j,e[31]=d,e[32]=xe,e[33]=le,e[34]=Ce,e[35]=g,e[36]=ue):ue=e[36];let we;return e[37]!==ve||e[38]!==ce||e[39]!==ue?(we=Vn.createPortal(r.jsxs("div",{ref:A,className:"fixed z-50",style:ve,children:[ce,ue]}),document.body),e[37]=ve,e[38]=ce,e[39]=ue,e[40]=we):we=e[40],we}function mo(a,e){return r.jsx("div",{className:"oc-chat-comment-rect absolute",style:{left:a.left,top:a.top,width:a.width,height:a.height}},e)}function ho(){Ca()}function po(a){return a.trim()}function go(a){const e=a.trim();return[e,e.slice(0,32),e.split(" ").slice(0,4).join(" ")].filter(xo)}function xo(a){return a.length>=8}function vo(a){return a.addDraft}function wo(a){return a.newSessionDraft?.open}function bo(a){return a.currentSessionId}const yo=(a,e)=>{if(!e)return null;const s=Number.parseInt(a.trim(),10);return!Number.isFinite(s)||s<1?null:Math.min(s,e.state.doc.lines)},Hn=(a,e)=>{const s=a.state.doc.lineAt(e.main.head);return{lineNumber:s.number,character:e.main.head-s.from+1,selection:e}},Gn=(a,e,s)=>{const d=a.state.doc.line(e),x=Math.max(1,Math.min(s,d.length+1)),g=d.from+x-1;a.dispatch({selection:Za.cursor(g),effects:jt.scrollIntoView(g,{y:"center"})})};function jo({open:a,onOpenChange:e,view:s,variant:d="overlay"}){const{t:x}=$t(),[g,v]=n.useState(""),b=n.useRef(null),f=n.useRef(!1),C=n.useRef(null),p=n.useRef(null),F=n.useMemo(()=>yo(g,s),[g,s]);n.useEffect(()=>{!a||!s||(f.current=!1,b.current=Hn(s,s.state.selection),v(""))},[a,s]),n.useEffect(()=>{a&&window.requestAnimationFrame(()=>{p.current?.focus(),p.current?.select()})},[a]),n.useEffect(()=>{if(!(!a||!s||!b.current)){if(F===null){const{selection:o}=b.current;s.dispatch({selection:o,effects:jt.scrollIntoView(o.main.from,{y:"center"})});return}Gn(s,F,b.current.character)}},[F,a,s]);const N=n.useCallback(()=>{if(!s||f.current||!b.current)return;const{selection:o}=b.current;s.dispatch({selection:o,effects:jt.scrollIntoView(o.main.from,{y:"center"})})},[s]),R=n.useCallback(o=>{o||N(),e(o)},[e,N]),j=n.useCallback(()=>{!s||F===null||!b.current||(f.current=!0,Gn(s,F,b.current.character),e(!1),s.focus())},[F,e,s]);n.useEffect(()=>{if(!a)return;const o=I=>{const W=C.current,L=I.target;!W||!(L instanceof Node)||W.contains(L)||R(!1)},A=I=>{I.key==="Escape"&&(I.preventDefault(),R(!1))};return document.addEventListener("pointerdown",o,!0),document.addEventListener("keydown",A,!0),()=>{document.removeEventListener("pointerdown",o,!0),document.removeEventListener("keydown",A,!0)}},[R,a,d]);const T=n.useMemo(()=>{if(!s)return x("goToLineDialog.helper.editorUnavailable");if(F===null){const o=b.current??Hn(s,s.state.selection);return x("goToLineDialog.helper.currentLineRange",{current:o.lineNumber,max:s.state.doc.lines})}return x("goToLineDialog.helper.goToLine",{line:F})},[F,x,s]);return d==="inline"?a?r.jsxs("div",{ref:C,className:"ml-1 flex h-6 items-center gap-1",children:[r.jsx(nr,{ref:p,type:"number",min:1,step:1,inputMode:"numeric",value:g,onChange:o=>v(o.target.value),onKeyDown:o=>{o.key==="Enter"&&(o.preventDefault(),j())},placeholder:x("goToLineDialog.field.linePlaceholderShort"),className:"h-6 w-20 rounded-md border-border/70 bg-transparent px-2 typography-meta"}),r.jsx(z,{variant:"outline",size:"xs",onClick:j,disabled:!s||F===null,className:"h-6 px-2",children:x("goToLineDialog.actions.go")})]}):null:r.jsx("div",{ref:C,className:G("absolute left-3 top-3 z-40 w-[min(32rem,calc(100%-1.5rem))] rounded-xl border border-[var(--interactive-border)] bg-[color:color-mix(in_srgb,var(--surface-elevated)_94%,transparent)] p-2.5 shadow-lg backdrop-blur-sm transition-all",a?"pointer-events-auto translate-y-0 opacity-100":"pointer-events-none -translate-y-1 opacity-0"),children:r.jsxs("div",{className:"min-w-0",children:[r.jsx(nr,{ref:p,type:"number",min:1,step:1,inputMode:"numeric",value:g,onChange:o=>v(o.target.value),onKeyDown:o=>{o.key==="Enter"&&(o.preventDefault(),j())},placeholder:x("goToLineDialog.field.linePlaceholder"),className:"h-8 w-full rounded-md border-border/70 bg-background/60 typography-ui-label"}),r.jsx("div",{className:"mt-2 rounded-md bg-primary/15 px-3 py-1.5 typography-ui-label text-foreground/95",children:T})]})})}const Fo=(a,e)=>{const s=e.trim().toLowerCase(),d=[];if(!s)return d;const x=a.toLowerCase();let g=0;for(;;){const v=x.indexOf(s,g);if(v===-1)break;d.push({start:v,end:v+s.length}),g=v+s.length}return d},Lr="data-md-find",gs="data-md-find-current",ci="rounded-[2px] bg-status-warning/30 text-foreground",No="rounded-[2px] bg-status-warning/60 text-foreground",Co=120,So=a=>a instanceof Element&&a.hasAttribute(Lr),ko=a=>a.target instanceof Element&&a.target.hasAttribute(Lr)?!0:[...a.addedNodes].some(e=>So(e)),ui=a=>{const e=new Set;a.querySelectorAll(`mark[${Lr}]`).forEach(s=>{const d=s.parentNode;d&&(d.replaceChild(document.createTextNode(s.textContent??""),s),e.add(d))}),e.forEach(s=>s.normalize())},Ro=(a,e)=>{ui(a);const s=e.trim().toLowerCase();if(!s)return[];const d=[],x=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,{acceptNode(v){const b=v.parentElement;return!b||b.closest("svg, script, style")?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),g=[];for(;x.nextNode();){const v=x.currentNode;v instanceof Text&&g.push(v)}for(const v of g){const b=v.nodeValue??"";if(!b)continue;const f=Fo(b,s);if(f.length===0)continue;const C=v.parentNode;if(!C)continue;const p=document.createDocumentFragment();let F=0;for(const N of f){N.start>F&&p.appendChild(document.createTextNode(b.slice(F,N.start)));const R=document.createElement("mark");R.setAttribute(Lr,""),R.className=ci,R.textContent=b.slice(N.start,N.end),p.appendChild(R),d.push(R),F=N.end}F<b.length&&p.appendChild(document.createTextNode(b.slice(F))),C.replaceChild(p,v)}return d},qn=({containerRef:a,open:e,onOpenChange:s,focusNonce:d,className:x})=>{const{t:g}=$t(),[v,b]=n.useState(""),[f,C]=n.useState(0),[p,F]=n.useState(0),N=n.useRef(null),R=n.useRef([]),j=n.useRef(v);j.current=v;const T=n.useRef(null),o=n.useRef(null),A=n.useCallback((S,M=!1)=>{const $=a.current;if(!$){R.current=[],C(0),F(0);return}R.current=Ro($,S);const P=R.current.length;C(P),F(X=>!M||P===0?0:Math.min(X,P-1))},[a]),I=n.useCallback((S,M=!1)=>{T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{T.current=null,A(S,M)},Co)},[A]);n.useEffect(()=>()=>{T.current&&clearTimeout(T.current)},[]);const W=n.useCallback(()=>{s(!1);const S=o.current;o.current=null,S?.isConnected&&S.focus()},[s]);n.useEffect(()=>{const S=a.current;if(!e||!S)return;const M=new MutationObserver($=>{!j.current.trim()||!$.some(X=>!ko(X))||I(j.current,!0)});return M.observe(S,{childList:!0,subtree:!0,characterData:!0}),()=>{M.disconnect(),ui(S)}},[a,e,I]),n.useEffect(()=>{if(!e)return;const S=document.activeElement;S instanceof HTMLElement&&!o.current&&(o.current=S),N.current?.focus()},[e]),n.useEffect(()=>{e&&d>0&&(N.current?.focus(),N.current?.select())},[e,d]),n.useEffect(()=>{const S=a.current;if(!S||(S.querySelectorAll(`mark[${gs}]`).forEach($=>{$.removeAttribute(gs),$.className=ci}),f===0))return;const M=R.current[Math.min(Math.max(p,0),f-1)];M&&(M.setAttribute(gs,""),M.className=No,M.scrollIntoView({block:"nearest"}))},[a,p,f]);const L=n.useCallback(()=>{F(S=>f===0?0:(S+1)%f)},[f]),E=n.useCallback(()=>{F(S=>f===0?0:(S-1+f)%f)},[f]),V=n.useCallback(S=>{S.key==="Enter"?(S.preventDefault(),S.shiftKey?E():L()):S.key==="Escape"&&(S.preventDefault(),W())},[W,L,E]);return e?r.jsxs("div",{className:G("absolute right-3 top-3 z-10 flex items-center gap-1 rounded-lg border border-border/60 bg-[var(--surface-elevated)] px-1.5 py-1 shadow-lg",x),children:[r.jsx(y,{name:"search",className:"ml-0.5 size-3.5 text-muted-foreground"}),r.jsx(nr,{ref:N,value:v,onChange:S=>{b(S.target.value),I(S.target.value)},onKeyDown:V,placeholder:g("filesView.preview.find.placeholder"),"aria-label":g("filesView.preview.find.placeholder"),className:"h-7 w-40 rounded-md px-2 py-0 text-sm md:w-56"}),r.jsx("span",{className:"min-w-12 px-1 text-center typography-micro text-muted-foreground tabular-nums","aria-live":"polite","aria-label":f>0?g("filesView.preview.find.countAria",{current:p+1,total:f}):g("filesView.preview.find.noMatches"),children:v.trim()&&f===0?g("filesView.preview.find.noMatches"):f>0?`${p+1}/${f}`:""}),r.jsx(z,{type:"button",variant:"ghost",size:"sm",className:"size-6 p-0 text-muted-foreground",onClick:E,title:g("filesView.preview.find.previousAria"),"aria-label":g("filesView.preview.find.previousAria"),disabled:f===0,children:r.jsx(y,{name:"arrow-up",className:"size-3.5"})}),r.jsx(z,{type:"button",variant:"ghost",size:"sm",className:"size-6 p-0 text-muted-foreground",onClick:L,title:g("filesView.preview.find.nextAria"),"aria-label":g("filesView.preview.find.nextAria"),disabled:f===0,children:r.jsx(y,{name:"arrow-down",className:"size-3.5"})}),r.jsx(z,{type:"button",variant:"ghost",size:"sm",className:"size-6 p-0 text-muted-foreground",onClick:W,title:g("filesView.preview.find.closeAria"),"aria-label":g("filesView.preview.find.closeAria"),children:r.jsx(y,{name:"close",className:"size-3.5"})})]}):null},To=a=>{let e=!0;return{poll:async()=>{if(!e||a.isDirty())return!1;const s=a.getLoadedContent(),d=a.getLoadedRevision();try{const x=await a.readContent();if(!e||a.isDirty()||d!==a.getLoadedRevision())return!1;if(x===s)return!0;const g=await a.readContent();return!e||a.isDirty()||g!==x||d!==a.getLoadedRevision()?!1:(a.applyContent(x),!0)}catch{return!1}},dispose:()=>{e=!1}}},Vo=1,Eo=(a,e)=>e.size!==a.size||e.mtimeMs!==void 0&&a.mtimeMs!==void 0&&Math.abs(e.mtimeMs-a.mtimeMs)>=Vo;function Xn(){const a=pt.c(8),[e]=us.useState(Do),s=us.useRef(!1);let d;a[0]!==e?(d=f=>{if(f==null){e.cleanUp(),s.current=!1;return}s.current||(s.current=!0,e.setup(f,f.firstElementChild??void 0))},a[0]=e,a[1]=d):d=a[1];const x=d;let g,v;a[2]!==e?(g=()=>()=>{s.current=!1,e.cleanUp()},v=[e],a[2]=e,a[3]=g,a[4]=v):(g=a[3],v=a[4]),us.useLayoutEffect(g,v);let b;return a[5]!==x||a[6]!==e?(b={virtualizer:e,setScroller:x},a[5]=x,a[6]=e,a[7]=b):b=a[7],b}function Do(){return new no}function Po(a){return!(!a.autoSaveEnabled||!a.isDirty||!a.canWrite||a.isSaving||a.fileLoading||a.isNonEditableBinary||!a.selectedFilePath||a.loadedFilePath!==a.selectedFilePath)}function Mo(a){return a.selectedFilePath?a.isDirty?!(a.fileLoading||a.loadedFilePath!==a.selectedFilePath||a.isNonEditableBinary||a.draftContent===""&&a.fileContent!==""&&a.loadedFilePath!==a.selectedFilePath):!0:!1}const zo='<mxfile><diagram id="new" name="Page-1"><mxGraphModel dx="0" dy="0" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel></diagram></mxfile>';function Jn(){if(typeof document>"u")return!1;const a=document.documentElement.getAttribute("data-theme");return a==="dark"||!a&&window.matchMedia("(prefers-color-scheme: dark)").matches}const Lo=n.forwardRef(function({xml:e,readOnly:s,className:d,onChange:x},g){const v=n.useRef(e),b=n.useRef(null),f=n.useRef(!1),[C,p]=n.useState(Jn),F=n.useRef(e),N=n.useRef(e);N.current!==e&&(N.current=e,F.current=e,v.current=e);const R=n.useRef(C);R.current!==C&&(R.current=C,F.current=v.current);const j=n.useRef(null);n.useEffect(()=>{const A=()=>p(Jn());A();const I=new MutationObserver(A);return I.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>I.disconnect()},[]),n.useEffect(()=>{const A=setTimeout(()=>{j.current?.querySelector(".diagrams-iframe")?.focus()},600);return()=>clearTimeout(A)},[]),n.useImperativeHandle(g,()=>({getXml:()=>v.current}));const T=n.useCallback(()=>{!e&&!f.current&&(f.current=!0,setTimeout(()=>{b.current?.template({})},500))},[e]),o=n.useCallback(A=>{v.current=A.xml,x?.(A.xml)},[x]);return r.jsx("div",{ref:j,className:G("h-full w-full",d),children:r.jsx(oo,{ref:b,xml:F.current||zo,autosave:!0,urlParameters:{ui:s?"simple":C?"dark":"kennedy",spin:!0,libraries:!s,chrome:s,nav:s,layers:s,noSaveBtn:!0,noExitBtn:!0,saveAndExit:!1},onLoad:T,onAutoSave:o},C?"dark":"light")})}),Ao=a=>{const e=K(a);if(!e)return"";if(e==="/"||/^[A-Za-z]:\/$/.test(e))return e;const s=e.lastIndexOf("/");if(s<0)return e;if(s===0)return"/";const d=e.slice(0,s);return/^[A-Za-z]:$/.test(d)?`${d}/`:d},Io=a=>{const e=pt.c(8),{label:s,iconDataUrl:d}=a,[x,g]=n.useState(!1);let v;e[0]!==s?(v=s.trim().slice(0,1).toUpperCase()||"?",e[0]=s,e[1]=v):v=e[1];const b=v;if(d&&!x){let p;e[2]===Symbol.for("react.memo_cache_sentinel")?(p=()=>g(!0),e[2]=p):p=e[2];let F;return e[3]!==d?(F=r.jsx("img",{src:d,alt:"",className:"size-4 rounded-sm",onError:p}),e[3]=d,e[4]=F):F=e[4],F}let f;e[5]===Symbol.for("react.memo_cache_sentinel")?(f=G("size-4 rounded-sm flex items-center justify-center","bg-[var(--surface-muted)] text-[9px] font-medium text-muted-foreground"),e[5]=f):f=e[5];let C;return e[6]!==b?(C=r.jsx("span",{className:f,children:b}),e[6]=b,e[7]=C):C=e[7],C},Oo=a=>a.slice().sort((e,s)=>e.type!==s.type?e.type==="directory"?-1:1:e.name.localeCompare(s.name)),K=a=>{if(!a)return"";const e=a.replace(/\\/g,"/"),s=e.startsWith("//");let d=e.replace(/\/+/g,"/");s&&!d.startsWith("//")&&(d=`/${d}`);const x=d==="/",g=/^[A-Za-z]:\/$/.test(d);return!x&&!g&&(d=d.replace(/\/+$/,"")),d},Bo=a=>a.startsWith("/")||a.startsWith("//")||/^[A-Za-z]:\//.test(a),Bt=a=>/^[A-Za-z]:\//.test(a)?a.toLowerCase():a,zr=(a,e)=>{const s=K(e),d=K(a);if(!s||!d)return!1;const x=Bt(s),g=Bt(d);return g===x||g.startsWith(`${x}/`)},Yn=(a,e)=>{const s=K(e),d=K(a);if(!zr(d,s))return[];const g=d.slice(s.length).replace(/^\//,"").split("/"),v=[];let b=s;for(let f=0;f<g.length-1;f++)b=b?`${b}/${g[f]}`:g[f],v.push(b);return v},Pr=(a,e)=>{if(!e)return"";const s=K(e);if(!a||!zr(s,a))return s;const d=s.slice(a.length);return d.startsWith("/")?d.slice(1):d},$o=new Set(["node_modules"]),Wo=a=>{const e=pt.c(3),{status:s}=a;let d;e[0]===Symbol.for("react.memo_cache_sentinel")?(d={open:"var(--status-info)",modified:"var(--status-warning)","git-modified":"var(--status-warning)","git-added":"var(--status-success)","git-deleted":"var(--status-error)"},e[0]=d):d=e[0];const x=d[s];let g;return e[1]!==x?(g=r.jsx("span",{className:"size-2 rounded-full",style:{backgroundColor:x}}),e[1]=x,e[2]=g):g=e[2],g},Zn=a=>{const e=pt.c(11),{name:s}=a,d=n.useRef(null),x=n.useRef(null),[g,v]=n.useState(!1);let b;e[0]===Symbol.for("react.memo_cache_sentinel")?(b=()=>{const N=d.current,R=x.current;if(!N||!R)return;const j=()=>{v(R.scrollWidth>N.clientWidth+1)};j();const T=new ResizeObserver(j);return T.observe(N),T.observe(R),()=>{T.disconnect()}},e[0]=b):b=e[0];let f;e[1]!==s?(f=[s],e[1]=s,e[2]=f):f=e[2],n.useLayoutEffect(b,f);let C;e[3]!==s?(C=r.jsx("span",{ref:x,"aria-hidden":"true",className:"invisible absolute whitespace-nowrap",children:s}),e[3]=s,e[4]=C):C=e[4];let p;e[5]!==s||e[6]!==g?(p=g?r.jsxs("span",{className:"open-file-name-marquee-track",children:[r.jsx("span",{className:"open-file-name-marquee-item",children:s}),r.jsx("span",{className:"open-file-name-marquee-item","aria-hidden":"true",children:s})]}):r.jsx("span",{className:"block min-w-0 truncate",children:s}),e[5]=s,e[6]=g,e[7]=p):p=e[7];let F;return e[8]!==C||e[9]!==p?(F=r.jsxs("span",{ref:d,className:"relative block min-w-0 flex-1 overflow-hidden whitespace-nowrap",children:[C,p]}),e[8]=C,e[9]=p,e[10]=F):F=e[10],F},_o=a=>$o.has(a),Uo=a=>{const e=K(a);return e==="node_modules"||e.endsWith("/node_modules")||e.includes("/node_modules/")},Ko=a=>{const s=(a instanceof Error?a.message:String(a??"")).toLowerCase();return s.includes("is a directory")||s.includes("eisdir")},Qn=a=>{const s=(a instanceof Error?a.message:String(a??"")).toLowerCase();return s.includes("file not found")||s.includes("enoent")||s.includes("no such file")||s.includes("does not exist")},Ot=2e5,Ho=2e5;function Go(a){const e=a.length>400?`${a.slice(0,200)}${a.slice(-200)}`:a;let s=2166136261;for(let d=0;d<e.length;d+=1)s^=e.charCodeAt(d),s=s+((s<<1)+(s<<4)+(s<<7)+(s<<8)+(s<<24))>>>0;return`${a.length}:${s.toString(16)}`}const qo=a=>{let e=0,s=0;for(let d=0;d<a.length;d+=1)a.charCodeAt(d)===10&&(d>0&&a.charCodeAt(d-1)===13?e+=1:s+=1);return e>s?`\r
|
|
5
|
+
`:`
|
|
6
|
+
`},di=a=>a.replace(/\r\n/g,`
|
|
7
|
+
`).replace(/\r/g,`
|
|
8
|
+
`),Xo=(a,e)=>{const s=di(a);return e===`\r
|
|
9
|
+
`?s.replace(/\n/g,`\r
|
|
10
|
+
`):s},fi=(a,e)=>r.jsx(Er,{filePath:a,extension:e}),ei=a=>{if(!a)return!1;const e=a.toLowerCase().split(".").pop();return e==="md"||e==="markdown"},Jo=a=>{if(!a)return!1;const e=a.toLowerCase().split(".").pop();return e==="json"||e==="jsonc"||e==="json5"||e==="geojson"},xs=a=>{if(!a)return!1;const e=a.toLowerCase().split(".").pop();return e==="html"||e==="htm"},Yo=a=>{const e=pt.c(76),{node:s,root:d,isExpanded:x,isActive:g,isMobile:v,isBrowserClient:b,alwaysShowActions:f,status:C,badge:p,permissions:F,downloadFile:N,contextMenuPath:R,setContextMenuPath:j,rightClickMenuPath:T,setRightClickMenuPath:o,onSelect:A,onToggle:I,onRevealPath:W,onOpenDialog:L}=a,{t:E}=$t(),V=s.type==="directory",{canRename:S,canCreateFile:M,canCreateFolder:$,canDelete:P,canReveal:X}=F,Ne=!V&&!!N,_=X&&!b,Z=S||M||$||P||Ne||_;let ee;e[0]!==Z||e[1]!==s.path||e[2]!==o?(ee=fe=>{Z&&(fe?.preventDefault(),o(s.path))},e[0]=Z,e[1]=s.path,e[2]=o,e[3]=ee):ee=e[3];const le=ee;let te;e[4]!==V||e[5]!==s||e[6]!==A||e[7]!==I?(te=()=>{V?I(s.path):A(s)},e[4]=V,e[5]=s,e[6]=A,e[7]=I,e[8]=te):te=e[8];const Ce=te;let O;e[9]!==s.path||e[10]!==j||e[11]!==o?(O=fe=>{fe.stopPropagation(),o(null),j(s.path)},e[9]=s.path,e[10]=j,e[11]=o,e[12]=O):O=e[12];const xe=O;let ve;e[13]!==M||e[14]!==$||e[15]!==P||e[16]!==S||e[17]!==_||e[18]!==N||e[19]!==b||e[20]!==V||e[21]!==s||e[22]!==L||e[23]!==W||e[24]!==d||e[25]!==E?(ve=fe=>{const{Item:pe,Separator:et}=fe;return r.jsxs(r.Fragment,{children:[S&&r.jsxs(pe,{onClick:q=>{q.stopPropagation(),L("rename",s)},children:[r.jsx(y,{name:"edit",className:"mr-2 size-4"})," ",E("sidebarFilesTree.menu.rename")]}),r.jsxs(pe,{onClick:q=>{q.stopPropagation(),Mr(s.path).then(at=>{if(at.ok){Y.success(E("sidebarFilesTree.toast.pathCopied"));return}Y.error(E("sidebarFilesTree.toast.copyFailed"))})},children:[r.jsx(y,{name:"file-copy",className:"mr-2 size-4"})," ",E("sidebarFilesTree.menu.copyPath")]}),r.jsxs(pe,{onClick:q=>{q.stopPropagation();const at=Pr(d,s.path)||s.path;Mr(at).then(me=>{if(me.ok){Y.success(E("filesView.toast.relativePathCopied"));return}Y.error(E("sidebarFilesTree.toast.copyFailed"))})},children:[r.jsx(y,{name:"file-copy-2",className:"mr-2 size-4"})," ",E("filesView.tree.menu.copyRelativePath")]}),!V&&N&&r.jsxs(pe,{onClick:q=>{q.stopPropagation(),N(s.path).catch(at=>{console.error("Download failed:",at),Y.error(E("sidebarFilesTree.toast.operationFailed"))})},children:[r.jsx(y,{name:"download",className:"mr-2 size-4"})," ",E(b?"sidebarFilesTree.menu.download":"sidebarFilesTree.menu.save")]}),_&&r.jsxs(pe,{onClick:q=>{q.stopPropagation(),W(s.path)},children:[r.jsx(y,{name:"folder-received",className:"mr-2 size-4"})," ",E(Ua())]}),V&&(M||$)&&r.jsxs(r.Fragment,{children:[r.jsx(et,{}),M&&r.jsxs(pe,{onClick:q=>{q.stopPropagation(),L("createFile",s)},children:[r.jsx(y,{name:"file-add",className:"mr-2 size-4"})," ",E("sidebarFilesTree.menu.newFile")]}),$&&r.jsxs(pe,{onClick:q=>{q.stopPropagation(),L("createFolder",s)},children:[r.jsx(y,{name:"folder-add",className:"mr-2 size-4"})," ",E("sidebarFilesTree.menu.newFolder")]})]}),P&&r.jsxs(r.Fragment,{children:[r.jsx(et,{}),r.jsxs(pe,{onClick:q=>{q.stopPropagation(),L("delete",s)},className:"text-destructive focus:text-destructive",children:[r.jsx(y,{name:"delete-bin",className:"mr-2 size-4"})," ",E("sidebarFilesTree.menu.delete")]})]})]})},e[13]=M,e[14]=$,e[15]=P,e[16]=S,e[17]=_,e[18]=N,e[19]=b,e[20]=V,e[21]=s,e[22]=L,e[23]=W,e[24]=d,e[25]=E,e[26]=ve):ve=e[26];const ce=ve,ue=T===s.path;let we;e[27]!==s.path||e[28]!==o?(we=fe=>o(fe?s.path:null),e[27]=s.path,e[28]=o,e[29]=we):we=e[29];const B=v?void 0:le;let H;e[30]!==B?(H=r.jsx("div",{className:"group relative flex items-center",onContextMenu:B}),e[30]=B,e[31]=H):H=e[31];const re=v?void 0:le,se=g?"bg-interactive-selection/70":"hover:bg-interactive-hover/40";let Se;e[32]!==se?(Se=G("flex w-full items-center gap-1.5 rounded-md px-2 py-1 text-left text-foreground transition-colors pr-8 select-none",se),e[32]=se,e[33]=Se):Se=e[33];let ae;e[34]!==V||e[35]!==x||e[36]!==s.extension||e[37]!==s.path?(ae=V?x?r.jsx(y,{name:"folder-open",className:"size-4 flex-shrink-0 text-muted-foreground"}):r.jsx(y,{name:"folder-3",className:"size-4 flex-shrink-0 text-muted-foreground"}):fi(s.path,s.extension),e[34]=V,e[35]=x,e[36]=s.extension,e[37]=s.path,e[38]=ae):ae=e[38];let oe;e[39]!==s.name||e[40]!==s.path?(oe=r.jsx("span",{className:"min-w-0 flex-1 truncate typography-meta",title:s.path,children:s.name}),e[39]=s.name,e[40]=s.path,e[41]=oe):oe=e[41];let be;e[42]!==V||e[43]!==C?(be=!V&&C&&r.jsx(Wo,{status:C}),e[42]=V,e[43]=C,e[44]=be):be=e[44];let Te;e[45]!==p||e[46]!==V?(Te=V&&p&&r.jsxs("span",{className:"text-xs flex items-center gap-1 ml-auto mr-1",children:[p.modified>0&&r.jsxs("span",{className:"text-[var(--status-warning)]",children:["M",p.modified]}),p.added>0&&r.jsxs("span",{className:"text-[var(--status-success)]",children:["+",p.added]})]}),e[45]=p,e[46]=V,e[47]=Te):Te=e[47];let de;e[48]!==Ce||e[49]!==Se||e[50]!==ae||e[51]!==oe||e[52]!==be||e[53]!==Te||e[54]!==re?(de=r.jsxs("button",{type:"button",onClick:Ce,onContextMenu:re,className:Se,children:[ae,oe,be,Te]}),e[48]=Ce,e[49]=Se,e[50]=ae,e[51]=oe,e[52]=be,e[53]=Te,e[54]=re,e[55]=de):de=e[55];let Ve;e[56]!==f||e[57]!==R||e[58]!==xe||e[59]!==Z||e[60]!==v||e[61]!==s.path||e[62]!==ce||e[63]!==j?(Ve=Z&&r.jsx("div",{className:G("absolute right-1 top-1/2 -translate-y-1/2",f?"opacity-100":"opacity-0 focus-within:opacity-100 group-hover:opacity-100"),children:r.jsxs(vs,{open:R===s.path,onOpenChange:fe=>j(fe?s.path:null),children:[r.jsx(ws,{asChild:!0,children:r.jsx(z,{variant:"ghost",size:"icon",className:"size-6",onClick:xe,children:r.jsx(y,{name:"more-2-fill",className:"size-4"})})}),r.jsx(bs,{align:"end",side:"bottom",onCloseAutoFocus:()=>j(null),children:ce({Item:Dr,Separator:_a})})]})}),e[56]=f,e[57]=R,e[58]=xe,e[59]=Z,e[60]=v,e[61]=s.path,e[62]=ce,e[63]=j,e[64]=Ve):Ve=e[64];let Ee;e[65]!==de||e[66]!==Ve||e[67]!==H?(Ee=r.jsxs(Xa,{render:H,children:[de,Ve]}),e[65]=de,e[66]=Ve,e[67]=H,e[68]=Ee):Ee=e[68];let ke;e[69]!==ce?(ke=r.jsx(Ha,{className:"min-w-[180px]",children:ce({Item:qa,Separator:Ga})}),e[69]=ce,e[70]=ke):ke=e[70];let Q;return e[71]!==Ee||e[72]!==ke||e[73]!==ue||e[74]!==we?(Q=r.jsxs(Ja,{open:ue,onOpenChange:we,children:[Ee,ke]}),e[71]=Ee,e[72]=ke,e[73]=ue,e[74]=we,e[75]=Q):Q=e[75],Q},Zo=a=>{const e=pt.c(83),{activeDialog:s,dialogData:d,dialogInputValue:x,onDialogInputChange:g,isDialogSubmitting:v,onDialogSubmit:b,onClose:f,inputRef:C}=a,{t:p}=$t(),F=!!s;let N;e[0]!==f?(N=O=>!O&&f(),e[0]=f,e[1]=N):N=e[1];let R;e[2]!==s||e[3]!==p?(R=s==="createFile"&&p("filesView.dialog.createFile.title"),e[2]=s,e[3]=p,e[4]=R):R=e[4];let j;e[5]!==s||e[6]!==p?(j=s==="createFolder"&&p("filesView.dialog.createFolder.title"),e[5]=s,e[6]=p,e[7]=j):j=e[7];let T;e[8]!==s||e[9]!==p?(T=s==="rename"&&p("filesView.dialog.rename.title"),e[8]=s,e[9]=p,e[10]=T):T=e[10];let o;e[11]!==s||e[12]!==p?(o=s==="delete"&&p("filesView.dialog.delete.title"),e[11]=s,e[12]=p,e[13]=o):o=e[13];let A;e[14]!==R||e[15]!==j||e[16]!==T||e[17]!==o?(A=r.jsxs(ai,{children:[R,j,T,o]}),e[14]=R,e[15]=j,e[16]=T,e[17]=o,e[18]=A):A=e[18];let I;e[19]!==s||e[20]!==d?.path||e[21]!==p?(I=s==="createFile"&&p("filesView.dialog.createFile.description",{path:d?.path??p("filesView.dialog.rootFallback")}),e[19]=s,e[20]=d?.path,e[21]=p,e[22]=I):I=e[22];let W;e[23]!==s||e[24]!==d?.path||e[25]!==p?(W=s==="createFolder"&&p("filesView.dialog.createFolder.description",{path:d?.path??p("filesView.dialog.rootFallback")}),e[23]=s,e[24]=d?.path,e[25]=p,e[26]=W):W=e[26];let L;e[27]!==s||e[28]!==d?.name||e[29]!==p?(L=s==="rename"&&p("filesView.dialog.rename.description",{name:d?.name??""}),e[27]=s,e[28]=d?.name,e[29]=p,e[30]=L):L=e[30];let E;e[31]!==s||e[32]!==d?.name||e[33]!==p?(E=s==="delete"&&p("filesView.dialog.delete.description",{name:d?.name??""}),e[31]=s,e[32]=d?.name,e[33]=p,e[34]=E):E=e[34];let V;e[35]!==L||e[36]!==E||e[37]!==I||e[38]!==W?(V=r.jsxs(oi,{children:[I,W,L,E]}),e[35]=L,e[36]=E,e[37]=I,e[38]=W,e[39]=V):V=e[39];let S;e[40]!==V||e[41]!==A?(S=r.jsxs(ii,{children:[A,V]}),e[40]=V,e[41]=A,e[42]=S):S=e[42];let M;e[43]!==s||e[44]!==x||e[45]!==C||e[46]!==g||e[47]!==b||e[48]!==p?(M=s!=="delete"&&r.jsx("div",{className:"py-4",children:r.jsx(nr,{value:x,onChange:O=>g(O.target.value),placeholder:p(s==="rename"?"filesView.dialog.rename.placeholder":"filesView.dialog.namePlaceholder"),onKeyDown:O=>{O.key==="Enter"&&b()},ref:C})}),e[43]=s,e[44]=x,e[45]=C,e[46]=g,e[47]=b,e[48]=p,e[49]=M):M=e[49];let $;e[50]!==p?($=p("filesView.dialog.cancel"),e[50]=p,e[51]=$):$=e[51];let P;e[52]!==v||e[53]!==f||e[54]!==$?(P=r.jsx(z,{variant:"outline",onClick:f,disabled:v,children:$}),e[52]=v,e[53]=f,e[54]=$,e[55]=P):P=e[55];const X=s==="delete"?"destructive":"default";let Ne;e[56]!==b?(Ne=()=>{b()},e[56]=b,e[57]=Ne):Ne=e[57];let _;e[58]!==s||e[59]!==x||e[60]!==v?(_=v||s!=="delete"&&!x.trim(),e[58]=s,e[59]=x,e[60]=v,e[61]=_):_=e[61];let Z;e[62]!==s||e[63]!==v||e[64]!==p?(Z=v?r.jsx(y,{name:"loader-4",className:"size-4 animate-spin"}):p(s==="delete"?"filesView.dialog.delete.confirm":"filesView.dialog.confirm"),e[62]=s,e[63]=v,e[64]=p,e[65]=Z):Z=e[65];let ee;e[66]!==X||e[67]!==Ne||e[68]!==_||e[69]!==Z?(ee=r.jsx(z,{variant:X,onClick:Ne,disabled:_,children:Z}),e[66]=X,e[67]=Ne,e[68]=_,e[69]=Z,e[70]=ee):ee=e[70];let le;e[71]!==P||e[72]!==ee?(le=r.jsxs(li,{children:[P,ee]}),e[71]=P,e[72]=ee,e[73]=le):le=e[73];let te;e[74]!==C||e[75]!==S||e[76]!==M||e[77]!==le?(te=r.jsxs(ni,{initialFocus:C,children:[S,M,le]}),e[74]=C,e[75]=S,e[76]=M,e[77]=le,e[78]=te):te=e[78];let Ce;return e[79]!==F||e[80]!==N||e[81]!==te?(Ce=r.jsx(si,{open:F,onOpenChange:N,children:te}),e[79]=F,e[80]=N,e[81]=te,e[82]=Ce):Ce=e[82],Ce},ti=(a,e,s)=>{const d=pt.c(8),[x,g]=n.useState(""),[v,b]=n.useState(0);let f,C;d[0]!==a||d[1]!==s||d[2]!==e?(f=()=>{if(!a){g("");return}let F=!1;g("");const N=va(),R=wa(N);ba(N).then(T=>{F||!T||(g(a),e(null))}).catch(T=>{F||(e(T instanceof Error?T.message:s),g(a))});const j=ya(()=>{F||(g(a),b(Qo),e(null))});return()=>{F=!0,R(),j()}},C=[a,e,s],d[0]=a,d[1]=s,d[2]=e,d[3]=f,d[4]=C):(f=d[3],C=d[4]),n.useEffect(f,C);let p;return d[5]!==v||d[6]!==x?(p={readyKey:x,nonce:v},d[5]=v,d[6]=x,d[7]=p):p=d[7],p},bu=({mode:a="full"})=>{const{t:e}=$t(),{files:s,runtime:d}=Sa(),{currentTheme:x,availableThemes:g,lightThemeId:v,darkThemeId:b}=ka(),{isMobile:f,isTablet:C,screenWidth:p}=Ra(),F=fa(d.platform),N=f||C,R=ma(),j=ha(),T=ri()??"",o=K(T.trim()),A=a!=="editor-only",I=a==="editor-only"&&!f,W=pa(t=>t.searchFiles),L=Ta(T),[E,V]=n.useState(""),S=Va(E,200),M=n.useRef(null),[$,P]=n.useState(!1),[X,Ne]=n.useState(!0),[_,Z]=n.useState(!1),[ee,le]=n.useState(!1),te=n.useRef(0),Ce=n.useCallback(t=>{te.current=Math.max(0,te.current+(t?1:-1))},[]),[O,xe]=n.useState("edit"),[ve,ce]=n.useState("edit"),[ue,we]=n.useState("tree"),[B,H]=n.useState("edit"),[re,se]=n.useState("preview"),[Se,ae]=n.useState(0),oe=n.useRef({}),be=n.useRef({}),Te=n.useRef({}),de=n.useRef({}),Ve=n.useMemo(()=>g.find(t=>t.metadata.id===v)??zn(!1),[g,v]),Ee=n.useMemo(()=>g.find(t=>t.metadata.id===b)??zn(!0),[g,b]);n.useEffect(()=>{Un(Ve),Un(Ee)},[Ve,Ee]);const ke=n.useMemo(()=>[],[]),Q=Ge(t=>o?t.byRoot[o]?.openPaths??ke:ke),fe=Ge(t=>o?t.byRoot[o]?.selectedPath??null:null),pe=Ge(t=>o?t.byRoot[o]?.expandedPaths??ke:ke),et=Ge(t=>t.removeOpenPath),q=Ge(t=>t.removeOpenPathsByPrefix),at=Ge(t=>t.removeExpandedPathsByPrefix),me=Ge(t=>t.setSelectedPath),ys=Ge(t=>t.toggleExpandedPath),ir=Ge(t=>t.expandPaths),Ft=n.useCallback(t=>{const i=K(t),l=i.split("/"),u=l[l.length-1]||i,h=u.includes(".")?u.split(".").pop()?.toLowerCase():void 0;return{name:u,path:i,type:"file",extension:h}},[]),Nt=n.useMemo(()=>Q.map(Ft),[Q,Ft]),Ar=n.useMemo(()=>{if(fe){const t=Bt(fe);if(Q.some(i=>Bt(i)===t))return fe}return Q[0]??null},[Q,fe]),c=n.useMemo(()=>Ar?Ft(Ar):null,[Ar,Ft]),qe=c?.path??"",[,mi]=n.useState(0);n.useEffect(()=>{if(!o||!fe)return;const t=Bt(fe);Q.some(l=>Bt(l)===t)||me(o,Q[0]??null)},[Q,o,fe,me]);const ar=!!(o&&qe&&!zr(qe,o)),js=ar?Ln(qe):void 0,gt=n.useMemo(()=>({allowOutsideWorkspace:a==="editor-only"&&ar,outsideFileGrant:js,directory:o||void 0}),[a,ar,js,o]),Xe=n.useCallback(async t=>{const i=Ln(t),l=await Ea(t,o,a==="editor-only");return l.outsideFileGrant&&l.outsideFileGrant!==i&&mi(u=>u+1),l},[a,o]),Ir=n.useRef(null),[Fs,hi]=n.useState({left:!1,right:!1}),Ns=n.useCallback(()=>{const t=Ir.current;t&&hi({left:t.scrollLeft>2,right:t.scrollLeft+t.clientWidth<t.scrollWidth-2})},[]),Cs=n.useRef(Ns);Cs.current=Ns,n.useEffect(()=>{const t=Ir.current;if(!t)return;const i=()=>Cs.current();i(),t.addEventListener("scroll",i,{passive:!0});const l=new ResizeObserver(i);return l.observe(t),()=>{t.removeEventListener("scroll",i),l.disconnect()}},[Nt.length]);const[Ss,Or]=n.useState({}),[or,Wt]=n.useState({}),ze=n.useRef(new Set),Le=n.useRef(new Set),tt=n.useRef(new Map),ks=n.useRef(0),[Rs,lr]=n.useState([]),[pi,cr]=n.useState(!1),[D,he]=n.useState(""),{isPlaying:ur,play:gi,stop:xi}=Da(),[Ae,ot]=n.useState(!1),[rt,ge]=n.useState(null),[vi,Ie]=n.useState(""),[De,ne]=n.useState(null),[ie,ye]=n.useState(""),[_t,Br]=n.useState(!1),[Ts,wi]=n.useState(`
|
|
11
|
+
`),bi=n.useRef(null),Je=n.useRef(null),Pe=n.useRef(null),lt=n.useRef(""),Ut=n.useRef(""),st=n.useRef(null),Vs=n.useRef(null),We=n.useRef(null),$r=n.useRef(""),Wr=n.useRef(0),Kt=n.useRef(0),Ct=n.useRef(null),[dr,yi]=n.useState(0),[ji,St]=n.useState("idle"),[Fi,fr]=n.useState(!1),[xt,Es]=n.useState(!1),je=ht(t=>t.autoSaveEnabled),Ni=ht(t=>t.setAutoSaveEnabled),[_r,Ht]=n.useState(!1),kt=n.useRef(null),Gt=n.useRef(null),qt=n.useRef(!1),Xt=n.useRef(null),Jt=n.useRef(null),_e=n.useRef(null),mr=n.useRef(null),[Ci,Ur]=n.useState(0),Rt=n.useRef(null),vt=n.useRef({key:"",attempts:0});n.useEffect(()=>()=>{Rt.current!==null&&typeof window<"u"&&(window.cancelAnimationFrame(Rt.current),Rt.current=null)},[]);const[wt,Kr]=n.useState(null),[bt,Si]=n.useState(null),[ct,Ds]=n.useState(""),[ki,Hr]=n.useState(!1),[Ri,Ti]=n.useState(null),[Vi,Ei]=n.useState(null),[Di,Ps]=n.useState(!1),[Pi,Ms]=n.useState(!1),[Mi,Gr]=n.useState(!1),[zs,hr]=n.useState(!1),[Ls,As]=n.useState(0),pr=n.useRef(null),gr=n.useCallback(t=>{const i=t?.currentTarget??pr.current;if(!i)return;const l=document.activeElement;l&&l!==document.body&&l!==i&&(Pa(l)||i.contains(l))||i.focus({preventScroll:!0})},[]),qr=n.useRef(null),Is=!!s.writeFile,Os=!!s.createDirectory,Bs=!!s.rename,$s=!!s.delete,Ws=!!s.revealPath,zi=Vr(t=>t.availableApps),Li=Vr(t=>t.isCacheStale),_s=Vr(t=>t.initialize),Ai=Vr(t=>t.loadInstalledApps);n.useEffect(()=>{_s()},[_s]);const Ii=n.useCallback(t=>{s.revealPath&&s.revealPath(t).catch(()=>{Y.error(e("sidebarFilesTree.toast.revealFailed"))})},[s,e]),Oi=n.useCallback(async t=>{if(!c?.path||await ga(c.path,t.id,t.appName)||await En(c.path,t.appName))return;const u=Ao(c.path)||o;u&&await En(u,t.appName)||Y.error(e("filesView.toast.openInAppFailed",{app:t.appName}))},[o,c?.path,e]),Xr=n.useCallback((t,i)=>{Kr(t),Si(i),Ds(t==="rename"&&i.name||""),Hr(!1)},[]),[U,Ue]=n.useState(null),Tt=n.useRef(!1),ut=n.useRef(null),[Us,Vt]=n.useState(!1),Ye=ht(t=>t.pendingFileNavigation),xr=ht(t=>t.setPendingFileNavigation),Jr=ht(t=>t.pendingFileFocusPath),Yr=ht(t=>t.setPendingFileFocusPath),Ks=ht(t=>t.fileEditorKeymap),Yt=An(t=>t.settingsDefaultFileViewerPreview),Bi=An(t=>t.showMessageTTSButtons);n.useEffect(()=>{const t=()=>{Tt.current=!1,ut.current=null,Vt(!1)};return document.addEventListener("mouseup",t),()=>document.removeEventListener("mouseup",t)},[]),n.useEffect(()=>()=>{Xt.current!==null&&window.clearTimeout(Xt.current),Jt.current!==null&&window.clearTimeout(Jt.current)},[]);const $i=n.useCallback((t,i)=>{const l=t.split(`
|
|
12
|
+
`),u=Math.max(1,i.start),h=Math.min(l.length,i.end);return u>h?"":l.slice(u-1,h).join(`
|
|
13
|
+
`)},[]),vr=n.useRef(null),Wi=co({source:"file",fileLabel:c?.path??null,language:c?.path&&ds(c.path)||"text",getCodeForRange:t=>$i(D,uo(t)),toStoreRange:t=>({startLine:t.start,endLine:t.end}),fromDraftRange:t=>({start:t.startLine,end:t.endLine})}),{drafts:Hs,commentText:wr,setCommentText:Gs,editingDraftId:br,setSelection:qs,saveComment:Xs,cancel:Zt,reset:Js,startEdit:Ys,deleteDraft:Zs}=Wi;n.useEffect(()=>{Ue(null),Js(),ye(""),Br(!1)},[c?.path,Js]),n.useEffect(()=>{qs(U)},[U,qs]),n.useEffect(()=>{if(!U&&!br)return;const t=l=>{const u=l.target;u.closest('[data-comment-input="true"]')||u.closest('[data-comment-card="true"]')||u.closest(".cm-gutterElement")||u.closest("[data-sonner-toast]")||u.closest("[data-sonner-toaster]")||wr.trim()||(Ue(null),Zt())},i=setTimeout(()=>{document.addEventListener("click",t)},100);return()=>{clearTimeout(i),document.removeEventListener("click",t)}},[Zt,wr,br,U]);const Qs=n.useCallback((t,i)=>{const l=i??U??void 0;i&&Ue(i),Xs(t,l),Ue(null)},[U,Xs]),en=n.useCallback((t,i)=>{const l=[];for(const u of i){if(!(u&&typeof u.name=="string"&&u.name.length>0)||!R&&u.name.startsWith(".")||!j&&_o(u.name))continue;const h=u.name,m=K(u.path||""),w=m?Bo(m)?m:K(`${t}/${m}`):K(`${t}/${h}`),k=u.isDirectory?"directory":"file",J=k==="file"&&h.includes(".")?h.split(".").pop()?.toLowerCase():void 0;l.push({name:h,path:w,type:k,extension:J})}return Oo(l)},[j,R]),Oe=n.useCallback(async t=>{const i=K(t.trim());if(!i||ze.current.has(i)||Le.current.has(i))return;Le.current=new Set(Le.current),Le.current.add(i);const l=ks.current+1;ks.current=l,tt.current=new Map(tt.current),tt.current.set(i,l);const u=()=>tt.current.get(i)===l;await(s.listDirectory?s.listDirectory(i).then(m=>m.entries.map(w=>({name:w.name,path:w.path,isDirectory:w.isDirectory}))):xa.listLocalDirectory(i).then(m=>m.map(w=>({name:w.name,path:w.path,isDirectory:w.isDirectory})))).then(m=>{if(!u())return;const w=en(i,m);ze.current=new Set(ze.current),ze.current.add(i),Wt(k=>{if(!k[i])return k;const J={...k};return delete J[i],J}),Or(k=>({...k,[i]:w}))}).catch(m=>{if(!u())return;const w=m instanceof Error?m.message:String(m??"");if(w==="Directory not found"&&o&&i!==o){at(o,i),Wt(k=>{if(!k[i])return k;const J={...k};return delete J[i],J});return}console.error("Failed to load files directory:",m),Wt(k=>({...k,[i]:w}))}).finally(()=>{u()&&(tt.current=new Map(tt.current),tt.current.delete(i),Le.current=new Set(Le.current),Le.current.delete(i))})},[s,en,at,o]),yr=n.useCallback(async()=>{o&&(ze.current=new Set,Le.current=new Set,tt.current=new Map,Wt({}),Or(t=>Object.keys(t).length===0?t:{}),await Oe(o))},[Oe,o]),Ze=n.useCallback(async t=>{if(!t){await yr();return}const i=K(t);ze.current=new Set(ze.current),ze.current.delete(i),Le.current=new Set(Le.current),Le.current.delete(i),await Oe(i)},[Oe,yr]),tn=n.useRef(""),rn=n.useRef("");n.useEffect(()=>{if(!o)return;const t=`${o}|h${R?"1":"0"}|g${j?"1":"0"}`,i=tn.current!==o,l=rn.current!==t;!i&&!l||(i&&(tn.current=o,he(""),ge(null),Ie(""),ne(null),P(!1)),l&&(rn.current=t,ze.current=new Set,Le.current=new Set,tt.current=new Map,Wt({}),Or(u=>Object.keys(u).length===0?u:{}),Oe(o)))},[Oe,o,j,R]),n.useEffect(()=>{if(!s.listDirectory)return;const t=()=>{if(!document.hidden&&pe.length>0)for(const i of pe)Ze(i)};return document.addEventListener("visibilitychange",t),()=>document.removeEventListener("visibilitychange",t)},[pe,s.listDirectory,Ze]),n.useEffect(()=>{if(!s.listDirectory||pe.length===0)return;const t=setInterval(()=>{if(!document.hidden)for(const i of pe)Ze(i)},8e3);return()=>clearInterval(t)},[pe,s.listDirectory,Ze]);const _i=n.useCallback(async t=>{if(t?.preventDefault(),!bt||!wt)return;Hr(!0);const i=()=>{Kr(null)},l=h=>{Y.error(h)},u=()=>{Hr(!1)};if(wt==="createFile"){if(!ct.trim()){l(e("sidebarFilesTree.toast.filenameRequired")),u();return}if(!s.writeFile){l(e("sidebarFilesTree.toast.writeNotSupported")),u();return}const h=bt.path,m=h?`${h}/`:"",w=K(`${m}${ct.trim()}`);await s.writeFile(w,"").then(async k=>{k.success&&(Y.success(e("sidebarFilesTree.toast.fileCreated")),await Ze(h)),i()}).catch(()=>l(e("sidebarFilesTree.toast.operationFailed"))).finally(u);return}if(wt==="createFolder"){if(!ct.trim()){l(e("sidebarFilesTree.toast.folderNameRequired")),u();return}const h=bt.path,m=h?`${h}/`:"",w=K(`${m}${ct.trim()}`);await s.createDirectory(w).then(async k=>{k.success&&(Y.success(e("sidebarFilesTree.toast.folderCreated")),await Ze(h)),i()}).catch(()=>l(e("sidebarFilesTree.toast.operationFailed"))).finally(u);return}if(wt==="rename"){if(!ct.trim()){l(e("sidebarFilesTree.toast.nameRequired")),u();return}if(!s.rename){l(e("sidebarFilesTree.toast.renameNotSupported")),u();return}const h=bt.path,m=h.split("/").slice(0,-1).join("/"),w=m?`${m}/`:"",k=K(`${w}${ct.trim()}`);await s.rename(h,k).then(async J=>{J.success&&(Y.success(e("sidebarFilesTree.toast.renamedSuccessfully")),await Ze(m),o&&q(o,h),(c?.path===h||c?.path.startsWith(`${h}/`))&&(o&&me(o,null),he(""),ge(null),Ie(""),ne(null),f&&P(!1))),i()}).catch(()=>l(e("sidebarFilesTree.toast.operationFailed"))).finally(u);return}if(wt==="delete"){if(!s.delete){l(e("sidebarFilesTree.toast.deleteNotSupported")),u();return}const h=bt.path,m=h.split("/").slice(0,-1).join("/");await s.delete(h).then(async w=>{w.success&&(Y.success(e("sidebarFilesTree.toast.deletedSuccessfully")),await Ze(m),o&&q(o,h),(c?.path===h||c?.path.startsWith(`${h}/`))&&(o&&me(o,null),he(""),ge(null),Ie(""),ne(null),f&&P(!1))),i()}).catch(()=>l(e("sidebarFilesTree.toast.operationFailed"))).finally(u);return}u()},[wt,bt,ct,s,Ze,f,q,o,c?.path,me,e]);n.useEffect(()=>{if(!T){lr([]),cr(!1);return}const t=S.trim();if(!t){lr([]),cr(!1);return}let i=!1;return cr(!0),W(T,t,150,{includeHidden:R,respectGitignore:!j,type:"file"}).then(l=>{if(i)return;const h=l.filter(m=>j||!Uo(m.path)).map(m=>({name:m.name,path:K(m.path),type:"file",extension:m.extension,relativePath:m.relativePath}));lr(h)}).catch(()=>{i||lr([])}).finally(()=>{i||cr(!1)}),()=>{i=!0}},[T,S,W,R,j]);const jr=n.useCallback(async(t,i)=>{const l=await Xe(t);if(s.readFile)return(await s.readFile(t,{...l,directory:o||void 0,...i})).content??"";const u=new URLSearchParams({path:t});l.allowOutsideWorkspace&&u.set("allowOutsideWorkspace","true"),l.outsideFileGrant&&u.set("outsideFileGrant",l.outsideFileGrant),o&&u.set("directory",o);const h=await Dn(`/api/fs/read?${u.toString()}`,i?.fresh?{cache:"no-store"}:void 0);if(!h.ok){const m=await h.json().catch(()=>({error:h.statusText}));throw new Error(m.error||e("filesView.error.readFileFailed"))}return h.text()},[s,Xe,o,e]),dt=n.useCallback(async t=>{if(s.statFile){const i=await Xe(t),l=await s.statFile(t,{...i,directory:o||void 0});return{path:l.path,size:l.size,mtimeMs:l.mtimeMs}}return null},[s,Xe,o]);n.useEffect(()=>{if(!o||!s.statFile||Q.length===0)return;let t=!1;const i=[...Q];return Promise.all(i.map(async l=>{try{const u=await Xe(l),h=await s.statFile?.(l,{...u,directory:o||void 0});!t&&h&&!h.isFile&&q(o,l)}catch(u){!t&&Qn(u)&&q(o,l)}})),()=>{t=!0}},[s,Q,q,Xe,o]);const Zr=n.useMemo(()=>D.length>Ot?`${D.slice(0,Ot)}
|
|
14
|
+
|
|
15
|
+
… truncated …`:D,[D]),Me=ie!==Zr,Et=n.useCallback(async()=>{if(!c||!s.writeFile)return Y.error(e("filesView.toast.savingNotSupported")),!1;const t=sr(c.path)||xt;if(!Mo({selectedFilePath:c.path,loadedFilePath:De,fileLoading:Ae,isDirty:Me,draftContent:ie,fileContent:D,isNonEditableBinary:t}))return t?console.warn(`[saveDraft] refusing to save binary file "${c.path}".`):ie===""&&D!==""&&De!==c.path&&console.warn(`[saveDraft] refusing to save empty draft for "${c.path}" (${D.length} bytes were expected). The file may have been read during a concurrent write (O_TRUNC race). Try again after content finishes loading if the save was intentional.`),!1;if(!Me)return!0;Br(!0);try{const i=Xo(ie,Ts);if(!(await s.writeFile(c.path,i))?.success)return Y.error(e("filesView.toast.writeFileFailed")),!1;if(he(ie),$r.current=i,Wr.current+=1,o&&zr(c.path,o)){const u=Pr(o,c.path);u&&Ma.requestGitRefresh({directory:o,paths:[u]})}if(o&&/(?:^|\/)\.agents\/loops\/[^/]+\.md$/i.test(K(c.path))){const u=za.getState().projects.find(h=>K(h.path)===K(o));if(u)try{await io(u.id)}catch{Y.error(e("sessions.scheduledTasks.dialog.toast.updateFailed"))}}return c?.path&&Tr(c.path)&&(lt.current=ie,Ut.current=ie),dt(c.path).then(u=>{u&&(We.current=u)}).catch(()=>{}),!0}catch(i){return Y.error(i instanceof Error?i.message:e("filesView.toast.saveFailed")),!1}finally{Br(!1)}},[xt,ie,D,Ae,s,Me,Ts,De,dt,o,c,e]);n.useEffect(()=>{je||(St("idle"),Je.current&&(clearTimeout(Je.current),Je.current=null))},[je]);const sn=1500;n.useEffect(()=>{const t=!!(c&&s.writeFile),i=!!(c?.path&&(sr(c.path)||xt));if(Po({autoSaveEnabled:je,isDirty:Me,canWrite:t,isSaving:_t,fileLoading:Ae,selectedFilePath:c?.path,loadedFilePath:De,isNonEditableBinary:i}))return Je.current=setTimeout(()=>{Et().then(l=>{l&&(St("saved"),setTimeout(()=>St("idle"),2e3))})},sn),()=>{Je.current&&(clearTimeout(Je.current),Je.current=null)}},[je,xt,ie,Ae,Me,De,c,s.writeFile,_t,Et]),n.useEffect(()=>{St("idle")},[c?.path]),La({save_file:t=>{if(!(t.target instanceof Node)||!mr.current?.contains(t.target))return!1;Je.current&&(clearTimeout(Je.current),Je.current=null),_t||Et().then(i=>{i&&(St("saved"),setTimeout(()=>St("idle"),2e3))})},find_in_file:t=>{if(!(t.target instanceof Node))return!1;if(Qe&&$e()==="preview"){if(f||!(_?qr.current:pr.current)?.contains(t.target))return!1;hr(!0),As(l=>l+1);return}if(!mr.current?.contains(t.target))return!1;le(!0)}});const Dt=n.useCallback(t=>{const i=di(t);$r.current=t,Wr.current+=1,wi(qo(t)),he(i),lt.current=i,Ut.current=i,ye(i.length>Ot?`${i.slice(0,Ot)}
|
|
16
|
+
|
|
17
|
+
… truncated …`:i)},[]),nn=n.useCallback(async t=>{const i=Kt.current+1;Kt.current=i;const l=()=>{if(!o)return!1;const k=Ge.getState().byRoot[o],J=k?.selectedPath??k?.openPaths[0]??null;return Kt.current===i&&J===t.path};if(ge(null),Ie(""),ne(null),Es(!1),ot(!0),await Xe(t.path),!l())return;const u=fs(t.path),h=In(t.path),m=On(t.path),w=sr(t.path);if(f&&P(!0),d.isDesktop&&u&&!h){he(""),ye("");return}if(!d.isDesktop&&u&&!h){he(""),ye(""),ne(t.path),ot(!1);return}if(m){he(""),ye(""),ne(t.path),ot(!1);return}if(w){he(""),ye(""),ne(t.path),ot(!1);return}await jr(t.path).then(k=>{if(l()){if(Bn(k)){Es(!0),he(""),ye(""),ne(t.path);return}Dt(k),ne(t.path),dt(t.path).then(J=>{J&&l()&&(We.current=J)}).catch(()=>{})}}).catch(k=>{if(l()){if(Ko(k)){if(ot(!1),o&&me(o,null),ge(null),he(""),ye(""),ne(null),We.current=null,E.trim().length>0&&V(""),f&&P(!1),o){const rr=[...Yn(t.path,o),t.path];rr.length>0&&ir(o,rr);for(const mt of rr)ze.current.has(mt)||Oe(mt)}return}if(Qn(k)){o&&q(o,t.path),he(""),ye(""),ge(null),We.current=null,f&&P(!1);return}he(""),ye(""),ge(k instanceof Error?k.message:e("filesView.error.readFileFailed")),We.current=null}}).finally(()=>{l()&&ot(!1)})},[Dt,ir,f,Oe,jr,dt,q,Xe,o,d.isDesktop,E,me,e]),Fr=n.useCallback(async(t,i)=>{if(!o)return;const l=Yn(t,o),u=i?[...l,t]:l;u.length>0&&ir(o,u);const h=u.map(m=>{if(!ze.current.has(m))return Oe(m)}).filter(Boolean);await Promise.all(h)},[ir,Oe,o]),an=n.useCallback((t,i)=>{const l=i.findIndex(u=>u.path===t);return l===-1||i.length<=1?null:i[l+1]??i[l-1]??null},[]),Re=n.useCallback(async t=>{if(qt.current)qt.current=!1;else if(Me){Ht(!0),kt.current=t;return}o&&(me(o,t.path),Fr(t.path,!1)),ge(null),Ie(""),he(""),lt.current="",Ut.current="",ye(""),ne(null),f&&P(!0)},[Fr,Me,f,o,me]);n.useEffect(()=>{c?.path&&Fr(c.path,!1)},[Fr,c?.path]),n.useEffect(()=>{if(!c){Kt.current+=1,Ct.current=null,ot(!1);return}if(De===c.path||Ct.current===c.path)return;const t=c.path;Ct.current=t,nn(c).finally(()=>{Ct.current===t&&(Ct.current=null)})},[dr,nn,De,c]);const Nr=n.useRef(Me);Nr.current=Me,n.useEffect(()=>ao(({runtimeKey:t,paths:i})=>{const l=c?.path;t!==ja()||!l||Nr.current||!i.includes(K(l))||(Kt.current+=1,Ct.current=null,We.current=null,Ie(""),ge(null),ne(null),yi(u=>u+1))}),[c?.path]),n.useEffect(()=>{if(!c?.path||De!==c.path)return;const t=c.path,i=()=>Nr.current||Tr(t)&<.current!==Ut.current,l=!sr(t)&&!fs(t)&&!xt?To({readContent:()=>jr(t,{fresh:!0}),getLoadedContent:()=>$r.current,getLoadedRevision:()=>Wr.current,isDirty:i,applyContent:w=>{if(Bn(w)){ne(null);return}Dt(w)}}):null;let u=!1,h=!1;const m=window.setInterval(()=>{document.hidden||h||(h=!0,dt(t).then(async w=>{if(u||!w)return;const k=We.current;if(!k||k.path!==t){We.current=w;return}if(Eo(k,w)){if(l&&w.size<=Ho){await l.poll()&&!u&&(We.current=w);return}Nr.current||(We.current=w,ne(null))}}).catch(()=>{}).finally(()=>{h=!1}))},2e3);return()=>{u=!0,l?.dispose(),window.clearInterval(m)}},[Dt,xt,De,jr,dt,c?.path]);const Ui=n.useCallback(()=>{const t=kt.current,i=Gt.current;if(kt.current=null,Gt.current=null,qt.current=!0,Ht(!1),ye(Zr),i){o&&et(o,i),c?.path===i&&(t?Re(t):(o&&me(o,null),he(""),ge(null),Ie(""),ne(null),f&&P(!1)));return}if(t){Re(t);return}},[Zr,Re,f,et,o,c?.path,me]),Ki=n.useCallback(async()=>{const t=kt.current,i=Gt.current;if(!await Et()){qt.current=!1;return}if(kt.current=null,Gt.current=null,qt.current=!0,Ht(!1),i){o&&et(o,i),c?.path===i&&(t?await Re(t):(o&&me(o,null),he(""),ge(null),Ie(""),ne(null),f&&P(!1)));return}if(t){await Re(t);return}},[Re,f,et,o,Et,c?.path,me]),on=n.useCallback(t=>{const i=c?.path===t,l=an(t,Nt);if(i&&Me){Ht(!0),kt.current=l,Gt.current=t;return}if(o&&et(o,t),!!i){if(l){Re(l);return}o&&me(o,null),he(""),ge(null),Ie(""),ne(null),f&&P(!1)}},[an,Re,Me,f,Nt,et,o,c?.path,me]),Hi=n.useCallback(t=>{if(Q.includes(t))return"open";if(L?.files){const i=t.startsWith(o+"/")?t.slice(o.length+1):t,l=L.files.find(u=>u.path===i);if(l){if(l.index==="A"||l.working_dir==="?")return"git-added";if(l.index==="D")return"git-deleted";if(l.index==="M"||l.working_dir==="M")return"git-modified"}}return null},[Q,L,o]),Gi=n.useCallback(t=>{if(!L?.files)return null;const i=t.startsWith(o+"/")?t.slice(o.length+1):t,l=i?`${i}/`:"";let u=0,h=0;for(const m of L.files)m.path.startsWith(l)&&((m.index==="M"||m.working_dir==="M")&&u++,(m.index==="A"||m.working_dir==="?")&&h++);return u+h>0?{modified:u,added:h}:null},[L,o]),qi=n.useCallback(async t=>{const i=K(t);o&&(ys(o,i),ze.current.has(i)||await Oe(i))},[Oe,o,ys]),Xi=n.useMemo(()=>({canRename:Bs,canCreateFile:Is,canCreateFolder:Os,canDelete:$s,canReveal:Ws}),[Bs,Is,Os,$s,Ws]);function ln(t,i){const l=Ss[t]??[];return l.map((u,h)=>{const m=u.type==="directory",w=m&&pe.includes(u.path),k=c?.path===u.path,J=h===l.length-1;return r.jsxs("li",{className:"relative",children:[i>0&&r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"absolute top-3.5 left-[-12px] w-3 h-px bg-border/40"}),J&&r.jsx("span",{className:"absolute top-3.5 bottom-0 left-[-13px] w-[2px] bg-background"})]}),r.jsx(Yo,{node:u,root:o,isExpanded:w,isActive:k,isMobile:f,isBrowserClient:F,alwaysShowActions:N,status:m?void 0:Hi(u.path),badge:m?Gi(u.path):void 0,permissions:Xi,downloadFile:s.downloadFile,contextMenuPath:Ri,setContextMenuPath:Ti,rightClickMenuPath:Vi,setRightClickMenuPath:Ei,onSelect:Re,onToggle:qi,onRevealPath:Ii,onOpenDialog:Xr}),m&&w&&r.jsxs("ul",{className:"flex flex-col gap-1 ml-3 pl-3 border-l border-border/40 relative",children:[or[u.path]?r.jsxs("li",{className:"flex items-center gap-2 px-2 py-1 typography-meta text-muted-foreground",children:[r.jsx("span",{className:"min-w-0 flex-1 truncate text-[var(--status-error)]",title:or[u.path],children:or[u.path]}),r.jsxs(z,{variant:"ghost",size:"xs",className:"h-6 gap-1",onClick:()=>{Ze(u.path)},children:[r.jsx(y,{name:"refresh",className:"size-3.5"}),e("filesView.tree.actions.refreshTitle")]})]}):null,ln(u.path,i+1)]})]},u.path)})}const Fe=!!(c?.path&&fs(c.path)),Cr=!!(c?.path&&In(c.path)),Be=!!(c?.path&&On(c.path)),Qr=!!(c?.path&&(sr(c.path)||xt)),nt=Qr&&!Fe&&!Be,cn=n.useMemo(()=>K(Ye?.path??""),[Ye?.path]),Pt=!!(Ye&&cn&&qe&&qe===cn&&!Ae&&!rt&&!Fe&&!Be&&!nt),ft=n.useMemo(()=>Pr(o,qe),[qe,o]),Ji=!!(c&&(!Fe||Cr)&&!Be&&!nt&&D.length>0),Yi=!!(c&&ft.length>0),Ke=!!(c&&!ar&&!Qr&&!Fe&&s.writeFile&&D.length<=Ot),Qe=!!(c?.path&&ei(c.path)),Qt=!!(c?.path&&Jo(c.path)),Mt=!!(c?.path&&xs(c.path)),er=!!(c?.path&&Tr(c.path)),es=!!(c&&!Qr&&!Fe)&&!Qe&&!er&&!(Mt&&B==="preview"),Zi=Qe&&ve==="edit"||Mt&&B==="edit"||Qt&&ue==="text"||!Qe&&!Mt&&!Qt&&O==="edit",Sr=n.useMemo(()=>qe?Aa(qe):null,[qe]),[un,ts]=n.useState(null);n.useEffect(()=>{let t=!1;const i=c?.path;if(!i||Sr){ts(null);return}return ts(null),Ia(i).then(l=>{t||ts(l)}),()=>{t=!0}},[c?.path,Sr]),n.useEffect(()=>{!Ke&&O==="edit"&&xe("view")},[Ke,O]);const rs="aiworker:files:md-viewer-mode",ss="aiworker:files:html-viewer-mode",ns="aiworker:files:json-viewer-mode";n.useEffect(()=>{const t=c?.path;if(!t)return;xe(oe.current[t]??"edit");let i=Yt?"preview":"edit";try{const h=localStorage.getItem(rs);(h==="preview"||h==="edit")&&(i=h)}catch{}ce(be.current[t]??i);let l=Yt?"preview":"edit";try{const h=localStorage.getItem(ss);(h==="preview"||h==="edit")&&(l=h)}catch{}H(Te.current[t]??l),se(de.current[t]??(Yt?"preview":"edit"));let u=Yt?"tree":"text";try{const h=localStorage.getItem(ns);(h==="tree"||h==="text")&&(u=h)}catch{}we(u)},[c?.path,Yt]);const Qi=n.useCallback(t=>{const i=c?.path;i&&(oe.current[i]=t),xe(t)},[c?.path]),ea=n.useCallback(t=>{const i=c?.path;i&&(be.current[i]=t),ce(t);try{localStorage.setItem(rs,t)}catch{}},[c?.path]),$e=n.useCallback(()=>ve,[ve]),dn=c&&Qe&&$e()==="preview"&&!Ae?c.path:null;n.useEffect(()=>{!dn||f||gr()},[gr,_,f,dn]);const ta=n.useCallback(t=>{we(t);try{localStorage.setItem(ns,t)}catch{}},[]),ra=n.useCallback(t=>{const i=c?.path;i&&(Te.current[i]=t),H(t);try{localStorage.setItem(ss,t)}catch{}},[c?.path]),sa=n.useCallback(t=>{const i=c?.path;if(i&&(de.current[i]=t),Pe.current&&(clearTimeout(Pe.current),Pe.current=null),st.current!==null&&(cancelAnimationFrame(st.current),st.current=null),t==="edit")ye(lt.current||D),se(t);else{lt.current=ie;const l=i;se("edit"),st.current=requestAnimationFrame(()=>{st.current=requestAnimationFrame(()=>{st.current=null,!(o&&l&&Ge.getState().byRoot[o]?.selectedPath!==l)&&(ae(u=>u+1),se("preview"))})});return}},[ie,D,o,c?.path]),is=n.useCallback(async(t,i)=>{if(!s.writeFile||i===Ut.current)return!1;if(!(await s.writeFile(t,i))?.success)return Y.error(e("filesView.toast.writeFileFailed")),!1;Dt(i);const u=await dt(t).catch(()=>null);return u&&(We.current=u),!0},[Dt,s,dt,e]);n.useEffect(()=>()=>{Pe.current&&(clearTimeout(Pe.current),Pe.current=null),st.current!==null&&(cancelAnimationFrame(st.current),st.current=null)},[re,c?.path]);const na=n.useCallback(t=>{if(lt.current=t,!je||!c?.path||re!=="preview"||!s.writeFile)return;Pe.current&&clearTimeout(Pe.current);const i=c.path;Pe.current=setTimeout(()=>{Pe.current=null,is(i,t).then(l=>{l&&(fr(!0),setTimeout(()=>fr(!1),1500))}).catch(l=>{Y.error(l instanceof Error?l.message:e("filesView.toast.saveFailed"))})},sn)},[je,re,s.writeFile,is,c?.path,e]),ia=n.useMemo(()=>er&&(lt.current||ie)||D,[ie,D,er]),fn=n.useCallback(()=>B,[B]);n.useEffect(()=>{const t=l=>{const u=l?"preview":"edit",h=l?"tree":"text";for(const m of Q)oe.current[m]="edit",ei(m)&&(be.current[m]=u),xs(m)&&(Te.current[m]=u),Tr(m)&&(de.current[m]=u);xe("edit"),ce(u),H(u),se(u),we(h);try{localStorage.setItem(rs,u),localStorage.setItem(ss,u),localStorage.setItem(ns,h)}catch{}},i=l=>{const u=!!l.detail?.enabled;t(u)};return window.addEventListener("aiworker:file-viewer-preview-mode-changed",i),()=>{window.removeEventListener("aiworker:file-viewer-preview-mode-changed",i)}},[Q]),n.useEffect(()=>{if(!Ye||!o)return;const t=()=>{typeof window>"u"||Rt.current===null&&(Rt.current=window.requestAnimationFrame(()=>{Rt.current=null,Ur(it=>it+1)}))},i=(it,yt)=>{if(it.state.doc.length!==yt.length)return!1;if(yt.length===0)return!0;const cs=Math.min(128,yt.length);if(it.state.sliceDoc(0,cs)!==yt.slice(0,cs))return!1;const Tn=Math.max(0,yt.length-cs);return it.state.sliceDoc(Tn,yt.length)===yt.slice(Tn)},l=K(Ye.path);if(!l){xr(null),vt.current={key:"",attempts:0};return}const u=`${l}:${Ye.line}:${Ye.column??1}`;if(vt.current.key!==u&&(vt.current={key:u,attempts:0}),c?.path!==l){if(_r)return;Re(Ft(l));return}if(Ae||De!==l)return;if(rt||Fe||Be||nt){xr(null),vt.current={key:"",attempts:0};return}if(!Ke)return;if(O!=="edit"){xe("edit");return}const h=_e.current;if(!h){t();return}if(!i(h,ie)){t();return}const m=Math.max(1,Math.min(Ye.line,h.state.doc.lines)),w=h.state.doc.line(m),k=Math.max(1,Ye.column||1),J=Math.max(0,w.to-w.from),rr=Math.min(J,k-1),mt=w.from+rr;if(!(h.state.selection.main.head===mt)||vt.current.attempts===0){vt.current.attempts+=1,h.dispatch({selection:{anchor:mt},effects:jt.scrollIntoView(mt,{y:"center"})}),h.focus(),t();return}typeof window<"u"&&window.requestAnimationFrame(()=>{const it=_e.current;it&&(it.dispatch({selection:{anchor:mt},effects:jt.scrollIntoView(mt,{y:"center"})}),it.focus())}),xr(null),vt.current={key:"",attempts:0}},[Ke,_r,ie,Ci,rt,Ae,Fe,Be,nt,De,Re,Ye,o,c?.path,xr,O,Ft]),n.useEffect(()=>{if(!Jr||!o)return;const t=K(Jr);if(!t){Yr(null);return}c?.path===t&&(Ae||De!==t||(!rt&&!Fe&&!Be&&!nt&&Ke&&O==="edit"&&_e.current?.focus(),Yr(null)))},[Ke,rt,Ae,Fe,Be,nt,De,Jr,o,c?.path,Yr,O]);const zt=n.useCallback(t=>{if(!f||!t||!t.hasFocus||typeof window>"u")return;const i=window.visualViewport;if(!i)return;const l=document.documentElement.clientHeight||window.innerHeight;if(Math.max(0,l-(i.offsetTop+i.height))<=0)return;const h=t.state.selection.main.head,m=t.coordsAtPos(h);if(!m)return;const w=Math.round(i.offsetTop+i.height),J=m.bottom+20-w;J<=0||(t.scrollDOM.scrollTop+=J)},[f]);n.useEffect(()=>{if(!f||typeof window>"u")return;const t=()=>{window.requestAnimationFrame(()=>{zt(_e.current)})},i=window.visualViewport;return i?.addEventListener("resize",t),i?.addEventListener("scroll",t,{passive:!0}),document.addEventListener("selectionchange",t),()=>{i?.removeEventListener("resize",t),i?.removeEventListener("scroll",t),document.removeEventListener("selectionchange",t)}},[f,zt]),Oa("open_go_to_line",t=>{if(!Ke||O!=="edit"||f)return!1;const i=t.target;if(i?.closest('[role="dialog"]')||!(i instanceof Node)||!mr.current?.contains(i))return!1;const l=!!i?.closest(".cm-editor");if(!!i?.closest('input, textarea, [contenteditable="true"], [role="textbox"]')&&!l)return!1;Gr(!0)});const kr=ht(t=>t.editorFontSize),mn=n.useMemo(()=>{if(!c?.path)return[Wn(x,{fontSize:kr})];const t=ds(c.path),i=[Wn(x,t?{syntaxColors:!1,fontSize:kr}:{fontSize:kr})],l=Sr??un;return l&&i.push(l),t&&i.push(Ya({language:t,themeName:x.metadata.id,theme:to(x)})),X&&i.push(jt.lineWrapping),f&&i.push(jt.updateListener.of(u=>{u.view.hasFocus&&(u.selectionSet||u.focusChanged||u.viewportChanged||u.geometryChanged)&&window.requestAnimationFrame(()=>{zt(u.view)})})),i},[x,c?.path,Sr,un,X,f,zt,kr]),hn=n.useMemo(()=>({light:Ve.metadata.id,dark:Ee.metadata.id}),[Ve.metadata.id,Ee.metadata.id]),tr=c?.path&&Be&&(!gt.allowOutsideWorkspace||gt.outsideFileGrant)?`${c.path}|${gt.allowOutsideWorkspace?"outside":"workspace"}|${gt.outsideFileGrant??""}|${dr}`:"",Rr=c?.path&&Mt&&B==="preview"&&!d.isVSCode?`${c.path}|${dr}`:"",pn=e("filesView.error.readFileFailed"),{readyKey:gn,nonce:aa}=ti(Rr,ge,pn),{readyKey:xn,nonce:vn}=ti(tr,ge,pn),oa=!!(Rr&&gn!==Rr),wn=!!(tr&&xn!==tr),bn=c?.path&&Fe?Cr?`data:${Ba(c.path)};utf8,${encodeURIComponent(D)}`:vi:"",yn=c?.path&&Be&&tr&&xn===tr?Pn().authenticatedAsset("/api/fs/raw",{path:c.path,allowOutsideWorkspace:gt.allowOutsideWorkspace?"true":void 0,outsideFileGrant:gt.outsideFileGrant,directory:o||void 0}):"",jn=n.useCallback(t=>r.jsx("div",{className:"h-full overflow-hidden bg-[var(--surface-background)]",children:r.jsx("iframe",{src:yn,className:"h-full w-full border-0",title:t.name},vn)}),[yn,vn]);n.useEffect(()=>{let t=!1,i="";return(async()=>{if(!c?.path||!Fe||Cr){Ie("");return}ge(null);const u=await Xe(c.path);if(t)return;await(s.readFileBinary?s.readFileBinary(c.path,u).then(m=>m.dataUrl):(async()=>{const m=await Dn("/api/fs/raw",{query:{path:c.path,allowOutsideWorkspace:u.allowOutsideWorkspace?"true":void 0,outsideFileGrant:u.outsideFileGrant,directory:o||void 0}});if(!m.ok)throw new Error(e("filesView.error.readFileFailed"));const w=await m.blob();return i=URL.createObjectURL(w),t?(URL.revokeObjectURL(i),i="",""):i})()).then(m=>{t||(Ie(m),ne(c.path))}).catch(m=>{t||(Ie(""),ge(m instanceof Error?m.message:e("filesView.error.readFileFailed")),ne(null))}).finally(()=>{t||ot(!1)})})(),()=>{t=!0,i&&URL.revokeObjectURL(i)}},[dr,s,Fe,Cr,Xe,o,c?.path,gt,e]);const la=n.useCallback(()=>Kr(null),[]),ca=n.useMemo(()=>fo({drafts:Hs,editingDraftId:br,commentText:wr,onTextChange:Gs,selection:U,isDragging:Us,fileLabel:c?.path??"",newWidgetId:"files-new-comment-input",mapDraftToRange:t=>({start:t.startLine,end:t.endLine}),onSave:Qs,onCancel:()=>{Ue(null),Zt()},onEdit:t=>{Ys(t),Ue({start:t.startLine,end:t.endLine})},onDelete:Zs}),[Zt,wr,Zs,br,Hs,Qs,Us,U,c?.path,Gs,Ys]),Fn=Xn(),Nn=Xn(),as=Ka("unified"),He=D.length>Ot,os=n.useMemo(()=>He?Go(D):void 0,[D,He]),Cn=n.useCallback((t,i,l)=>{const u={name:t.name,contents:i,lang:ds(t.path)||void 0},h=m=>r.jsx(eo,{file:He&&os?{...u,cacheKey:`${t.path}:${os}`}:u,options:{disableFileHeader:!0,overflow:X?"wrap":"scroll",theme:hn,themeType:x.metadata.variant==="dark"?"dark":"light"},className:He?"block w-full":"block h-full w-full",style:He?void 0:{height:"100%"}},m);return He?r.jsx("div",{className:"h-full",children:r.jsx(ro.Provider,{value:l.virtualizer,children:r.jsx(so.Provider,{value:as,children:h(`${t.path}:${as?"pool":"pending"}`)})})}):r.jsx("div",{className:"h-full",children:h(t.path)})},[x.metadata.variant,He,os,hn,as,X]),Sn=({exitFullscreenOnly:t=!1,layout:i="floating"}={})=>{if(!c)return null;const l=i==="docked",u=$a(Wa("save_file")),h=l?"pointer-events-auto flex flex-wrap items-center gap-1":"pointer-events-auto flex items-center gap-1 rounded-lg border border-[var(--interactive-border)] bg-[var(--surface-elevated)] p-1 shadow-sm",m=(w,k)=>r.jsxs(Lt,{children:[r.jsx(At,{asChild:!0,children:r.jsx("span",{className:"inline-flex",children:k})}),r.jsx(It,{side:"bottom",sideOffset:6,children:w})]});return r.jsxs("div",{className:h,children:[Ke&&Zi&&r.jsxs(r.Fragment,{children:[_t?r.jsxs("span",{className:"flex items-center gap-1 px-1 text-muted-foreground typography-meta",children:[r.jsx(y,{name:"loader-4",className:"size-3.5 animate-spin"}),e("filesView.editor.saving")]}):je&&ji==="saved"&&!Me?r.jsxs("span",{className:"flex items-center gap-1 px-1 text-[color:var(--status-success)] typography-meta",children:[r.jsx(y,{name:"check",className:"size-3.5"}),e("filesView.editor.saved")]}):Me?m(e(je?"filesView.editor.saveNowTitle":"filesView.editor.saveNowManualTitle",{shortcut:u}),r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>{Et()},className:"h-6 gap-1 px-1 text-muted-foreground opacity-80 hover:bg-transparent hover:opacity-100 focus-visible:bg-transparent active:bg-transparent",title:e(je?"filesView.editor.saveNowTitle":"filesView.editor.saveNowManualTitle",{shortcut:u}),"aria-label":e("filesView.editor.saveAria",{shortcut:u}),children:r.jsx(y,{name:"save-3",className:"size-4"})})):null,m(e(je?"filesView.editor.autoSaveOn":"filesView.editor.manualSave"),r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>Ni(!je),className:G("size-6 p-0 transition-opacity hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",je?"text-foreground opacity-100":"text-muted-foreground opacity-65 hover:opacity-100"),title:e(je?"filesView.editor.autoSaveOn":"filesView.editor.manualSave"),"aria-label":e(je?"filesView.editor.autoSaveOn":"filesView.editor.manualSave"),children:je?r.jsx(y,{name:"file-check-fill",className:"size-4"}):r.jsx(y,{name:"file-check",className:"size-4"})}))]}),r.jsxs(vs,{onOpenChange:Ce,children:[r.jsxs(Lt,{children:[r.jsx(At,{asChild:!0,children:r.jsx("span",{className:"inline-flex",children:r.jsx(ws,{asChild:!0,children:r.jsx(z,{variant:"ghost",size:"sm",className:"size-6 p-0 text-foreground opacity-100 hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",title:e("filesView.editor.openInDesktopApp"),"aria-label":e("filesView.editor.openInDesktopApp"),children:r.jsx(y,{name:"file-transfer",className:"size-4"})})})})}),r.jsx(It,{side:"bottom",sideOffset:6,children:e("filesView.editor.openInDesktopApp")})]}),r.jsxs(bs,{align:"end",className:"w-56 max-h-[70vh] overflow-y-auto",children:[zi.map(w=>r.jsxs(Dr,{className:"flex items-center gap-2",onClick:()=>{Oi(w)},children:[r.jsx(Io,{label:w.label,iconDataUrl:w.iconDataUrl}),r.jsx("span",{className:"typography-ui-label text-foreground",children:w.label})]},w.id)),Li?r.jsxs(Dr,{className:"flex items-center gap-2",onClick:()=>{Ai(!0)},children:[r.jsx(y,{name:"refresh",className:"size-4"}),r.jsx("span",{className:"typography-ui-label text-foreground",children:e("filesView.editor.refreshApps")})]}):null]})]}),!Fe&&!Be&&!nt&&r.jsxs(r.Fragment,{children:[m(e(X?"filesView.editor.disableLineWrap":"filesView.editor.enableLineWrap"),r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>Ne(!X),className:G("size-6 p-0 transition-opacity hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",X?"text-foreground opacity-100":"text-muted-foreground opacity-65 hover:opacity-100"),title:e(X?"filesView.editor.disableLineWrap":"filesView.editor.enableLineWrap"),children:r.jsx(y,{name:"text-wrap",className:"size-4"})})),O==="edit"&&r.jsxs(r.Fragment,{children:[m(e("filesView.editor.findInFile"),r.jsx(z,{variant:"ghost",size:"sm",onClick:w=>{le(!ee),w.currentTarget.blur()},className:"size-6 p-0 text-foreground opacity-100 transition-opacity hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",title:e("filesView.editor.findInFile"),children:r.jsx(y,{name:"search",className:"size-4"})})),m(e("filesView.editor.goToLine"),r.jsx(z,{variant:"ghost",size:"sm",onClick:w=>{Gr(k=>!k),w.currentTarget.blur()},className:"size-6 p-0 text-foreground opacity-100 transition-opacity hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",title:e("filesView.editor.goToLine"),children:r.jsx(y,{name:"menu-fold-2",className:"size-4"})})),r.jsx(jo,{open:Mi,onOpenChange:Gr,view:_e.current,variant:"inline"})]})]}),es&&Ke&&!Qt&&!Mt&&r.jsx(ps,{currentMode:O==="view"?"preview":"edit",onToggle:()=>{Qi(O==="view"?"edit":"view")}}),Qe&&m(e($e()==="preview"?"filesView.editor.switchToEditMode":"filesView.editor.switchToPreviewMode"),r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>ea($e()==="preview"?"edit":"preview"),className:G("size-6 p-0 transition-colors hover:bg-[var(--interactive-hover)] focus-visible:bg-[var(--interactive-hover)] active:bg-[var(--interactive-hover)]",$e()==="preview"?"bg-[var(--interactive-selection)] text-[var(--interactive-selection-foreground)] hover:bg-[var(--interactive-selection)] focus-visible:bg-[var(--interactive-selection)] active:bg-[var(--interactive-selection)]":"text-muted-foreground opacity-65 hover:opacity-100"),title:e($e()==="preview"?"filesView.editor.switchToEditMode":"filesView.editor.switchToPreviewMode"),"aria-label":e($e()==="preview"?"filesView.editor.switchToEditMode":"filesView.editor.switchToPreviewMode"),children:r.jsx(y,{name:$e()==="preview"?"eye":"eye-off",className:"size-4"})})),xs(c?.path??"")&&r.jsx(ps,{currentMode:fn(),onToggle:()=>{ra(fn()==="preview"?"edit":"preview")}}),Qe&&$e()==="preview"&&m(e("filesView.editor.findInFile"),r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>{hr(!0),As(w=>w+1)},className:"size-6 p-0 text-foreground opacity-100 transition-opacity hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",title:e("filesView.editor.findInFile"),children:r.jsx(y,{name:"search",className:"size-4"})})),Qe&&$e()==="preview"&&Bi&&r.jsxs(Lt,{children:[r.jsx(At,{asChild:!0,children:r.jsx(z,{variant:"ghost",size:"sm",className:"size-6 p-0 text-muted-foreground opacity-65 hover:bg-transparent hover:opacity-100 focus-visible:bg-transparent active:bg-transparent","aria-label":e(ur?"filesView.tts.stopSpeaking":"filesView.tts.readAloud"),onClick:()=>{ur?xi():D.trim()&&gi(D)},children:ur?r.jsx(y,{name:"stop",className:"size-4 text-[color:var(--status-success)]"}):r.jsx(y,{name:"volume-up",className:"size-4"})})}),r.jsx(It,{sideOffset:8,children:e(ur?"filesView.tts.stopSpeaking":"filesView.tts.readAloud")})]}),er&&r.jsxs(r.Fragment,{children:[r.jsx(ps,{currentMode:re,onToggle:()=>sa(re==="preview"?"edit":"preview")}),re==="preview"&&r.jsx(z,{variant:"ghost",size:"sm",onClick:async()=>{const w=Vs.current?.getXml();if(Pe.current&&(clearTimeout(Pe.current),Pe.current=null),c?.path&&w){if(!await is(c.path,w))return;fr(!0),setTimeout(()=>fr(!1),1500)}},className:"size-6 p-0 text-foreground hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",title:e("filesView.diagram.saveDiagram"),children:Fi?r.jsx(y,{name:"check",className:"size-4 text-[color:var(--status-success)]"}):r.jsx(y,{name:"save-3",className:"size-4"})})]}),Qt&&m(e(ue==="tree"?"filesView.editor.switchToTextView":"filesView.editor.switchToTreeView"),r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>ta(ue==="tree"?"text":"tree"),className:"size-6 p-0 text-muted-foreground opacity-65 hover:bg-transparent hover:opacity-100 focus-visible:bg-transparent active:bg-transparent",title:e(ue==="tree"?"filesView.editor.switchToTextView":"filesView.editor.switchToTreeView"),children:ue==="tree"?r.jsx(y,{name:"code-sslash",className:"size-4"}):r.jsx(y,{name:"node-tree",className:"size-4"})})),Ji&&m(e("filesView.editor.copyFileContents"),r.jsx(z,{variant:"ghost",size:"sm",onClick:async()=>{(await Mr(D)).ok?(Ps(!0),Xt.current!==null&&window.clearTimeout(Xt.current),Xt.current=window.setTimeout(()=>{Ps(!1)},1200)):Y.error(e("filesView.toast.copyFailed"))},className:"size-6 p-0 hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",title:e("filesView.editor.copyFileContents"),"aria-label":e("filesView.editor.copyFileContents"),children:Di?r.jsx(y,{name:"check",className:"size-4 text-[color:var(--status-success)]"}):r.jsx(y,{name:"clipboard",className:"size-4"})})),Yi&&m(e("filesView.editor.copyFilePathTitle",{path:ft}),r.jsx(z,{variant:"ghost",size:"sm",onClick:async()=>{(await Mr(ft)).ok?(Ms(!0),Jt.current!==null&&window.clearTimeout(Jt.current),Jt.current=window.setTimeout(()=>{Ms(!1)},1200)):Y.error(e("filesView.toast.copyFailed"))},className:"size-6 p-0 hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",title:e("filesView.editor.copyFilePathTitle",{path:ft}),"aria-label":e("filesView.editor.copyFilePathTitle",{path:ft}),children:Pi?r.jsx(y,{name:"check",className:"size-4 text-[color:var(--status-success)]"}):r.jsx(y,{name:"file-copy-2",className:"size-4"})})),s.downloadFile&&m(e("filesView.editor.saveFile"),r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>{const w=s.downloadFile;w&&w(c.path).catch(k=>{console.error("Download failed:",k),Y.error(e("sidebarFilesTree.toast.operationFailed"))})},className:"size-6 p-0 hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",title:e("filesView.editor.saveFile"),"aria-label":e("filesView.editor.saveFile"),children:r.jsx(y,{name:"download",className:"size-4"})})),t?m(e("filesView.editor.exitFullscreen"),r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>Z(!1),className:"size-6 p-0 hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",title:e("filesView.editor.exitFullscreen"),"aria-label":e("filesView.editor.exitFullscreen"),children:r.jsx(y,{name:"fullscreen-exit",className:"size-4"})})):!f&&a==="full"&&m(e(_?"filesView.editor.exitFullscreen":"filesView.editor.fullscreen"),r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>Z(!_),className:"size-6 p-0 hover:bg-transparent focus-visible:bg-transparent active:bg-transparent",title:e(_?"filesView.editor.exitFullscreen":"filesView.editor.fullscreen"),"aria-label":e(_?"filesView.editor.exitFullscreen":"filesView.editor.fullscreen"),children:_?r.jsx(y,{name:"fullscreen-exit",className:"size-4"}):r.jsx(y,{name:"fullscreen",className:"size-4"})}))]})},ls=r.jsxs("div",{className:"relative flex h-full min-h-0 min-w-0 w-full flex-col overflow-hidden",children:[r.jsx(si,{open:_r,onOpenChange:t=>{t||Ht(!0)},children:r.jsxs(ni,{showCloseButton:!1,className:"max-w-md",children:[r.jsxs(ii,{children:[r.jsx(ai,{children:e("filesView.unsaved.title")}),r.jsx(oi,{children:e("filesView.unsaved.description")})]}),r.jsxs(li,{children:[r.jsx(z,{variant:"outline",onClick:()=>{Ki()},disabled:_t,className:"border-[var(--status-success-border)] bg-[var(--status-success-background)] text-[var(--status-success)] hover:bg-[rgb(var(--status-success)/0.2)]",children:e("filesView.unsaved.saveChanges")}),r.jsx(z,{variant:"destructive",onClick:Ui,children:e("filesView.unsaved.discard")})]})]})}),r.jsxs("div",{className:G("flex flex-col flex-shrink-0",A&&"border-b border-border/40"),children:[A?r.jsxs("div",{className:"flex min-w-0 items-center px-3 py-1.5",children:[f&&$&&r.jsx("button",{type:"button",onClick:()=>P(!1),"aria-label":e("filesView.editor.back"),className:"inline-flex size-7 flex-shrink-0 items-center justify-center mr-1 text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary",children:r.jsx(y,{name:"arrow-left-s",className:"size-5"})}),f?c?r.jsxs(vs,{children:[r.jsx(ws,{asChild:!0,children:r.jsxs("button",{type:"button",className:"inline-flex min-w-0 max-w-full items-center gap-1 text-left typography-ui-label font-medium","aria-label":e("filesView.editor.openFilesAria"),children:[r.jsx(Er,{filePath:c.path,extension:c.extension,className:"size-3.5 flex-shrink-0"}),r.jsx(Zn,{name:c.name}),r.jsx(y,{name:"arrow-down-s",className:"size-4 flex-shrink-0 text-muted-foreground"})]})}),r.jsx(bs,{align:"start",className:"w-[min(24rem,calc(100vw-2rem))] max-w-[calc(100vw-2rem)]",children:Nt.map(t=>{const i=c?.path===t.path;return r.jsxs(Dr,{onSelect:l=>{if(l.target.closest("[data-close-open-file]")){l.preventDefault();return}i||Re(t)},className:G("flex min-w-0 items-center justify-between gap-2 overflow-hidden",i&&"bg-[var(--interactive-selection)] text-[var(--interactive-selection-foreground)]"),children:[r.jsxs("span",{className:"flex min-w-0 flex-1 items-center gap-2 overflow-hidden",children:[r.jsx(Er,{filePath:t.path,extension:t.extension,className:"size-3.5 flex-shrink-0"}),r.jsx(Zn,{name:t.name})]}),r.jsx("button",{type:"button","data-close-open-file":!0,onPointerDown:l=>{l.preventDefault(),l.stopPropagation()},onClick:l=>{l.preventDefault(),l.stopPropagation(),on(t.path)},className:"inline-flex size-6 shrink-0 items-center justify-center rounded-md text-[var(--surface-muted-foreground)] hover:text-[var(--surface-foreground)]","aria-label":e("filesView.editor.closeFileAria",{name:t.name}),children:r.jsx(y,{name:"close",className:"size-3.5"})})]},t.path)})})]}):r.jsx("div",{className:"typography-ui-label font-medium truncate",children:e("filesView.editor.selectFile")}):Nt.length>0?r.jsxs("div",{className:"relative min-w-0 flex-1",children:[Fs.left&&r.jsx("div",{className:"pointer-events-none absolute left-0 top-0 bottom-0 w-6 z-10 bg-gradient-to-r from-background to-transparent"}),Fs.right&&r.jsx("div",{className:"pointer-events-none absolute right-0 top-0 bottom-0 w-6 z-10 bg-gradient-to-l from-background to-transparent"}),r.jsx("div",{ref:Ir,className:"flex min-w-0 items-center gap-1 overflow-x-auto scrollbar-none",style:{scrollbarWidth:"none",msOverflowStyle:"none"},children:Nt.map(t=>{const i=c?.path===t.path;return r.jsxs("div",{title:Pr(o,t.path),className:G("group inline-flex items-center gap-1 rounded-md border px-2 py-1 typography-ui-label transition-colors whitespace-nowrap",i?"bg-[var(--interactive-selection)] border-[var(--primary-muted)] text-[var(--interactive-selection-foreground)]":"bg-transparent border-[var(--interactive-border)] text-[var(--surface-muted-foreground)] hover:bg-[var(--interactive-hover)] hover:text-[var(--surface-foreground)]"),children:[r.jsx(Er,{filePath:t.path,extension:t.extension,className:"size-3.5 flex-shrink-0"}),r.jsx("button",{type:"button",onClick:()=>{i||Re(t)},className:"max-w-[12rem] truncate text-left",children:t.name}),r.jsx("button",{type:"button",onClick:l=>{l.stopPropagation(),on(t.path)},className:G("rounded-sm p-0.5 text-[var(--surface-muted-foreground)] hover:text-[var(--surface-foreground)]",!i&&!N&&"opacity-0 group-hover:opacity-100"),"aria-label":e("filesView.editor.closeFileAria",{name:t.name}),children:r.jsx(y,{name:"close",className:"size-3.5"})})]},t.path)})})]}):r.jsx("div",{className:"typography-ui-label font-medium truncate",children:e("filesView.editor.selectFile")})]}):null,c?r.jsxs("div",{className:"flex min-w-0 items-center gap-3 border-t border-border/40 bg-[var(--surface-subtle)] px-3 py-1",children:[ft&&!f?r.jsx("span",{className:"min-w-0 flex-1 truncate typography-meta text-muted-foreground",title:ft,children:ft}):null,r.jsx("div",{className:"ml-auto min-w-0 shrink-0 overflow-x-auto",children:Sn({layout:"docked"})})]}):null]}),r.jsx("div",{className:"flex-1 min-h-0 min-w-0 relative",children:r.jsx(ms,{ref:Fn.setScroller,outerClassName:"h-full min-w-0",className:G("h-full min-w-0",He&&"[overflow-anchor:none]"),children:c?Ae||wn?I?r.jsx("div",{className:"p-3"}):r.jsxs("div",{className:"p-3 flex items-center gap-2 typography-ui text-muted-foreground",children:[r.jsx(y,{name:"loader-4",className:"size-4 animate-spin"}),e("filesView.state.loading")]}):rt?r.jsx("div",{className:"p-3 typography-ui text-[color:var(--status-error)]",children:rt}):Fe?r.jsx("div",{className:"flex h-full items-center justify-center p-3",children:r.jsx("img",{src:bn,alt:c?.name??e("filesView.editor.imageAltFallback"),className:"max-w-full max-h-[70vh] object-contain rounded-md border border-border/30 bg-primary/10"},c.path)}):Be?jn(c):nt?r.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-6 text-center",children:[r.jsx("div",{className:"typography-ui-header text-foreground",children:e("filesView.editor.cannotPreviewBinary")}),r.jsx("div",{className:"max-w-md typography-ui text-muted-foreground",children:e("filesView.editor.binaryFileDescription")}),s.downloadFile?r.jsxs(z,{type:"button",variant:"outline",size:"sm",onClick:()=>{const t=s.downloadFile;!t||!c||t(c.path).catch(i=>{console.error("Download failed:",i),Y.error(e("sidebarFilesTree.toast.operationFailed"))})},children:[r.jsx(y,{name:"download",className:"mr-2 size-4"}),e("filesView.editor.saveFile")]}):null]}):c&&er&&re==="preview"?r.jsx("div",{className:"h-full overflow-hidden",style:{minHeight:"400px"},children:r.jsx(Lo,{ref:Vs,xml:ia,onChange:na},`${c.path}:${Se}`)}):c&&Qt&&ue==="tree"?r.jsx(hs,{fallback:r.jsxs("div",{className:"rounded-md border border-destructive/20 bg-destructive/10 px-3 py-2",children:[r.jsx("div",{className:"mb-1 font-medium text-destructive",children:e("filesView.error.jsonViewerUnavailable")}),r.jsx("div",{className:"text-sm text-muted-foreground",children:e("filesView.error.switchToTextMode")})]}),children:r.jsx("div",{className:"h-full overflow-auto",children:r.jsx(Qa,{jsonString:D,maxHeight:"100%",initiallyExpandedDepth:2})})}):c&&Qe&&$e()==="preview"?r.jsxs("div",{className:"relative h-full min-h-0",children:[r.jsxs("div",{className:"oc-file-preview h-full overflow-auto p-3 outline-none",tabIndex:-1,onMouseDown:gr,ref:t=>{vr.current=t,pr.current=t},children:[r.jsx(Kn,{containerRef:vr,filePath:c.path,fileContent:D}),D.length>500*1024&&r.jsx("div",{className:"mb-3 rounded-md border border-status-warning/20 bg-status-warning/10 px-3 py-2 text-sm text-status-warning",children:e("filesView.warning.largeFilePreviewLimited",{sizeKb:Math.round(D.length/1024)})}),r.jsx(hs,{fallback:r.jsxs("div",{className:"rounded-md border border-destructive/20 bg-destructive/10 px-3 py-2",children:[r.jsx("div",{className:"mb-1 font-medium text-destructive",children:e("filesView.error.previewUnavailable")}),r.jsx("div",{className:"text-sm text-muted-foreground",children:e("filesView.error.switchToEditMode")})]}),children:r.jsx($n,{content:D,className:"typography-markdown-body",stripFrontmatter:!0,enableFileReferences:!1})})]}),!_&&r.jsx(qn,{containerRef:pr,open:zs,onOpenChange:hr,focusNonce:Ls})]}):c&&Mt&&B==="preview"?oa?r.jsx("div",{className:"flex h-full items-center justify-center text-muted-foreground typography-ui-label",children:e("common.loading")}):r.jsx("div",{className:"h-full overflow-hidden",children:r.jsx("iframe",{src:!d.isVSCode&&gn===Rr?(()=>{const t=c.path.split("/").map(i=>encodeURIComponent(i)).join("/");return Pn().authenticatedAsset(`/api/fs/serve${t.startsWith("/")?t:`/${t}`}`)})():void 0,srcDoc:d.isVSCode?(()=>{const t=c.path.substring(0,c.path.lastIndexOf("/")+1);return t?D.replace(/<head([^>]*)>/i,`<head$1><base href="${t}">`):D})():void 0,className:"w-full h-full border-none",sandbox:"allow-scripts allow-same-origin allow-forms",title:e("filesView.editor.htmlPreviewTitle")},aa)}):c&&es&&O==="view"?Cn(c,He?D:ie,Fn):r.jsxs("div",{className:G("relative h-full",Pt&&"overflow-hidden"),ref:mr,children:[r.jsx("div",{className:G("h-full",Pt&&"invisible"),children:r.jsx(_n,{value:ie,onChange:ye,readOnly:!Ke,vimMode:Ks==="vim",extensions:mn,className:"h-full",blockWidgets:ca,onViewReady:t=>{_e.current=t,Ur(i=>i+1),window.requestAnimationFrame(()=>{zt(t)})},onViewDestroy:()=>{_e.current&&(_e.current=null),Ur(t=>t+1)},enableSearch:!0,searchOpen:ee,onSearchOpenChange:le,highlightLines:U?{start:Math.min(U.start,U.end),end:Math.max(U.start,U.end)}:void 0,lineNumbersConfig:{domEventHandlers:{mousedown:(t,i,l)=>{if(!(l instanceof MouseEvent)||l.button!==0)return!1;l.preventDefault();const u=t.state.doc.lineAt(i.from).number;if(U&&!l.shiftKey&&Math.min(U.start,U.end)===u&&Math.max(U.start,U.end)===u)return Ue(null),Zt(),Tt.current=!1,ut.current=null,Vt(!1),!0;if(f&&U&&!l.shiftKey){const h=Math.min(U.start,U.end,u),m=Math.max(U.start,U.end,u);return Ue({start:h,end:m}),Tt.current=!1,ut.current=null,Vt(!1),!0}if(Tt.current=!0,ut.current=u,Vt(!0),U&&l.shiftKey){const h=Math.min(U.start,u),m=Math.max(U.end,u);Ue({start:h,end:m})}else Ue({start:u,end:u});return!0},mouseover:(t,i,l)=>{if(!(l instanceof MouseEvent)||l.buttons!==1||!Tt.current||ut.current===null)return!1;const u=t.state.doc.lineAt(i.from).number,h=Math.min(ut.current,u),m=Math.max(ut.current,u);return Ue({start:h,end:m}),Vt(!0),!1},mouseup:()=>(Tt.current=!1,ut.current=null,Vt(!1),!1)}}})}),Pt&&r.jsx("div",{className:"pointer-events-none absolute inset-0 flex items-center justify-center bg-background",children:r.jsxs("div",{className:"flex items-center gap-2 typography-ui text-muted-foreground",children:[r.jsx(y,{name:"loader-4",className:"size-4 animate-spin"}),e("filesView.state.openingFileAtChange")]})})]}):r.jsx("div",{className:"p-3 typography-ui text-muted-foreground",children:e("filesView.editor.pickFileFromTree")})})})]}),ua=!!(o&&Ss[o]),kn=o?or[o]:null,Rn=r.jsxs("section",{className:G("flex min-h-0 flex-col overflow-hidden",f?"h-full w-full bg-background":"h-full rounded-xl border border-border/60 bg-background/70"),children:[r.jsx("div",{className:G("flex flex-col gap-2 py-2",f?"px-3":"px-2"),children:r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsxs("div",{className:"relative flex-1 min-w-0",children:[r.jsx(y,{name:"search",className:"pointer-events-none absolute left-2 top-2 size-4 text-muted-foreground"}),r.jsx(nr,{ref:M,value:E,onChange:t=>V(t.target.value),placeholder:e("filesView.tree.search.placeholder"),className:"h-8 pl-8 pr-8 typography-meta"}),E.trim().length>0&&r.jsx("button",{type:"button","aria-label":e("filesView.tree.search.clearAria"),className:"absolute right-2 top-2 inline-flex size-4 items-center justify-center text-muted-foreground hover:text-foreground",onClick:()=>{V(""),M.current?.focus()},children:r.jsx(y,{name:"close",className:"size-4"})})]}),r.jsxs(Lt,{children:[r.jsx(At,{asChild:!0,children:r.jsx("span",{className:"inline-flex flex-shrink-0",children:r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>Xr("createFile",{path:T,type:"directory"}),className:"size-8 p-0 flex-shrink-0",title:e("filesView.tree.actions.newFileTitle"),"aria-label":e("filesView.tree.actions.newFileTitle"),children:r.jsx(y,{name:"file-add",className:"size-4"})})})}),r.jsx(It,{side:"bottom",sideOffset:6,children:e("filesView.tree.actions.newFileTitle")})]}),r.jsxs(Lt,{children:[r.jsx(At,{asChild:!0,children:r.jsx("span",{className:"inline-flex flex-shrink-0",children:r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>Xr("createFolder",{path:T,type:"directory"}),className:"size-8 p-0 flex-shrink-0",title:e("filesView.tree.actions.newFolderTitle"),"aria-label":e("filesView.tree.actions.newFolderTitle"),children:r.jsx(y,{name:"folder-add",className:"size-4"})})})}),r.jsx(It,{side:"bottom",sideOffset:6,children:e("filesView.tree.actions.newFolderTitle")})]}),r.jsxs(Lt,{children:[r.jsx(At,{asChild:!0,children:r.jsx("span",{className:"inline-flex flex-shrink-0",children:r.jsx(z,{variant:"ghost",size:"sm",onClick:()=>{yr()},className:"size-8 p-0 flex-shrink-0",title:e("filesView.tree.actions.refreshTitle"),"aria-label":e("filesView.tree.actions.refreshTitle"),children:r.jsx(y,{name:"refresh",className:"size-4"})})})}),r.jsx(It,{side:"bottom",sideOffset:6,children:e("filesView.tree.actions.refreshTitle")})]})]})}),r.jsx(ms,{outerClassName:"flex-1 min-h-0",className:G("py-2",f?"px-3":"px-2"),children:r.jsx("ul",{className:"flex flex-col",children:pi?r.jsxs("li",{className:"flex items-center gap-1.5 px-2 py-1 typography-meta text-muted-foreground",children:[r.jsx(y,{name:"loader-4",className:"size-4 animate-spin"}),e("filesView.tree.search.searching")]}):Rs.length>0?Rs.map(t=>{const i=c?.path===t.path;return r.jsx("li",{children:r.jsxs("button",{type:"button",onClick:()=>{Re(t)},className:G("flex w-full items-center gap-1.5 rounded-md px-2 py-1 text-left text-foreground transition-colors",i?"bg-interactive-selection/70":"hover:bg-interactive-hover/40"),children:[fi(t.path,t.extension),r.jsx("span",{className:"min-w-0 flex-1 truncate typography-meta",style:{direction:"rtl",textAlign:"left"},title:t.path,children:t.relativePath??t.path})]})},t.path)}):kn?r.jsxs("li",{className:"flex flex-col gap-2 px-2 py-1 typography-meta text-muted-foreground",children:[r.jsx("span",{className:"text-[var(--status-error)]",children:kn}),r.jsxs(z,{variant:"outline",size:"xs",className:"w-fit gap-1.5",onClick:()=>{yr()},children:[r.jsx(y,{name:"refresh",className:"size-3.5"}),e("filesView.tree.actions.refreshTitle")]})]}):ua?ln(o,0):r.jsx("li",{className:"px-2 py-1 typography-meta text-muted-foreground",children:e("filesView.state.loading")})})})]}),da=a==="full"&&_&&c&&r.jsx("div",{className:"absolute inset-0 z-50 flex flex-col bg-background",children:r.jsxs("div",{className:"flex-1 min-h-0 min-w-0 relative",children:[r.jsx("div",{className:"absolute right-4 top-4 z-30",children:Sn({exitFullscreenOnly:!0})}),r.jsx(ms,{ref:Nn.setScroller,outerClassName:"h-full min-w-0",className:G("h-full min-w-0",He&&"[overflow-anchor:none]"),children:Ae||wn?I?r.jsx("div",{className:"p-4"}):r.jsxs("div",{className:"p-4 flex items-center gap-2 typography-ui text-muted-foreground",children:[r.jsx(y,{name:"loader-4",className:"size-4 animate-spin"}),"Loading…"]}):rt?r.jsx("div",{className:"p-4 typography-ui text-[color:var(--status-error)]",children:rt}):Fe?r.jsx("div",{className:"flex h-full items-center justify-center p-4",children:r.jsx("img",{src:bn,alt:c.name,className:"max-w-full max-h-full object-contain rounded-md border border-border/30 bg-primary/10"},c.path)}):Be?jn(c):nt?r.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-6 text-center",children:[r.jsx("div",{className:"typography-ui-header text-foreground",children:e("filesView.editor.cannotPreviewBinary")}),r.jsx("div",{className:"max-w-md typography-ui text-muted-foreground",children:e("filesView.editor.binaryFileDescription")}),s.downloadFile?r.jsxs(z,{type:"button",variant:"outline",size:"sm",onClick:()=>{const t=s.downloadFile;!t||!c||t(c.path).catch(i=>{console.error("Download failed:",i),Y.error(e("sidebarFilesTree.toast.operationFailed"))})},children:[r.jsx(y,{name:"download",className:"mr-2 size-4"}),e("filesView.editor.saveFile")]}):null]}):Qe&&$e()==="preview"?r.jsxs("div",{className:"relative h-full min-h-0",children:[r.jsxs("div",{className:"oc-file-preview h-full overflow-auto p-4 outline-none",tabIndex:-1,onMouseDown:gr,ref:t=>{vr.current=t,qr.current=t},children:[c?r.jsx(Kn,{containerRef:vr,filePath:c.path,fileContent:D}):null,D.length>500*1024&&r.jsx("div",{className:"mb-3 rounded-md border border-status-warning/20 bg-status-warning/10 px-3 py-2 text-sm text-status-warning",children:e("filesView.warning.largeFilePreviewLimited",{sizeKb:Math.round(D.length/1024)})}),r.jsx(hs,{fallback:r.jsxs("div",{className:"rounded-md border border-destructive/20 bg-destructive/10 px-3 py-2",children:[r.jsx("div",{className:"mb-1 font-medium text-destructive",children:e("filesView.error.previewUnavailable")}),r.jsx("div",{className:"text-sm text-muted-foreground",children:e("filesView.error.switchToEditMode")})]}),children:r.jsx($n,{content:D,className:"typography-markdown-body",stripFrontmatter:!0,enableFileReferences:!1})})]}),r.jsx(qn,{containerRef:qr,open:zs,onOpenChange:hr,focusNonce:Ls,className:"right-4 top-16"})]}):es&&O==="view"?Cn(c,He?D:ie,Nn):r.jsxs("div",{className:G("relative h-full",Pt&&"overflow-hidden"),children:[r.jsx("div",{className:G("h-full",Pt&&"invisible"),children:r.jsx(_n,{value:ie,onChange:ye,readOnly:!Ke,vimMode:Ks==="vim",extensions:mn,className:"h-full",onViewReady:t=>{_e.current=t,window.requestAnimationFrame(()=>{zt(t)})},onViewDestroy:()=>{_e.current&&(_e.current=null)}})}),Pt&&r.jsx("div",{className:"pointer-events-none absolute inset-0 flex items-center justify-center bg-background",children:r.jsxs("div",{className:"flex items-center gap-2 typography-ui text-muted-foreground",children:[r.jsx(y,{name:"loader-4",className:"size-4 animate-spin"}),e("filesView.state.openingFileAtChange")]})})]})})]})});return r.jsxs("div",{className:"flex h-full min-h-0 overflow-hidden bg-background relative",children:[r.jsx(Zo,{activeDialog:wt,dialogData:bt,dialogInputValue:ct,onDialogInputChange:Ds,isDialogSubmitting:ki,onDialogSubmit:_i,onClose:la,inputRef:bi}),da,f?$?ls:Rn:a==="editor-only"?r.jsx("div",{className:"flex flex-1 min-h-0 min-w-0 overflow-hidden",children:r.jsx("div",{className:"flex-1 min-h-0 min-w-0 overflow-hidden bg-background",children:ls})}):r.jsxs("div",{className:"flex flex-1 min-h-0 min-w-0 gap-3 px-3 pb-3 pt-2",children:[p>=700&&r.jsx("div",{className:"w-72 flex-shrink-0 min-h-0 overflow-hidden",children:Rn}),r.jsx("div",{className:"flex-1 min-h-0 min-w-0 overflow-hidden rounded-xl border border-border/60 bg-background",children:ls})]})]})};function Qo(a){return a+1}export{bu as FilesView};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{R as l,r as ve,j as t,f as Ct}from"./vendor-react-BUCujlKS.js";import{f as nt,y as rt,a1 as Dt,hV as _n,cV as Yt,cf as Qt,t as b,I as T,b6 as Ts,b3 as As,cT as Fr,b5 as Ls,cy as Os,cz as zs,cA as Gs,cB as _s,ct as Xt,cu as Zt,B as W,hW as $n,hX as Hn,bF as mt,bG as ht,bH as gt,bI as ft,bJ as bt,T as gr,a7 as es,a8 as ts,a9 as ss,hY as Wn,h as Se,hZ as Un,h_ as Kn,h$ as Jn,i0 as qn,b2 as Yn,ao as Qn,bQ as Xn,i1 as Zn,i2 as ea,i3 as ta,i4 as sa,i5 as ra,i6 as na,i7 as aa,c0 as Rr,bT as ia,bU as oa,bV as la,bW as ca,bX as da,i8 as ua,b_ as ma,bK as Es,eQ as ha,W as ga,ac as fa,ad as pa,ag as xa,ae as wa,bv as ya,i9 as ba,af as va,ia as ja,ib as Ca,ah as Na,ic as Sa,ai as ka,bO as Va,hO as Ia,id as Pa,l as Fa,b$ as Ra,g as Ba,cD as Da,an as fr,a2 as Ma,ie as Ea,ig as Bs}from"./useAppFontEffects-D7sNpuL2.js";import{a as Ta,b as Aa,d as La}from"./main-MhSaOZoB.js";import{F as Oa,E as za,A as Ga,a2 as _a,c as $a,a7 as Ha}from"./runtimeEndpointReset-CYJ9O_xX.js";import{u as pr}from"./vendor-zustand-BAGL70zf.js";import{r as Wa,u as Rt}from"./index-DF5kMP-i.js";import{C as Ua,a as Ka,D as Ja}from"./DirtyBranchSwitchDialog-C22HdWj4.js";import{P as qa}from"./PierreDiffViewer-BchBtZlp.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-base-ui-BeMD8X_w.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./contextPanelEmbeddedChat-C0ZLAepL.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-livSKyyV.js";import"./vendor-motion-dom-D_o3BTI3.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-g05Cx3z9.js";import"./vendor-tanstack-virtual-core-Dubg10g5.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-CiLROUVV.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-Dp3KMRQG.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-legendapp-list-gg7YLRW7.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./vendor-zod-CK21ihK-.js";import"./useRootScrollLock-lXEnWlaU.js";import"./scheduledTasksApi-D8yamh1b.js";import"./vendor-cron-parser-CUcP7OfX.js";import"./vendor-luxon-BZ0puJYg.js";import"./vendor-opencode-sdk-BJ73u-bH.js";import"./web-components-_mNEMjFY.js";import"./computeVirtualFileMetrics-CzgLum_K.js";import"./vendor-shiki-Bbf2GEcE.js";import"./vendor-shikijs-core-CGM_jqPK.js";import"./vendor-shikijs-types-CPSbSeK6.js";import"./vendor-shikijs-vscode-textmate-BgLrS_2D.js";import"./vendor-hast-util-to-html-BKBhbTDb.js";import"./vendor-html-void-elements-CkdplsNl.js";import"./vendor-property-information-rJCbAzvX.js";import"./vendor-zwitch-C2o2j-tx.js";import"./vendor-stringify-entities-CsH1VEn9.js";import"./vendor-character-entities-legacy-BpoLgcEt.js";import"./vendor-character-entities-html4-D7taRCQ7.js";import"./vendor-ccount-c2V3InAJ.js";import"./vendor-comma-separated-tokens-D8TqSuIK.js";import"./vendor-space-separated-tokens-DD3iYX1K.js";import"./vendor-hast-util-whitespace-D4Wp6AEg.js";import"./vendor-shikijs-engine-oniguruma-DPWuIF1G.js";import"./themeResolver-BmJyTmjJ.js";import"./vendor-pierre-theming-C6Z4M5_u.js";import"./vendor-shikijs-engine-javascript-Cme4830A.js";import"./vendor-oniguruma-to-es-DLBnFDCE.js";import"./vendor-oniguruma-parser-C0D4_9rT.js";import"./vendor-regex-BBWcyTkg.js";import"./vendor-regex-utilities-2BQyy0xI.js";import"./vendor-regex-recursion-JU4mF-dD.js";import"./vendor-shikijs-transformers-CZWsLLKm.js";import"./VirtualizedFileDiff-fFFm2QgH.js";import"./isDiffPlainText-Dx-dB_8l.js";import"./vendor-diff-C3JhlQdm.js";import"./Virtualizer-D_a8gKmg.js";import"./useInlineCommentController-Brz_cLcQ.js";import"./appThemeRegistry-BK0dHKa6.js";import"./registerCustomTheme-BBXUCRnG.js";const Br="gitmojiCache",Ya=1e3*60*60*24*7,Dr="1",Qa="https://raw.githubusercontent.com/carloscuesta/gitmoji/master/packages/gitmojis/src/gitmojis.json",Mr=o=>{if(!o||typeof o!="object")return!1;const e=o;return typeof e.emoji=="string"&&typeof e.code=="string"&&typeof e.description=="string"},Ds=()=>{if(typeof window>"u")return null;try{const o=window.localStorage.getItem(Br);if(!o)return null;const e=JSON.parse(o);return!e||e.version!==Dr||typeof e.fetchedAt!="number"||!Array.isArray(e.gitmojis)?null:{gitmojis:e.gitmojis.filter(Mr),fetchedAt:e.fetchedAt,version:e.version}}catch{return null}},Xa=o=>{if(!(typeof window>"u"))try{const e={gitmojis:o,fetchedAt:Date.now(),version:Dr};window.localStorage.setItem(Br,JSON.stringify(e))}catch{return}},xr=o=>Date.now()-o.fetchedAt<Ya;let Jt=null;const Bt=new Set,wr=async()=>{if(Jt)return Jt;const o=(async()=>{try{const e=await fetch(Qa);if(!e.ok)throw new Error(`Failed to load gitmojis: ${e.statusText}`);const a=await e.json(),m=Array.isArray(a.gitmojis)?a.gitmojis.filter(Mr):[];return Xa(m),Bt.forEach(N=>N(m)),m}catch(e){console.warn("Failed to load gitmoji list:",e);const a=[];return Bt.forEach(m=>m(a)),a}finally{Jt=null}})();return Jt=o,o},Za=o=>{const[e,a]=l.useState(()=>o?Ds()?.gitmojis??[]:[]),[m,N]=l.useState(!1),f=l.useRef(o);f.current=o,l.useEffect(()=>{if(!o){Bt.delete(a),a([]),N(!1);return}const x=Ds();if(x&&(a(x.gitmojis),xr(x)))return;Bt.add(a),N(!0);let g=!1;return wr().finally(()=>{!g&&f.current&&N(!1)}),()=>{g=!0,Bt.delete(a)}},[o]);const p=l.useCallback(async()=>{if(!f.current)return[];if(e.length>0)return e;const x=Ds();return x&&xr(x)?x.gitmojis:wr()},[e]);return{gitmojis:e,isLoading:m,ensureLoaded:p}},Nt=async(o,e)=>{const a=await Wa(`/api/git/integrate/${o}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!a.ok){const m=await a.json().catch(()=>null);throw new Error(m?.error||`Git integrate request failed: ${a.statusText}`)}return a.json()};async function Ft(o){return Nt("plan",o)}async function ei(o){return Nt("conflict-details",{tempWorktreePath:o})}async function ti(o){return(await Nt("cherry-pick-status",{tempWorktreePath:o})).inProgress}async function si(o){return Nt("run",{plan:o})}async function ri(o){await Nt("abort",{state:o})}async function ni(o){return Nt("continue",{state:o})}const ai=({repoRoot:o,sourceBranch:e,worktreeMetadata:a,localBranches:m,defaultTargetBranch:N,refreshKey:f,onRefresh:p,showHeader:x=!0})=>{const{t:g}=nt(),w=rt(h=>h.currentSessionId),[M,v]=ve.useState(!1),[V,A]=ve.useState(""),S=ve.useRef(null),z=ve.useMemo(()=>Dt(m,V,h=>[h]),[m,V]),[C,y]=ve.useState(N);ve.useEffect(()=>{y(N)},[N]),ve.useEffect(()=>{if(M){const h=setTimeout(()=>{S.current?.focus()},0);return()=>clearTimeout(h)}},[M]);const D=!!(o&&e&&C&&C!=="HEAD"&&e!==C),[k,R]=ve.useState({kind:"idle"}),[P,F]=ve.useState(!1),[r,Y]=ve.useState([]),B=ve.useMemo(()=>w?`aiworker.integrate.conflict:${w}`:null,[w]);ve.useEffect(()=>{if(!B||typeof window>"u")return;const h=window.localStorage.getItem(B);if(!h)return;let d=!1;try{const I=JSON.parse(h);if(!I?.tempWorktreePath||I.repoRoot!==o){window.localStorage.removeItem(B);return}(async()=>{const L=await ti(I.tempWorktreePath).catch(()=>!1);if(d)return;if(!L){window.localStorage.removeItem(B);return}const q=await ei(I.tempWorktreePath).catch(()=>null);d||q&&R({kind:"conflict",state:I,details:q})})()}catch{window.localStorage.removeItem(B)}return()=>{d=!0}},[B,o]),ve.useEffect(()=>{if(!D){R({kind:"idle"});return}let h=!1;return R({kind:"loading"}),(async()=>{try{const d=await Ft({repoRoot:o,sourceBranch:e,targetBranch:C});if(h)return;if(R({kind:"ready",plan:d}),d.commits.length>0){const L=d.commits.slice(-50).reverse(),q=await _n(o,L);h||(Y(q),F(!1))}else h||(Y([]),F(!1))}catch{h||R({kind:"idle"})}})(),()=>{h=!0}},[D,o,e,C,f]);const u=ve.useCallback(h=>{w&&rt.getState().setWorktreeMetadata(w,{...a,createdFromBranch:h})},[w,a]),E=rt(h=>h.openNewSessionDraft),se=ve.useCallback(async h=>{const d=await Yt("git.integrate.cherrypick.resolve.visible",{current_commit:h.state.currentCommit,target_branch:h.state.targetBranch}),I=await Yt("git.integrate.cherrypick.resolve.instructions",{repo_root:h.state.repoRoot,temp_worktree_path:h.state.tempWorktreePath,source_branch:h.state.sourceBranch,target_branch:h.state.targetBranch,current_commit:h.state.currentCommit}),L=`Cherry-pick conflict context (JSON)
|
|
2
|
+
${JSON.stringify({repoRoot:h.state.repoRoot,tempWorktreePath:h.state.tempWorktreePath,sourceBranch:h.state.sourceBranch,targetBranch:h.state.targetBranch,currentCommit:h.state.currentCommit,remainingCommits:h.state.remainingCommits,statusPorcelain:h.details.statusPorcelain,unmergedFiles:h.details.unmergedFiles,currentPatchMeta:h.details.currentPatchMeta,currentPatch:h.details.currentPatch,diff:h.details.diff},null,2)}`;return{visibleText:d,instructionsText:I,payloadText:L}},[]),U=Qt(h=>h.setPendingInputText),G=Qt(h=>h.setPendingSyntheticParts),$=ve.useCallback(async(h,d)=>{const I=await se(h);if(d){E({directoryOverride:h.state.tempWorktreePath,initialPrompt:I.visibleText,syntheticParts:[{text:I.instructionsText,synthetic:!0},{text:I.payloadText,synthetic:!0}]});return}if(!w){b.error(g("gitView.integrate.noActiveSession"),{description:g("gitView.integrate.noActiveSessionDescription")});return}U(I.visibleText,"replace"),G([{text:I.instructionsText,synthetic:!0},{text:I.payloadText,synthetic:!0}])},[w,se,E,U,G,g]),X=ve.useCallback(async()=>{if(k.kind==="ready"){if(k.plan.commits.length===0){b.message(g("gitView.integrate.noCommitsToMoveToast"));return}R({kind:"running",plan:k.plan});try{const h=await si(k.plan);if(h.kind==="success"){b.success(g("gitView.integrate.commitsMovedToast"),{description:h.moved===1?g("gitView.integrate.commitsMovedDescriptionSingle",{count:h.moved,branch:k.plan.targetBranch}):g("gitView.integrate.commitsMovedDescriptionPlural",{count:h.moved,branch:k.plan.targetBranch})});const d=await Ft(k.plan);R({kind:"ready",plan:d}),p?.();return}h.kind==="conflict"&&(b.error(g("gitView.integrate.cherryPickConflictToast"),{description:g("gitView.integrate.cherryPickConflictDescription")}),R({kind:"conflict",state:h.state,details:h.details}),B&&typeof window<"u"&&window.localStorage.setItem(B,JSON.stringify(h.state)))}catch(h){const d=h instanceof Error?h.message:String(h);b.error(g("gitView.integrate.failedToMoveToast"),{description:d});const I=await Ft({repoRoot:o,sourceBranch:e,targetBranch:C}).catch(()=>null);R(I?{kind:"ready",plan:I}:{kind:"idle"})}}},[k,p,o,e,C,B,g]),H=ve.useCallback(async()=>{if(k.kind==="conflict")try{await ri(k.state),b.message(g("gitView.integrate.cherryPickAbortedToast")),B&&typeof window<"u"&&window.localStorage.removeItem(B)}finally{const h=await Ft({repoRoot:o,sourceBranch:e,targetBranch:C}).catch(()=>null);R(h?{kind:"ready",plan:h}:{kind:"idle"})}},[k,o,e,C,B,g]),le=ve.useCallback(async()=>{if(k.kind==="conflict")try{const h=await ni(k.state);if(h.kind==="success"){b.success(g("gitView.integrate.cherryPickFinishedToast"));const d=await Ft({repoRoot:o,sourceBranch:e,targetBranch:C}).catch(()=>null);R(d?{kind:"ready",plan:d}:{kind:"idle"}),B&&typeof window<"u"&&window.localStorage.removeItem(B),p?.();return}h.kind==="conflict"&&(R({kind:"conflict",state:h.state,details:h.details}),B&&typeof window<"u"&&window.localStorage.setItem(B,JSON.stringify(h.state)))}catch(h){const d=h instanceof Error?h.message:String(h);b.error(g("gitView.integrate.cherryPickContinueFailedToast"),{description:d})}},[k,o,e,C,p,B,g]);return!o||!e?null:t.jsxs("section",{className:"border-0 bg-transparent rounded-none",children:[x?t.jsxs("div",{className:"px-0 py-3 border-b border-border/40 flex items-center justify-between gap-2",children:[t.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[t.jsx(T,{name:"split-cells-horizontal",className:"size-4 text-muted-foreground"}),t.jsx("h3",{className:"typography-ui-header font-semibold text-foreground truncate",children:g("gitView.integrate.title")}),k.kind==="ready"&&k.plan.commits.length>0?t.jsx("span",{className:"typography-meta text-muted-foreground truncate",children:g("gitView.integrate.toMoveCount",{count:k.plan.commits.length})}):null]}),t.jsx("div",{className:"flex items-center gap-2",children:k.kind==="loading"||k.kind==="running"?t.jsx(T,{name:"loader-4",className:"size-4 animate-spin text-muted-foreground"}):null})]}):null,t.jsxs("div",{className:"flex flex-col gap-3 py-3",children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[t.jsxs("div",{className:"min-w-0",children:[t.jsx("div",{className:"typography-ui-label text-foreground",children:g("gitView.integrate.moveCommits")}),t.jsxs("div",{className:"typography-micro text-muted-foreground truncate",children:[e," → ",C]})]}),t.jsx("div",{className:"flex-1"}),t.jsxs(Ts,{open:M,onOpenChange:v,children:[t.jsx(As,{asChild:!0,children:t.jsxs("button",{type:"button",className:Fr({size:"default"}),children:[g("gitView.integrate.target"),t.jsx("span",{className:"max-w-[160px] truncate font-mono text-xs text-muted-foreground",children:C}),t.jsx(T,{name:"arrow-down-s",className:"size-4 opacity-60"})]})}),t.jsx(Ls,{align:"end",className:"w-72 p-0 max-h-[var(--available-height)] flex flex-col overflow-hidden",children:t.jsxs(Os,{className:"h-full min-h-0",shouldFilter:!1,children:[t.jsx(zs,{ref:S,placeholder:g("gitView.branch.searchPlaceholder"),value:V,onValueChange:A,onKeyDown:h=>h.stopPropagation()}),t.jsxs(Gs,{className:"h-full min-h-0",scrollbarClassName:"overlay-scrollbar--flush overlay-scrollbar--dense overlay-scrollbar--zero",disableHorizontal:!0,children:[t.jsx(_s,{children:g("gitView.branch.empty")}),t.jsx(Xt,{heading:g("gitView.branch.localBranches"),children:z.map(h=>t.jsx(Zt,{value:h,onSelect:()=>{y(h),u(h),v(!1),A("")},children:h},h))})]})]})})]}),k.kind==="ready"?t.jsx(W,{size:"sm",onClick:()=>{X()},disabled:!D||k.plan.commits.length===0,children:g("gitView.integrate.move")}):k.kind==="loading"?t.jsx(W,{size:"sm",variant:"outline",disabled:!0,children:g("gitView.integrate.checking")}):k.kind==="running"?t.jsx(W,{size:"sm",variant:"outline",disabled:!0,children:g("gitView.integrate.moving")}):null]}),k.kind==="ready"&&k.plan.commits.length===0&&t.jsx("div",{className:"typography-meta text-muted-foreground",children:g("gitView.integrate.noCommitsToMove")}),k.kind==="ready"&&k.plan.commits.length>0&&t.jsxs("div",{className:"space-y-2",children:[t.jsxs("div",{className:"flex items-center justify-between gap-2",children:[t.jsxs("div",{className:"typography-meta text-foreground",children:[g("gitView.integrate.commitsToMove"),t.jsxs("span",{className:"text-muted-foreground",children:[" (",k.plan.commits.length,")"]})]}),r.length>0&&k.plan.commits.length>5&&t.jsx("button",{type:"button",onClick:()=>F(h=>!h),className:"typography-micro text-muted-foreground hover:text-foreground",children:g(P?"gitView.integrate.showLess":"gitView.integrate.showAll")})]}),t.jsxs("div",{className:"space-y-1",children:[(P?r:r.slice(0,5)).map(h=>t.jsxs("div",{className:"flex items-baseline gap-2 min-w-0",children:[t.jsx("span",{className:"font-mono text-xs text-muted-foreground flex-shrink-0",children:h.short}),t.jsx("span",{className:"typography-meta text-muted-foreground truncate",children:h.subject||h.sha})]},h.sha)),r.length===0&&t.jsx("div",{className:"typography-meta text-muted-foreground",children:g("gitView.integrate.previewUnavailable")}),k.plan.commits.length>r.length&&t.jsx("div",{className:"typography-micro text-muted-foreground/70",children:g("gitView.integrate.showingFirstCommits",{count:r.length})})]})]}),k.kind==="conflict"&&t.jsxs("div",{className:"rounded-md border border-border/60 bg-background/60 p-3 space-y-2",children:[t.jsx("div",{className:"typography-meta text-foreground",children:g("gitView.integrate.conflictsInFiles",{count:k.details.unmergedFiles.length})}),t.jsxs("div",{className:"typography-micro text-muted-foreground/80",children:[g("gitView.integrate.currentCommit"),": ",t.jsx("span",{className:"font-mono",children:k.state.currentCommit.slice(0,7)})]}),t.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[k.details.unmergedFiles.slice(0,6).map(h=>t.jsx("span",{className:"font-mono text-xs px-2 py-0.5 rounded bg-muted/40 text-muted-foreground",children:h},h)),k.details.unmergedFiles.length>6&&t.jsx("span",{className:"text-xs text-muted-foreground",children:g("gitView.integrate.moreFiles",{count:k.details.unmergedFiles.length-6})})]}),t.jsxs("div",{className:"flex items-center gap-2 pt-1",children:[t.jsx(W,{size:"sm",variant:"ghost",className:"typography-meta",onClick:()=>{H()},children:g("gitView.operation.abort")}),t.jsxs(W,{size:"sm",variant:"secondary",className:"typography-meta gap-1",disabled:!w,onClick:()=>{$({state:k.state,details:k.details},!1)},children:[t.jsx(T,{name:"sparkling",className:"size-3.5"}),g("gitView.integrate.currentSession")]}),t.jsxs(W,{size:"sm",variant:"secondary",className:"typography-meta gap-1",onClick:()=>{$({state:k.state,details:k.details},!0)},children:[t.jsx(T,{name:"sparkling",className:"size-3.5"}),g("gitView.integrate.newSession")]}),t.jsx(W,{size:"sm",className:"typography-meta",onClick:()=>{le()},children:g("gitView.operation.continue")})]})]})]})]})},ii=({open:o,onOpenChange:e,directory:a,hasUncommittedChanges:m,hasStagedChanges:N=!1,uncommittedFileCount:f,onChanged:p})=>{const{t:x}=nt(),[g,w]=l.useState([]),[M,v]=l.useState(!1),[V,A]=l.useState(""),[S,z]=l.useState(""),[C,y]=l.useState(null),[D,k]=l.useState({}),R=l.useCallback(async()=>{if(a){v(!0);try{const u=await $n(a);w(u.stashes),k({})}catch(u){b.error(u instanceof Error?u.message:x("gitView.stashes.toast.loadFailed"))}finally{v(!1)}}},[a,x]);l.useEffect(()=>{o&&R()},[R,o]),l.useEffect(()=>{if(!o||!a||g.length===0)return;let u=!1;const E=g.map(se=>se.ref);return Hn(a,E).then(se=>{u||k(se.counts)}).catch(()=>{}),()=>{u=!0}},[a,o,g]);const P=l.useMemo(()=>Dt(g,V,u=>[u.message,u.ref,u.relativeTime]),[V,g]),F=l.useCallback(async u=>{await R(),await p?.(u)},[R,p]),r=async()=>{if(!(!a||C)){y("create");try{const u=await Wn(a,{message:S.trim()||void 0});u.created?(b.success(x("gitView.stashes.toast.created")),z("")):b.info(x("gitView.stashes.toast.noChanges")),await F({affectsIndex:!!(u.created&&N)})}catch(u){b.error(u instanceof Error?u.message:x("gitView.stashes.toast.createFailed"))}finally{y(null)}}},Y=async(u,E)=>{if(!(!a||C)&&!(E==="drop"&&!window.confirm(x("gitView.stashes.confirm.drop",{ref:u.ref})))){y(`${E}:${u.ref}`);try{E==="apply"&&await Un(a,{ref:u.ref}),E==="pop"&&await Kn(a,{ref:u.ref}),E==="drop"&&await Jn(a,{ref:u.ref});const se=E==="apply"?"gitView.stashes.toast.applySuccess":E==="pop"?"gitView.stashes.toast.popSuccess":"gitView.stashes.toast.dropSuccess";b.success(x(se)),await F({affectsIndex:E!=="drop"})}catch(se){const U=E==="apply"?"gitView.stashes.toast.applyFailed":E==="pop"?"gitView.stashes.toast.popFailed":"gitView.stashes.toast.dropFailed";b.error(se instanceof Error?se.message:x(U)),await F({affectsIndex:E!=="drop"})}finally{y(null)}}},B=C!==null;return t.jsx(mt,{open:o,onOpenChange:e,children:t.jsxs(ht,{className:"max-w-2xl max-h-[70vh] flex flex-col",children:[t.jsxs(gt,{children:[t.jsxs(ft,{className:"flex items-center gap-2",children:[t.jsx(T,{name:"archive-stack",className:"h-5 w-5"}),x("gitView.stashes.title")]}),t.jsx(bt,{children:x("gitView.stashes.description")})]}),t.jsxs("div",{className:"mt-2 rounded-lg border border-border/60 bg-[var(--surface-elevated)] p-3",children:[t.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row",children:[t.jsx(gr,{value:S,onChange:u=>z(u.target.value),placeholder:x("gitView.stashes.messagePlaceholder"),disabled:B||!m,className:"flex-1"}),t.jsxs(W,{onClick:r,disabled:!m||B||!a,children:[C==="create"?t.jsx(T,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(T,{name:"inbox-archive",className:"size-4"}),x("gitView.stashes.actions.stashCurrentWithCount",{count:f})]})]}),t.jsx("p",{className:"typography-meta mt-2 text-muted-foreground",children:x("gitView.stashes.includeUntrackedHint")})]}),t.jsxs("div",{className:"relative mt-2",children:[t.jsx(T,{name:"search",className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),t.jsx(gr,{value:V,onChange:u=>A(u.target.value),placeholder:x("gitView.stashes.searchPlaceholder"),className:"pl-9"})]}),t.jsx("div",{className:"flex-1 overflow-y-auto",children:M?t.jsx("div",{className:"flex items-center justify-center py-10 text-muted-foreground",children:t.jsx(T,{name:"loader-4",className:"size-5 animate-spin"})}):P.length===0?t.jsx("div",{className:"py-8 text-center text-muted-foreground",children:x(V?"gitView.stashes.empty.search":"gitView.stashes.empty.list")}):P.map((u,E)=>t.jsxs("div",{className:"group flex items-center gap-2 rounded py-1.5 transition-colors hover:bg-interactive-hover/30",children:[t.jsxs("div",{className:"min-w-0 flex-1 pl-2",children:[t.jsx("p",{className:"typography-small truncate text-foreground",children:u.message||x("gitView.stashes.untitled")}),t.jsxs("p",{className:"typography-meta truncate text-muted-foreground",children:[t.jsxs(es,{children:[t.jsx(ts,{asChild:!0,children:t.jsx("span",{children:E===0&&!V.trim()?x("gitView.stashes.latestLabel"):x("gitView.stashes.itemNumber",{number:E+1})})}),t.jsx(ss,{sideOffset:6,children:u.ref})]})," · ",u.relativeTime," · ",typeof D[u.ref]=="number"?x("gitView.stashes.fileCount",{count:D[u.ref]}):x("gitView.stashes.fileCountLoading")]})]}),t.jsxs("div",{className:"mr-2 flex shrink-0 items-center gap-1 opacity-100 sm:opacity-0 sm:group-hover:opacity-100",children:[t.jsx(Ms,{label:x("gitView.stashes.actions.apply"),loading:C===`apply:${u.ref}`,onClick:()=>Y(u,"apply"),disabled:B,children:t.jsx(T,{name:"inbox-unarchive",className:"size-4"})}),t.jsx(Ms,{label:x("gitView.stashes.actions.pop"),loading:C===`pop:${u.ref}`,onClick:()=>Y(u,"pop"),disabled:B,children:t.jsx(T,{name:"inbox-unarchive-fill",className:"size-4"})}),t.jsx(Ms,{label:x("gitView.stashes.actions.drop"),loading:C===`drop:${u.ref}`,onClick:()=>Y(u,"drop"),disabled:B,destructive:!0,children:t.jsx(T,{name:"delete-bin",className:"size-4"})})]})]},u.ref))})]})})},Ms=o=>{const e=Ct.c(17),{label:a,loading:m,disabled:N,destructive:f,onClick:p,children:x}=o,g=m||void 0,w=f?"text-[var(--status-error)] hover:text-[var(--status-error)]":"text-muted-foreground hover:text-foreground";let M;e[0]!==w?(M=Se("flex h-6 w-6 items-center justify-center transition-colors disabled:opacity-50",w),e[0]=w,e[1]=M):M=e[1];let v;e[2]!==x||e[3]!==m?(v=m?t.jsx(T,{name:"loader-4",className:"size-4 animate-spin"}):x,e[2]=x,e[3]=m,e[4]=v):v=e[4];let V;e[5]!==N||e[6]!==a||e[7]!==p||e[8]!==g||e[9]!==M||e[10]!==v?(V=t.jsx(ts,{asChild:!0,children:t.jsx("button",{type:"button","aria-label":a,"aria-busy":g,className:M,onClick:p,disabled:N,children:v})}),e[5]=N,e[6]=a,e[7]=p,e[8]=g,e[9]=M,e[10]=v,e[11]=V):V=e[11];let A;e[12]!==a?(A=t.jsx(ss,{sideOffset:6,children:a}),e[12]=a,e[13]=A):A=e[13];let S;return e[14]!==V||e[15]!==A?(S=t.jsxs(es,{children:[V,A]}),e[14]=V,e[15]=A,e[16]=S):S=e[16],S},oi=o=>{const e=Ct.c(16),{onOpenStashes:a}=o,{t:m}=nt();let N;e[0]===Symbol.for("react.memo_cache_sentinel")?(N=t.jsx(T,{name:"git-commit",className:"size-10 text-muted-foreground/70 mb-4"}),e[0]=N):N=e[0];let f;e[1]!==m?(f=m("gitView.empty.cleanTitle"),e[1]=m,e[2]=f):f=e[2];let p;e[3]!==f?(p=t.jsx("p",{className:"typography-ui-label font-semibold text-foreground mb-1",children:f}),e[3]=f,e[4]=p):p=e[4];let x;e[5]!==m?(x=m("gitView.empty.cleanDescription"),e[5]=m,e[6]=x):x=e[6];let g;e[7]!==x?(g=t.jsx("p",{className:"typography-meta text-muted-foreground mb-4",children:x}),e[7]=x,e[8]=g):g=e[8];let w;e[9]!==a||e[10]!==m?(w=a?t.jsxs(W,{type:"button",variant:"outline",size:"sm",onClick:a,className:"gap-1.5",children:[t.jsx(T,{name:"archive-stack",className:"size-4"}),m("gitView.stashes.title")]}):null,e[9]=a,e[10]=m,e[11]=w):w=e[11];let M;return e[12]!==p||e[13]!==g||e[14]!==w?(M=t.jsxs("div",{className:"flex flex-col items-center justify-center py-10 px-4 text-center",children:[N,p,g,w]}),e[12]=p,e[13]=g,e[14]=w,e[15]=M):M=e[15],M},ut=8,li=o=>{const e=Ct.c(18),{laned:a,totalLanes:m,isExpanded:N}=o,{lane:f,color:p,connectors:x}=a,w=Math.max(m,f+1)*ut+ut/2,M=l.useRef(null),v=l.useRef(null);let V;e[0]!==p||e[1]!==x||e[2]!==f||e[3]!==w?(V=()=>{const y=M.current,D=v.current;if(!y||!D)return;const k=y.offsetHeight;if(k===0)return;const R=window.devicePixelRatio||1;D.width=w*R,D.height=k*R;const P=D.getContext("2d");if(!P)return;P.scale(R,R),P.clearRect(0,0,w,k);const F=k/2,r=f*ut+ut/2,Y=getComputedStyle(D),B=Y.getPropertyValue("--surface-muted-foreground").trim()||Y.color,u=U=>{if(!U.startsWith("var("))return U;const G=U.slice(4,-1).trim();return Y.getPropertyValue(G).trim()||B},E=[...x].sort(di);for(const U of E){const G=U.fromLane*ut+ut/2,$=U.toLane*ut+ut/2,X=U.type==="passing"?.72:U.type==="branch-out"||U.type==="merge-in"?.95:1;P.beginPath(),P.strokeStyle=u(U.color),P.globalAlpha=X,P.lineWidth=1.25,P.lineCap="round";e:switch(U.type){case"passing":case"commit-lane":{P.moveTo(G,0),P.lineTo(G,k);break e}case"top-stub":{P.moveTo(G,0),P.lineTo(G,F);break e}case"bottom-stub":{P.moveTo(G,F),P.lineTo(G,k);break e}case"branch-out":{const H=(F+k)/2;P.moveTo(r,F),P.bezierCurveTo(r,H,$,H,$,k);break e}case"merge-in":{const H=F/2;P.moveTo(G,0),P.bezierCurveTo(G,H,r,H,r,F);break e}default:continue}P.stroke(),P.globalAlpha=1}const se=Y.getPropertyValue("--background").trim()||Y.getPropertyValue("--surface-background").trim();P.beginPath(),P.arc(r,F,4,0,Math.PI*2),P.fillStyle=u(p),P.fill(),P.beginPath(),P.arc(r,F,5,0,Math.PI*2),P.strokeStyle=se||B,P.lineWidth=2,P.stroke()},e[0]=p,e[1]=x,e[2]=f,e[3]=w,e[4]=V):V=e[4];let A;e[5]!==p||e[6]!==x||e[7]!==N||e[8]!==f||e[9]!==a||e[10]!==m||e[11]!==w?(A=[a,f,p,x,m,N,w],e[5]=p,e[6]=x,e[7]=N,e[8]=f,e[9]=a,e[10]=m,e[11]=w,e[12]=A):A=e[12],l.useLayoutEffect(V,A);let S;e[13]!==w?(S={width:w,height:"100%",position:"relative",flexShrink:0,overflow:"hidden"},e[13]=w,e[14]=S):S=e[14];let z;e[15]===Symbol.for("react.memo_cache_sentinel")?(z=t.jsx("canvas",{ref:v,style:{position:"absolute",inset:0,width:"100%",height:"100%",display:"block"}}),e[15]=z):z=e[15];let C;return e[16]!==S?(C=t.jsx("div",{ref:M,style:S,children:z}),e[16]=S,e[17]=C):C=e[17],C};function ci(o){return o==="branch-out"||o==="merge-in"}function di(o,e){const a=ci;return(a(o.type)?1:0)-(a(e.type)?1:0)}const yr=15e3,br=500,vr=12,jr=8*1024*1024,Cr=o=>typeof o=="string"?0:(o.original?.length??0)+(o.modified?.length??0),Nr=o=>{if(o.size<=vr){let N=0;for(const f of o.values())N+=Cr(f);if(N<=jr)return o}const e=Array.from(o.entries()).reverse(),a=new Map;let m=0;for(const[N,f]of e){if(a.size>=vr)continue;const p=Cr(f);m+p>jr&&a.size>0||(a.set(N,f),m+=p)}return new Map(Array.from(a.entries()).reverse())};function Sr(o,e){const a=new Date(o);return Number.isNaN(a.getTime())?o:Xn(a,e,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function ui(o){switch(o){case"A":return"text-[var(--status-success)]";case"D":return"text-[var(--status-error)]";case"M":return"text-[var(--status-warning)]";case"R":return"text-[var(--status-info)]";default:return"text-muted-foreground"}}function mi(o){return o?o.split(",").map(e=>e.trim()).filter(Boolean).map(e=>{const a=e.startsWith("HEAD ->");return{label:a?e.replace("HEAD -> ",""):e.replace("tag: ",""),isHead:a,isTag:e.startsWith("tag: ")}}):[]}const hi=l.memo(({entry:o,mode:e="history",laned:a,totalLanes:m,isExpanded:N,onToggle:f,files:p,isLoadingFiles:x,onCopyHash:g,directory:w,onConflict:M,onActionSuccess:v})=>{const{t:V}=nt(),A=Rt(d=>d.timeFormatPreference),S=e==="graph",[z,C]=l.useState(null),[y,D]=l.useState(!1),[k,R]=l.useState(""),[P,F]=l.useState(null),[r,Y]=l.useState(new Set),[B,u]=l.useState(new Map),[E,se]=l.useState(new Set),U=async()=>{if(w){C("checkout");try{await aa(w,o.hash),b.success(V("gitView.history.actions.detachedHead")),v?.()}catch(d){b.error(String(d.message))}finally{C(null)}}},G=async()=>{if(!(!w||!k.trim())){C("createBranch");try{await Zn(w,k.trim(),o.hash),D(!1),R(""),v?.()}catch(d){b.error(String(d.message))}finally{C(null)}}},$=async()=>{if(w){C("cherryPick");try{const d=await na(w,o.hash);d.conflict?M?.({conflict:!0,conflictFiles:d.conflictFiles,operation:"cherry-pick"}):v?.()}catch(d){b.error(String(d.message))}finally{C(null)}}},X=async()=>{if(w){C("revert");try{const d=await ra(w,o.hash);d.conflict?M?.({conflict:!0,conflictFiles:d.conflictFiles,operation:"revert"}):v?.()}catch(d){b.error(String(d.message))}finally{C(null)}}},H=async(d,I=!1)=>{if(!(!w||z!==null)){C("reset");try{await ea(w,o.hash,d,I),v?.()}catch(L){b.error(String(L.message))}finally{C(null)}}},le=async()=>{if(!P)return;const d=P;switch(F(null),d){case"checkout":return U();case"cherryPick":return $();case"revert":return X();case"merge":return ae();case"rebase":return ce();case"resetSoft":return H("soft");case"resetMixed":return H("mixed");case"resetHard":return H("hard",!0)}},ae=async()=>{if(w){C("merge");try{const d=await sa(w,{branch:o.hash});d.conflict?M?.({conflict:!0,conflictFiles:d.conflictFiles,operation:"merge"}):v?.()}catch(d){b.error(String(d.message))}finally{C(null)}}},ce=async()=>{if(w){C("rebase");try{const d=await ta(w,{onto:o.hash});d.conflict?M?.({conflict:!0,conflictFiles:d.conflictFiles,operation:"rebase"}):v?.()}catch(d){b.error(String(d.message))}finally{C(null)}}},ie=l.useCallback(async d=>{const I=d.path;if(!w){u(L=>new Map(L).set(I,"error"));return}u(L=>Nr(new Map(L).set(I,"loading")));try{const L=qn(w,o.hash,d.path,!1),q=new Promise((re,J)=>{setTimeout(()=>J(new Error(`Timed out after ${yr}ms`)),yr)}),ne=await Promise.race([L,q]);u(re=>Nr(new Map(re).set(I,ne)))}catch{u(L=>new Map(L).set(I,"error"))}},[w,o.hash]),h=l.useCallback(async d=>{const I=d.path;if(d.changeType==="R"||d.isBinary){Y(re=>{const J=new Set(re);return J.has(I)?J.delete(I):J.add(I),J});return}const L=B.get(I);if(r.has(I)&&L&&L!=="error"){Y(re=>{const J=new Set(re);return J.delete(I),J});return}Y(re=>{const J=new Set(re);return J.add(I),J}),!(L&&L!=="error"||d.insertions+d.deletions>br&&!E.has(I))&&await ie(d)},[B,E,ie,r]);return t.jsxs("li",{children:[t.jsxs("button",{type:"button",onClick:f,className:Se("w-full flex items-start gap-3 px-3 py-2 text-left transition-colors",S?"hover:bg-[var(--interactive-hover)]/40":N?"bg-sidebar/90":"hover:bg-sidebar/40"),children:[S&&a&&m!==void 0?t.jsx("div",{className:"-my-2 shrink-0 self-stretch",children:t.jsx(li,{laned:a,totalLanes:m,isExpanded:N})}):t.jsx("div",{className:"h-2 w-2 translate-y-2 rounded-full shrink-0",style:{backgroundColor:"var(--status-success)"},"aria-hidden":!0}),t.jsxs("div",{className:"min-w-0 flex-1",children:[S?(()=>{const d=mi(o.refs);return d.length>0?t.jsx("div",{className:"flex flex-wrap gap-1 mb-0.5",children:d.map(I=>t.jsx("span",{className:Se("inline-flex items-center px-1.5 py-0 typography-micro rounded font-medium",I.isHead?"bg-[var(--chart-1)] text-[var(--primary-foreground)]":I.isTag?"bg-[var(--chart-5)] text-[var(--primary-foreground)]":"bg-[var(--interactive-hover)] text-[var(--foreground)]"),children:I.label},I.label))}):null})():null,t.jsx("p",{className:"typography-ui-label font-medium text-foreground line-clamp-1",children:o.message}),t.jsxs("div",{className:"flex items-center gap-1 typography-meta text-muted-foreground",children:[t.jsxs("div",{className:"flex items-center gap-1 min-w-0 truncate",children:[t.jsx("span",{className:"truncate min-w-[3ch]",title:o.author_name,children:o.author_name}),t.jsx("span",{className:"shrink-0",children:"·"}),t.jsx("span",{className:"truncate min-w-0",title:Sr(o.date,A),children:Sr(o.date,A)})]}),t.jsx("span",{className:"shrink-0",children:"·"}),t.jsx("code",{className:"shrink-0 font-mono",children:o.hash.slice(0,8)}),t.jsxs(es,{children:[t.jsx(ts,{asChild:!0,children:t.jsx(W,{variant:"ghost",size:"sm",className:"h-5 px-1 shrink-0",onClick:d=>{d.stopPropagation(),g(o.hash)},children:t.jsx(T,{name:"file-copy",className:"size-3"})})}),t.jsx(ss,{sideOffset:8,children:V("gitView.history.copySha")})]})]})]})]}),N&&t.jsxs("div",{className:"px-3 pb-2 pl-8 border-t border-border/40",children:[S&&P?t.jsxs("div",{className:"flex items-center gap-2 py-2 border-b border-border/30 mb-2",children:[t.jsx("span",{className:"typography-micro text-muted-foreground flex-1 min-w-0",children:V(`gitView.history.actions.${P}Confirm`)}),t.jsxs(W,{variant:"destructive",size:"xs",className:"h-6 shrink-0",disabled:z!==null,onClick:d=>{d.stopPropagation(),le()},children:[z!==null?t.jsx(T,{name:"loader-4",className:"size-3 animate-spin mr-1"}):null,V("gitView.history.actions.confirmButton")]}),t.jsx(W,{variant:"ghost",size:"xs",className:"h-6 shrink-0",disabled:z!==null,onClick:d=>{d.stopPropagation(),F(null)},children:V("gitView.history.actions.cancelButton")})]}):S?t.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 py-2 border-b border-border/30 mb-2",children:[t.jsx(W,{variant:"outline",size:"xs",className:"h-6",disabled:z!==null,onClick:d=>{d.stopPropagation(),F("checkout")},children:V("gitView.history.actions.checkout")}),y?t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx("input",{autoFocus:!0,value:k,onChange:d=>R(d.target.value),onKeyDown:d=>{d.key==="Enter"&&G(),d.key==="Escape"&&(D(!1),R(""))},placeholder:V("gitView.history.actions.createBranchPlaceholder"),className:"h-6 text-xs px-2 rounded border border-border/60 bg-background min-w-0 w-32"}),t.jsxs(W,{variant:"outline",size:"xs",className:"h-6",disabled:!k.trim()||z!==null,onClick:d=>{d.stopPropagation(),G()},children:[z==="createBranch"?t.jsx(T,{name:"loader-4",className:"size-3 animate-spin mr-1"}):null,V("gitView.history.actions.createBranchConfirm")]})]}):t.jsx(W,{variant:"outline",size:"xs",className:"h-6",onClick:d=>{d.stopPropagation(),D(!0)},children:V("gitView.history.actions.createBranch")}),t.jsx(W,{variant:"outline",size:"xs",className:"h-6",disabled:z!==null,onClick:d=>{d.stopPropagation(),F("cherryPick")},children:V("gitView.history.actions.cherryPick")}),t.jsx(W,{variant:"outline",size:"xs",className:"h-6",disabled:z!==null,onClick:d=>{d.stopPropagation(),F("revert")},children:V("gitView.history.actions.revert")}),t.jsxs(Ts,{children:[t.jsx(As,{asChild:!0,children:t.jsxs(W,{variant:"outline",size:"xs",className:"h-6",disabled:z!==null,onClick:d=>d.stopPropagation(),children:[z==="reset"?t.jsx(T,{name:"loader-4",className:"size-3 animate-spin mr-1"}):null,V("gitView.history.actions.reset")]})}),t.jsx(Ls,{align:"start",className:"min-w-max",children:["soft","mixed","hard"].map(d=>t.jsx(Yn,{disabled:z!==null,onSelect:I=>{I.stopPropagation(),F(`reset${d.charAt(0).toUpperCase()+d.slice(1)}`)},children:V(`gitView.history.actions.reset${d.charAt(0).toUpperCase()+d.slice(1)}`)},d))})]}),t.jsx(W,{variant:"outline",size:"xs",className:"h-6",disabled:z!==null,onClick:d=>{d.stopPropagation(),F("merge")},children:V("gitView.history.actions.merge")}),t.jsx(W,{variant:"outline",size:"xs",className:"h-6",disabled:z!==null,onClick:d=>{d.stopPropagation(),F("rebase")},children:V("gitView.history.actions.rebase")})]}):null,x?t.jsxs("div",{className:"flex items-center gap-2 py-2",children:[t.jsx(T,{name:"loader-4",className:"size-4 animate-spin text-muted-foreground"}),t.jsx("span",{className:"typography-micro text-muted-foreground",children:V("gitView.history.loadingFiles")})]}):p.length===0?t.jsx("p",{className:"typography-micro text-muted-foreground py-2",children:V("gitView.history.noFiles")}):t.jsx("ul",{className:"space-y-0.5 py-2",children:p.map(d=>t.jsxs("li",{children:[t.jsxs("button",{type:"button",onClick:()=>h(d),className:Se("w-full flex items-center gap-2 typography-micro text-left cursor-pointer transition-colors rounded px-1",r.has(d.path)?"bg-sidebar/90":"hover:bg-sidebar/40"),children:[t.jsx("span",{className:Se("font-semibold w-3 text-center shrink-0",ui(d.changeType)),children:d.changeType}),t.jsx("span",{className:"truncate text-foreground min-w-0",title:d.path,children:d.path}),!d.isBinary&&t.jsxs("span",{className:"shrink-0",children:[t.jsxs("span",{style:{color:"var(--status-success)"},children:["+",d.insertions]}),t.jsx("span",{className:"text-muted-foreground mx-0.5",children:"/"}),t.jsxs("span",{style:{color:"var(--status-error)"},children:["-",d.deletions]})]}),d.isBinary&&t.jsx("span",{className:"typography-micro text-muted-foreground shrink-0",children:V("gitView.history.binary")}),t.jsx(T,{name:r.has(d.path)?"arrow-down-s":"arrow-right-s",className:"size-3 shrink-0 text-muted-foreground"})]}),r.has(d.path)&&t.jsx("div",{className:"max-h-[400px] overflow-y-auto rounded border border-border/40 mx-2 mb-1","data-diff-virtual-root":!0,"data-diff-virtual-content":!0,children:d.changeType==="R"?t.jsx("div",{className:"px-3 py-2 text-sm text-muted-foreground",children:V("gitView.history.renamedNoDiff")}):d.isBinary?t.jsx("div",{className:"px-3 py-2 text-sm text-muted-foreground",children:V("gitView.history.binaryNoDiff")}):(()=>{const I=d.insertions+d.deletions;if(!E.has(d.path)&&I>br)return t.jsxs("div",{className:"flex flex-col items-start gap-1 px-3 py-2 text-sm text-muted-foreground",children:[t.jsx("div",{className:"typography-ui-label font-semibold text-foreground",children:V("gitView.history.largeDiffTitle",{count:I})}),t.jsx("div",{className:"typography-meta text-muted-foreground",children:V("gitView.history.largeDiffDescription")}),t.jsx(W,{type:"button",variant:"ghost",size:"xs",className:"h-6 px-0 text-primary hover:bg-transparent hover:underline",onClick:()=>{se(q=>new Set(q).add(d.path)),ie(d)},children:V("gitView.history.renderDiffAnyway")})]});const L=B.get(d.path);return L==="loading"||L===void 0?t.jsx("div",{className:"px-3 py-2 text-sm text-muted-foreground",children:V("gitView.history.loadingDiff")}):L==="error"?t.jsx("button",{type:"button",onClick:()=>h(d),className:"w-full text-left px-3 py-2 text-sm text-muted-foreground hover:bg-[var(--interactive-hover)] transition-colors",children:V("gitView.history.diffError")}):t.jsx(qa,{original:L.original,modified:L.modified,language:Qn(d.path)||"",fileName:d.path,renderSideBySide:!1,layout:"inline",enableComments:!1})})()})]},d.path))})]})]})}),kr=["var(--chart-1)","var(--chart-2)","var(--chart-3)","var(--chart-4)","var(--chart-5)","var(--syntax-keyword)","var(--syntax-string)","var(--status-info)"];function qt(o){return kr[o%kr.length]}function gi(o){if(o.length===0)return[];const e=[],a=[];for(let m=0;m<o.length;m++){const N=o[m],f=[];for(let S=0;S<e.length;S++)e[S]===N.hash&&f.push(S);let p=f.length>0?f[0]:-1;if(p===-1){const S=e.indexOf(null);S!==-1?p=S:(p=e.length,e.push(null))}const x=f.slice(1),g=qt(p),w=e[p]===N.hash,M=N.parents.length>0;M?e[p]=N.parents[0]:e[p]=null;const v=[],V=new Set;for(let S=1;S<N.parents.length;S++){const z=N.parents[S],C=e.indexOf(z);if(C!==-1)v.push(C);else{const y=e.indexOf(null);if(y!==-1)e[y]=z,v.push(y),V.add(y);else{const D=e.length;e.push(z),v.push(D),V.add(D)}}}const A=[];w&&M?A.push({fromLane:p,toLane:p,color:g,type:"commit-lane"}):w&&!M?A.push({fromLane:p,toLane:p,color:g,type:"top-stub"}):!w&&M&&A.push({fromLane:p,toLane:p,color:g,type:"bottom-stub"});for(const S of x)A.push({fromLane:S,toLane:p,color:qt(S),type:"merge-in"}),e[S]=null;for(const S of v)A.push({fromLane:p,toLane:S,color:qt(S),type:"branch-out"});for(let S=0;S<e.length;S++)e[S]!==null&&S!==p&&(V.has(S)||A.push({fromLane:S,toLane:S,color:qt(S),type:"passing"}));a.push({commit:N,lane:p,color:g,connectors:A})}return a}const fi=[{labelKey:"gitView.history.logSize25",value:25},{labelKey:"gitView.history.logSize50",value:50},{labelKey:"gitView.history.logSize100",value:100}],pi=o=>{const e=Ct.c(84),{mode:a,log:m,isLogLoading:N,logMaxCount:f,onLogMaxCountChange:p,expandedCommitHashes:x,onToggleCommit:g,commitFilesMap:w,loadingCommitHashes:M,onCopyHash:v,directory:V,showHeader:A,contentMaxHeightClassName:S,branchDivider:z,onConflict:C,onActionSuccess:y}=o,D=a===void 0?"history":a,k=A===void 0?!0:A,R=S===void 0?"max-h-[50vh]":S,P=z===void 0?null:z,{t:F}=nt(),[r,Y]=l.useState(!0),B=D==="graph";let u;e[0]!==B||e[1]!==m?(u=B&&m?gi(m.all):[],e[0]=B,e[1]=m,e[2]=u):u=e[2];const E=u;let se;e[3]!==E?(se=Math.max(1,...E.map(xi)),e[3]=E,e[4]=se):se=e[4];const U=se;let G;e[5]!==E?(G=new Map(E.map(wi)),e[5]=E,e[6]=G):G=e[6];const $=G;if(!m)return null;const X=P!==null&&P.insertBeforeIndex>0&&P.insertBeforeIndex<m.all.length,H=P!==null&&P.insertBeforeIndex===m.all.length,le=X||H;let ae;e[7]!==P||e[8]!==X||e[9]!==H||e[10]!==m.all?(ae=X?m.all.slice(0,P.insertBeforeIndex):H?m.all:[],e[7]=P,e[8]=X,e[9]=H,e[10]=m.all,e[11]=ae):ae=e[11];const ce=ae;let ie;if(e[12]!==P||e[13]!==w||e[14]!==R||e[15]!==V||e[16]!==x||e[17]!==X||e[18]!==le||e[19]!==B||e[20]!==N||e[21]!==$||e[22]!==M||e[23]!==m.all||e[24]!==f||e[25]!==U||e[26]!==D||e[27]!==y||e[28]!==C||e[29]!==v||e[30]!==p||e[31]!==g||e[32]!==F||e[33]!==ce){const K=X?m.all.slice(P.insertBeforeIndex):[];let de;e[35]!==P?.direction?(de=P?.direction==="down"?t.jsx(T,{name:"arrow-down-s",className:"size-3.5"}):t.jsx(T,{name:"arrow-up",className:"size-3.5"}),e[35]=P?.direction,e[36]=de):de=e[36];const ke=de;let ye;e[37]!==w||e[38]!==V||e[39]!==x||e[40]!==B||e[41]!==$||e[42]!==M||e[43]!==U||e[44]!==D||e[45]!==y||e[46]!==C||e[47]!==v||e[48]!==g?(ye=Re=>t.jsx("ul",{className:"divide-y divide-border/60",children:Re.map(ue=>t.jsx(hi,{entry:ue,mode:D,laned:B?$.get(ue.hash):void 0,totalLanes:B?U:void 0,isExpanded:x.has(ue.hash),onToggle:()=>g(ue.hash),files:w.get(ue.hash)??[],isLoadingFiles:M.has(ue.hash),onCopyHash:v,directory:V,onConflict:C,onActionSuccess:y},ue.hash))}),e[37]=w,e[38]=V,e[39]=x,e[40]=B,e[41]=$,e[42]=M,e[43]=U,e[44]=D,e[45]=y,e[46]=C,e[47]=v,e[48]=g,e[49]=ye):ye=e[49];const me=ye;let xe;e[50]!==N||e[51]!==m.all.length||e[52]!==f||e[53]!==p||e[54]!==F?(xe=m.all.length>=f?t.jsx("div",{className:"flex justify-center py-2 border-t border-border/40",children:t.jsx(W,{type:"button",variant:"ghost",size:"xs",onClick:()=>p(f+25),disabled:N,className:"px-3 text-muted-foreground hover:text-foreground",children:N?t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(T,{name:"loader-4",className:"size-3 animate-spin"}),F("gitView.history.loadingMore")]}):F("gitView.history.loadMore")})}):null,e[50]=N,e[51]=m.all.length,e[52]=f,e[53]=p,e[54]=F,e[55]=xe):xe=e[55];const Ve=xe;ie=t.jsx(Rr,{outerClassName:`min-h-0 ${R}`,className:"h-full w-full",children:m.all.length===0?t.jsx("div",{className:"flex h-full items-center justify-center p-4",children:t.jsx("p",{className:"typography-ui-label text-muted-foreground",children:F("gitView.history.noCommits")})}):le&&P?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex flex-col gap-0",children:[ce.length>0?t.jsx("div",{className:"rounded-xl border border-border/60 bg-background/70 overflow-hidden",children:me(ce)}):null,t.jsxs("div",{className:"flex items-center gap-2 px-3 py-1.5","aria-hidden":!0,children:[t.jsx("span",{className:"h-px flex-1 bg-border/60"}),t.jsxs("span",{className:"inline-flex max-w-[80%] items-center gap-1 typography-micro text-muted-foreground",children:[t.jsx("span",{className:"truncate",title:P.branchName,children:P.branchName}),ke]}),t.jsx("span",{className:"h-px flex-1 bg-border/60"})]}),K.length>0?t.jsx("div",{className:"rounded-xl border border-border/60 bg-background/70 overflow-hidden",children:me(K)}):null]}),Ve]}):t.jsxs(t.Fragment,{children:[me(m.all),Ve]})}),e[12]=P,e[13]=w,e[14]=R,e[15]=V,e[16]=x,e[17]=X,e[18]=le,e[19]=B,e[20]=N,e[21]=$,e[22]=M,e[23]=m.all,e[24]=f,e[25]=U,e[26]=D,e[27]=y,e[28]=C,e[29]=v,e[30]=p,e[31]=g,e[32]=F,e[33]=ce,e[34]=ie}else ie=e[34];const h=ie;if(!k){if(le){let de;return e[56]!==h?(de=t.jsx("section",{className:"h-full min-h-0",children:h}),e[56]=h,e[57]=de):de=e[57],de}let K;return e[58]!==h?(K=t.jsx("section",{className:"h-full min-h-0 rounded-xl border border-border/60 bg-background/70 overflow-hidden",children:h}),e[58]=h,e[59]=K):K=e[59],K}let d;e[60]!==F?(d=F("gitView.history.title"),e[60]=F,e[61]=d):d=e[61];let I;e[62]!==d?(I=t.jsx("h3",{className:"typography-ui-header font-semibold text-foreground",children:d}),e[62]=d,e[63]=I):I=e[63];let L;e[64]!==N||e[65]!==r||e[66]!==f||e[67]!==p||e[68]!==F?(L=r&&t.jsx("div",{onClick:yi,onPointerDown:bi,children:t.jsxs(ia,{value:String(f),onValueChange:K=>p(Number(K)),disabled:N,children:[t.jsx(oa,{size:"sm",className:"w-auto",disabled:N,children:t.jsx(la,{placeholder:F("gitView.history.commitsPlaceholder")})}),t.jsx(ca,{children:fi.map(K=>t.jsx(da,{value:String(K.value),children:F(K.labelKey)},K.value))})]})}),e[64]=N,e[65]=r,e[66]=f,e[67]=p,e[68]=F,e[69]=L):L=e[69];let q;e[70]!==r?(q=r?t.jsx(T,{name:"arrow-up-s",className:"size-4 text-muted-foreground"}):t.jsx(T,{name:"arrow-down-s",className:"size-4 text-muted-foreground"}),e[70]=r,e[71]=q):q=e[71];let ne;e[72]!==L||e[73]!==q?(ne=t.jsxs("div",{className:"flex items-center gap-2",children:[L,q]}),e[72]=L,e[73]=q,e[74]=ne):ne=e[74];let re;e[75]!==I||e[76]!==ne?(re=t.jsxs(Oa,{className:"flex w-full items-center justify-between px-3 h-10 hover:bg-transparent",children:[I,ne]}),e[75]=I,e[76]=ne,e[77]=re):re=e[77];let J;e[78]!==h?(J=t.jsx(za,{children:h}),e[78]=h,e[79]=J):J=e[79];let we;return e[80]!==r||e[81]!==re||e[82]!==J?(we=t.jsxs(Ga,{open:r,onOpenChange:Y,className:"rounded-xl border border-border/60 bg-background/70 overflow-hidden",children:[re,J]}),e[80]=r,e[81]=re,e[82]=J,e[83]=we):we=e[83],we};function xi(o){return o.lane+1}function wi(o){return[o.commit.hash,o]}function yi(o){return o.stopPropagation()}function bi(o){return o.stopPropagation()}const vi=o=>{const e=Ct.c(148),{open:a,onOpenChange:m,conflictFiles:N,directory:f,operation:p,onAbort:x,onClearState:g}=o;let w;e[0]!==N?(w=N===void 0?[]:N,e[0]=N,e[1]=w):w=e[1];const M=w,{t:v}=nt(),V=rt(ji),A=rt(Ci),S=Qt(Ni),z=Qt(Si),[C,y]=l.useState(!1),[D,k]=l.useState(null),[R,P]=l.useState(null);let F,r;e[2]!==f||e[3]!==a||e[4]!==v?(F=()=>{!a||!f||(y(!0),P(null),k(null),ua(f).then(ee=>{k(ee)}).catch(ee=>{const he=ee instanceof Error?ee.message:v("gitView.conflict.loadFailed");P(he)}).finally(()=>{y(!1)}))},r=[a,f,v],e[2]=f,e[3]=a,e[4]=v,e[5]=F,e[6]=r):(F=e[5],r=e[6]),l.useEffect(F,r);let Y;e[7]!==D||e[8]!==f||e[9]!==p?(Y=async()=>{if(!D)return null;const ee=p==="merge"?"merge":"rebase",he=D.headInfo||(p==="merge"?"MERGE_HEAD":"REBASE_HEAD"),Be=p==="merge"?"git commit --no-edit":"git rebase --continue",ge=await Yt("git.conflict.resolve.visible",{operation_label:ee,head_ref:he}),Ne=await Yt("git.conflict.resolve.instructions",{operation_label:ee,directory:f,operation:p,head_info:D.headInfo||"N/A",continue_cmd:Be}),Ie=`${ee} conflict context (JSON)
|
|
3
|
+
${JSON.stringify({directory:f,operation:D.operation,headInfo:D.headInfo,statusPorcelain:D.statusPorcelain,unmergedFiles:D.unmergedFiles,diff:D.diff},null,2)}`;return{visibleText:ge,instructionsText:Ne,payloadText:Ie}},e[7]=D,e[8]=f,e[9]=p,e[10]=Y):Y=e[10];const B=Y;let u;e[11]!==x||e[12]!==m?(u=()=>{x(),m(!1)},e[11]=x,e[12]=m,e[13]=u):u=e[13];const E=u;let se;e[14]!==g||e[15]!==m?(se=()=>{g?.(),m(!1)},e[14]=g,e[15]=m,e[16]=se):se=e[16];const U=se;let G;e[17]!==B||e[18]!==A||e[19]!==g||e[20]!==m||e[21]!==S||e[22]!==z||e[23]!==v?(G=async()=>{const ee=await B();if(!ee){b.error(v("gitView.conflict.noDetailsAvailable"));return}if(!A){b.error(v("gitView.conflict.noActiveSession"),{description:v("gitView.conflict.noActiveSessionDescription")});return}S(ee.visibleText,"replace"),z([{text:ee.instructionsText,synthetic:!0},{text:ee.payloadText,synthetic:!0}]),g?.(),m(!1)},e[17]=B,e[18]=A,e[19]=g,e[20]=m,e[21]=S,e[22]=z,e[23]=v,e[24]=G):G=e[24];const $=G;let X;e[25]!==B||e[26]!==f||e[27]!==g||e[28]!==m||e[29]!==V||e[30]!==v?(X=async()=>{const ee=await B();if(!ee){b.error(v("gitView.conflict.noDetailsAvailable"));return}V({directoryOverride:f,initialPrompt:ee.visibleText,syntheticParts:[{text:ee.instructionsText,synthetic:!0},{text:ee.payloadText,synthetic:!0}]}),g?.(),m(!1)},e[25]=B,e[26]=f,e[27]=g,e[28]=m,e[29]=V,e[30]=v,e[31]=X):X=e[31];const H=X;let le,ae,ce,ie,h,d,I,L,q,ne,re,J,we,K,de,ke,ye,me,xe,Ve,Re,ue;if(e[32]!==D||e[33]!==M||e[34]!==A||e[35]!==E||e[36]!==U||e[37]!==$||e[38]!==H||e[39]!==C||e[40]!==R||e[41]!==m||e[42]!==a||e[43]!==p||e[44]!==v){const ee=v(p==="merge"?"gitView.operation.merge":"gitView.operation.rebase"),he=D?.unmergedFiles||M;ce=mt,Re=a,ue=m,ae=ht,Ve="max-w-md w-[calc(100vw-2rem)]",K="flex flex-col gap-4 overflow-hidden";let Be;e[67]===Symbol.for("react.memo_cache_sentinel")?(Be=t.jsx(T,{name:"alert",className:"size-5 shrink-0 text-[var(--status-warning)]"}),e[67]=Be):Be=e[67];const ge=t.jsxs("div",{className:"flex items-center gap-2",children:[Be,t.jsx(ft,{children:v("gitView.conflict.detectedTitle",{operation:ee})})]});let Ne;e[68]!==p||e[69]!==v?(Ne=v("gitView.conflict.detectedDescription",{operation:p}),e[68]=p,e[69]=v,e[70]=Ne):Ne=e[70];let Ie;e[71]!==Ne?(Ie=t.jsx(bt,{children:Ne}),e[71]=Ne,e[72]=Ie):Ie=e[72],e[73]!==ge||e[74]!==Ie?(de=t.jsxs(gt,{children:[ge,Ie]}),e[73]=ge,e[74]=Ie,e[75]=de):de=e[75],e[76]!==C||e[77]!==v?(ke=C&&t.jsxs("div",{className:"flex items-center justify-center gap-2 py-4 text-muted-foreground",children:[t.jsx(T,{name:"loader-4",className:"size-4 animate-spin"}),t.jsx("span",{className:"typography-meta",children:v("gitView.conflict.loading")})]}),e[76]=C,e[77]=v,e[78]=ke):ke=e[78],e[79]!==R||e[80]!==v?(ye=R&&t.jsx("div",{className:"rounded-lg bg-[var(--status-error-bg)] p-3 text-[var(--status-error)] typography-meta break-words",children:v("gitView.conflict.errorLoadingDetails",{message:R})}),e[79]=R,e[80]=v,e[81]=ye):ye=e[81],e[82]!==he||e[83]!==v?(me=he.length>0&&t.jsxs("div",{className:"space-y-2 overflow-hidden",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("p",{className:"typography-meta text-muted-foreground",children:v("gitView.conflict.conflictedFiles")}),t.jsx("span",{className:"typography-micro px-1.5 py-0.5 rounded bg-[var(--surface-elevated)] text-muted-foreground",children:he.length})]}),t.jsx("div",{className:"bg-[var(--surface-elevated)] rounded-lg p-3 max-h-40 overflow-y-auto overflow-x-hidden",children:t.jsx("ul",{className:"space-y-1",children:he.map(ki)})})]}),e[82]=he,e[83]=v,e[84]=me):me=e[84],e[85]!==D||e[86]!==v?(xe=D?.headInfo&&t.jsxs("div",{className:"space-y-1 overflow-hidden",children:[t.jsx("p",{className:"typography-meta text-muted-foreground",children:v("gitView.conflict.headInfo")}),t.jsx("div",{className:"typography-micro text-foreground font-mono bg-[var(--surface-elevated)] rounded-lg p-3 max-h-24 overflow-y-auto break-words whitespace-pre-wrap",children:D.headInfo})]}),e[85]=D,e[86]=v,e[87]=xe):xe=e[87],re="flex flex-col gap-2 pt-2";let Te;e[88]!==H?(Te=()=>{H()},e[88]=H,e[89]=Te):Te=e[89];const oe=C||!D;let Pe;e[90]!==C?(Pe=C?t.jsx(T,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(T,{name:"add",className:"size-4"}),e[90]=C,e[91]=Pe):Pe=e[91];let Fe;e[92]!==v?(Fe=v("gitView.conflict.resolveNewSession"),e[92]=v,e[93]=Fe):Fe=e[93],e[94]!==Te||e[95]!==oe||e[96]!==Pe||e[97]!==Fe?(J=t.jsxs(W,{variant:"default",onClick:Te,disabled:oe,className:"w-full gap-2",children:[Pe,Fe]}),e[94]=Te,e[95]=oe,e[96]=Pe,e[97]=Fe,e[98]=J):J=e[98];let De;e[99]!==$?(De=()=>{$()},e[99]=$,e[100]=De):De=e[100];const Ue=C||!D||!A;let Ae;e[101]!==C?(Ae=C?t.jsx(T,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(T,{name:"chat-1",className:"size-4"}),e[101]=C,e[102]=Ae):Ae=e[102];let Q;e[103]!==v?(Q=v("gitView.conflict.resolveCurrentSession"),e[103]=v,e[104]=Q):Q=e[104],e[105]!==De||e[106]!==Ue||e[107]!==Ae||e[108]!==Q?(we=t.jsxs(W,{variant:"outline",onClick:De,disabled:Ue,className:"w-full gap-2",children:[Ae,Q]}),e[105]=De,e[106]=Ue,e[107]=Ae,e[108]=Q,e[109]=we):we=e[109],q="flex gap-2 pt-1";let fe;e[110]!==v?(fe=v("gitView.conflict.continueLater"),e[110]=v,e[111]=fe):fe=e[111],e[112]!==U||e[113]!==fe?(ne=t.jsx(W,{variant:"ghost",size:"sm",onClick:U,className:"flex-1",children:fe}),e[112]=U,e[113]=fe,e[114]=ne):ne=e[114],le=W,ie="destructive",h="sm",d=E,I="flex-1",L=v("gitView.conflict.abortOperation",{operation:ee}),e[32]=D,e[33]=M,e[34]=A,e[35]=E,e[36]=U,e[37]=$,e[38]=H,e[39]=C,e[40]=R,e[41]=m,e[42]=a,e[43]=p,e[44]=v,e[45]=le,e[46]=ae,e[47]=ce,e[48]=ie,e[49]=h,e[50]=d,e[51]=I,e[52]=L,e[53]=q,e[54]=ne,e[55]=re,e[56]=J,e[57]=we,e[58]=K,e[59]=de,e[60]=ke,e[61]=ye,e[62]=me,e[63]=xe,e[64]=Ve,e[65]=Re,e[66]=ue}else le=e[45],ae=e[46],ce=e[47],ie=e[48],h=e[49],d=e[50],I=e[51],L=e[52],q=e[53],ne=e[54],re=e[55],J=e[56],we=e[57],K=e[58],de=e[59],ke=e[60],ye=e[61],me=e[62],xe=e[63],Ve=e[64],Re=e[65],ue=e[66];let $e;e[115]!==le||e[116]!==ie||e[117]!==h||e[118]!==d||e[119]!==I||e[120]!==L?($e=t.jsx(le,{variant:ie,size:h,onClick:d,className:I,children:L}),e[115]=le,e[116]=ie,e[117]=h,e[118]=d,e[119]=I,e[120]=L,e[121]=$e):$e=e[121];let Oe;e[122]!==q||e[123]!==ne||e[124]!==$e?(Oe=t.jsxs("div",{className:q,children:[ne,$e]}),e[122]=q,e[123]=ne,e[124]=$e,e[125]=Oe):Oe=e[125];let je;e[126]!==re||e[127]!==J||e[128]!==we||e[129]!==Oe?(je=t.jsxs("div",{className:re,children:[J,we,Oe]}),e[126]=re,e[127]=J,e[128]=we,e[129]=Oe,e[130]=je):je=e[130];let be;e[131]!==K||e[132]!==de||e[133]!==ke||e[134]!==ye||e[135]!==me||e[136]!==xe||e[137]!==je?(be=t.jsxs("div",{className:K,children:[de,ke,ye,me,xe,je]}),e[131]=K,e[132]=de,e[133]=ke,e[134]=ye,e[135]=me,e[136]=xe,e[137]=je,e[138]=be):be=e[138];let Ce;e[139]!==ae||e[140]!==Ve||e[141]!==be?(Ce=t.jsx(ae,{className:Ve,children:be}),e[139]=ae,e[140]=Ve,e[141]=be,e[142]=Ce):Ce=e[142];let Ee;return e[143]!==ce||e[144]!==Re||e[145]!==ue||e[146]!==Ce?(Ee=t.jsx(ce,{open:Re,onOpenChange:ue,children:Ce}),e[143]=ce,e[144]=Re,e[145]=ue,e[146]=Ce,e[147]=Ee):Ee=e[147],Ee};function ji(o){return o.openNewSessionDraft}function Ci(o){return o.currentSessionId}function Ni(o){return o.setPendingInputText}function Si(o){return o.setPendingSyntheticParts}function ki(o){return t.jsx("li",{className:"typography-micro text-foreground font-mono truncate block",title:o,children:o},o)}const Vi=({open:o,onOpenChange:e,operation:a,targetBranch:m,onConfirm:N})=>{const{t:f}=nt(),[p,x]=l.useState(!0),[g,w]=l.useState(!1),M=f(a==="merge"?"gitView.operation.merge":"gitView.operation.rebase"),v=async()=>{w(!0);try{await N(p),e(!1)}catch(A){const S=A instanceof Error?A.message:`Failed to ${a}`;b.error(S)}finally{w(!1)}},V=()=>{g||e(!1)};return t.jsx(mt,{open:o,onOpenChange:g?void 0:e,children:t.jsxs(ht,{className:"max-w-md",children:[t.jsxs(gt,{children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(T,{name:"alert",className:"size-5 text-[var(--status-warning)]"}),t.jsx(ft,{children:f("gitView.stash.title")})]}),t.jsx(bt,{children:f("gitView.stash.description",{operation:a})})]}),t.jsxs("div",{className:"py-2",children:[t.jsx("p",{className:"typography-meta text-muted-foreground mb-3",children:f("gitView.stash.thisWill")}),t.jsxs("ol",{className:"list-decimal list-inside space-y-1 typography-meta text-foreground",children:[t.jsx("li",{children:f("gitView.stash.stepStash")}),t.jsxs("li",{children:[f(a==="merge"?"gitView.operation.merge":"gitView.operation.rebase")," ",f(a==="merge"?"gitView.stash.mergeWith":"gitView.stash.rebaseOnto")," ",t.jsx("span",{className:"font-mono text-primary",children:m})]}),p&&t.jsx("li",{children:f("gitView.stash.stepRestore")})]})]}),t.jsxs("div",{className:"flex items-center gap-2 py-2",children:[t.jsx(ma,{checked:p,onChange:x,disabled:g,ariaLabel:f("gitView.stash.restoreAria")}),t.jsx("span",{className:"typography-ui-label text-foreground cursor-pointer select-none",onClick:()=>!g&&x(!p),children:f("gitView.stash.restoreAfterOperation",{operation:a})})]}),t.jsxs(Es,{className:"gap-2",children:[t.jsx(W,{variant:"ghost",size:"sm",onClick:V,disabled:g,children:f("gitView.common.cancel")}),t.jsx(W,{variant:"default",size:"sm",onClick:v,disabled:g,className:"gap-1.5",children:g?t.jsxs(t.Fragment,{children:[t.jsx(T,{name:"loader-4",className:"size-4 animate-spin"}),f("gitView.common.processing")]}):f("gitView.stash.confirmButton",{operation:M})})]})]})})},Ii=({mergeInProgress:o,rebaseInProgress:e,onContinue:a,onAbort:m,onResolveWithAI:N,conflictCount:f=0,isLoading:p=!1})=>{const{t:x}=nt(),[g,w]=l.useState(null),M=o&&o.head,v=e&&(e.headName||e.onto),V=M?"merge":v?"rebase":null;if(!V)return null;const A=async()=>{w("continue");try{await a()}finally{w(null)}},S=async()=>{w("abort");try{await m()}finally{w(null)}},z=g!==null,C=f>0,y=x(V==="merge"?"gitView.operation.merge":"gitView.operation.rebase");let D="";o?D=o.message?x("gitView.operation.mergingMessage",{message:o.message}):x("gitView.operation.mergeInProgressWithHead",{head:o.head}):e&&(D=e.headName?x("gitView.operation.rebasingOnto",{headName:e.headName,onto:e.onto||""}):x("gitView.operation.rebaseInProgress"));const k=C?f===1?x("gitView.operation.inProgressTitleOneConflict",{operation:y,count:f}):x("gitView.operation.inProgressTitleManyConflicts",{operation:y,count:f}):x("gitView.operation.inProgressTitle",{operation:y}),R=x(C?"gitView.operation.resolveConflictsHint":"gitView.operation.readyToContinueHint");return t.jsx("div",{className:"mx-4 mt-3 overflow-hidden rounded-lg border border-[var(--status-warning-border)]",children:t.jsxs("div",{className:"flex flex-col gap-3 p-3",children:[t.jsxs("div",{className:"min-w-0",children:[t.jsx("p",{className:"typography-label text-[var(--status-warning)]",children:k}),D&&t.jsx("p",{className:"typography-micro break-words text-muted-foreground",children:D})]}),t.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[t.jsx("p",{className:"typography-micro min-w-0 flex-1 text-muted-foreground",children:R}),t.jsxs("div",{className:"flex shrink-0 items-center gap-1.5",children:[t.jsxs(W,{variant:"ghost",size:"sm",onClick:S,disabled:z||p,className:"gap-1.5",children:[g==="abort"?t.jsx(T,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(T,{name:"close",className:"size-4"}),x("gitView.operation.abort")]}),C?N&&t.jsx(W,{variant:"default",size:"sm",onClick:N,disabled:z||p,children:x("gitView.operation.resolveWithAi")}):t.jsxs(W,{variant:"default",size:"sm",onClick:A,disabled:z||p,className:"gap-1.5",children:[g==="continue"?t.jsx(T,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(T,{name:"check",className:"size-4"}),x("gitView.operation.continue")]})]})]})]})})},Pi=o=>{const e=Ct.c(104),{currentBranch:a,localBranches:m,remoteBranches:N,onMerge:f,onRebase:p,disabled:x,isOperating:g,operationLogs:w,onOperationComplete:M,mode:v,defaultTargetBranch:V}=o,A=x===void 0?!1:x,S=g===void 0?!1:g,z=w===void 0?[]:w,C=v===void 0?"dialog":v,{t:y}=nt(),[D,k]=l.useState(!1),[R,P]=l.useState("merge"),[F,r]=l.useState(null),[Y,B]=l.useState(!1),[u,E]=l.useState(""),se=l.useRef(null),U=l.useRef(null),G=A||S,$=a||y("gitView.branch.currentBranchFallback"),X=z.length>0&&z.every(Fi),H=z.some(Ri);let le;e[0]===Symbol.for("react.memo_cache_sentinel")?(le=()=>{U.current&&(U.current.scrollTop=U.current.scrollHeight)},e[0]=le):le=e[0],l.useEffect(le,[z]);let ae;e[1]!==N?(ae=new Set(N.map(Bi).filter(Boolean)),e[1]=N,e[2]=ae):ae=e[2];const ce=ae;let ie;if(e[3]!==u||e[4]!==a||e[5]!==m||e[6]!==ce){let Q;e[8]!==a||e[9]!==ce?(Q=Le=>Le!==a&&!ce.has(Le),e[8]=a,e[9]=ce,e[10]=Q):Q=e[10];const fe=m.filter(Q);ie=Dt(fe,u,Di),e[3]=u,e[4]=a,e[5]=m,e[6]=ce,e[7]=ie}else ie=e[7];const h=ie;let d;e[11]!==u||e[12]!==N?(d=Dt(N,u,Mi),e[11]=u,e[12]=N,e[13]=d):d=e[13];const I=d;let L;e[14]!==V||e[15]!==m||e[16]!==N?(L=()=>V&&(N.includes(V)||m.includes(V))?V:null,e[14]=V,e[15]=m,e[16]=N,e[17]=L):L=e[17];const q=L;let ne;e[18]!==q||e[19]!==k?(ne=()=>{k(!0),r(q()),P("merge"),E("")},e[18]=q,e[19]=k,e[20]=ne):ne=e[20];const re=ne;let J;e[21]===Symbol.for("react.memo_cache_sentinel")?(J=Q=>{r(Q),B(!1),E("")},e[21]=J):J=e[21];const we=J;let K;e[22]!==f||e[23]!==p||e[24]!==R||e[25]!==F?(K=()=>{F&&(R==="merge"?f(F):p(F))},e[22]=f,e[23]=p,e[24]=R,e[25]=F,e[26]=K):K=e[26];const de=K;let ke;e[27]!==S||e[28]!==k?(ke=()=>{S||(r(null),P("merge"),E(""),k(!1))},e[27]=S,e[28]=k,e[29]=ke):ke=e[29];const ye=ke,me=()=>{S&&!X||(X&&M?.(),r(null),P("merge"),E(""),k(!1))};let xe,Ve;e[30]!==Y?(xe=()=>{Y||E("")},Ve=[Y],e[30]=Y,e[31]=xe,e[32]=Ve):(xe=e[31],Ve=e[32]),l.useEffect(xe,Ve);let Re,ue;e[33]!==C||e[34]!==q||e[35]!==F?(Re=()=>{C==="dialog"||F||r(q())},ue=[C,q,F],e[33]=C,e[34]=q,e[35]=F,e[36]=Re,e[37]=ue):(Re=e[36],ue=e[37]),l.useEffect(Re,ue);const je=S?t.jsxs("div",{className:"space-y-3",children:[t.jsx("div",{ref:U,className:"rounded-lg border border-border bg-muted/30 p-3 max-h-48 overflow-y-auto",children:t.jsx("div",{className:"space-y-2",children:z.map(Ei)})}),X?C==="dialog"?t.jsx(Es,{children:t.jsx(W,{variant:"default",size:"sm",onClick:me,children:y(H?"gitView.common.close":"gitView.common.done")})}):t.jsx("div",{className:"flex justify-end",children:t.jsx(W,{variant:"default",size:"sm",onClick:me,children:y(H?"gitView.common.close":"gitView.common.done")})}):null]}):t.jsxs("div",{className:"space-y-4",children:[t.jsxs("div",{className:"space-y-3",children:[t.jsx("p",{className:"typography-meta text-muted-foreground",children:y("gitView.branch.operation")}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("button",{type:"button",onClick:()=>P("merge"),className:Se("flex flex-col items-start gap-1 rounded-lg border p-3 text-left transition-colors",R==="merge"?"border-primary bg-primary/5":"border-border hover:border-border/80 hover:bg-muted/50"),children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(T,{name:"git-merge",className:Se("size-4",R==="merge"?"text-primary":"text-muted-foreground")}),t.jsx("span",{className:Se("typography-ui-label",R==="merge"?"text-foreground":"text-muted-foreground"),children:y("gitView.operation.merge")})]}),t.jsx("p",{className:"typography-micro text-muted-foreground",children:y("gitView.branch.mergeDescription")})]}),t.jsxs("button",{type:"button",onClick:()=>P("rebase"),className:Se("flex flex-col items-start gap-1 rounded-lg border p-3 text-left transition-colors",R==="rebase"?"border-primary bg-primary/5":"border-border hover:border-border/80 hover:bg-muted/50"),children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(T,{name:"git-branch",className:Se("size-4",R==="rebase"?"text-primary":"text-muted-foreground")}),t.jsx("span",{className:Se("typography-ui-label",R==="rebase"?"text-foreground":"text-muted-foreground"),children:y("gitView.operation.rebase")})]}),t.jsx("p",{className:"typography-micro text-muted-foreground",children:y("gitView.branch.rebaseDescription")})]})]})]}),t.jsxs("div",{className:"flex flex-col gap-3",children:[t.jsx("p",{className:"typography-meta text-muted-foreground",children:R==="merge"?y("gitView.branch.branchToMergeInto",{branch:$}):y("gitView.branch.branchToRebaseOnto")}),t.jsxs(Ts,{open:Y,onOpenChange:B,modal:!1,children:[t.jsx(As,{asChild:!0,children:t.jsxs("button",{type:"button",className:Se(Fr({size:"default"}),"w-full"),children:[t.jsx("span",{className:Se("truncate",!F&&"text-muted-foreground"),children:F||y("gitView.branch.selectBranch")}),t.jsx(T,{name:"arrow-down-s",className:"size-4 opacity-60 shrink-0"})]})}),t.jsx(Ls,{align:"start",sideOffset:6,className:"w-[var(--anchor-width)] p-0 max-h-[min(var(--available-height),24rem)] flex flex-col overflow-hidden",children:t.jsxs(Os,{className:"h-full min-h-0",shouldFilter:!1,children:[t.jsx(zs,{ref:se,placeholder:y("gitView.branch.searchPlaceholder"),value:u,onValueChange:E,onKeyDown:Ti}),t.jsxs(Gs,{className:"h-full min-h-0",disableHorizontal:!0,children:[t.jsx(_s,{children:y("gitView.branch.empty")}),h.length>0&&t.jsx(Xt,{heading:y("gitView.branch.localBranches"),children:h.map(Q=>t.jsx(Zt,{onSelect:()=>we(Q),children:t.jsx("span",{className:"typography-ui-label text-foreground truncate",children:Q})},`local-${Q}`))}),h.length>0&&I.length>0?t.jsx(ha,{}):null,I.length>0&&t.jsx(Xt,{heading:y("gitView.branch.remoteBranches"),children:I.map(Q=>t.jsx(Zt,{onSelect:()=>we(Q),children:t.jsx("span",{className:"typography-ui-label text-foreground truncate",children:Q})},`remote-${Q}`))})]})]})})]})]}),F?t.jsx("div",{className:"rounded-lg bg-muted/50 p-3",children:t.jsx("p",{className:"typography-meta text-muted-foreground",children:R==="merge"?t.jsxs(t.Fragment,{children:[y("gitView.branch.summaryMergePrefix")," ",t.jsx("span",{className:"font-mono text-foreground",children:F})," ",y("gitView.branch.summaryMergeInfix")," ",t.jsx("span",{className:"font-mono text-foreground",children:$})]}):t.jsxs(t.Fragment,{children:[y("gitView.branch.summaryRebasePrefix")," ",t.jsx("span",{className:"font-mono text-foreground",children:$})," ",y("gitView.branch.summaryRebaseInfix")," ",t.jsx("span",{className:"font-mono text-foreground",children:F})]})})}):null,C==="dialog"?t.jsxs(Es,{className:"gap-2 pt-1",children:[t.jsx(W,{variant:"ghost",size:"sm",onClick:ye,children:y("gitView.common.cancel")}),t.jsx(W,{variant:"default",size:"sm",onClick:de,disabled:!F,className:"gap-1.5",children:R==="merge"?t.jsxs(t.Fragment,{children:[t.jsx(T,{name:"git-merge",className:"size-4"}),y("gitView.operation.merge")]}):t.jsxs(t.Fragment,{children:[t.jsx(T,{name:"git-branch",className:"size-4"}),y("gitView.operation.rebase")]})})]}):t.jsxs("div",{className:"flex items-center gap-2 pt-1",children:[t.jsx(W,{variant:"destructive",size:"sm",onClick:ye,disabled:G,children:y("gitView.common.reset")}),t.jsx("div",{className:"flex-1"}),t.jsx(W,{variant:"default",size:"sm",onClick:de,disabled:G||!F,children:y(R==="merge"?"gitView.operation.merge":"gitView.operation.rebase")})]})]});if(C==="bare")return je;if(C==="inline"){let Q;e[38]!==y?(Q=y("gitView.branch.updateTitle"),e[38]=y,e[39]=Q):Q=e[39];let fe;e[40]!==Q?(fe=t.jsx("div",{className:"typography-ui-header font-semibold text-foreground",children:Q}),e[40]=Q,e[41]=fe):fe=e[41];let Le;e[42]!==y?(Le=y("gitView.branch.updateDescriptionPrefix"),e[42]=y,e[43]=Le):Le=e[43];let et;e[44]!==$?(et=t.jsx("span",{className:"font-mono text-foreground",children:$}),e[44]=$,e[45]=et):et=e[45];let He;e[46]!==Le||e[47]!==et?(He=t.jsxs("div",{className:"typography-micro text-muted-foreground",children:[Le," ",et,"."]}),e[46]=Le,e[47]=et,e[48]=He):He=e[48];let Ke;e[49]!==fe||e[50]!==He?(Ke=t.jsx("header",{className:"border-b border-border/40 px-0 py-3",children:t.jsxs("div",{className:"space-y-1",children:[fe,He]})}),e[49]=fe,e[50]=He,e[51]=Ke):Ke=e[51];let We;e[52]!==je?(We=t.jsx("div",{className:"pt-3",children:je}),e[52]=je,e[53]=We):We=e[53];let pt;return e[54]!==Ke||e[55]!==We?(pt=t.jsxs("section",{className:"border-0 bg-transparent rounded-none",children:[Ke,We]}),e[54]=Ke,e[55]=We,e[56]=pt):pt=e[56],pt}let be;e[57]!==S?(be=S?t.jsx(T,{name:"loader-4",className:"size-4 animate-spin"}):t.jsx(T,{name:"git-merge",className:"size-4"}),e[57]=S,e[58]=be):be=e[58];let Ce;e[59]!==y?(Ce=y("gitView.branch.mergeRebase"),e[59]=y,e[60]=Ce):Ce=e[60];let Ee;e[61]!==Ce?(Ee=t.jsx("span",{children:Ce}),e[61]=Ce,e[62]=Ee):Ee=e[62];let ee;e[63]!==re||e[64]!==G||e[65]!==be||e[66]!==Ee?(ee=t.jsx(ts,{asChild:!0,children:t.jsxs(W,{variant:"outline",size:"sm",className:"gap-1.5",onClick:re,disabled:G,children:[be,Ee]})}),e[63]=re,e[64]=G,e[65]=be,e[66]=Ee,e[67]=ee):ee=e[67];let he;e[68]!==y?(he=y("gitView.branch.mergeRebaseTooltip"),e[68]=y,e[69]=he):he=e[69];let Be;e[70]!==he?(Be=t.jsx(ss,{sideOffset:8,children:he}),e[70]=he,e[71]=Be):Be=e[71];let ge;e[72]!==ee||e[73]!==Be?(ge=t.jsxs(es,{children:[ee,Be]}),e[72]=ee,e[73]=Be,e[74]=ge):ge=e[74];let Ne;e[75]!==me||e[76]!==k?(Ne=Q=>{Q?k(!0):me()},e[75]=me,e[76]=k,e[77]=Ne):Ne=e[77];let Ie;e[78]!==y?(Ie=y("gitView.branch.updateTitle"),e[78]=y,e[79]=Ie):Ie=e[79];let Te;e[80]!==Ie?(Te=t.jsx(ft,{children:Ie}),e[80]=Ie,e[81]=Te):Te=e[81];let oe;e[82]!==H||e[83]!==S||e[84]!==R||e[85]!==X||e[86]!==y||e[87]!==$?(oe=S?y(X?H?"gitView.branch.operationFailed":"gitView.branch.operationCompleted":R==="merge"?"gitView.branch.mergingInProgress":"gitView.branch.rebasingInProgress"):t.jsxs(t.Fragment,{children:[y("gitView.branch.dialogDescriptionPrefix")," ",t.jsx("span",{className:"font-mono text-foreground",children:$}),"."]}),e[82]=H,e[83]=S,e[84]=R,e[85]=X,e[86]=y,e[87]=$,e[88]=oe):oe=e[88];let Pe;e[89]!==oe?(Pe=t.jsx(bt,{children:oe}),e[89]=oe,e[90]=Pe):Pe=e[90];let Fe;e[91]!==Te||e[92]!==Pe?(Fe=t.jsxs(gt,{children:[Te,Pe]}),e[91]=Te,e[92]=Pe,e[93]=Fe):Fe=e[93];let De;e[94]!==je||e[95]!==Fe?(De=t.jsxs(ht,{className:"max-w-md",children:[Fe,je]}),e[94]=je,e[95]=Fe,e[96]=De):De=e[96];let Ue;e[97]!==D||e[98]!==Ne||e[99]!==De?(Ue=t.jsx(mt,{open:D,onOpenChange:Ne,children:De}),e[97]=D,e[98]=Ne,e[99]=De,e[100]=Ue):Ue=e[100];let Ae;return e[101]!==ge||e[102]!==Ue?(Ae=t.jsxs(t.Fragment,{children:[ge,Ue]}),e[101]=ge,e[102]=Ue,e[103]=Ae):Ae=e[103],Ae};function Fi(o){return o.status==="done"||o.status==="error"}function Ri(o){return o.status==="error"}function Bi(o){return o.slice(o.indexOf("/")+1)}function Di(o){return[o]}function Mi(o){return[o]}function Ei(o,e){return t.jsxs("div",{className:"flex items-start gap-2",children:[t.jsxs("div",{className:"mt-0.5 shrink-0",children:[o.status==="running"&&t.jsx(T,{name:"loader-4",className:"size-3.5 animate-spin text-primary"}),o.status==="done"&&t.jsx(T,{name:"check",className:"size-3.5 text-success"}),o.status==="error"&&t.jsx(T,{name:"close",className:"size-3.5 text-destructive"}),o.status==="pending"&&t.jsx("div",{className:"size-3.5 rounded-full border border-muted-foreground/30"})]}),t.jsx("span",{className:Se("typography-micro",o.status==="error"&&"text-destructive",o.status==="done"&&"text-muted-foreground",o.status==="running"&&"text-foreground",o.status==="pending"&&"text-muted-foreground/60"),children:o.message})]},e)}function Ti(o){return o.stopPropagation()}const Ai=({runMutation:o,onMutationComplete:e,onMutationError:a,onPathsComplete:m,scheduleFlush:N})=>{const f=[];let p=!1;return{enqueue:g=>{const w=f[f.length-1];if(w?.directory===g.directory&&w.direction===g.direction){g.paths.forEach(M=>w.paths.add(M));return}f.push(g)},flush:()=>{if(p)return;const g=f.shift();if(!g)return;p=!0;const w={directory:g.directory,direction:g.direction,paths:Array.from(g.paths),rollback:g.rollback};(async()=>{try{await o(w),e(w)}catch(M){a(w,M)}finally{m(w.paths),p=!1,f.length>0&&N()}})()},clear:()=>{f.length=0},size:()=>f.length,isRunning:()=>p}},Li=15e3,Oi=40,zi=20,Vr={feat:":sparkles:",feature:":sparkles:",fix:":bug:",bug:":bug:",hotfix:":ambulance:",docs:":memo:",documentation:":memo:",style:":lipstick:",refactor:":recycle:",perf:":zap:",performance:":zap:",test:":white_check_mark:",tests:":white_check_mark:",build:":construction_worker:",ci:":green_heart:",chore:":wrench:",revert:":rewind:",wip:":construction:",security:":lock:",release:":bookmark:",merge:":twisted_rightwards_arrows:",mv:":truck:",move:":truck:",rename:":truck:",remove:":fire:",delete:":fire:",add:":sparkles:",create:":sparkles:",implement:":sparkles:",update:":recycle:",improve:":zap:",optimize:":zap:",upgrade:":arrow_up:",downgrade:":arrow_down:",deploy:":rocket:",init:":tada:",initial:":tada:"},Ir=(o,e)=>{const a=o.toLowerCase(),m=/^([a-z]+)(?:\(.*\))?!?:/,N=a.match(m);if(N){const x=N[1],g=Vr[x];if(g)return e.find(w=>w.code===g)||null}const f=a.split(" ")[0],p=Vr[f];return p&&e.find(x=>x.code===p)||null},Gi=20,yt=new Map,_i=(o,e)=>{if(yt.delete(o),yt.set(o,e),yt.size>Gi){const a=yt.keys().next().value;a!==void 0&&yt.delete(a)}},Ze=o=>(o||"").replace(/\\/g,"/").replace(/\/+$/,""),Pr=o=>{const e=o.index?.trim();return!!(e&&e!=="?")},$i=o=>{const e=o.working_dir?.trim(),a=o.index?.trim();return!!(e||a==="?")},ic=({isActive:o})=>{const{t:e}=nt(),{git:a}=ga(),m=fa(),[N,f]=l.useState(null),[p,x]=l.useState(null),g=rt(s=>s.currentSessionId),w=rt(s=>s.newSessionDraft),M=rt(s=>s.setDraftBootstrapPendingDirectory),v=rt(s=>s.worktreeMetadata),V=rt(s=>s.availableWorktrees),A=Ze(m),S=l.useMemo(()=>{if(!A)return;const s=V.find(n=>Ze(n.path)===A);if(s)return s;for(const n of v.values())if(Ze(n.path)===A)return n},[V,A,v]),z=l.useMemo(()=>{if(g)return v.get(g)??S;if(w?.open)return S},[g,S,w?.open,v]),{profiles:C,globalIdentity:y,defaultGitIdentityId:D,loadProfiles:k,loadGlobalIdentity:R,loadDefaultGitIdentityId:P}=_a(pr(s=>({profiles:s.profiles,globalIdentity:s.globalIdentity,defaultGitIdentityId:s.defaultGitIdentityId,loadProfiles:s.loadProfiles,loadGlobalIdentity:s.loadGlobalIdentity,loadDefaultGitIdentityId:s.loadDefaultGitIdentityId}))),{rootIsGitRepo:F,gitDirectory:r,nestedRepos:Y}=pa(m??null,{enabled:o}),B=xa(r??null),u=wa(r??null),E=ya(s=>g?s.getAttachment(g):void 0),se=E?ba(E):[],U=E&&!E.degraded&&!E.legacy?E.worktreeRoot??void 0:void 0,G=Ta(m,z,u?.current??void 0),$=va(r??null),X=ja(r??null),H=Ca(r??null),le=Na(r??null),ae=Sa(r??null),{setActiveDirectory:ce,ensureAll:ie,fetchStatus:h,fetchBranches:d,fetchLog:I,setLogMaxCount:L,fetchIdentity:q,prefetchDiffs:ne,clearDiffCache:re,moveStatusPathsOptimistically:J,restoreStatus:we,bumpIndexRevision:K,ensureNestedRepos:de,selectNestedRepo:ke}=ka(pr(s=>({setActiveDirectory:s.setActiveDirectory,ensureAll:s.ensureAll,fetchStatus:s.fetchStatus,fetchBranches:s.fetchBranches,fetchLog:s.fetchLog,setLogMaxCount:s.setLogMaxCount,fetchIdentity:s.fetchIdentity,prefetchDiffs:s.prefetchDiffs,clearDiffCache:s.clearDiffCache,moveStatusPathsOptimistically:s.moveStatusPathsOptimistically,restoreStatus:s.restoreStatus,bumpIndexRevision:s.bumpIndexRevision,ensureNestedRepos:s.ensureNestedRepos,selectNestedRepo:s.selectNestedRepo}))),ye=Rt(s=>s.isMobile),me=Rt(s=>s.openContextDiff),xe=Rt(s=>s.openContextSurface),Ve=u?.current??null,Re=Va(s=>!r||!Ve?null:Ia(s.entries,r,Ve)),ue=Rt(s=>s.navigateToDiff),$e=l.useRef(null),Oe=l.useRef(null),je=l.useRef(null),be=l.useRef(!0);l.useEffect(()=>()=>{be.current=!1},[]);const Ce=l.useCallback(()=>{$e.current!==null&&(window.clearTimeout($e.current),$e.current=null)},[]),Ee=l.useCallback(s=>{Ce(),$e.current=window.setTimeout(()=>{$e.current=null,Ze(s)===Ze(r)&&h(s,a,{silent:!0})},Li)},[Ce,r,h,a]);l.useEffect(()=>Ce,[Ce]);const ee=l.useCallback(()=>{Oe.current!==null&&(window.clearTimeout(Oe.current),Oe.current=null)},[]),he=l.useCallback(()=>{Oe.current===null&&(Oe.current=window.setTimeout(()=>{Oe.current=null,je.current?.()},0))},[]),Be=l.useCallback(async(s,n,i)=>{if(n==="stage"){if(a.stageGitFiles){await a.stageGitFiles(s,i);return}await Promise.all(i.map(c=>a.stageGitFile(s,c)));return}if(a.unstageGitFiles){await a.unstageGitFiles(s,i);return}await Promise.all(i.map(c=>a.unstageGitFile(s,c)))},[a]),ge=l.useMemo(()=>Ai({runMutation:({directory:s,direction:n,paths:i})=>Be(s,n,i),onMutationComplete:({directory:s})=>{K(s),Ee(s)},onMutationError:({directory:s,direction:n,rollback:i},c)=>{i?.(),K(s),Ee(s);const j=e(n==="stage"?"gitView.toast.stageFileFailed":"gitView.toast.unstageFileFailed");b.error(c instanceof Error?c.message:j)},onPathsComplete:s=>{qs(n=>{const i=new Set(n);return s.forEach(c=>i.delete(c)),i})},scheduleFlush:he}),[K,Be,he,Ee,e]);l.useEffect(()=>(je.current=ge.flush,()=>{je.current=null}),[ge]),l.useEffect(()=>()=>ge.clear(),[ge]),l.useEffect(()=>ee,[ee]),l.useEffect(()=>{if(!o)return;if(!m){f(null);return}const s=Ze(m)??m;f({directory:s,status:null});let n=!1,i=null;const c=async()=>{try{const j=await Ea(m);if(n)return;f({directory:s,status:j.status}),j.status==="pending"&&(i=window.setTimeout(()=>{c()},500))}catch{n||f({directory:s,status:null})}};return c(),()=>{n=!0,i!==null&&window.clearTimeout(i)}},[o,m]);const Ne=Ze(w?.bootstrapPendingDirectory??null),Ie=!!(m&&Ne&&Ne===Ze(m)),Te=Pa(m??null),oe=Ze(m),Pe=N?.directory===oe?N.status:null,Fe=!!(m&&(Te||Pe==="pending"||Ie&&w?.pendingWorktreeRequestId)),De=!!(oe&&p?.directory===oe);l.useEffect(()=>{if(!oe)return;if(Pe==="failed"){M(null),x(n=>n?.directory===oe?null:n);return}if(Fe){x(n=>n?.directory===oe&&n.status==="refreshing"?n:{directory:oe,status:"refreshing"});return}if(p?.directory!==oe||p.status!=="refreshing"||!r||!a)return;let s=!1;return h(r,a,{force:!0,silent:!0,throwOnError:!0}).then(()=>{s||x(n=>n?.directory===oe?null:n)}).catch(()=>{s||x(n=>n?.directory===oe?{...n,status:"failed"}:n)}),()=>{s=!0}},[h,a,r,Fe,oe,Pe,p,M]);const Ue=Fe||De,Ae=De&&p?.status==="failed",Q=l.useMemo(()=>r?yt.get(r)??null:null,[r]),fe=Fa(s=>s.settingsGitmojiEnabled),[Le,et]=l.useState(null),{gitmojis:He}=Za(fe);l.useEffect(()=>{const s=U||G?.projectDirectory;if(!s){et(null);return}let n=!1;return Ra(s).then(i=>{if(n)return;const c=i.trim();et(c&&c!=="HEAD"?c:null)}).catch(()=>{n||et(null)}),()=>{n=!0}},[U,G?.projectDirectory]);const[Ke,We]=l.useState(Q?.commitMessage??""),[pt,Er]=l.useState([]),[Tr,rs]=l.useState(!1),$s=l.useRef(null),[Hs,Mt]=l.useState(null),[Ar,ns]=l.useState(!1),[Ws,Us]=l.useState(null),[Ye,Lr]=l.useState(25),[Or,Ks]=l.useState(!1),{triggerFireworks:zr}=Aa(),Js=l.useRef(new Map),Et=l.useRef(0),as=l.useCallback(()=>{Et.current+=1,be.current&&Ks(!0)},[]),is=l.useCallback(()=>{Et.current=Math.max(0,Et.current-1),be.current&&Et.current===0&&Ks(!1)},[]),[os,Tt]=l.useState(new Set),[Gr,qs]=l.useState(new Set),[ls,Ys]=l.useState(!1),[_r,$r]=l.useState(0),[Hr,Qs]=l.useState(!1),[cs,ds]=l.useState(Q?.generatedHighlights??[]),Wr=Gr.size>0||ge.size()>0||ge.isRunning(),Xs=l.useCallback(()=>{const s=$s.current;s&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{s.scrollTo({top:s.scrollHeight,behavior:"smooth"})})})},[]),us=U||G?.projectDirectory||null,ms=u?.current||null,Ur=l.useMemo(()=>{const s=u?.tracking;return s?s.startsWith("origin/"):!0},[u?.tracking]),Zs=l.useMemo(()=>{const s=G?.createdFromBranch,n=typeof s=="string"?s.trim():"",i=typeof u?.current=="string"?u.current.trim():"",c=typeof Le=="string"?Le.trim():"";return n?n===i&&n.startsWith("opencode/")&&c.length>0&&c!==n?c:n:c||i||"HEAD"},[G?.createdFromBranch,u,Le]),At=l.useCallback(()=>{ds([])},[]),[hs,Kr]=l.useState(new Set),[Lt,Jr]=l.useState(new Map),[Ot,gs]=l.useState(new Set),fs=l.useRef(Lt),St=l.useRef(Ot),[qr,vt]=l.useState(null),[xt,ps]=l.useState(null),[er,tr]=l.useState(""),[Me,zt]=l.useState(null),[Yr,sr]=l.useState(!1),[Qr,rr]=l.useState(!1),[xs,ws]=l.useState([]),[Xr,nr]=l.useState(null),[ar,ys]=l.useState(null),[Zr,Gt]=l.useState([]),[en,Qe]=l.useState(!1),[tn,tt]=l.useState([]),[_t,st]=l.useState("merge"),[sn,bs]=l.useState(null),[vs,ir]=l.useState(!1),[js,rn]=l.useState(100),[nn,an]=l.useState(0),Xe=l.useMemo(()=>g?`aiworker.conflict:${g}`:null,[g]),at=l.useCallback((s,n,i)=>{if(!Xe||typeof window>"u")return;const c={directory:s,conflictFiles:n,operation:i};window.localStorage.setItem(Xe,JSON.stringify(c))},[Xe]),Je=l.useCallback(()=>{!Xe||typeof window>"u"||window.localStorage.removeItem(Xe)},[Xe]);l.useEffect(()=>{if(!Xe||typeof window>"u"||!r)return;const s=window.localStorage.getItem(Xe);if(s)try{const n=JSON.parse(s);if(n.directory!==r){window.localStorage.removeItem(Xe);return}tt(n.conflictFiles??[]),st(n.operation??"merge"),Qe(!0)}catch{window.localStorage.removeItem(Xe)}},[Xe,r]);const[on,Cs]=l.useState(!1),[$t,kt]=l.useState(null),[Ns,or]=l.useState("merge"),[Ss,lr]=l.useState(""),ln=l.useCallback(s=>{Ba(s).then(n=>{if(n.ok){b.success(e("gitView.toast.commitHashCopied"));return}b.error(e("gitView.toast.copyFailed"))})},[e]),cn=l.useCallback(s=>{Kr(n=>{const i=new Set(n);return i.has(s)?i.delete(s):i.add(s),i})},[]);l.useEffect(()=>{fs.current=Lt},[Lt]),l.useEffect(()=>{St.current=Ot},[Ot]),l.useEffect(()=>{if(!r||!a)return;const s=Array.from(hs).filter(i=>!fs.current.has(i)&&!St.current.has(i));if(s.length===0)return;let n=!1;return gs(i=>{const c=new Set(i);for(const j of s)c.add(j);return St.current=c,c}),Promise.all(s.map(i=>a.getCommitFiles(r,i).then(c=>({hash:i,files:c.files})).catch(c=>(console.error("Failed to fetch commit files:",c),{hash:i,files:[]})))).then(i=>{n||(Jr(c=>{const j=new Map(c);for(const{hash:O,files:Z}of i)j.set(O,Z);return fs.current=j,j}),gs(c=>{const j=new Set(c);for(const{hash:O}of i)j.delete(O);return St.current=j,j}))}),()=>{n=!0,gs(i=>{let c=!1;const j=new Set(i);for(const O of s)j.delete(O)&&(c=!0);return c?(St.current=j,j):i})}},[hs,r,a]),l.useEffect(()=>{if(!r)return;const s=yt.get(r)??null;We(s?.commitMessage??""),ds(s?.generatedHighlights??[])},[r]),l.useEffect(()=>{r&&_i(r,{directory:r,commitMessage:Ke,generatedHighlights:cs})},[Ke,r,cs]),l.useEffect(()=>{o&&(k(),R(),P())},[o,k,R,P]),l.useEffect(()=>{if(!o)return;if(!r||!a?.getRemoteUrl||B!==!0){ps(null);return}let s=!1;return a.getRemoteUrl(r).then(n=>{s||ps(n)}).catch(()=>{s||ps(null)}),()=>{s=!0}},[o,r,a,B]);const Ht=l.useCallback(async()=>{if(!r||!a?.getRemotes||B!==!0){ws([]);return}try{const s=await a.getRemotes(r);be.current&&ws(s)}catch{be.current&&ws([])}},[r,a,B]);l.useEffect(()=>{o&&Ht()},[o,Ht]),l.useEffect(()=>{o&&m&&r&&(ce(m),ie(r,a))},[o,m,r,ce,ie,a]),l.useEffect(()=>{if(o&&r)return Da.onGitRefreshHint(s=>{Ze(s.directory)===Ze(r)&&(s.paths?.length&&re(r,s.paths),h(r,a,{silent:!0}))})},[o,re,r,h,a]);const te=l.useCallback(async(s=!0)=>{if(r)try{await Promise.all([h(r,a),d(r,a)])}catch(n){if(s){const i=n instanceof Error?n.message:e("gitView.toast.refreshRepositoryFailed");b.error(i)}}},[r,a,h,d,e]),pe=l.useCallback(async()=>{r&&await I(r,a,Ye)},[r,a,I,Ye]),ks=l.useCallback(async()=>{r&&await q(r,a)},[r,a,q]);l.useEffect(()=>{if(!o||!r||!a?.hasLocalIdentity||B!==!0)return;const s=typeof D=="string"?D.trim():"";if(!s||s==="global"||Js.current.get(r)===s)return;let i=!1;return(async()=>{try{const j=await a.hasLocalIdentity?.(r);if(i||j===!0)return;as(),await a.setGitIdentity(r,s),Js.current.set(r,s),await ks()}catch(j){console.warn("Failed to auto-apply default git identity:",j)}finally{i||is()}})(),()=>{i=!0}},[o,as,r,D,is,a,B,ks]);const it=l.useMemo(()=>u?[...u.files??[]].sort((n,i)=>n.path.localeCompare(i.path)):[],[u]),qe=l.useMemo(()=>it.filter(Pr),[it]),Vs=l.useMemo(()=>it.filter($i),[it]);l.useEffect(()=>{if(!r||it.length===0)return;const s=[],n=new Set,i=j=>{!j||n.has(j)||(n.add(j),s.push(j))};if(qe.forEach(j=>i(j.path)),pt.forEach(i),it.slice(0,zi).forEach(j=>i(j.path)),s.length===0)return;const c=window.setTimeout(()=>{ne(r,a,s,{maxFiles:Oi})},120);return()=>{window.clearTimeout(c)}},[it,r,a,ne,qe,pt]);const cr=s=>s?.pushed[0]?.remote||u?.tracking?.split("/")[0]||ze.find(n=>n.name==="origin")?.name||ze[0]?.name||"origin",dr=async(s,n)=>{if(r){Mt(s);try{const i=c=>{const j=`${c.name}/`,O=u?.tracking?.startsWith(j)?u.tracking.slice(j.length):void 0;return{remote:c.name,branch:O,rebase:!0}};if(s==="fetch"){if(!n)throw new Error("No remote available for fetch");await a.gitFetch(r,{remote:n.name}),b.success(e("gitView.toast.fetchedFromRemote",{name:n.name}))}else if(s==="pull"){if(!n)throw new Error("No remote available for pull");const c=await a.gitPull(r,i(n));b.success(c.files.length===1?e("gitView.toast.pulledFilesSingle",{count:c.files.length,name:n.name}):e("gitView.toast.pulledFilesPlural",{count:c.files.length,name:n.name}))}else if(s==="push"){const c=await a.gitPush(r);b.success(e("gitView.toast.pushedToUpstream",{name:cr(c)}))}else if(s==="sync"){if(!n)throw new Error("No remote available for sync");let c=0,j=!1;await a.gitFetch(r,{remote:n.name});const O=await a.getGitStatus(r);if((O.behind??0)>0){if((O.files?.length??0)>0){b.error(e("gitView.toast.commitOrStashBeforeSync"));return}c=(await a.gitPull(r,i(n))).files.length}((await a.getGitStatus(r)).ahead??0)>0&&(await a.gitPush(r),j=!0),c>0&&j?b.success(c===1?e("gitView.toast.syncedPulledSingleAndPushed",{count:c,name:n.name}):e("gitView.toast.syncedPulledPluralAndPushed",{count:c,name:n.name})):c>0?b.success(c===1?e("gitView.toast.pulledFilesSingle",{count:c,name:n.name}):e("gitView.toast.pulledFilesPlural",{count:c,name:n.name})):j?b.success(e("gitView.toast.pushedToUpstream",{name:n.name})):b.success(e("gitView.toast.alreadyUpToDate"))}await te(!1),await pe()}catch(i){const c=i instanceof Error?i.message:e("gitView.toast.syncActionFailed",{action:s==="sync"?e("gitView.sync.syncChanges"):s==="pull"?e("gitView.sync.pull"):s});b.error(c)}finally{Mt(null)}}},dn=l.useCallback(async s=>{if(!r)return;const n=s.name.trim();if(!n){b.error(e("gitView.toast.remoteNameRequired"));return}if(n==="origin"){b.error(e("gitView.toast.cannotRemoveOriginRemote"));return}nr(n);try{await a.removeRemote(r,{remote:n}),b.success(e("gitView.toast.removedRemote",{name:n})),await Promise.all([te(!1),Ht()])}catch(i){const c=i instanceof Error?i.message:`Failed to remove ${n}`;b.error(c)}finally{nr(null)}},[r,a,Ht,te,e]),ur=async(s={})=>{if(!r)return;if(!Ke.trim()){b.error(e("gitView.toast.enterCommitMessage"));return}const n=qe.map(c=>c.path).sort();if(n.length===0){b.error(e("gitView.toast.stageFileToCommit"));return}const i=s.pushAfter?"commitAndPush":"commit";Us(i);try{if(await a.createGitCommit(r,Ke.trim(),{files:n,stageFiles:[]}),K(r),b.success(e("gitView.toast.commitCreated")),We(""),At(),await te(),s.pushAfter){const c=u?.tracking?.split("/")[0],j=ze.find(Gn=>Gn.name===c)??ze[0];if(!j)throw new Error(e("mobile.changes.noRemote"));Mt("sync");const O=`${j.name}/`,Z=u?.tracking?.startsWith(O)?u.tracking.slice(O.length):void 0;await a.gitFetch(r,{remote:j.name});const _=await a.getGitStatus(r);if((_.behind??0)>0){if((_.files?.length??0)>0){b.error(e("gitView.toast.commitOrStashBeforeSync")),await te(!1);return}await a.gitPull(r,{remote:j.name,branch:Z,rebase:!0})}const _e=await a.getGitStatus(r);let jt;(_e.ahead??0)>0&&(jt=await a.gitPush(r)),b.success(e("gitView.toast.pushedToUpstream",{name:cr(jt)})),zr(),await te(!1)}else await te(!1);await pe(),$r(c=>c+1)}catch(c){const j=c instanceof Error?c.message:e("gitView.toast.createCommitFailed");b.error(j)}finally{Us(null),s.pushAfter&&Mt(null)}},un=l.useCallback(async()=>{if(!r)return;const s=qe.map(n=>n.path).sort();if(s.length===0){b.error(e("gitView.toast.stageFileToDescribe"));return}console.error("[git-generation][browser] generate button clicked",{directory:r,selectedFiles:s.length}),Qs(!0);try{const{message:n}=await fr(r,s),i=n.subject?.trim()??"",c=Array.isArray(n.highlights)?n.highlights:[];if(i){let j=i;if(fe&&He.length>0){const O=Ir(i,He);if(O){const{code:Z,emoji:_}=O;!i.startsWith(Z)&&!i.startsWith(_)&&(j=`${Z} ${i}`)}}We(j)}ds(c),Xs()}catch(n){console.error("[git-generation][browser] GitView generate handler failed",{message:n instanceof Error?n.message:String(n),error:n});const i=n instanceof Error?n.message:e("gitView.toast.generateCommitMessageFailed");b.error(i)}finally{Qs(!1)}},[r,qe,fe,He,Xs,e]),Is=s=>s.reason==="attention"?`${s.attentionReason} in progress`:s.reason==="missing"?"worktree is missing":"worktree is invalid",mn=async(s,n)=>{if(!r||!u)return;const i=Bs(E);if(i.length>0){b.error(e("gitView.toast.cannotCreateBranch",{reason:Is(i[0])}));return}const c=u.current??null,j=n?.name??"origin";try{await a.createBranch(r,s,c??"HEAD"),b.success(e("gitView.toast.createdBranch",{name:s})),await a.checkoutBranch(r,s);let O=!1;try{await a.gitPush(r,{remote:j,branch:s,options:["--set-upstream"]}),O=!0}catch(Z){const _=Z instanceof Error?Z.message:`Unable to push new branch to ${j}.`;b.warning(e("gitView.toast.branchCreatedLocally"),{description:t.jsxs("span",{className:"text-foreground/80 dark:text-foreground/70",children:["Upstream setup failed: ",_]})})}await te(),await pe(),O&&b.success(e("gitView.toast.upstreamSet",{branch:s,remote:j}))}catch(O){const Z=O instanceof Error?O.message:e("gitView.toast.createBranchFailed");throw b.error(Z),O}},hn=async(s,n)=>{if(!r)return;const i=Bs(E);if(i.length>0){b.error(e("gitView.toast.cannotRenameBranch",{reason:Is(i[0])}));return}try{await a.renameBranch(r,s,n),b.success(e("gitView.toast.renamedBranch",{oldName:s,newName:n})),await te(),await pe()}catch(c){const j=c instanceof Error?c.message:e("gitView.toast.renameBranchFailed",{oldName:s,newName:n});b.error(j)}},gn=async s=>{if(!r)return;const n=Bs(E);if(n.length>0){b.error(e("gitView.toast.cannotCheckout",{reason:Is(n[0])}));return}const i=s.replace(/^remotes\//,"");if(u?.current!==i){if((u?.files?.length??0)>0){kt(i);return}await Ps(i)}},Ps=async s=>{if(!r)return;const n=s;try{const i=await a.checkoutBranch(r,n);b.success(e("gitView.toast.checkedOut",{name:i?.branch||n})),await te(),await pe()}catch(i){const c=i instanceof Error?i.message:e("gitView.toast.checkoutFailed",{name:n});b.error(c)}},fn=async s=>{if(r){as();try{await a.setGitIdentity(r,s.id),b.success(e("gitView.toast.appliedIdentity",{name:s.name})),await ks()}catch(n){const i=n instanceof Error?n.message:e("gitView.toast.applyIdentityFailed");b.error(i)}finally{is()}}},Vt=l.useMemo(()=>$?.all?$.all.filter(s=>!s.startsWith("remotes/")).sort():[],[$]),ot=l.useMemo(()=>$?.all?$.all.filter(s=>s.startsWith("remotes/")).map(s=>s.replace(/^remotes\//,"")).sort():[],[$]),ze=l.useMemo(()=>{if(xs.length>0)return xs;const s=new Set,n=u?.tracking?.trim();n&&n.includes("/")&&s.add(n.split("/")[0]);for(const i of ot){const c=i.indexOf("/");c>0&&s.add(i.slice(0,c))}return s.size===0&&xt&&s.add("origin"),Array.from(s).map(i=>({name:i,fetchUrl:xt??"",pushUrl:xt??""}))},[xs,ot,xt,u?.tracking]),lt=u?.current??null,mr=l.useMemo(()=>{const s=u?.tracking?.trim().split("/")[0];return(s&&$?.defaultBranches?.[s])??$?.defaultBranches?.origin},[$,u?.tracking]),wt=l.useMemo(()=>La({remoteNames:new Set(ze.map(s=>s.name)),localBranches:Vt,worktreeCreatedFromBranch:G?.createdFromBranch,rootBranchHint:Le,defaultBranch:mr,headBranch:lt}),[lt,mr,ze,Vt,Le,G?.createdFromBranch]),pn=l.useMemo(()=>ze.map(i=>i.name).map(i=>`${i}/${wt}`).find(i=>ot.includes(i))??wt,[wt,ze,ot]),xn=l.useMemo(()=>{const s=new Map;y&&s.set(y.id,y);let n=null;if(xt)try{let i=xt.trim();i.startsWith("git@")&&(i=`https://${i.slice(4).replace(":","/")}`),i.endsWith(".git")&&(i=i.slice(0,-4));const c=new URL(i);n=c.hostname+c.pathname}catch{}for(const i of C){if(i.authType!=="token"){s.set(i.id,i);continue}const c=i.host;if(!c){s.set(i.id,i);continue}if(!c.includes("/")){s.set(i.id,i);continue}n&&n===c&&s.set(i.id,i)}return Array.from(s.values())},[C,y,xt]),wn=l.useMemo(()=>{if(H?.userName&&H?.userEmail){const s=C.find(n=>n.userName===H.userName&&n.userEmail===H.userEmail);return s||(y&&y.userName===H.userName&&y.userEmail===H.userEmail?y:{id:"local-config",name:H.userName,userName:H.userName,userEmail:H.userEmail,sshKey:H.sshCommand?.replace("ssh -i ","")??null,color:"info",icon:"user"})}return y??null},[H,C,y]),yn=qe.length,bn=le||Hs!==null||Ws!==null,vn=!!(G&&us&&ms&&Ur),hr=!!lt,ct=vn&&us&&ms&&G?{repoRoot:us,sourceBranch:ms,worktreeMetadata:G}:null;l.useEffect(()=>{if(!r||!a||!X?.all?.length||!lt||!wt||lt===wt){vt(null);return}let s=!1;return(async()=>{try{const i=await a.getGitLog(r,{from:wt,to:"HEAD",maxCount:Ye});if(s)return;const c=new Set((i?.all??[]).map(O=>O.hash).filter(O=>typeof O=="string"&&O.length>0));if(c.size===0){vt(null);return}const j=X.all.findIndex(O=>!c.has(O.hash));if(j===0){vt(null);return}if(j===-1){vt({insertBeforeIndex:X.all.length,branchName:lt,direction:"up"});return}vt({insertBeforeIndex:j,branchName:lt,direction:"up"})}catch{s||vt(null)}})(),()=>{s=!0}},[wt,lt,r,a,X,Ye]),l.useEffect(()=>{bs(null)},[r]),l.useEffect(()=>{if(Me!=="graph"||!r){Me!=="graph"&&bs(null);return}let s=!1;return ir(!0),a.getGitLog(r,{maxCount:js,all:!0}).then(n=>{s||bs(n)}).catch(n=>{console.error("Failed to fetch graph log:",n)}).finally(()=>{s||ir(!1)}),()=>{s=!0}},[Me,r,js,nn,a]);const It=l.useCallback((s,n)=>{if(!r||s.length===0)return;const i=Array.from(new Set(s));qs(j=>{const O=new Set(j);return i.forEach(Z=>O.add(Z)),O});const c=J(r,i,n);ge.enqueue({directory:r,direction:n,paths:new Set(i),rollback:()=>we(r,c)}),he()},[r,ge,J,we,he]),Fs=l.useCallback(async s=>{if(r){Tt(n=>{const i=new Set(n);return i.add(s),i});try{await a.revertGitFile(r,s,{scope:"working"}),b.success(e("gitView.toast.revertedFile",{path:s})),await te(!1)}catch(n){const i=n instanceof Error?n.message:e("gitView.toast.revertFailed");b.error(i)}finally{Tt(n=>{const i=new Set(n);return i.delete(s),i})}}},[r,te,a,e]),Pt=l.useCallback(async(s,n,i="all")=>{if(!r||s.length===0)return;const c=Array.from(new Set(s));if(ls||c.some(_=>os.has(_)))return;const j=new Set(qe.map(_=>_.path)),O=i==="all"&&c.some(_=>j.has(_));n&&Ys(!0),Tt(_=>{const _e=new Set(_);return c.forEach(jt=>_e.add(jt)),_e});const Z=[];try{if(await Promise.all(c.map(async _=>{try{await a.revertGitFile(r,_,{scope:i})}catch(_e){Z.push({path:_,message:_e instanceof Error?_e.message:e("gitView.toast.revertFailed")})}})),O&&Z.length<c.length&&K(r),await te(!1),Z.length===0)b.success(c.length===1?e("gitView.toast.revertedFilesSingle",{count:c.length}):e("gitView.toast.revertedFilesPlural",{count:c.length}));else if(Z.length===c.length)b.error(Z[0]?.message||e("gitView.toast.revertFailed"));else{const _=c.length-Z.length;b.warning(_===1?e("gitView.toast.revertedSomeSingle",{success:_,failed:Z.length}):e("gitView.toast.revertedSomePlural",{success:_,failed:Z.length}))}}finally{Tt(_=>{const _e=new Set(_);return c.forEach(jt=>_e.delete(jt)),_e}),n&&Ys(!1)}},[K,r,a,ls,te,os,qe,e]),jn=l.useCallback(async s=>{await Pt(s,!0)},[Pt]),Cn=l.useCallback(async s=>{await Pt(s,!1,"working")},[Pt]),Rs=l.useCallback((s,n)=>{if(m&&!ye){me(m,s,n);return}ue(s,n)},[m,ye,ue,me]),Nn=l.useCallback(()=>ns(!0),[]),Sn=l.useMemo(()=>{const s=[];return qe.length>0&&s.push({id:"staged",title:e("gitView.changes.stagedTitle"),entries:qe,actionSymbol:"-",actionAllLabel:e("gitView.changes.unstageAllAria"),getActionLabel:n=>e("gitView.changes.unstageFileAria",{path:n}),onActionFile:n=>{It([n],"unstage")},onActionAll:n=>{It(n,"unstage")},onViewDiff:n=>Rs(n,!0),onRevertFile:Fs,showRevertActions:!1,accent:!0}),Vs.length>0&&s.push({id:"unstaged",title:e("gitView.changes.title"),entries:Vs,actionSymbol:"+",actionAllLabel:e("gitView.changes.stageAllAria"),getActionLabel:n=>e("gitView.changes.stageFileAria",{path:n}),onActionFile:n=>{It([n],"stage")},onActionAll:n=>{It(n,"stage")},onViewDiff:n=>Rs(n,!1),onRevertFile:Fs}),s},[Fs,Rs,It,qe,e,Vs]),kn=l.useCallback(s=>{if(s.length===0)return;const n=s.map(i=>i.trim()).filter(Boolean);if(n.length===0){At();return}We(i=>{const c=i.trim(),j=c.length>0?`
|
|
4
|
+
|
|
5
|
+
`:"";return`${c}${j}${n.join(`
|
|
6
|
+
`)}`.trim()}),At()},[At]),Vn=l.useCallback((s,n)=>{const i=n||s;We(c=>{const j=c.trimStart();return j.startsWith(s)||n&&j.startsWith(n)?c:`${i.endsWith(" ")?i:`${i} `}${c}`.trimStart()}),tr(""),rs(!1)},[]),Wt=l.useCallback(s=>{const n=s instanceof Error?s.message.toLowerCase():"";return n.includes("uncommitted changes")||n.includes("local changes")||n.includes("your local changes would be overwritten")||n.includes("please commit your changes or stash them")||n.includes("cannot rebase: you have unstaged changes")||n.includes("error: cannot pull with rebase")},[]),dt=l.useCallback((s,n)=>{Gt(i=>[...i,{message:s,status:n,timestamp:Date.now()}])},[]),Ge=l.useCallback((s,n)=>{Gt(i=>{if(i.length===0)return i;const c=[...i];return c[c.length-1]={...c[c.length-1],status:s,...n?{message:n}:{}},c})},[]),Ut=l.useCallback(()=>{Gt([])},[]),In=l.useCallback(()=>{Gt([]),ys(null)},[]),Kt=l.useCallback(s=>{const n=s.trim(),i=new Set(ze.map(j=>j.name)),c=n.indexOf("/");if(c>0){const j=n.slice(0,c),O=n.slice(c+1);if(i.has(j)&&O)return{branch:n,remote:j,remoteBranch:O}}for(const j of ze){const O=`${j.name}/${n}`;if(ot.includes(O))return{branch:O,remote:j.name,remoteBranch:n}}return{branch:n,remote:null,remoteBranch:null}},[ze,ot]),Pn=l.useCallback(async s=>{if(!r)return;ys("merge"),Ut();const n=u?.current,i=Kt(s);try{i.remote&&i.remoteBranch&&(dt(`Fetching ${i.remote}/${i.remoteBranch}...`,"running"),await a.gitFetch(r,{remote:i.remote,branch:i.remoteBranch}),Ge("done",`Fetched ${i.remote}/${i.remoteBranch}`)),dt(`Merging ${i.branch} into ${n}...`,"running");const c=await a.merge(r,{branch:i.branch});c.conflict?(Ge("error","Merge conflicts detected"),tt(c.conflictFiles??[]),st("merge"),Qe(!0),at(r,c.conflictFiles??[],"merge")):(Ge("done",`Merged ${i.branch} into ${n}`),Je(),dt("Refreshing repository status...","running"),await te(),await pe(),Ge("done","Repository status updated"))}catch(c){if(Wt(c))Ge("error","Uncommitted changes detected"),or("merge"),lr(i.branch),Cs(!0);else{const j=c instanceof Error?c.message:`Failed to merge ${i.branch}`;Ge("error",j)}}},[r,a,u,Kt,te,pe,Wt,at,Je,dt,Ge,Ut]),Fn=l.useCallback(async s=>{if(!r)return;ys("rebase"),Ut();const n=u?.current,i=Kt(s);try{i.remote&&i.remoteBranch&&(dt(`Fetching ${i.remote}/${i.remoteBranch}...`,"running"),await a.gitFetch(r,{remote:i.remote,branch:i.remoteBranch}),Ge("done",`Fetched ${i.remote}/${i.remoteBranch}`)),dt(`Rebasing ${n} onto ${i.branch}...`,"running");const c=await a.rebase(r,{onto:i.branch});c.conflict?(Ge("error","Rebase conflicts detected"),tt(c.conflictFiles??[]),st("rebase"),Qe(!0),at(r,c.conflictFiles??[],"rebase")):(Ge("done",`Rebased ${n} onto ${i.branch}`),Je(),dt("Refreshing repository status...","running"),await te(),await pe(),Ge("done","Repository status updated"))}catch(c){if(Wt(c))Ge("error","Uncommitted changes detected"),or("rebase"),lr(i.branch),Cs(!0);else{const j=c instanceof Error?c.message:`Failed to rebase onto ${i.branch}`;Ge("error",j)}}},[r,a,u,Kt,te,pe,Wt,at,Je,dt,Ge,Ut]),Rn=l.useCallback(async()=>{if(r)try{_t==="merge"?(await a.abortMerge(r),b.success(e("gitView.toast.mergeAborted"))):(await a.abortRebase(r),b.success(e("gitView.toast.rebaseAborted"))),Je(),await te(),await pe()}catch(s){const n=s instanceof Error?s.message:`Failed to abort ${_t}`;b.error(n)}},[r,a,_t,te,pe,Je,e]),Bn=l.useMemo(()=>u?.files?u.files.filter(s=>s.index==="U"||s.working_dir==="U"||s.index==="A"&&s.working_dir==="A"||s.index==="D"&&s.working_dir==="D").length:0,[u?.files]),Dn=l.useCallback(async()=>{if(r)try{const s=!!u?.mergeInProgress?.head,n=!!(u?.rebaseInProgress?.headName||u?.rebaseInProgress?.onto);if(s){const i=await a.continueMerge(r);i.conflict?(tt(i.conflictFiles??[]),st("merge"),Qe(!0),at(r,i.conflictFiles??[],"merge"),b.error(e("gitView.toast.mergeConflictsDetected"))):(Je(),b.success(e("gitView.toast.mergeCompleted")),await te(),await pe())}else if(n){const i=await a.continueRebase(r);i.conflict?(tt(i.conflictFiles??[]),st("rebase"),Qe(!0),at(r,i.conflictFiles??[],"rebase"),b.error(e("gitView.toast.rebaseConflictsDetected"))):(Je(),b.success(e("gitView.toast.rebaseStepCompleted")),await te(),await pe())}}catch(s){const n=s instanceof Error?s.message:e("gitView.toast.continueOperationFailed");b.error(n)}},[r,a,u,te,pe,at,Je,e]),Mn=l.useCallback(async()=>{if(r)try{!!u?.mergeInProgress?.head?(await a.abortMerge(r),b.success(e("gitView.toast.mergeAborted"))):(await a.abortRebase(r),b.success(e("gitView.toast.rebaseAborted"))),Je(),await te(),await pe()}catch(s){const n=s instanceof Error?s.message:e("gitView.toast.abortOperationFailed");b.error(n)}},[r,a,u,te,pe,Je,e]),En=l.useCallback(()=>{if(!r)return;const n=!!u?.mergeInProgress?.head?"merge":"rebase",i=u?.files?.filter(c=>c.index==="U"||c.working_dir==="U").map(c=>c.path)??[];i.length>0&&tt(i),st(n),Qe(!0)},[r,u]),Tn=l.useCallback(async s=>{if(!r)return;const n=u?.current,i=Ns,c=Ss,j=(u?.files??[]).some(Pr);try{await a.stash(r,{message:`Auto-stash before ${i} with ${c}`,includeUntracked:!0}),j&&K(r)}catch(_){const _e=_ instanceof Error?_.message:"Failed to stash changes";b.error(_e);return}let O=!1,Z=!1;try{if(i==="merge"){const _=await a.merge(r,{branch:c});_.conflict?(Z=!0,tt(_.conflictFiles??[]),st("merge"),Qe(!0)):(O=!0,b.success(e("gitView.toast.mergedIntoBranch",{branch:c,currentBranch:n||""})))}else{const _=await a.rebase(r,{onto:c});_.conflict?(Z=!0,tt(_.conflictFiles??[]),st("rebase"),Qe(!0)):(O=!0,b.success(e("gitView.toast.rebasedOntoBranch",{currentBranch:n||"",branch:c})))}if(s&&O)try{await a.stashPop(r),K(r),b.success(e("gitView.toast.stashedRestored"))}catch(_){const _e=_ instanceof Error?_.message:e("gitView.toast.restoreStashFailed");b.error(_e)}else s&&Z&&b.info(e("gitView.toast.restoreStashManually"));await te(),await pe()}catch(_){if(s)try{await a.stashPop(r),K(r)}catch{}throw _}},[K,r,a,u,Ns,Ss,te,pe,e]),An=l.useCallback(s=>{Lr(s),r&&(L(r,s),I(r,a,s))},[r,I,a,L]),Ln=l.useCallback(s=>{rn(s)},[]),On=l.useCallback(()=>{zt(null),r&&(h(r,a),d(r,a),I(r,a,Ye))},[r,h,d,I,Ye,a]),zn=l.useCallback(s=>{if(s.conflict){if(s.operation==="cherry-pick"||s.operation==="revert"){b.error(e("gitView.history.actions.conflictToastTitle"),{description:e("gitView.history.actions.conflictToastDescription",{files:s.conflictFiles?.join(", ")??"unknown files"})}),r&&(h(r,a),d(r,a),I(r,a,Ye));return}tt(s.conflictFiles??[]),st(s.operation),Qe(!0),r&&at(r,s.conflictFiles??[],s.operation)}},[e,tt,st,Qe,at,r,h,d,I,Ye,a]);return m?Ue?t.jsxs("div",{className:"flex h-full flex-col items-center justify-center px-4 text-center",children:[Ae?null:t.jsx(T,{name:"loader-4",className:"mb-3 size-6 animate-spin text-muted-foreground"}),t.jsx("p",{className:"typography-ui-label font-semibold text-foreground",children:e(Ae?"gitView.toast.refreshRepositoryFailed":"gitView.empty.worktreeSetupInProgress")}),Ae?t.jsx(W,{type:"button",variant:"outline",size:"sm",className:"mt-3",onClick:()=>{oe&&x({directory:oe,status:"refreshing"})},children:e("gitView.empty.retryDiscovery")}):t.jsx("p",{className:"typography-meta mt-1 text-muted-foreground",children:e("gitView.empty.worktreeSetupDescription")})]}):B===null||B===!0&&!u?t.jsx("div",{className:"flex h-full items-center justify-center",children:t.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[t.jsx(T,{name:"loader-4",className:"size-4 animate-spin"}),t.jsx("span",{className:"typography-ui-label",children:e("gitView.loading.checkingRepository")})]})}):B===!1?t.jsx($a,{rootIsGitRepo:F,resolvedIsGitRepo:B,nestedRepos:Y,onRetryDiscovery:()=>{m&&de(m,{force:!0})},emptyStateFooter:se.includes("open-without-worktree-features")?t.jsx("p",{className:"typography-meta mt-2 text-muted-foreground",children:e("gitView.empty.worktreeFeaturesUnavailable")}):void 0}):t.jsxs("div",{className:Se("flex h-full flex-col overflow-hidden"),children:[t.jsx(Ha,{directory:r??"",status:u,localBranches:Vt,remoteBranches:ot,branchInfo:$?.branches,syncAction:Hs,remotes:ze,onFetch:s=>dr("fetch",s),onSync:s=>dr("sync",s),onRemoveRemote:dn,removingRemoteName:Xr,onCheckoutBranch:gn,onCreateBranch:mn,onRenameBranch:hn,activeIdentityProfile:wn,availableIdentities:xn,onSelectIdentity:fn,isApplyingIdentity:Or,isWorktreeMode:!!G,onOpenHistory:()=>zt("history"),onOpenGraph:()=>zt("graph"),onOpenStashes:Nn,onOpenUpdateBranch:hr?()=>sr(!0):void 0,onOpenReintegrateCommits:ct?()=>rr(!0):void 0,pullRequest:Re?.pr??null,prChecks:Re?.checks??null,onOpenPullRequest:r?()=>xe(r,"pr"):void 0,repositoryOptions:r!==m&&Array.isArray(Y)?Y:void 0,selectedRepository:r!==m?r:null,onSelectRepository:r!==m&&m?s=>ke(m,s):void 0,repositoryRoot:r!==m?m:void 0}),m&&(u?.mergeInProgress?.head||u?.rebaseInProgress?.headName||u?.rebaseInProgress?.onto)&&t.jsx(Ii,{mergeInProgress:u?.mergeInProgress,rebaseInProgress:u?.rebaseInProgress,onContinue:Dn,onAbort:Mn,onResolveWithAI:En,conflictCount:Bn,isLoading:le}),t.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:t.jsx("div",{className:"h-full min-h-0 flex flex-col",children:t.jsx("div",{className:Se("min-w-0 min-h-0 h-full flex flex-col"),children:t.jsx(Rr,{as:Ma,ref:$s,outerClassName:"flex-1 min-h-0",className:Se("px-4","pt-1 pb-4"),disableHorizontal:!0,preventOverscroll:!0,children:t.jsx("div",{className:"flex h-full min-h-0 flex-col gap-3",children:(it?.length??0)>0?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"min-h-0 flex-1 overflow-hidden",children:t.jsx(Ua,{groups:Sn,diffStats:u?.diffStats,revertingPaths:os,isRevertingAll:ls,onVisiblePathsChange:Er,onRevertAll:jn,onRevertDirectory:Cn,headerBackgroundClassName:"bg-background"})}),t.jsx(Ka,{stagedCount:yn,commitMessage:Ke,onCommitMessageChange:We,generatedHighlights:cs,onInsertHighlights:kn,onGenerateMessage:un,isGeneratingMessage:Hr,onCommit:()=>ur({pushAfter:!1}),onCommitAndPush:()=>ur({pushAfter:!0}),commitAction:Ws,hasPendingIndexMutation:Wr,gitmojiEnabled:fe,onOpenGitmojiPicker:()=>rs(!0)})]}):t.jsx(oi,{onOpenStashes:()=>ns(!0)})})})})})}),t.jsx(mt,{open:Yr,onOpenChange:s=>{!s&&ar!==null||sr(s)},children:t.jsxs(ht,{className:"max-w-2xl min-h-[26rem]",children:[t.jsxs(gt,{children:[t.jsx(ft,{children:e("gitView.branch.updateTitle")}),t.jsxs(bt,{children:[e("gitView.branch.updateDescriptionPrefix")," ",t.jsx("span",{className:"font-mono text-foreground",children:u?.current??""}),"."]})]}),hr?t.jsx(Pi,{mode:"bare",currentBranch:u?.current,localBranches:Vt,remoteBranches:ot,defaultTargetBranch:pn,onMerge:Pn,onRebase:Fn,disabled:bn,isOperating:ar!==null,operationLogs:Zr,onOperationComplete:In}):t.jsx("p",{className:"typography-meta text-muted-foreground",children:e("gitView.branch.actionsUnavailable")})]})}),t.jsx(mt,{open:Qr,onOpenChange:rr,children:t.jsxs(ht,{className:"max-w-2xl min-h-[26rem]",children:[t.jsxs(gt,{children:[t.jsx(ft,{children:e("gitView.integrate.title")}),t.jsx(bt,{children:ct?t.jsxs("span",{className:"font-mono text-foreground",children:[ct.sourceBranch," → ",Zs]}):null})]}),ct?t.jsx(ai,{repoRoot:ct.repoRoot,sourceBranch:ct.sourceBranch,worktreeMetadata:ct.worktreeMetadata,localBranches:Vt,defaultTargetBranch:Zs,refreshKey:_r,showHeader:!1,onRefresh:()=>{r&&(h(r,a),d(r,a),I(r,a,Ye))}},ct.worktreeMetadata.path):null]})}),t.jsx(mt,{open:Me!==null,onOpenChange:s=>{s||zt(null)},children:t.jsxs(ht,{className:"max-w-5xl h-[90vh] max-h-[90vh] flex flex-col overflow-hidden",children:[t.jsxs(gt,{children:[t.jsxs("div",{className:"flex items-center justify-between gap-2",children:[t.jsx(ft,{children:e(Me==="graph"?"gitView.graph.title":"gitView.history.title")}),t.jsxs(W,{type:"button",variant:"ghost",size:"sm",className:"mr-6 h-7 shrink-0 gap-1.5 px-2",onClick:()=>{if(Me==="graph"){an(s=>s+1);return}r&&I(r,a,Ye)},disabled:Me==="graph"?vs:ae,title:e("gitView.history.refresh"),"aria-label":e("gitView.history.refresh"),children:[t.jsx(T,{name:"refresh",className:Se("size-4",(Me==="graph"?vs:ae)&&"animate-spin")}),e("gitView.history.refresh")]})]}),t.jsx(bt,{children:e("gitView.history.dialogDescription")})]}),t.jsx("div",{className:"flex-1 min-h-0",children:t.jsx(pi,{mode:Me==="graph"?"graph":"history",log:Me==="graph"?sn??X:X,isLogLoading:Me==="graph"&&vs||ae,logMaxCount:Me==="graph"?js:Ye,onLogMaxCountChange:Me==="graph"?Ln:An,expandedCommitHashes:hs,onToggleCommit:cn,commitFilesMap:Lt,loadingCommitHashes:Ot,onCopyHash:ln,directory:r??void 0,showHeader:!1,contentMaxHeightClassName:"h-full max-h-none",branchDivider:Me==="graph"?null:qr,onConflict:Me==="graph"?zn:void 0,onActionSuccess:Me==="graph"?On:void 0})})]})}),t.jsx(ii,{open:Ar,onOpenChange:ns,directory:r,hasUncommittedChanges:(u?.files?.length??0)>0,hasStagedChanges:qe.length>0,uncommittedFileCount:u?.files?.length??0,onChanged:async s=>{r&&s?.affectsIndex&&K(r),await te(!1),await pe()}}),t.jsx(mt,{open:Tr,onOpenChange:rs,children:t.jsxs(ht,{className:"max-w-md p-0 overflow-hidden",children:[t.jsx(gt,{className:"px-4 pt-4",children:t.jsx(ft,{children:e("gitView.gitmoji.title")})}),t.jsxs(Os,{className:"h-[420px]",shouldFilter:!1,children:[t.jsx(zs,{placeholder:e("gitView.gitmoji.searchPlaceholder"),value:er,onValueChange:tr}),t.jsxs(Gs,{children:[t.jsx(_s,{children:e("gitView.gitmoji.empty")}),t.jsx(Xt,{children:Dt(He,er,s=>[s.code,s.description,s.emoji]).map(s=>t.jsxs(Zt,{onSelect:()=>Vn(s.emoji,s.code),children:[t.jsx("span",{className:"text-lg",children:s.emoji}),t.jsx("span",{className:"typography-ui-label text-foreground",children:s.code}),t.jsx("span",{className:"typography-meta text-muted-foreground",children:s.description})]},s.code))})]})]})]})}),r&&t.jsx(vi,{open:en,onOpenChange:Qe,conflictFiles:tn,directory:r,operation:_t,onAbort:Rn,onClearState:Je}),t.jsx(Ja,{open:$t!==null,onOpenChange:s=>{s||kt(null)},targetBranch:$t??"",changedFileCount:u?.files?.length??0,onCommitAndSwitch:async(s,n)=>{const i=$t;if(!i||!r)return;const c=u?.current??null;await a.createGitCommit(r,s,{addAll:!0}),K(r);let j=null;if(n){const O=u?.tracking?.split("/")[0],Z=ze.find(_=>_.name===O)??ze[0];try{if(!Z)throw new Error(e("mobile.changes.noRemote"));await a.gitPush(r,u?.tracking?{remote:Z.name}:{remote:Z.name,branch:c??void 0,options:["--set-upstream"]}),j=Z.name}catch(_){console.error("Push after commit failed:",_),b.error(e("gitView.dirtySwitch.pushFailed")),await te(),await pe(),kt(null);return}}b.success(j?e("gitView.toast.pushedToUpstream",{name:j}):c?e("gitView.dirtySwitch.committedNotPushed",{branch:c}):e("gitView.toast.commitCreated")),await te(),await pe(),kt(null),await Ps(i)},onGenerateMessage:async()=>{if(!r)return"";const s=(u?.files??[]).map(c=>c.path).sort(),{message:n}=await fr(r,s),i=n.subject?.trim()??"";if(i&&fe&&He.length>0){const c=Ir(i,He);if(c&&!i.startsWith(c.code)&&!i.startsWith(c.emoji))return`${c.code} ${i}`}return i},onRevertAndSwitch:async()=>{const s=$t;if(!s||!r)return;const n=(u?.files??[]).map(c=>c.path);await Pt(n,!0,"all");const i=await a.getGitStatus(r);if(!i.isClean&&(i.files?.length??0)>0){b.error(e("gitView.dirtySwitch.revertIncomplete"));return}kt(null),await Ps(s)}}),t.jsx(Vi,{open:on,onOpenChange:Cs,operation:Ns,targetBranch:Ss,onConfirm:Tn})]}):t.jsx("div",{className:"flex h-full items-center justify-center px-4 text-center",children:t.jsx("p",{className:"typography-ui-label text-muted-foreground",children:e("gitView.empty.selectSessionOrDirectory")})})};export{ic as GitView};
|