viba-cli 0.38.0 → 0.40.0
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/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/fallback-build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/custom-scripts/route.js +2 -2
- package/.next/server/app/api/custom-scripts/route.js.nft.json +1 -1
- package/.next/server/app/api/git/action/route.js +3 -3
- package/.next/server/app/api/git/action/route.js.nft.json +1 -1
- package/.next/server/app/api/git/branches/route.js +3 -3
- package/.next/server/app/api/git/branches/route.js.nft.json +1 -1
- package/.next/server/app/api/git/diff/route.js +2 -2
- package/.next/server/app/api/git/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/git/log/route.js +2 -2
- package/.next/server/app/api/git/log/route.js.nft.json +1 -1
- package/.next/server/app/api/git/status/route.js +3 -3
- package/.next/server/app/api/git/status/route.js.nft.json +1 -1
- package/.next/server/app/api/repos/clone/route.js +2 -2
- package/.next/server/app/api/repos/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repos/route.js +2 -2
- package/.next/server/app/api/repos/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/server/app/credentials/page/server-reference-manifest.json +7 -7
- package/.next/server/app/credentials/page.js.nft.json +1 -1
- package/.next/server/app/credentials/page_client-reference-manifest.js +1 -1
- package/.next/server/app/credentials.html +2 -2
- package/.next/server/app/credentials.rsc +5 -5
- package/.next/server/app/credentials.segments/_full.segment.rsc +5 -5
- package/.next/server/app/credentials.segments/_head.segment.rsc +1 -1
- package/.next/server/app/credentials.segments/_index.segment.rsc +3 -3
- package/.next/server/app/credentials.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/credentials.segments/credentials/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/credentials.segments/credentials.segment.rsc +1 -1
- package/.next/server/app/git/changes/page.js.nft.json +1 -1
- package/.next/server/app/git/changes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/git/changes.html +2 -2
- package/.next/server/app/git/changes.rsc +8 -8
- package/.next/server/app/git/changes.segments/_full.segment.rsc +8 -8
- package/.next/server/app/git/changes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/git/changes.segments/_index.segment.rsc +3 -3
- package/.next/server/app/git/changes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/git/changes.segments/git/changes/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/git/changes.segments/git/changes.segment.rsc +1 -1
- package/.next/server/app/git/changes.segments/git.segment.rsc +3 -3
- package/.next/server/app/git/custom-scripts/page.js.nft.json +1 -1
- package/.next/server/app/git/custom-scripts/page_client-reference-manifest.js +1 -1
- package/.next/server/app/git/custom-scripts.html +2 -2
- package/.next/server/app/git/custom-scripts.rsc +7 -7
- package/.next/server/app/git/custom-scripts.segments/_full.segment.rsc +7 -7
- package/.next/server/app/git/custom-scripts.segments/_head.segment.rsc +1 -1
- package/.next/server/app/git/custom-scripts.segments/_index.segment.rsc +3 -3
- package/.next/server/app/git/custom-scripts.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/git/custom-scripts.segments/git/custom-scripts/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/git/custom-scripts.segments/git/custom-scripts.segment.rsc +1 -1
- package/.next/server/app/git/custom-scripts.segments/git.segment.rsc +3 -3
- package/.next/server/app/git/history/page.js.nft.json +1 -1
- package/.next/server/app/git/history/page_client-reference-manifest.js +1 -1
- package/.next/server/app/git/history.html +2 -2
- package/.next/server/app/git/history.rsc +8 -8
- package/.next/server/app/git/history.segments/_full.segment.rsc +8 -8
- package/.next/server/app/git/history.segments/_head.segment.rsc +1 -1
- package/.next/server/app/git/history.segments/_index.segment.rsc +3 -3
- package/.next/server/app/git/history.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/git/history.segments/git/history/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/git/history.segments/git/history.segment.rsc +1 -1
- package/.next/server/app/git/history.segments/git.segment.rsc +3 -3
- package/.next/server/app/git/page.js.nft.json +1 -1
- package/.next/server/app/git/page_client-reference-manifest.js +1 -1
- package/.next/server/app/git/stashes/page.js.nft.json +1 -1
- package/.next/server/app/git/stashes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/git/stashes.html +2 -2
- package/.next/server/app/git/stashes.rsc +7 -7
- package/.next/server/app/git/stashes.segments/_full.segment.rsc +7 -7
- package/.next/server/app/git/stashes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/git/stashes.segments/_index.segment.rsc +3 -3
- package/.next/server/app/git/stashes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/git/stashes.segments/git/stashes/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/git/stashes.segments/git/stashes.segment.rsc +1 -1
- package/.next/server/app/git/stashes.segments/git.segment.rsc +3 -3
- package/.next/server/app/git.html +2 -2
- package/.next/server/app/git.rsc +8 -8
- package/.next/server/app/git.segments/_full.segment.rsc +8 -8
- package/.next/server/app/git.segments/_head.segment.rsc +1 -1
- package/.next/server/app/git.segments/_index.segment.rsc +3 -3
- package/.next/server/app/git.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/git.segments/git/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/git.segments/git.segment.rsc +3 -3
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +5 -5
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/new/page/server-reference-manifest.json +29 -29
- package/.next/server/app/new/page.js +2 -2
- package/.next/server/app/new/page.js.nft.json +1 -1
- package/.next/server/app/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page/server-reference-manifest.json +29 -29
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/session/[sessionId]/page/server-reference-manifest.json +19 -19
- package/.next/server/app/session/[sessionId]/page.js +1 -1
- package/.next/server/app/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/server/app/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__01a6baa7._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__01a6baa7._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__2ea0148f._.js +7 -0
- package/.next/server/chunks/[root-of-the-server]__2ea0148f._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__51f9ab28._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__7f2f8f49._.js.map → [root-of-the-server]__51f9ab28._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__52f9b7e2._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__afea2116._.js.map → [root-of-the-server]__52f9b7e2._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__5b08b37e._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__7324fe0b._.js.map → [root-of-the-server]__5b08b37e._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__8b29248a._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__82d53572._.js.map → [root-of-the-server]__8b29248a._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__f52f1c06._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__5349b858._.js.map → [root-of-the-server]__f52f1c06._.js.map} +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0002606b.js +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0002606b.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__05e6fb4c._.js +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__79a7a15d._.js → [root-of-the-server]__0ed2deb1._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__79a7a15d._.js.map → [root-of-the-server]__0ed2deb1._.js.map} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__2798aa4d._.js → [root-of-the-server]__1ed5a76d._.js} +3 -3
- package/.next/server/chunks/ssr/{[root-of-the-server]__2798aa4d._.js.map → [root-of-the-server]__1ed5a76d._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__46af1502._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__46af1502._.js.map +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__05b3451a._.js → [root-of-the-server]__a65a3900._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__05b3451a._.js.map → [root-of-the-server]__a65a3900._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__d52659cf._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__d52659cf._.js.map +1 -0
- package/.next/server/chunks/ssr/{_523ff032._.js → _2eaa7035._.js} +2 -2
- package/.next/server/chunks/ssr/{_523ff032._.js.map → _2eaa7035._.js.map} +1 -1
- package/.next/server/chunks/ssr/{_be721a9c._.js → _4343fa01._.js} +2 -2
- package/.next/server/chunks/ssr/{_be721a9c._.js.map → _4343fa01._.js.map} +1 -1
- package/.next/server/chunks/ssr/_476e86d1._.js +1 -1
- package/.next/server/chunks/ssr/_4d07d45e._.js +1 -1
- package/.next/server/chunks/ssr/_4d07d45e._.js.map +1 -1
- package/.next/server/chunks/ssr/_57f63a65._.js +1 -1
- package/.next/server/chunks/ssr/_57f63a65._.js.map +1 -1
- package/.next/server/chunks/ssr/_707e5fab._.js +1 -1
- package/.next/server/chunks/ssr/_9493de08._.js +1 -1
- package/.next/server/chunks/ssr/{_787bdec7._.js → _a07f93fb._.js} +2 -2
- package/.next/server/chunks/ssr/{_787bdec7._.js.map → _a07f93fb._.js.map} +1 -1
- package/.next/server/chunks/ssr/{_2a7fa4b0._.js → _ebf4c61c._.js} +2 -2
- package/.next/server/chunks/ssr/{_2a7fa4b0._.js.map → _ebf4c61c._.js.map} +1 -1
- package/.next/server/chunks/ssr/_ff20dbae._.js +3 -0
- package/.next/server/chunks/ssr/{_e17414c3._.js.map → _ff20dbae._.js.map} +1 -1
- package/.next/server/chunks/ssr/src_app_credentials_page_tsx_63d8d34a._.js +1 -1
- package/.next/server/chunks/ssr/src_app_credentials_page_tsx_63d8d34a._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_git_changes_page_tsx_f6dc28dc._.js +2 -2
- package/.next/server/chunks/ssr/src_app_git_changes_page_tsx_f6dc28dc._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_providers_tsx_2ae5be81._.js +1 -1
- package/.next/server/chunks/ssr/src_app_providers_tsx_2ae5be81._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_session_[sessionId]_SessionPageClient_tsx_dab490d7._.js +1 -1
- package/.next/server/chunks/ssr/src_app_session_[sessionId]_SessionPageClient_tsx_dab490d7._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_GitRepoSelector_tsx_05c81afa._.js +3 -3
- package/.next/server/chunks/ssr/src_components_GitRepoSelector_tsx_05c81afa._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_git_029e6e6f._.js +3 -0
- package/.next/server/chunks/ssr/src_components_git_029e6e6f._.js.map +1 -0
- package/.next/server/chunks/ssr/src_components_git_history-view_tsx_fd62126a._.js +4 -4
- package/.next/server/chunks/ssr/src_components_git_history-view_tsx_fd62126a._.js.map +1 -1
- package/.next/server/chunks/ssr/src_db5b513b._.js +3 -0
- package/.next/server/chunks/ssr/src_db5b513b._.js.map +1 -0
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +2 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +48 -48
- package/.next/static/chunks/{ff0443d5f56a7060.js → 1ca050861ead915f.js} +1 -1
- package/.next/static/chunks/1f428267926cd032.js +3 -0
- package/.next/static/chunks/4aab1f3ea2ed1aef.js +1 -0
- package/.next/static/chunks/4de7bc5a00a1aed9.js +3 -0
- package/.next/static/chunks/5e0dada5236f9065.js +8 -0
- package/.next/static/chunks/{58e245f27f38e5ff.js → 73c13373731456db.js} +1 -1
- package/.next/static/chunks/73f859ef915277c7.js +3 -0
- package/.next/static/chunks/74f887e69c1fcefa.js +9 -0
- package/.next/static/chunks/977137e155012c13.js +1 -0
- package/.next/static/chunks/b18cc1247b979318.js +1 -0
- package/.next/static/chunks/d85a06040ea88b62.js +1 -0
- package/.next/static/chunks/{bcc203fd591a3e1b.js → db4cb4eb290e3be9.js} +1 -1
- package/.next/static/chunks/e5bcfa7f94c34b77.js +1 -0
- package/.next/static/chunks/eec24a7b35c2d7bd.css +1 -0
- package/.next/static/chunks/{46c9f58659e11b7d.js → fa9e48c3aa7e4365.js} +1 -1
- package/README.md +3 -0
- package/bin/viba.mjs +120 -4
- package/package.json +1 -1
- package/.next/server/chunks/[root-of-the-server]__2dcb1454._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__2dcb1454._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__5349b858._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__7324fe0b._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__7f2f8f49._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__82d53572._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__afea2116._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__b17e6c62._.js +0 -7
- package/.next/server/chunks/[root-of-the-server]__b17e6c62._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__30652385._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__30652385._.js.map +0 -1
- package/.next/server/chunks/ssr/_e17414c3._.js +0 -3
- package/.next/server/chunks/ssr/src_hooks_use-workspace-title_ts_9edd343b._.js +0 -3
- package/.next/server/chunks/ssr/src_hooks_use-workspace-title_ts_9edd343b._.js.map +0 -1
- package/.next/static/chunks/0eca2eff234acf1b.js +0 -1
- package/.next/static/chunks/47ad182e478611c4.css +0 -1
- package/.next/static/chunks/4b818f2593bc4300.js +0 -1
- package/.next/static/chunks/4d93976ea0e8b685.js +0 -9
- package/.next/static/chunks/78859d33c5671d29.js +0 -8
- package/.next/static/chunks/94fb2462104985a8.js +0 -3
- package/.next/static/chunks/9f82d45ee88d5dc1.js +0 -3
- package/.next/static/chunks/a29874cab09f6b0f.js +0 -3
- package/.next/static/chunks/e152c322e888ccea.js +0 -1
- package/.next/static/chunks/fff7986d66d302cf.js +0 -1
- /package/.next/static/{mx8z_YoNSm8FluLvondrw → SPowgKQ4GVFmr1hEouu16}/_buildManifest.js +0 -0
- /package/.next/static/{mx8z_YoNSm8FluLvondrw → SPowgKQ4GVFmr1hEouu16}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{mx8z_YoNSm8FluLvondrw → SPowgKQ4GVFmr1hEouu16}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app/git/changes/page.tsx","../../../../src/components/git/status-view.tsx","../../../../src/components/git/diff-view.tsx"],"sourcesContent":["'use client';\n\nimport { useSearchParams } from 'next/navigation';\nimport { StatusView } from '@/components/git/status-view';\nimport { Suspense } from 'react';\nimport { useWorkspaceTitle } from '@/hooks/use-workspace-title';\n\nfunction WorkspaceChangesContent() {\n const searchParams = useSearchParams();\n const repoPath = searchParams.get('path');\n\n useWorkspaceTitle(repoPath, 'Changes');\n\n if (!repoPath) {\n return <div className=\"p-8\">No repository path specified.</div>;\n }\n\n return <StatusView repoPath={repoPath} />;\n}\n\nexport default function WorkspaceChangesPage() {\n return (\n <Suspense fallback={<div className=\"flex items-center justify-center h-full\"><span className=\"loading loading-spinner\"></span></div>}>\n <WorkspaceChangesContent />\n </Suspense>\n );\n}\n","'use client';\n\nimport { useGitStatus, useGitAction, useGitBranches } from '@/hooks/use-git';\nimport { useCallback, useMemo, useState, useEffect, useRef } from 'react';\nimport { cn, sanitizeBranchName } from '@/lib/utils';\nimport { DiffView } from './diff-view';\nimport { useEscapeDismiss } from '@/hooks/use-escape-dismiss';\n\nconst EMPTY_FILES: Array<{ path: string; index: string; working_dir: string }> = [];\n\nfunction buildCommitMessage(subject: string, body: string): string {\n const trimmedSubject = subject.trim();\n const normalizedBody = body.replace(/\\r\\n/g, '\\n');\n return normalizedBody.trim() ? `${trimmedSubject}\\n\\n${normalizedBody}` : trimmedSubject;\n}\n\ninterface StatusFileTreeNode {\n name: string;\n path: string;\n filePath?: string;\n children: Map<string, StatusFileTreeNode>;\n}\n\nfunction buildStatusFileTree(paths: string[]): StatusFileTreeNode {\n const root: StatusFileTreeNode = {\n name: '',\n path: '',\n children: new Map(),\n };\n\n for (const filePath of paths) {\n const parts = filePath.split('/').filter(Boolean);\n let current = root;\n let currentPath = '';\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n\n if (!current.children.has(part)) {\n current.children.set(part, {\n name: part,\n path: currentPath,\n children: new Map(),\n });\n }\n\n current = current.children.get(part)!;\n\n if (i === parts.length - 1) {\n current.filePath = filePath;\n }\n }\n }\n\n return root;\n}\n\nfunction collectFolderPaths(node: StatusFileTreeNode): string[] {\n const paths: string[] = [];\n const children = Array.from(node.children.values());\n\n children.forEach((child) => {\n if (child.children.size > 0) {\n paths.push(child.path);\n paths.push(...collectFolderPaths(child));\n }\n });\n\n return paths;\n}\n\nfunction getParentPaths(filePath: string): string[] {\n const parts = filePath.split('/').filter(Boolean);\n const parentPaths: string[] = [];\n\n for (let i = 1; i < parts.length; i++) {\n parentPaths.push(parts.slice(0, i).join('/'));\n }\n\n return parentPaths;\n}\n\nfunction StatusFileTreeItem({\n node,\n selectedFile,\n expandedFolders,\n onToggleFolder,\n onSelectFile,\n onActionFile,\n actionType,\n actionPending,\n depth = 0,\n}: {\n node: StatusFileTreeNode;\n selectedFile: string | null;\n expandedFolders: Set<string>;\n onToggleFolder: (path: string) => void;\n onSelectFile: (path: string) => void;\n onActionFile: (path: string) => Promise<void>;\n actionType: 'stage' | 'unstage';\n actionPending: boolean;\n depth?: number;\n}) {\n const children = Array.from(node.children.values()).sort((a, b) => {\n const aIsFolder = a.children.size > 0;\n const bIsFolder = b.children.size > 0;\n\n if (aIsFolder && !bIsFolder) return -1;\n if (!aIsFolder && bIsFolder) return 1;\n return a.name.localeCompare(b.name);\n });\n\n return (\n <>\n {children.map((child) => {\n const isFolder = child.children.size > 0;\n\n if (isFolder) {\n const isExpanded = expandedFolders.has(child.path);\n\n return (\n <div key={child.path}>\n <div\n className=\"flex items-center gap-1 px-2 py-1.5 text-xs rounded cursor-pointer text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800/70 transition-colors\"\n style={{ paddingLeft: `${depth * 12 + 8}px` }}\n onClick={() => onToggleFolder(child.path)}\n title={child.path}\n >\n <span className=\"text-[10px] opacity-70\">{isExpanded ? '▼' : '▶'}</span>\n <i className=\"iconoir-folder text-[14px] opacity-70\" aria-hidden=\"true\" />\n <span className=\"truncate flex-1\">{child.name}</span>\n </div>\n {isExpanded && (\n <StatusFileTreeItem\n node={child}\n selectedFile={selectedFile}\n expandedFolders={expandedFolders}\n onToggleFolder={onToggleFolder}\n onSelectFile={onSelectFile}\n onActionFile={onActionFile}\n actionType={actionType}\n actionPending={actionPending}\n depth={depth + 1}\n />\n )}\n </div>\n );\n }\n\n const filePath = child.filePath;\n if (!filePath) return null;\n\n return (\n <div\n key={filePath}\n className={cn(\n 'flex items-center justify-between gap-2 px-2 py-1.5 rounded-md cursor-pointer group hover:bg-slate-100 dark:hover:bg-slate-800/70 transition-colors text-sm',\n selectedFile === filePath && 'bg-slate-100 dark:bg-slate-800/70 font-medium text-primary'\n )}\n style={{ paddingLeft: `${depth * 12 + 8}px` }}\n onClick={() => onSelectFile(filePath)}\n title={filePath}\n >\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <i className=\"iconoir-page text-[14px] opacity-70 shrink-0\" aria-hidden=\"true\" />\n <span className=\"truncate flex-1 font-mono text-xs\">{child.name}</span>\n </div>\n <button\n className={cn(\n 'btn btn-ghost btn-xs btn-square opacity-0 group-hover:opacity-100 transition-opacity',\n actionType === 'stage'\n ? 'text-success hover:bg-success/10'\n : 'text-error hover:bg-error/10'\n )}\n onClick={(e) => {\n e.stopPropagation();\n void onActionFile(filePath);\n }}\n disabled={actionPending}\n >\n <i\n className={cn(\n 'text-[14px]',\n actionType === 'stage' ? 'iconoir-plus-circle' : 'iconoir-minus-circle'\n )}\n aria-hidden=\"true\"\n />\n </button>\n </div>\n );\n })}\n </>\n );\n}\n\nexport function StatusView({ repoPath }: { repoPath: string }) {\n const { data: status, isLoading, isError, error, refetch } = useGitStatus(repoPath);\n const { data: branches } = useGitBranches(repoPath);\n const action = useGitAction();\n const [subject, setSubject] = useState('');\n const [body, setBody] = useState('');\n const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const [stashDialogOpen, setStashDialogOpen] = useState(false);\n const [stashMessage, setStashMessage] = useState('');\n const [discardDialogOpen, setDiscardDialogOpen] = useState(false);\n const [firstCommitDialogOpen, setFirstCommitDialogOpen] = useState(false);\n const [initialBranchName, setInitialBranchName] = useState('main');\n const [collapsedChangeFolders, setCollapsedChangeFolders] = useState<Set<string>>(new Set());\n const [collapsedStagedFolders, setCollapsedStagedFolders] = useState<Set<string>>(new Set());\n \n // Resize logic for commit box\n const [commitBoxHeight, setCommitBoxHeight] = useState(250);\n const [isResizing, setIsResizing] = useState(false);\n const resizeRef = useRef<{ startY: number; startHeight: number } | null>(null);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isResizing || !resizeRef.current) return;\n const delta = resizeRef.current.startY - e.clientY;\n const newHeight = Math.max(150, Math.min(800, resizeRef.current.startHeight + delta));\n setCommitBoxHeight(newHeight);\n };\n\n const handleMouseUp = () => {\n setIsResizing(false);\n resizeRef.current = null;\n document.body.style.cursor = 'default';\n document.body.style.userSelect = 'auto';\n };\n\n if (isResizing) {\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = 'ns-resize';\n document.body.style.userSelect = 'none';\n }\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = 'default';\n document.body.style.userSelect = 'auto';\n };\n }, [isResizing]);\n\n const handleResizeStart = (e: React.MouseEvent) => {\n e.preventDefault();\n setIsResizing(true);\n resizeRef.current = { startY: e.clientY, startHeight: commitBoxHeight };\n };\n\n const files = status?.files ?? EMPTY_FILES;\n const isFirstCommit = !!branches && branches.branches.length === 0;\n\n // Group files\n const { staged, changes } = useMemo(() => {\n const stagedFiles: string[] = [];\n const changedFiles: string[] = [];\n\n files.forEach((file) => {\n if (file.index !== ' ' && file.index !== '?') {\n stagedFiles.push(file.path);\n }\n if (file.working_dir !== ' ' || file.index === '?') {\n changedFiles.push(file.path);\n }\n });\n\n return {\n staged: stagedFiles,\n changes: changedFiles,\n };\n }, [files]);\n\n const changesTree = useMemo(() => buildStatusFileTree(changes), [changes]);\n const stagedTree = useMemo(() => buildStatusFileTree(staged), [staged]);\n const allChangeFolderPaths = useMemo(() => collectFolderPaths(changesTree), [changesTree]);\n const allStagedFolderPaths = useMemo(() => collectFolderPaths(stagedTree), [stagedTree]);\n\n const expandedChangeFolders = useMemo(() => {\n const expanded = new Set<string>();\n\n allChangeFolderPaths.forEach((path) => {\n if (!collapsedChangeFolders.has(path)) {\n expanded.add(path);\n }\n });\n\n if (selectedFile) {\n getParentPaths(selectedFile).forEach((path) => expanded.add(path));\n }\n\n return expanded;\n }, [allChangeFolderPaths, collapsedChangeFolders, selectedFile]);\n\n const expandedStagedFolders = useMemo(() => {\n const expanded = new Set<string>();\n\n allStagedFolderPaths.forEach((path) => {\n if (!collapsedStagedFolders.has(path)) {\n expanded.add(path);\n }\n });\n\n if (selectedFile) {\n getParentPaths(selectedFile).forEach((path) => expanded.add(path));\n }\n\n return expanded;\n }, [allStagedFolderPaths, collapsedStagedFolders, selectedFile]);\n\n const handleToggleChangeFolder = useCallback((path: string) => {\n setCollapsedChangeFolders((prev) => {\n const next = new Set(prev);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n });\n }, []);\n\n const handleToggleStagedFolder = useCallback((path: string) => {\n setCollapsedStagedFolders((prev) => {\n const next = new Set(prev);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n });\n }, []);\n\n const handleStage = async (file: string) => {\n await action.mutateAsync({ repoPath, action: 'stage', data: { files: [file] } });\n };\n\n const handleUnstage = async (file: string) => {\n await action.mutateAsync({ repoPath, action: 'unstage', data: { files: [file] } });\n };\n\n const handleStageAll = async () => {\n await action.mutateAsync({ repoPath, action: 'stage', data: { files: ['.'] } });\n }\n\n const handleUnstageAll = async () => {\n await action.mutateAsync({ repoPath, action: 'unstage', data: { files: staged } });\n }\n\n const handleStash = async () => {\n await action.mutateAsync({ repoPath, action: 'stash', data: { message: stashMessage || undefined } });\n setStashDialogOpen(false);\n setStashMessage('');\n setSelectedFile(null);\n }\n\n const handleDiscard = async () => {\n await action.mutateAsync({ repoPath, action: 'discard', data: { includeUntracked: true } });\n setDiscardDialogOpen(false);\n setSelectedFile(null);\n }\n\n const handleCommit = async () => {\n const trimmedSubject = subject.trim();\n if (!trimmedSubject) return;\n\n if (isFirstCommit) {\n setFirstCommitDialogOpen(true);\n return;\n }\n\n await action.mutateAsync({\n repoPath,\n action: 'commit',\n data: { message: buildCommitMessage(trimmedSubject, body) },\n });\n setSubject('');\n setBody('');\n setSelectedFile(null);\n };\n\n const handleFirstCommitConfirm = async () => {\n const trimmedSubject = subject.trim();\n const trimmedBranchName = initialBranchName.trim();\n if (!trimmedSubject || !trimmedBranchName) return;\n\n await action.mutateAsync({\n repoPath,\n action: 'commit',\n data: {\n message: buildCommitMessage(trimmedSubject, body),\n initialBranch: trimmedBranchName,\n },\n });\n\n setSubject('');\n setBody('');\n setSelectedFile(null);\n setFirstCommitDialogOpen(false);\n };\n\n useEscapeDismiss(stashDialogOpen, () => setStashDialogOpen(false), () => {\n if (action.isPending) {\n return;\n }\n void handleStash();\n });\n useEscapeDismiss(discardDialogOpen, () => setDiscardDialogOpen(false), () => {\n if (action.isPending) {\n return;\n }\n void handleDiscard();\n });\n useEscapeDismiss(firstCommitDialogOpen, () => setFirstCommitDialogOpen(false), () => {\n if (action.isPending || !initialBranchName.trim()) {\n return;\n }\n void handleFirstCommitConfirm();\n });\n\n const handleCommitShortcut = (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n if (staged.length > 0 && subject.trim() && !action.isPending) {\n handleCommit();\n }\n }\n };\n\n if (isLoading) {\n return <div className=\"flex items-center justify-center h-64\"><span className=\"loading loading-spinner text-base-content/50\"></span></div>;\n }\n\n if (isError) {\n return (\n <div className=\"flex items-center justify-center h-64 flex-col gap-4\">\n <p className=\"text-error font-bold\">Error Loading Status</p>\n <p className=\"text-sm opacity-70\">{(error as Error)?.message || 'An unknown error occurred'}</p>\n <button onClick={() => refetch()} className=\"btn btn-outline btn-sm\">\n <i className=\"iconoir-refresh-circle text-[16px] mr-1\" aria-hidden=\"true\" />\n Try Again\n </button>\n </div>\n );\n }\n\n if (!status) return <div className=\"flex items-center justify-center h-64 opacity-70\">No status data available</div>;\n\n const headerActionButtonClass =\n \"flex h-8 items-center gap-1.5 rounded-md border border-slate-200 bg-white px-3 text-sm font-medium text-slate-600 transition-colors hover:bg-slate-50 hover:text-slate-900 disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-300 dark:hover:bg-slate-800 dark:hover:text-slate-100\";\n\n return (\n <div className=\"flex h-full overflow-hidden\">\n <div className=\"flex flex-1 min-w-0 flex-col gap-2 overflow-hidden\">\n <div className=\"flex min-h-[57px] shrink-0 items-center justify-between gap-2 rounded-xl border border-slate-200 bg-white px-4 py-2 dark:border-slate-800 dark:bg-slate-900\">\n <h1 className=\"font-bold text-lg text-slate-900 dark:text-slate-100\">Changes</h1>\n <button className={headerActionButtonClass} onClick={() => refetch()} disabled={action.isPending} title=\"Refresh status\">\n {action.isPending ? <span className=\"loading loading-spinner loading-xs\"></span> : <i className=\"iconoir-refresh-circle text-[16px]\" aria-hidden=\"true\" />}\n Refresh\n </button>\n </div>\n\n <div className=\"flex flex-1 overflow-hidden rounded-xl border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-900\">\n {/* Left Panel: File List */}\n <div className=\"w-64 border-r border-slate-200 dark:border-slate-800 flex flex-col bg-slate-50/70 dark:bg-slate-900/70\">\n <div className=\"flex-1 overflow-y-auto\">\n {/* Unstaged Changes */}\n <div className=\"p-2\">\n <div className=\"flex items-center justify-between px-2 py-2 mb-1\">\n <h3 className=\"text-xs font-bold uppercase tracking-wider opacity-70\">Changes ({changes.length})</h3>\n <div className=\"flex items-center gap-0.5\">\n {changes.length === 0 && staged.length > 0 ? (\n <button className=\"btn btn-ghost btn-xs btn-square\" onClick={handleUnstageAll} title=\"Unstage All\">\n <i className=\"iconoir-arrow-up text-[16px]\" aria-hidden=\"true\" />\n </button>\n ) : (\n <button className=\"btn btn-ghost btn-xs btn-square\" onClick={handleStageAll} disabled={changes.length === 0} title=\"Stage All\">\n <i className=\"iconoir-arrow-down text-[16px]\" aria-hidden=\"true\" />\n </button>\n )}\n <button className=\"btn btn-ghost btn-xs btn-square\" onClick={() => setStashDialogOpen(true)} disabled={changes.length === 0 && staged.length === 0} title=\"Stash\">\n <i className=\"iconoir-download-square text-[16px]\" aria-hidden=\"true\" />\n </button>\n <button className=\"btn btn-ghost btn-xs btn-square text-error hover:bg-error/10\" onClick={() => setDiscardDialogOpen(true)} disabled={changes.length === 0} title=\"Discard All\">\n <i className=\"iconoir-trash text-[16px]\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n <div className=\"space-y-0.5\">\n {changes.length === 0 && <p className=\"px-2 py-2 text-xs opacity-50 italic\">No changes</p>}\n {changes.length > 0 && (\n <StatusFileTreeItem\n node={changesTree}\n selectedFile={selectedFile}\n expandedFolders={expandedChangeFolders}\n onToggleFolder={handleToggleChangeFolder}\n onSelectFile={setSelectedFile}\n onActionFile={handleStage}\n actionType=\"stage\"\n actionPending={action.isPending}\n />\n )}\n </div>\n </div>\n\n <div className=\"h-px bg-slate-200 dark:bg-slate-800 mx-4 my-2\" />\n\n {/* Staged Changes */}\n <div className=\"p-2\">\n <div className=\"flex items-center justify-between px-2 py-2 mb-1\">\n <h3 className=\"text-xs font-bold uppercase tracking-wider opacity-70\">Staged ({staged.length})</h3>\n </div>\n <div className=\"space-y-0.5\">\n {staged.length === 0 && <p className=\"px-2 py-2 text-xs opacity-50 italic\">No staged changes</p>}\n {staged.length > 0 && (\n <StatusFileTreeItem\n node={stagedTree}\n selectedFile={selectedFile}\n expandedFolders={expandedStagedFolders}\n onToggleFolder={handleToggleStagedFolder}\n onSelectFile={setSelectedFile}\n onActionFile={handleUnstage}\n actionType=\"unstage\"\n actionPending={action.isPending}\n />\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* Right Panel: Diff View & Commit Box */}\n <div className=\"flex-1 flex flex-col bg-white dark:bg-slate-900 overflow-hidden\">\n {/* Diff View Area */}\n <div className=\"flex-1 overflow-hidden flex flex-col min-h-0\">\n {selectedFile ? (\n <div className=\"h-full flex flex-col\">\n <DiffView repoPath={repoPath} filePath={selectedFile} />\n </div>\n ) : (\n <div className=\"flex-1 flex flex-col items-center justify-center opacity-50\">\n <div className=\"p-8 rounded-full bg-slate-100 dark:bg-slate-800/60 mb-4 text-4xl\">\n <i className=\"iconoir-refresh-circle text-[32px]\" aria-hidden=\"true\" />\n </div>\n <p className=\"text-sm font-bold\">Select a file to view changes</p>\n </div>\n )}\n </div>\n\n {/* Resize Handle */}\n <div\n className=\"h-1.5 cursor-ns-resize flex items-center justify-center hover:bg-slate-100 dark:hover:bg-slate-800/60 transition-colors group shrink-0 border-t border-slate-200 dark:border-slate-800\"\n onMouseDown={handleResizeStart}\n >\n <div className=\"w-8 h-1 rounded-full bg-base-300 group-hover:bg-base-content/20 transition-colors\" />\n </div>\n\n {/* Commit Box */}\n <div\n className=\"flex flex-col border-t border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900 shrink-0\"\n style={{ height: commitBoxHeight }}\n >\n <div className=\"flex-1 p-4 overflow-y-auto\">\n <input\n type=\"text\"\n placeholder=\"Commit subject...\"\n value={subject}\n onChange={e => setSubject(e.target.value)}\n onKeyDown={handleCommitShortcut}\n className=\"input input-bordered w-full text-sm mb-2 font-sans\"\n />\n <textarea\n placeholder=\"Commit message body (optional)...\"\n value={body}\n onChange={e => setBody(e.target.value)}\n onKeyDown={handleCommitShortcut}\n className=\"textarea textarea-bordered w-full text-sm resize-none mb-3 font-sans flex-1\"\n style={{ minHeight: '80px', height: 'calc(100% - 90px)' }}\n />\n <button className=\"btn btn-primary w-full btn-sm\" onClick={handleCommit} disabled={staged.length === 0 || !subject.trim() || action.isPending}>\n {action.isPending ? <span className=\"loading loading-spinner loading-xs mr-2\"></span> : <span className=\"mr-2\">✅</span>}\n Commit Changes\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Stash Dialog */}\n {stashDialogOpen && (\n <dialog className=\"modal modal-open\">\n <div className=\"modal-box\">\n <h3 className=\"font-bold text-lg\">Stash Changes</h3>\n <p className=\"py-4 opacity-70\">Save your local modifications to a new stash entry.</p>\n <div className=\"py-2\">\n <input\n type=\"text\"\n placeholder=\"Stash message (optional)\"\n value={stashMessage}\n onChange={(e) => setStashMessage(e.target.value)}\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleStash();\n }\n }}\n className=\"input input-bordered w-full\"\n />\n </div>\n <div className=\"modal-action\">\n <button className=\"btn\" onClick={() => setStashDialogOpen(false)}>Cancel</button>\n <button className=\"btn btn-primary\" onClick={handleStash} disabled={action.isPending}>\n {action.isPending && <span className=\"loading loading-spinner loading-xs\"></span>}\n Stash\n </button>\n </div>\n </div>\n <form method=\"dialog\" className=\"modal-backdrop\">\n <button onClick={() => setStashDialogOpen(false)}>close</button>\n </form>\n </dialog>\n )}\n\n {/* Discard Dialog */}\n {discardDialogOpen && (\n <dialog className=\"modal modal-open\">\n <div className=\"modal-box\">\n <h3 className=\"font-bold text-lg\">Discard Changes</h3>\n <p className=\"py-4\">\n Are you sure you want to discard all unstaged changes and new files? This action cannot be undone.\n </p>\n <div className=\"modal-action\">\n <button className=\"btn\" onClick={() => setDiscardDialogOpen(false)}>Cancel</button>\n <button className=\"btn btn-error\" onClick={handleDiscard} disabled={action.isPending}>\n {action.isPending && <span className=\"loading loading-spinner loading-xs\"></span>}\n Discard\n </button>\n </div>\n </div>\n <form method=\"dialog\" className=\"modal-backdrop\">\n <button onClick={() => setDiscardDialogOpen(false)}>close</button>\n </form>\n </dialog>\n )}\n\n {firstCommitDialogOpen && (\n <dialog className=\"modal modal-open\">\n <div className=\"modal-box\">\n <h3 className=\"font-bold text-lg\">First Commit Branch</h3>\n <p className=\"py-4 opacity-70\">\n This repository has no commits yet. Choose the branch name for the first commit.\n </p>\n <div className=\"py-2\">\n <input\n type=\"text\"\n placeholder=\"Branch name\"\n value={initialBranchName}\n onChange={(e) => setInitialBranchName(sanitizeBranchName(e.target.value))}\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleFirstCommitConfirm();\n }\n }}\n className=\"input input-bordered w-full\"\n />\n </div>\n <div className=\"modal-action\">\n <button className=\"btn\" onClick={() => setFirstCommitDialogOpen(false)}>\n Cancel\n </button>\n <button className=\"btn btn-primary\" onClick={handleFirstCommitConfirm} disabled={!initialBranchName.trim() || action.isPending}>\n {action.isPending && <span className=\"loading loading-spinner loading-xs\"></span>}\n Commit to Branch\n </button>\n </div>\n </div>\n <form method=\"dialog\" className=\"modal-backdrop\">\n <button onClick={() => setFirstCommitDialogOpen(false)}>close</button>\n </form>\n </dialog>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useGitDiff } from '@/hooks/use-git';\nimport { useState, useEffect, useRef } from 'react';\nimport { useTheme } from 'next-themes';\nimport { getChangedLineCountFromDiff, isFileBinary, isImageFile } from '@/lib/utils';\nimport { GroupedDiffViewer } from './grouped-diff-viewer';\nimport { ImageDiffView } from './image-diff-view';\n\nexport function DiffView({ repoPath, filePath }: { repoPath: string, filePath: string }) {\n const { data, isLoading } = useGitDiff(repoPath, filePath);\n const diffScrollContainerRef = useRef<HTMLDivElement>(null);\n \n // Storage key for split view preference\n const storageKey = 'git-web:diff-view-split';\n \n const [splitView, setSplitView] = useState(() => {\n if (typeof window === 'undefined') return true;\n try {\n const stored = localStorage.getItem(storageKey);\n return stored !== null ? JSON.parse(stored) : true;\n } catch (e) {\n console.error('Failed to load split view preference:', e);\n return true;\n }\n });\n\n const [renderAnywayFilePath, setRenderAnywayFilePath] = useState<string | null>(null);\n const renderAnyway = renderAnywayFilePath === filePath;\n \n const { resolvedTheme } = useTheme();\n\n // Save split view preference when it changes\n useEffect(() => {\n try {\n localStorage.setItem(storageKey, JSON.stringify(splitView));\n } catch (e) {\n console.error('Failed to save split view preference:', e);\n }\n }, [splitView]);\n\n // Reset diff scroll position when switching files.\n useEffect(() => {\n if (isLoading) return;\n\n const frame = requestAnimationFrame(() => {\n diffScrollContainerRef.current?.scrollTo({ top: 0, left: 0 });\n });\n\n return () => cancelAnimationFrame(frame);\n }, [filePath, isLoading]);\n\n if (isLoading) {\n return <div className=\"flex items-center justify-center p-8 h-full\"><span className=\"loading loading-spinner text-base-content/50\"></span></div>;\n }\n\n if (!data) {\n return (\n <div className=\"flex items-center justify-center h-full opacity-50\">\n No diff available\n </div>\n )\n }\n\n const isImage = isImageFile(filePath);\n if (isImage) {\n return (\n <div className=\"flex flex-col h-full bg-base-100\">\n <div className=\"flex items-center justify-between px-4 h-[57px] border-b border-base-300 shrink-0 bg-base-100\">\n <span className=\"text-sm font-mono truncate max-w-[70%]\" title={filePath}>{filePath}</span>\n </div>\n <div className=\"flex-1 overflow-auto\">\n <ImageDiffView filePath={filePath} imageDiff={data.imageDiff} />\n </div>\n </div>\n );\n }\n\n // Check if file is binary (first by extension, then by content if unknown)\n const isBinary = isFileBinary(filePath, data.left, data.right);\n\n if (isBinary) {\n return (\n <div className=\"flex flex-col h-full bg-base-100\">\n <div className=\"flex items-center justify-between px-4 h-[57px] border-b border-base-300 shrink-0 bg-base-100\">\n <span className=\"text-sm font-mono truncate max-w-[70%]\" title={filePath}>{filePath}</span>\n </div>\n <div className=\"flex-1 flex items-center justify-center opacity-50\">\n Binary file - diff not available\n </div>\n </div>\n );\n }\n\n // Large file protection\n const MAX_DIFF_SIZE = 100 * 1024; // 100KB\n const MAX_DIFF_LINES = 3000;\n\n const diffContent = data.diff || '';\n const contentSize = diffContent.length;\n const lineCount = getChangedLineCountFromDiff(diffContent);\n\n const isLargeDiff = (contentSize > MAX_DIFF_SIZE || lineCount > MAX_DIFF_LINES);\n\n return (\n <div className=\"flex flex-col h-full bg-base-100\">\n <div className=\"flex items-center justify-between px-4 h-[57px] border-b border-base-300 shrink-0 bg-base-100\">\n <span className=\"text-sm font-mono truncate max-w-[70%]\" title={filePath}>{filePath}</span>\n <div className=\"flex items-center gap-2\">\n <label htmlFor=\"split-view\" className=\"text-[10px] uppercase tracking-wider font-bold cursor-pointer opacity-70\">Split View</label>\n <input\n type=\"checkbox\"\n id=\"split-view\"\n checked={splitView}\n onChange={(e) => setSplitView(e.target.checked)}\n className=\"toggle toggle-sm toggle-primary\"\n />\n </div>\n </div>\n <div ref={diffScrollContainerRef} className=\"flex-1 overflow-auto diff-viewer-wrapper\">\n {isLargeDiff && !renderAnyway ? (\n <div className=\"flex flex-col items-center justify-center h-full gap-4 text-center p-4\">\n <i className=\"iconoir-warning-triangle text-[40px] text-warning\" aria-hidden=\"true\" />\n <div className=\"space-y-2\">\n <h3 className=\"font-bold text-lg\">Large Diff Detected</h3>\n <p className=\"opacity-70\">\n This diff is large ({Math.round(contentSize / 1024)}KB, ~{lineCount} changed lines) and may freeze your browser if rendered.\n </p>\n </div>\n <button className=\"btn btn-outline\" onClick={() => setRenderAnywayFilePath(filePath)}>\n Show Diff Anyway\n </button>\n </div>\n ) : (\n <GroupedDiffViewer\n oldValue={data.left || ''}\n newValue={data.right || ''}\n splitView={splitView}\n useDarkTheme={resolvedTheme === 'dark'}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/app/git/changes/page.tsx","../../../../src/components/git/status-view.tsx"],"sourcesContent":["'use client';\n\nimport { useSearchParams } from 'next/navigation';\nimport { StatusView } from '@/components/git/status-view';\nimport { Suspense } from 'react';\nimport { useWorkspaceTitle } from '@/hooks/use-workspace-title';\n\nfunction WorkspaceChangesContent() {\n const searchParams = useSearchParams();\n const repoPath = searchParams.get('path');\n\n useWorkspaceTitle(repoPath, 'Changes');\n\n if (!repoPath) {\n return <div className=\"p-8\">No repository path specified.</div>;\n }\n\n return <StatusView repoPath={repoPath} />;\n}\n\nexport default function WorkspaceChangesPage() {\n return (\n <Suspense fallback={<div className=\"flex items-center justify-center h-full\"><span className=\"loading loading-spinner\"></span></div>}>\n <WorkspaceChangesContent />\n </Suspense>\n );\n}\n","'use client';\n\nimport { useGitStatus, useGitAction, useGitBranches } from '@/hooks/use-git';\nimport { useCallback, useMemo, useState, useEffect, useRef } from 'react';\nimport { cn, sanitizeBranchName } from '@/lib/utils';\nimport { DiffView } from './diff-view';\nimport { useEscapeDismiss } from '@/hooks/use-escape-dismiss';\n\nconst EMPTY_FILES: Array<{ path: string; index: string; working_dir: string }> = [];\n\nfunction buildCommitMessage(subject: string, body: string): string {\n const trimmedSubject = subject.trim();\n const normalizedBody = body.replace(/\\r\\n/g, '\\n');\n return normalizedBody.trim() ? `${trimmedSubject}\\n\\n${normalizedBody}` : trimmedSubject;\n}\n\ninterface StatusFileTreeNode {\n name: string;\n path: string;\n filePath?: string;\n children: Map<string, StatusFileTreeNode>;\n}\n\nfunction buildStatusFileTree(paths: string[]): StatusFileTreeNode {\n const root: StatusFileTreeNode = {\n name: '',\n path: '',\n children: new Map(),\n };\n\n for (const filePath of paths) {\n const parts = filePath.split('/').filter(Boolean);\n let current = root;\n let currentPath = '';\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n\n if (!current.children.has(part)) {\n current.children.set(part, {\n name: part,\n path: currentPath,\n children: new Map(),\n });\n }\n\n current = current.children.get(part)!;\n\n if (i === parts.length - 1) {\n current.filePath = filePath;\n }\n }\n }\n\n return root;\n}\n\nfunction collectFolderPaths(node: StatusFileTreeNode): string[] {\n const paths: string[] = [];\n const children = Array.from(node.children.values());\n\n children.forEach((child) => {\n if (child.children.size > 0) {\n paths.push(child.path);\n paths.push(...collectFolderPaths(child));\n }\n });\n\n return paths;\n}\n\nfunction getParentPaths(filePath: string): string[] {\n const parts = filePath.split('/').filter(Boolean);\n const parentPaths: string[] = [];\n\n for (let i = 1; i < parts.length; i++) {\n parentPaths.push(parts.slice(0, i).join('/'));\n }\n\n return parentPaths;\n}\n\nfunction collectFilePaths(node: StatusFileTreeNode): string[] {\n const filePaths: string[] = [];\n\n node.children.forEach((child) => {\n if (child.filePath) {\n filePaths.push(child.filePath);\n }\n\n if (child.children.size > 0) {\n filePaths.push(...collectFilePaths(child));\n }\n });\n\n return filePaths;\n}\n\nfunction StatusFileTreeItem({\n node,\n selectedFile,\n expandedFolders,\n onToggleFolder,\n onSelectFile,\n onActionPaths,\n actionType,\n actionPending,\n depth = 0,\n}: {\n node: StatusFileTreeNode;\n selectedFile: string | null;\n expandedFolders: Set<string>;\n onToggleFolder: (path: string) => void;\n onSelectFile: (path: string) => void;\n onActionPaths: (paths: string[]) => Promise<void>;\n actionType: 'stage' | 'unstage';\n actionPending: boolean;\n depth?: number;\n}) {\n const children = Array.from(node.children.values()).sort((a, b) => {\n const aIsFolder = a.children.size > 0;\n const bIsFolder = b.children.size > 0;\n\n if (aIsFolder && !bIsFolder) return -1;\n if (!aIsFolder && bIsFolder) return 1;\n return a.name.localeCompare(b.name);\n });\n\n return (\n <>\n {children.map((child) => {\n const isFolder = child.children.size > 0;\n\n if (isFolder) {\n const isExpanded = expandedFolders.has(child.path);\n const filePaths = collectFilePaths(child);\n\n return (\n <div key={child.path} className=\"group\">\n <div\n className=\"flex items-center gap-1 px-2 py-1.5 text-xs rounded cursor-pointer text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800/70 transition-colors\"\n style={{ paddingLeft: `${depth * 12 + 8}px` }}\n onClick={() => onToggleFolder(child.path)}\n title={child.path}\n >\n <span className=\"text-[10px] opacity-70\">{isExpanded ? '▼' : '▶'}</span>\n <i className=\"iconoir-folder text-[14px] opacity-70\" aria-hidden=\"true\" />\n <span className=\"truncate flex-1\">{child.name}</span>\n <button\n className={cn(\n 'btn btn-ghost btn-xs btn-square opacity-0 group-hover:opacity-100 transition-opacity',\n actionType === 'stage'\n ? 'text-success hover:bg-success/10'\n : 'text-error hover:bg-error/10'\n )}\n onClick={(e) => {\n e.stopPropagation();\n void onActionPaths(filePaths);\n }}\n disabled={actionPending || filePaths.length === 0}\n title={actionType === 'stage' ? `Stage all in ${child.path}` : `Unstage all in ${child.path}`}\n >\n <i\n className={cn(\n 'text-[14px]',\n actionType === 'stage' ? 'iconoir-plus-circle' : 'iconoir-minus-circle'\n )}\n aria-hidden=\"true\"\n />\n </button>\n </div>\n {isExpanded && (\n <StatusFileTreeItem\n node={child}\n selectedFile={selectedFile}\n expandedFolders={expandedFolders}\n onToggleFolder={onToggleFolder}\n onSelectFile={onSelectFile}\n onActionPaths={onActionPaths}\n actionType={actionType}\n actionPending={actionPending}\n depth={depth + 1}\n />\n )}\n </div>\n );\n }\n\n const filePath = child.filePath;\n if (!filePath) return null;\n\n return (\n <div\n key={filePath}\n className={cn(\n 'flex items-center justify-between gap-2 px-2 py-1.5 rounded-md cursor-pointer group hover:bg-slate-100 dark:hover:bg-slate-800/70 transition-colors text-sm',\n selectedFile === filePath && 'bg-slate-100 dark:bg-slate-800/70 font-medium text-primary'\n )}\n style={{ paddingLeft: `${depth * 12 + 8}px` }}\n onClick={() => onSelectFile(filePath)}\n title={filePath}\n >\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <i className=\"iconoir-page text-[14px] opacity-70 shrink-0\" aria-hidden=\"true\" />\n <span className=\"truncate flex-1 font-mono text-xs\">{child.name}</span>\n </div>\n <button\n className={cn(\n 'btn btn-ghost btn-xs btn-square opacity-0 group-hover:opacity-100 transition-opacity',\n actionType === 'stage'\n ? 'text-success hover:bg-success/10'\n : 'text-error hover:bg-error/10'\n )}\n onClick={(e) => {\n e.stopPropagation();\n void onActionPaths([filePath]);\n }}\n disabled={actionPending}\n >\n <i\n className={cn(\n 'text-[14px]',\n actionType === 'stage' ? 'iconoir-plus-circle' : 'iconoir-minus-circle'\n )}\n aria-hidden=\"true\"\n />\n </button>\n </div>\n );\n })}\n </>\n );\n}\n\nexport function StatusView({ repoPath }: { repoPath: string }) {\n const { data: status, isLoading, isError, error, refetch } = useGitStatus(repoPath);\n const { data: branches } = useGitBranches(repoPath);\n const action = useGitAction();\n const [subject, setSubject] = useState('');\n const [body, setBody] = useState('');\n const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const [stashDialogOpen, setStashDialogOpen] = useState(false);\n const [stashMessage, setStashMessage] = useState('');\n const [discardDialogOpen, setDiscardDialogOpen] = useState(false);\n const [firstCommitDialogOpen, setFirstCommitDialogOpen] = useState(false);\n const [initialBranchName, setInitialBranchName] = useState('main');\n const [collapsedChangeFolders, setCollapsedChangeFolders] = useState<Set<string>>(new Set());\n const [collapsedStagedFolders, setCollapsedStagedFolders] = useState<Set<string>>(new Set());\n \n // Resize logic for commit box\n const [commitBoxHeight, setCommitBoxHeight] = useState(250);\n const [isResizing, setIsResizing] = useState(false);\n const resizeRef = useRef<{ startY: number; startHeight: number } | null>(null);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isResizing || !resizeRef.current) return;\n const delta = resizeRef.current.startY - e.clientY;\n const newHeight = Math.max(150, Math.min(800, resizeRef.current.startHeight + delta));\n setCommitBoxHeight(newHeight);\n };\n\n const handleMouseUp = () => {\n setIsResizing(false);\n resizeRef.current = null;\n document.body.style.cursor = 'default';\n document.body.style.userSelect = 'auto';\n };\n\n if (isResizing) {\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = 'ns-resize';\n document.body.style.userSelect = 'none';\n }\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = 'default';\n document.body.style.userSelect = 'auto';\n };\n }, [isResizing]);\n\n const handleResizeStart = (e: React.MouseEvent) => {\n e.preventDefault();\n setIsResizing(true);\n resizeRef.current = { startY: e.clientY, startHeight: commitBoxHeight };\n };\n\n const files = status?.files ?? EMPTY_FILES;\n const isFirstCommit = !!branches && branches.branches.length === 0;\n\n // Group files\n const { staged, changes } = useMemo(() => {\n const stagedFiles: string[] = [];\n const changedFiles: string[] = [];\n\n files.forEach((file) => {\n if (file.index !== ' ' && file.index !== '?') {\n stagedFiles.push(file.path);\n }\n if (file.working_dir !== ' ' || file.index === '?') {\n changedFiles.push(file.path);\n }\n });\n\n return {\n staged: stagedFiles,\n changes: changedFiles,\n };\n }, [files]);\n\n const changesTree = useMemo(() => buildStatusFileTree(changes), [changes]);\n const stagedTree = useMemo(() => buildStatusFileTree(staged), [staged]);\n const allChangeFolderPaths = useMemo(() => collectFolderPaths(changesTree), [changesTree]);\n const allStagedFolderPaths = useMemo(() => collectFolderPaths(stagedTree), [stagedTree]);\n\n const expandedChangeFolders = useMemo(() => {\n const expanded = new Set<string>();\n\n allChangeFolderPaths.forEach((path) => {\n if (!collapsedChangeFolders.has(path)) {\n expanded.add(path);\n }\n });\n\n if (selectedFile) {\n getParentPaths(selectedFile).forEach((path) => expanded.add(path));\n }\n\n return expanded;\n }, [allChangeFolderPaths, collapsedChangeFolders, selectedFile]);\n\n const expandedStagedFolders = useMemo(() => {\n const expanded = new Set<string>();\n\n allStagedFolderPaths.forEach((path) => {\n if (!collapsedStagedFolders.has(path)) {\n expanded.add(path);\n }\n });\n\n if (selectedFile) {\n getParentPaths(selectedFile).forEach((path) => expanded.add(path));\n }\n\n return expanded;\n }, [allStagedFolderPaths, collapsedStagedFolders, selectedFile]);\n\n const handleToggleChangeFolder = useCallback((path: string) => {\n setCollapsedChangeFolders((prev) => {\n const next = new Set(prev);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n });\n }, []);\n\n const handleToggleStagedFolder = useCallback((path: string) => {\n setCollapsedStagedFolders((prev) => {\n const next = new Set(prev);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n });\n }, []);\n\n const handleStagePaths = async (paths: string[]) => {\n if (paths.length === 0) return;\n await action.mutateAsync({ repoPath, action: 'stage', data: { files: paths } });\n };\n\n const handleUnstagePaths = async (paths: string[]) => {\n if (paths.length === 0) return;\n await action.mutateAsync({ repoPath, action: 'unstage', data: { files: paths } });\n };\n\n const handleStageAll = async () => {\n await action.mutateAsync({ repoPath, action: 'stage', data: { files: ['.'] } });\n }\n\n const handleUnstageAll = async () => {\n await action.mutateAsync({ repoPath, action: 'unstage', data: { files: staged } });\n }\n\n const handleStash = async () => {\n await action.mutateAsync({ repoPath, action: 'stash', data: { message: stashMessage || undefined } });\n setStashDialogOpen(false);\n setStashMessage('');\n setSelectedFile(null);\n }\n\n const handleDiscard = async () => {\n await action.mutateAsync({ repoPath, action: 'discard', data: { includeUntracked: true } });\n setDiscardDialogOpen(false);\n setSelectedFile(null);\n }\n\n const handleCommit = async () => {\n const trimmedSubject = subject.trim();\n if (!trimmedSubject) return;\n\n if (isFirstCommit) {\n setFirstCommitDialogOpen(true);\n return;\n }\n\n await action.mutateAsync({\n repoPath,\n action: 'commit',\n data: { message: buildCommitMessage(trimmedSubject, body) },\n });\n setSubject('');\n setBody('');\n setSelectedFile(null);\n };\n\n const handleFirstCommitConfirm = async () => {\n const trimmedSubject = subject.trim();\n const trimmedBranchName = initialBranchName.trim();\n if (!trimmedSubject || !trimmedBranchName) return;\n\n await action.mutateAsync({\n repoPath,\n action: 'commit',\n data: {\n message: buildCommitMessage(trimmedSubject, body),\n initialBranch: trimmedBranchName,\n },\n });\n\n setSubject('');\n setBody('');\n setSelectedFile(null);\n setFirstCommitDialogOpen(false);\n };\n\n useEscapeDismiss(stashDialogOpen, () => setStashDialogOpen(false), () => {\n if (action.isPending) {\n return;\n }\n void handleStash();\n });\n useEscapeDismiss(discardDialogOpen, () => setDiscardDialogOpen(false), () => {\n if (action.isPending) {\n return;\n }\n void handleDiscard();\n });\n useEscapeDismiss(firstCommitDialogOpen, () => setFirstCommitDialogOpen(false), () => {\n if (action.isPending || !initialBranchName.trim()) {\n return;\n }\n void handleFirstCommitConfirm();\n });\n\n const handleCommitShortcut = (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n if (staged.length > 0 && subject.trim() && !action.isPending) {\n handleCommit();\n }\n }\n };\n\n if (isLoading) {\n return <div className=\"flex items-center justify-center h-64\"><span className=\"loading loading-spinner text-base-content/50\"></span></div>;\n }\n\n if (isError) {\n return (\n <div className=\"flex items-center justify-center h-64 flex-col gap-4\">\n <p className=\"text-error font-bold\">Error Loading Status</p>\n <p className=\"text-sm opacity-70\">{(error as Error)?.message || 'An unknown error occurred'}</p>\n <button onClick={() => refetch()} className=\"btn btn-outline btn-sm\">\n <i className=\"iconoir-refresh-circle text-[16px] mr-1\" aria-hidden=\"true\" />\n Try Again\n </button>\n </div>\n );\n }\n\n if (!status) return <div className=\"flex items-center justify-center h-64 opacity-70\">No status data available</div>;\n\n const headerActionButtonClass =\n \"flex h-8 items-center gap-1.5 rounded-md border border-slate-200 bg-white px-3 text-sm font-medium text-slate-600 transition-colors hover:bg-slate-50 hover:text-slate-900 disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-300 dark:hover:bg-slate-800 dark:hover:text-slate-100\";\n\n return (\n <div className=\"flex h-full overflow-hidden\">\n <div className=\"flex flex-1 min-w-0 flex-col gap-2 overflow-hidden\">\n <div className=\"flex min-h-[57px] shrink-0 items-center justify-between gap-2 rounded-xl border border-slate-200 bg-white px-4 py-2 dark:border-slate-800 dark:bg-slate-900\">\n <h1 className=\"font-bold text-lg text-slate-900 dark:text-slate-100\">Changes</h1>\n <button className={headerActionButtonClass} onClick={() => refetch()} disabled={action.isPending} title=\"Refresh status\">\n {action.isPending ? <span className=\"loading loading-spinner loading-xs\"></span> : <i className=\"iconoir-refresh-circle text-[16px]\" aria-hidden=\"true\" />}\n Refresh\n </button>\n </div>\n\n <div className=\"flex flex-1 overflow-hidden rounded-xl border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-900\">\n {/* Left Panel: File List */}\n <div className=\"w-64 border-r border-slate-200 dark:border-slate-800 flex flex-col bg-slate-50/70 dark:bg-slate-900/70\">\n <div className=\"flex-1 overflow-y-auto\">\n {/* Unstaged Changes */}\n <div className=\"p-2\">\n <div className=\"flex items-center justify-between px-2 py-2 mb-1\">\n <h3 className=\"text-xs font-bold uppercase tracking-wider opacity-70\">Changes ({changes.length})</h3>\n <div className=\"flex items-center gap-0.5\">\n {changes.length === 0 && staged.length > 0 ? (\n <button className=\"btn btn-ghost btn-xs btn-square\" onClick={handleUnstageAll} title=\"Unstage All\">\n <i className=\"iconoir-arrow-up text-[16px]\" aria-hidden=\"true\" />\n </button>\n ) : (\n <button className=\"btn btn-ghost btn-xs btn-square\" onClick={handleStageAll} disabled={changes.length === 0} title=\"Stage All\">\n <i className=\"iconoir-arrow-down text-[16px]\" aria-hidden=\"true\" />\n </button>\n )}\n <button className=\"btn btn-ghost btn-xs btn-square\" onClick={() => setStashDialogOpen(true)} disabled={changes.length === 0 && staged.length === 0} title=\"Stash\">\n <i className=\"iconoir-download-square text-[16px]\" aria-hidden=\"true\" />\n </button>\n <button className=\"btn btn-ghost btn-xs btn-square text-error hover:bg-error/10\" onClick={() => setDiscardDialogOpen(true)} disabled={changes.length === 0} title=\"Discard All\">\n <i className=\"iconoir-trash text-[16px]\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n <div className=\"space-y-0.5\">\n {changes.length === 0 && <p className=\"px-2 py-2 text-xs opacity-50 italic\">No changes</p>}\n {changes.length > 0 && (\n <StatusFileTreeItem\n node={changesTree}\n selectedFile={selectedFile}\n expandedFolders={expandedChangeFolders}\n onToggleFolder={handleToggleChangeFolder}\n onSelectFile={setSelectedFile}\n onActionPaths={handleStagePaths}\n actionType=\"stage\"\n actionPending={action.isPending}\n />\n )}\n </div>\n </div>\n\n <div className=\"h-px bg-slate-200 dark:bg-slate-800 mx-4 my-2\" />\n\n {/* Staged Changes */}\n <div className=\"p-2\">\n <div className=\"flex items-center justify-between px-2 py-2 mb-1\">\n <h3 className=\"text-xs font-bold uppercase tracking-wider opacity-70\">Staged ({staged.length})</h3>\n </div>\n <div className=\"space-y-0.5\">\n {staged.length === 0 && <p className=\"px-2 py-2 text-xs opacity-50 italic\">No staged changes</p>}\n {staged.length > 0 && (\n <StatusFileTreeItem\n node={stagedTree}\n selectedFile={selectedFile}\n expandedFolders={expandedStagedFolders}\n onToggleFolder={handleToggleStagedFolder}\n onSelectFile={setSelectedFile}\n onActionPaths={handleUnstagePaths}\n actionType=\"unstage\"\n actionPending={action.isPending}\n />\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* Right Panel: Diff View & Commit Box */}\n <div className=\"flex-1 flex flex-col bg-white dark:bg-slate-900 overflow-hidden\">\n {/* Diff View Area */}\n <div className=\"flex-1 overflow-hidden flex flex-col min-h-0\">\n {selectedFile ? (\n <div className=\"h-full flex flex-col\">\n <DiffView repoPath={repoPath} filePath={selectedFile} />\n </div>\n ) : (\n <div className=\"flex-1 flex flex-col items-center justify-center opacity-50\">\n <div className=\"p-8 rounded-full bg-slate-100 dark:bg-slate-800/60 mb-4 text-4xl\">\n <i className=\"iconoir-refresh-circle text-[32px]\" aria-hidden=\"true\" />\n </div>\n <p className=\"text-sm font-bold\">Select a file to view changes</p>\n </div>\n )}\n </div>\n\n {/* Resize Handle */}\n <div\n className=\"h-1.5 cursor-ns-resize flex items-center justify-center hover:bg-slate-100 dark:hover:bg-slate-800/60 transition-colors group shrink-0 border-t border-slate-200 dark:border-slate-800\"\n onMouseDown={handleResizeStart}\n >\n <div className=\"w-8 h-1 rounded-full bg-base-300 group-hover:bg-base-content/20 transition-colors\" />\n </div>\n\n {/* Commit Box */}\n <div\n className=\"flex flex-col border-t border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900 shrink-0\"\n style={{ height: commitBoxHeight }}\n >\n <div className=\"flex-1 p-4 overflow-y-auto\">\n <input\n type=\"text\"\n placeholder=\"Commit subject...\"\n value={subject}\n onChange={e => setSubject(e.target.value)}\n onKeyDown={handleCommitShortcut}\n className=\"input input-bordered w-full text-sm mb-2 font-sans\"\n />\n <textarea\n placeholder=\"Commit message body (optional)...\"\n value={body}\n onChange={e => setBody(e.target.value)}\n onKeyDown={handleCommitShortcut}\n className=\"textarea textarea-bordered w-full text-sm resize-none mb-3 font-sans flex-1\"\n style={{ minHeight: '80px', height: 'calc(100% - 90px)' }}\n />\n <button className=\"btn btn-primary w-full btn-sm\" onClick={handleCommit} disabled={staged.length === 0 || !subject.trim() || action.isPending}>\n {action.isPending ? <span className=\"loading loading-spinner loading-xs mr-2\"></span> : <span className=\"mr-2\">✅</span>}\n Commit Changes\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Stash Dialog */}\n {stashDialogOpen && (\n <dialog className=\"modal modal-open\">\n <div className=\"modal-box\">\n <h3 className=\"font-bold text-lg\">Stash Changes</h3>\n <p className=\"py-4 opacity-70\">Save your local modifications to a new stash entry.</p>\n <div className=\"py-2\">\n <input\n type=\"text\"\n placeholder=\"Stash message (optional)\"\n value={stashMessage}\n onChange={(e) => setStashMessage(e.target.value)}\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleStash();\n }\n }}\n className=\"input input-bordered w-full\"\n />\n </div>\n <div className=\"modal-action\">\n <button className=\"btn\" onClick={() => setStashDialogOpen(false)}>Cancel</button>\n <button className=\"btn btn-primary\" onClick={handleStash} disabled={action.isPending}>\n {action.isPending && <span className=\"loading loading-spinner loading-xs\"></span>}\n Stash\n </button>\n </div>\n </div>\n <form method=\"dialog\" className=\"modal-backdrop\">\n <button onClick={() => setStashDialogOpen(false)}>close</button>\n </form>\n </dialog>\n )}\n\n {/* Discard Dialog */}\n {discardDialogOpen && (\n <dialog className=\"modal modal-open\">\n <div className=\"modal-box\">\n <h3 className=\"font-bold text-lg\">Discard Changes</h3>\n <p className=\"py-4\">\n Are you sure you want to discard all unstaged changes and new files? This action cannot be undone.\n </p>\n <div className=\"modal-action\">\n <button className=\"btn\" onClick={() => setDiscardDialogOpen(false)}>Cancel</button>\n <button className=\"btn btn-error\" onClick={handleDiscard} disabled={action.isPending}>\n {action.isPending && <span className=\"loading loading-spinner loading-xs\"></span>}\n Discard\n </button>\n </div>\n </div>\n <form method=\"dialog\" className=\"modal-backdrop\">\n <button onClick={() => setDiscardDialogOpen(false)}>close</button>\n </form>\n </dialog>\n )}\n\n {firstCommitDialogOpen && (\n <dialog className=\"modal modal-open\">\n <div className=\"modal-box\">\n <h3 className=\"font-bold text-lg\">First Commit Branch</h3>\n <p className=\"py-4 opacity-70\">\n This repository has no commits yet. Choose the branch name for the first commit.\n </p>\n <div className=\"py-2\">\n <input\n type=\"text\"\n placeholder=\"Branch name\"\n value={initialBranchName}\n onChange={(e) => setInitialBranchName(sanitizeBranchName(e.target.value))}\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleFirstCommitConfirm();\n }\n }}\n className=\"input input-bordered w-full\"\n />\n </div>\n <div className=\"modal-action\">\n <button className=\"btn\" onClick={() => setFirstCommitDialogOpen(false)}>\n Cancel\n </button>\n <button className=\"btn btn-primary\" onClick={handleFirstCommitConfirm} disabled={!initialBranchName.trim() || action.isPending}>\n {action.isPending && <span className=\"loading loading-spinner loading-xs\"></span>}\n Commit to Branch\n </button>\n </div>\n </div>\n <form method=\"dialog\" className=\"modal-backdrop\">\n <button onClick={() => setFirstCommitDialogOpen(false)}>close</button>\n </form>\n </dialog>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[43518,a=>{"use strict";var b=a.i(87924),c=a.i(42871),d=a.i(76644),e=a.i(18544),f=a.i(33791),g=class extends f.Subscribable{constructor(a={}){super(),this.config=a,this.#a=new Map}#a;build(a,b,e){let f=b.queryKey,g=b.queryHash??(0,c.hashQueryKeyByOptions)(f,b),h=this.get(g);return h||(h=new d.Query({client:a,queryKey:f,queryHash:g,options:a.defaultQueryOptions(b),state:e,defaultOptions:a.getQueryDefaults(f)}),this.add(h)),h}add(a){this.#a.has(a.queryHash)||(this.#a.set(a.queryHash,a),this.notify({type:"added",query:a}))}remove(a){let b=this.#a.get(a.queryHash);b&&(a.destroy(),b===a&&this.#a.delete(a.queryHash),this.notify({type:"removed",query:a}))}clear(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{this.remove(a)})})}get(a){return this.#a.get(a)}getAll(){return[...this.#a.values()]}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchQuery)(b,a))}findAll(a={}){let b=this.getAll();return Object.keys(a).length>0?b.filter(b=>(0,c.matchQuery)(a,b)):b}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}onFocus(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onFocus()})})}onOnline(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onOnline()})})}},h=a.i(12794),i=f,j=class extends i.Subscribable{constructor(a={}){super(),this.config=a,this.#b=new Set,this.#c=new Map,this.#d=0}#b;#c;#d;build(a,b,c){let d=new h.Mutation({client:a,mutationCache:this,mutationId:++this.#d,options:a.defaultMutationOptions(b),state:c});return this.add(d),d}add(a){this.#b.add(a);let b=k(a);if("string"==typeof b){let c=this.#c.get(b);c?c.push(a):this.#c.set(b,[a])}this.notify({type:"added",mutation:a})}remove(a){if(this.#b.delete(a)){let b=k(a);if("string"==typeof b){let c=this.#c.get(b);if(c)if(c.length>1){let b=c.indexOf(a);-1!==b&&c.splice(b,1)}else c[0]===a&&this.#c.delete(b)}}this.notify({type:"removed",mutation:a})}canRun(a){let b=k(a);if("string"!=typeof b)return!0;{let c=this.#c.get(b),d=c?.find(a=>"pending"===a.state.status);return!d||d===a}}runNext(a){let b=k(a);if("string"!=typeof b)return Promise.resolve();{let c=this.#c.get(b)?.find(b=>b!==a&&b.state.isPaused);return c?.continue()??Promise.resolve()}}clear(){e.notifyManager.batch(()=>{this.#b.forEach(a=>{this.notify({type:"removed",mutation:a})}),this.#b.clear(),this.#c.clear()})}getAll(){return Array.from(this.#b)}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchMutation)(b,a))}findAll(a={}){return this.getAll().filter(b=>(0,c.matchMutation)(a,b))}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}resumePausedMutations(){let a=this.getAll().filter(a=>a.state.isPaused);return e.notifyManager.batch(()=>Promise.all(a.map(a=>a.continue().catch(c.noop))))}};function k(a){return a.options.scope?.id}var l=a.i(99745),m=a.i(12552);function n(a){return{onFetch:(b,d)=>{let e=b.options,f=b.fetchOptions?.meta?.fetchMore?.direction,g=b.state.data?.pages||[],h=b.state.data?.pageParams||[],i={pages:[],pageParams:[]},j=0,k=async()=>{let d=!1,k=(0,c.ensureQueryFn)(b.options,b.fetchOptions),l=async(a,e,f)=>{let g;if(d)return Promise.reject();if(null==e&&a.pages.length)return Promise.resolve(a);let h=(g={client:b.client,queryKey:b.queryKey,pageParam:e,direction:f?"backward":"forward",meta:b.options.meta},(0,c.addConsumeAwareSignal)(g,()=>b.signal,()=>d=!0),g),i=await k(h),{maxPages:j}=b.options,l=f?c.addToStart:c.addToEnd;return{pages:l(a.pages,i,j),pageParams:l(a.pageParams,e,j)}};if(f&&g.length){let a="backward"===f,b={pages:g,pageParams:h},c=(a?function(a,{pages:b,pageParams:c}){return b.length>0?a.getPreviousPageParam?.(b[0],b,c[0],c):void 0}:o)(e,b);i=await l(b,c,a)}else{let b=a??g.length;do{let a=0===j?h[0]??e.initialPageParam:o(e,i);if(j>0&&null==a)break;i=await l(i,a),j++}while(j<b)}return i};b.options.persister?b.fetchFn=()=>b.options.persister?.(k,{client:b.client,queryKey:b.queryKey,meta:b.options.meta,signal:b.signal},d):b.fetchFn=k}}}function o(a,{pages:b,pageParams:c}){let d=b.length-1;return b.length>0?a.getNextPageParam(b[d],b,c[d],c):void 0}var p=class{#e;#f;#g;#h;#i;#j;#k;#l;constructor(a={}){this.#e=a.queryCache||new g,this.#f=a.mutationCache||new j,this.#g=a.defaultOptions||{},this.#h=new Map,this.#i=new Map,this.#j=0}mount(){this.#j++,1===this.#j&&(this.#k=l.focusManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#l=m.onlineManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#j--,0===this.#j&&(this.#k?.(),this.#k=void 0,this.#l?.(),this.#l=void 0)}isFetching(a){return this.#e.findAll({...a,fetchStatus:"fetching"}).length}isMutating(a){return this.#f.findAll({...a,status:"pending"}).length}getQueryData(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state.data}ensureQueryData(a){let b=this.defaultQueryOptions(a),d=this.#e.build(this,b),e=d.state.data;return void 0===e?this.fetchQuery(a):(a.revalidateIfStale&&d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))&&this.prefetchQuery(b),Promise.resolve(e))}getQueriesData(a){return this.#e.findAll(a).map(({queryKey:a,state:b})=>[a,b.data])}setQueryData(a,b,d){let e=this.defaultQueryOptions({queryKey:a}),f=this.#e.get(e.queryHash),g=f?.state.data,h=(0,c.functionalUpdate)(b,g);if(void 0!==h)return this.#e.build(this,e).setData(h,{...d,manual:!0})}setQueriesData(a,b,c){return e.notifyManager.batch(()=>this.#e.findAll(a).map(({queryKey:a})=>[a,this.setQueryData(a,b,c)]))}getQueryState(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state}removeQueries(a){let b=this.#e;e.notifyManager.batch(()=>{b.findAll(a).forEach(a=>{b.remove(a)})})}resetQueries(a,b){let c=this.#e;return e.notifyManager.batch(()=>(c.findAll(a).forEach(a=>{a.reset()}),this.refetchQueries({type:"active",...a},b)))}cancelQueries(a,b={}){let d={revert:!0,...b};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).map(a=>a.cancel(d)))).then(c.noop).catch(c.noop)}invalidateQueries(a,b={}){return e.notifyManager.batch(()=>(this.#e.findAll(a).forEach(a=>{a.invalidate()}),a?.refetchType==="none")?Promise.resolve():this.refetchQueries({...a,type:a?.refetchType??a?.type??"active"},b))}refetchQueries(a,b={}){let d={...b,cancelRefetch:b.cancelRefetch??!0};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let b=a.fetch(void 0,d);return d.throwOnError||(b=b.catch(c.noop)),"paused"===a.state.fetchStatus?Promise.resolve():b}))).then(c.noop)}fetchQuery(a){let b=this.defaultQueryOptions(a);void 0===b.retry&&(b.retry=!1);let d=this.#e.build(this,b);return d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))?d.fetch(b):Promise.resolve(d.state.data)}prefetchQuery(a){return this.fetchQuery(a).then(c.noop).catch(c.noop)}fetchInfiniteQuery(a){return a.behavior=n(a.pages),this.fetchQuery(a)}prefetchInfiniteQuery(a){return this.fetchInfiniteQuery(a).then(c.noop).catch(c.noop)}ensureInfiniteQueryData(a){return a.behavior=n(a.pages),this.ensureQueryData(a)}resumePausedMutations(){return m.onlineManager.isOnline()?this.#f.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#f}getDefaultOptions(){return this.#g}setDefaultOptions(a){this.#g=a}setQueryDefaults(a,b){this.#h.set((0,c.hashKey)(a),{queryKey:a,defaultOptions:b})}getQueryDefaults(a){let b=[...this.#h.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.queryKey)&&Object.assign(d,b.defaultOptions)}),d}setMutationDefaults(a,b){this.#i.set((0,c.hashKey)(a),{mutationKey:a,defaultOptions:b})}getMutationDefaults(a){let b=[...this.#i.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.mutationKey)&&Object.assign(d,b.defaultOptions)}),d}defaultQueryOptions(a){if(a._defaulted)return a;let b={...this.#g.queries,...this.getQueryDefaults(a.queryKey),...a,_defaulted:!0};return b.queryHash||(b.queryHash=(0,c.hashQueryKeyByOptions)(b.queryKey,b)),void 0===b.refetchOnReconnect&&(b.refetchOnReconnect="always"!==b.networkMode),void 0===b.throwOnError&&(b.throwOnError=!!b.suspense),!b.networkMode&&b.persister&&(b.networkMode="offlineFirst"),b.queryFn===c.skipToken&&(b.enabled=!1),b}defaultMutationOptions(a){return a?._defaulted?a:{...this.#g.mutations,...a?.mutationKey&&this.getMutationDefaults(a.mutationKey),...a,_defaulted:!0}}clear(){this.#e.clear(),this.#f.clear()}},q=a.i(37927),r=a.i(72131),s=a.i(13902),t=a.i(54614);function u(){let{toasts:a}=(0,t.useToast)(),[c,d]=(0,r.useState)(!1);return((0,r.useEffect)(()=>{d(!0)},[]),c)?(0,b.jsx)("div",{className:"toast toast-bottom toast-end z-50 p-4 gap-2",children:a.map(a=>{let c="alert-info";return"success"===a.type?c="alert-success":"warning"===a.type||"warning"===a.variant?c="alert-warning":("error"===a.type||"destructive"===a.variant)&&(c="alert-error"),(0,b.jsxs)("div",{className:`alert ${c} shadow-lg max-w-md w-auto flex-col items-start gap-1 p-3 text-sm animate-in fade-in slide-in-from-bottom-2 duration-300`,children:[(0,b.jsxs)("div",{className:"w-full",children:[a.title&&(0,b.jsx)("h3",{className:"font-bold",children:a.title}),a.description&&(0,b.jsx)("div",{className:"opacity-90 break-words",children:a.description})]}),a.action&&(0,b.jsx)("div",{className:"mt-2 w-full",children:a.action})]},a.id)})}):null}var v=a.i(50944),w=a.i(65975),x=a.i(68114),y=a.i(96415);function z(a,b){return new Date(b.lastOpenedAt||0).getTime()-new Date(a.lastOpenedAt||0).getTime()}function A(){let a=(0,v.useRouter)(),{data:c}=(0,w.useRepositories)(),[d,e]=(0,r.useState)(!1),[f,g]=(0,r.useState)(""),[h,i]=(0,r.useState)(0),j=(0,r.useRef)(null),k=(0,r.useMemo)(()=>(c||[]).filter(a=>!!a.lastOpenedAt).sort(z).slice(0,5),[c]),l=(0,r.useMemo)(()=>{let a=f.trim().toLowerCase();return a?k.filter(b=>{let c=(0,x.getRepositoryDisplayName)(b).toLowerCase(),d=b.path.toLowerCase();return c.includes(a)||d.includes(a)}):k},[f,k]),m=(0,r.useCallback)(()=>{e(!1),g(""),i(0)},[]),n=0===l.length?-1:Math.min(h,l.length-1),o=(0,r.useCallback)(b=>{m(),a.push(`/git?path=${encodeURIComponent(b)}`)},[m,a]);return((0,r.useEffect)(()=>{let a=a=>{(a.metaKey||a.ctrlKey)&&"k"===a.key.toLowerCase()&&(a.preventDefault(),e(!0))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[]),(0,y.useEscapeDismiss)(d,m),(0,r.useEffect)(()=>{d&&requestAnimationFrame(()=>j.current?.focus())},[d]),d)?(0,b.jsx)("div",{className:"fixed inset-0 z-50 bg-black/40 px-4 py-16",onMouseDown:m,role:"dialog","aria-modal":"true","aria-label":"Command palette",children:(0,b.jsxs)("div",{className:"mx-auto w-full max-w-2xl overflow-hidden rounded-xl border border-base-300 bg-base-100 shadow-2xl",onMouseDown:a=>a.stopPropagation(),children:[(0,b.jsx)("div",{className:"border-b border-base-300 p-3",children:(0,b.jsx)("input",{ref:j,type:"text",value:f,onChange:a=>{g(a.target.value),i(0)},onKeyDown:a=>{if("ArrowDown"===a.key){a.preventDefault(),l.length>0&&i(a=>(a+1)%l.length);return}if("ArrowUp"===a.key){a.preventDefault(),l.length>0&&i(a=>a<=0?l.length-1:a-1);return}if("Enter"===a.key){a.preventDefault();let b=n>=0?l[n]:null;b&&o(b.path)}},placeholder:"Type a command...",className:"input input-ghost w-full text-base focus:outline-none"})}),(0,b.jsxs)("div",{className:"max-h-80 overflow-y-auto py-2",children:[(0,b.jsx)("div",{className:"px-4 pb-2 text-xs font-semibold uppercase tracking-wider opacity-60",children:"Recent repositories"}),0===k.length&&(0,b.jsx)("div",{className:"px-4 py-6 text-sm opacity-60",children:"No recently opened repositories yet."}),k.length>0&&0===l.length&&(0,b.jsx)("div",{className:"px-4 py-6 text-sm opacity-60",children:"No matching repositories."}),l.map((a,c)=>{let d=(0,x.getRepositoryDisplayName)(a);return(0,b.jsxs)("button",{type:"button",className:(0,x.cn)("flex w-full items-center justify-between gap-4 px-4 py-3 text-left",n===c?"bg-base-200":"hover:bg-base-200/70"),onMouseEnter:()=>i(c),onClick:()=>o(a.path),children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-sm font-medium",children:d}),(0,b.jsx)("div",{className:"truncate text-xs opacity-65",children:a.path})]}),(0,b.jsx)("span",{className:"text-xs opacity-60",children:"Open"})]},a.path)})]}),(0,b.jsx)("div",{className:"border-t border-base-300 px-4 py-2 text-xs opacity-60",children:"Use ↑ ↓ to navigate, Enter to open, Esc to close."})]})}):null}function B({children:a}){let[c]=(0,r.useState)(()=>new p);return(0,b.jsx)(q.QueryClientProvider,{client:c,children:(0,b.jsxs)(s.ThemeProvider,{attribute:"data-theme",defaultTheme:"system",enableSystem:!0,children:[a,(0,b.jsx)(A,{}),(0,b.jsx)(u,{})]})})}a.s(["Providers",()=>B],43518)}];
|
|
1
|
+
module.exports=[43518,a=>{"use strict";var b=a.i(87924),c=a.i(42871),d=a.i(76644),e=a.i(18544),f=a.i(33791),g=class extends f.Subscribable{constructor(a={}){super(),this.config=a,this.#a=new Map}#a;build(a,b,e){let f=b.queryKey,g=b.queryHash??(0,c.hashQueryKeyByOptions)(f,b),h=this.get(g);return h||(h=new d.Query({client:a,queryKey:f,queryHash:g,options:a.defaultQueryOptions(b),state:e,defaultOptions:a.getQueryDefaults(f)}),this.add(h)),h}add(a){this.#a.has(a.queryHash)||(this.#a.set(a.queryHash,a),this.notify({type:"added",query:a}))}remove(a){let b=this.#a.get(a.queryHash);b&&(a.destroy(),b===a&&this.#a.delete(a.queryHash),this.notify({type:"removed",query:a}))}clear(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{this.remove(a)})})}get(a){return this.#a.get(a)}getAll(){return[...this.#a.values()]}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchQuery)(b,a))}findAll(a={}){let b=this.getAll();return Object.keys(a).length>0?b.filter(b=>(0,c.matchQuery)(a,b)):b}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}onFocus(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onFocus()})})}onOnline(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onOnline()})})}},h=a.i(12794),i=f,j=class extends i.Subscribable{constructor(a={}){super(),this.config=a,this.#b=new Set,this.#c=new Map,this.#d=0}#b;#c;#d;build(a,b,c){let d=new h.Mutation({client:a,mutationCache:this,mutationId:++this.#d,options:a.defaultMutationOptions(b),state:c});return this.add(d),d}add(a){this.#b.add(a);let b=k(a);if("string"==typeof b){let c=this.#c.get(b);c?c.push(a):this.#c.set(b,[a])}this.notify({type:"added",mutation:a})}remove(a){if(this.#b.delete(a)){let b=k(a);if("string"==typeof b){let c=this.#c.get(b);if(c)if(c.length>1){let b=c.indexOf(a);-1!==b&&c.splice(b,1)}else c[0]===a&&this.#c.delete(b)}}this.notify({type:"removed",mutation:a})}canRun(a){let b=k(a);if("string"!=typeof b)return!0;{let c=this.#c.get(b),d=c?.find(a=>"pending"===a.state.status);return!d||d===a}}runNext(a){let b=k(a);if("string"!=typeof b)return Promise.resolve();{let c=this.#c.get(b)?.find(b=>b!==a&&b.state.isPaused);return c?.continue()??Promise.resolve()}}clear(){e.notifyManager.batch(()=>{this.#b.forEach(a=>{this.notify({type:"removed",mutation:a})}),this.#b.clear(),this.#c.clear()})}getAll(){return Array.from(this.#b)}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchMutation)(b,a))}findAll(a={}){return this.getAll().filter(b=>(0,c.matchMutation)(a,b))}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}resumePausedMutations(){let a=this.getAll().filter(a=>a.state.isPaused);return e.notifyManager.batch(()=>Promise.all(a.map(a=>a.continue().catch(c.noop))))}};function k(a){return a.options.scope?.id}var l=a.i(99745),m=a.i(12552);function n(a){return{onFetch:(b,d)=>{let e=b.options,f=b.fetchOptions?.meta?.fetchMore?.direction,g=b.state.data?.pages||[],h=b.state.data?.pageParams||[],i={pages:[],pageParams:[]},j=0,k=async()=>{let d=!1,k=(0,c.ensureQueryFn)(b.options,b.fetchOptions),l=async(a,e,f)=>{let g;if(d)return Promise.reject();if(null==e&&a.pages.length)return Promise.resolve(a);let h=(g={client:b.client,queryKey:b.queryKey,pageParam:e,direction:f?"backward":"forward",meta:b.options.meta},(0,c.addConsumeAwareSignal)(g,()=>b.signal,()=>d=!0),g),i=await k(h),{maxPages:j}=b.options,l=f?c.addToStart:c.addToEnd;return{pages:l(a.pages,i,j),pageParams:l(a.pageParams,e,j)}};if(f&&g.length){let a="backward"===f,b={pages:g,pageParams:h},c=(a?function(a,{pages:b,pageParams:c}){return b.length>0?a.getPreviousPageParam?.(b[0],b,c[0],c):void 0}:o)(e,b);i=await l(b,c,a)}else{let b=a??g.length;do{let a=0===j?h[0]??e.initialPageParam:o(e,i);if(j>0&&null==a)break;i=await l(i,a),j++}while(j<b)}return i};b.options.persister?b.fetchFn=()=>b.options.persister?.(k,{client:b.client,queryKey:b.queryKey,meta:b.options.meta,signal:b.signal},d):b.fetchFn=k}}}function o(a,{pages:b,pageParams:c}){let d=b.length-1;return b.length>0?a.getNextPageParam(b[d],b,c[d],c):void 0}var p=class{#e;#f;#g;#h;#i;#j;#k;#l;constructor(a={}){this.#e=a.queryCache||new g,this.#f=a.mutationCache||new j,this.#g=a.defaultOptions||{},this.#h=new Map,this.#i=new Map,this.#j=0}mount(){this.#j++,1===this.#j&&(this.#k=l.focusManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#l=m.onlineManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#j--,0===this.#j&&(this.#k?.(),this.#k=void 0,this.#l?.(),this.#l=void 0)}isFetching(a){return this.#e.findAll({...a,fetchStatus:"fetching"}).length}isMutating(a){return this.#f.findAll({...a,status:"pending"}).length}getQueryData(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state.data}ensureQueryData(a){let b=this.defaultQueryOptions(a),d=this.#e.build(this,b),e=d.state.data;return void 0===e?this.fetchQuery(a):(a.revalidateIfStale&&d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))&&this.prefetchQuery(b),Promise.resolve(e))}getQueriesData(a){return this.#e.findAll(a).map(({queryKey:a,state:b})=>[a,b.data])}setQueryData(a,b,d){let e=this.defaultQueryOptions({queryKey:a}),f=this.#e.get(e.queryHash),g=f?.state.data,h=(0,c.functionalUpdate)(b,g);if(void 0!==h)return this.#e.build(this,e).setData(h,{...d,manual:!0})}setQueriesData(a,b,c){return e.notifyManager.batch(()=>this.#e.findAll(a).map(({queryKey:a})=>[a,this.setQueryData(a,b,c)]))}getQueryState(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state}removeQueries(a){let b=this.#e;e.notifyManager.batch(()=>{b.findAll(a).forEach(a=>{b.remove(a)})})}resetQueries(a,b){let c=this.#e;return e.notifyManager.batch(()=>(c.findAll(a).forEach(a=>{a.reset()}),this.refetchQueries({type:"active",...a},b)))}cancelQueries(a,b={}){let d={revert:!0,...b};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).map(a=>a.cancel(d)))).then(c.noop).catch(c.noop)}invalidateQueries(a,b={}){return e.notifyManager.batch(()=>(this.#e.findAll(a).forEach(a=>{a.invalidate()}),a?.refetchType==="none")?Promise.resolve():this.refetchQueries({...a,type:a?.refetchType??a?.type??"active"},b))}refetchQueries(a,b={}){let d={...b,cancelRefetch:b.cancelRefetch??!0};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let b=a.fetch(void 0,d);return d.throwOnError||(b=b.catch(c.noop)),"paused"===a.state.fetchStatus?Promise.resolve():b}))).then(c.noop)}fetchQuery(a){let b=this.defaultQueryOptions(a);void 0===b.retry&&(b.retry=!1);let d=this.#e.build(this,b);return d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))?d.fetch(b):Promise.resolve(d.state.data)}prefetchQuery(a){return this.fetchQuery(a).then(c.noop).catch(c.noop)}fetchInfiniteQuery(a){return a.behavior=n(a.pages),this.fetchQuery(a)}prefetchInfiniteQuery(a){return this.fetchInfiniteQuery(a).then(c.noop).catch(c.noop)}ensureInfiniteQueryData(a){return a.behavior=n(a.pages),this.ensureQueryData(a)}resumePausedMutations(){return m.onlineManager.isOnline()?this.#f.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#f}getDefaultOptions(){return this.#g}setDefaultOptions(a){this.#g=a}setQueryDefaults(a,b){this.#h.set((0,c.hashKey)(a),{queryKey:a,defaultOptions:b})}getQueryDefaults(a){let b=[...this.#h.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.queryKey)&&Object.assign(d,b.defaultOptions)}),d}setMutationDefaults(a,b){this.#i.set((0,c.hashKey)(a),{mutationKey:a,defaultOptions:b})}getMutationDefaults(a){let b=[...this.#i.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.mutationKey)&&Object.assign(d,b.defaultOptions)}),d}defaultQueryOptions(a){if(a._defaulted)return a;let b={...this.#g.queries,...this.getQueryDefaults(a.queryKey),...a,_defaulted:!0};return b.queryHash||(b.queryHash=(0,c.hashQueryKeyByOptions)(b.queryKey,b)),void 0===b.refetchOnReconnect&&(b.refetchOnReconnect="always"!==b.networkMode),void 0===b.throwOnError&&(b.throwOnError=!!b.suspense),!b.networkMode&&b.persister&&(b.networkMode="offlineFirst"),b.queryFn===c.skipToken&&(b.enabled=!1),b}defaultMutationOptions(a){return a?._defaulted?a:{...this.#g.mutations,...a?.mutationKey&&this.getMutationDefaults(a.mutationKey),...a,_defaulted:!0}}clear(){this.#e.clear(),this.#f.clear()}},q=a.i(37927),r=a.i(72131),s=a.i(13902),t=a.i(54614);function u(){let{toasts:a}=(0,t.useToast)(),[c,d]=(0,r.useState)(!1);return((0,r.useEffect)(()=>{d(!0)},[]),c)?(0,b.jsx)("div",{className:"toast toast-bottom toast-end pointer-events-none z-50 p-4 gap-2",children:a.map(a=>{let c="alert-info";return"success"===a.type?c="alert-success":"warning"===a.type||"warning"===a.variant?c="alert-warning":("error"===a.type||"destructive"===a.variant)&&(c="alert-error"),(0,b.jsxs)("div",{className:`alert ${c} pointer-events-auto shadow-lg max-w-md w-auto flex-col items-start gap-1 p-3 text-sm animate-in fade-in slide-in-from-bottom-2 duration-300`,children:[(0,b.jsxs)("div",{className:"w-full",children:[a.title&&(0,b.jsx)("h3",{className:"font-bold",children:a.title}),a.description&&(0,b.jsx)("div",{className:"opacity-90 break-words",children:a.description})]}),a.action&&(0,b.jsx)("div",{className:"mt-2 w-full",children:a.action})]},a.id)})}):null}var v=a.i(50944),w=a.i(65975),x=a.i(68114),y=a.i(96415);function z(a,b){return new Date(b.lastOpenedAt||0).getTime()-new Date(a.lastOpenedAt||0).getTime()}function A(){let a=(0,v.useRouter)(),{data:c}=(0,w.useRepositories)(),[d,e]=(0,r.useState)(!1),[f,g]=(0,r.useState)(""),[h,i]=(0,r.useState)(0),j=(0,r.useRef)(null),k=(0,r.useMemo)(()=>(c||[]).filter(a=>!!a.lastOpenedAt).sort(z).slice(0,5),[c]),l=(0,r.useMemo)(()=>{let a=f.trim().toLowerCase();return a?k.filter(b=>{let c=(0,x.getRepositoryDisplayName)(b).toLowerCase(),d=b.path.toLowerCase();return c.includes(a)||d.includes(a)}):k},[f,k]),m=(0,r.useCallback)(()=>{e(!1),g(""),i(0)},[]),n=0===l.length?-1:Math.min(h,l.length-1),o=(0,r.useCallback)(b=>{m(),a.push(`/git?path=${encodeURIComponent(b)}`)},[m,a]);return((0,r.useEffect)(()=>{let a=a=>{(a.metaKey||a.ctrlKey)&&"k"===a.key.toLowerCase()&&(a.preventDefault(),e(!0))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[]),(0,y.useEscapeDismiss)(d,m),(0,r.useEffect)(()=>{d&&requestAnimationFrame(()=>j.current?.focus())},[d]),d)?(0,b.jsx)("div",{className:"fixed inset-0 z-50 bg-black/40 px-4 py-16",onMouseDown:m,role:"dialog","aria-modal":"true","aria-label":"Command palette",children:(0,b.jsxs)("div",{className:"mx-auto w-full max-w-2xl overflow-hidden rounded-xl border border-base-300 bg-base-100 shadow-2xl",onMouseDown:a=>a.stopPropagation(),children:[(0,b.jsx)("div",{className:"border-b border-base-300 p-3",children:(0,b.jsx)("input",{ref:j,type:"text",value:f,onChange:a=>{g(a.target.value),i(0)},onKeyDown:a=>{if("ArrowDown"===a.key){a.preventDefault(),l.length>0&&i(a=>(a+1)%l.length);return}if("ArrowUp"===a.key){a.preventDefault(),l.length>0&&i(a=>a<=0?l.length-1:a-1);return}if("Enter"===a.key){a.preventDefault();let b=n>=0?l[n]:null;b&&o(b.path)}},placeholder:"Type a command...",className:"input input-ghost w-full text-base focus:outline-none"})}),(0,b.jsxs)("div",{className:"max-h-80 overflow-y-auto py-2",children:[(0,b.jsx)("div",{className:"px-4 pb-2 text-xs font-semibold uppercase tracking-wider opacity-60",children:"Recent repositories"}),0===k.length&&(0,b.jsx)("div",{className:"px-4 py-6 text-sm opacity-60",children:"No recently opened repositories yet."}),k.length>0&&0===l.length&&(0,b.jsx)("div",{className:"px-4 py-6 text-sm opacity-60",children:"No matching repositories."}),l.map((a,c)=>{let d=(0,x.getRepositoryDisplayName)(a);return(0,b.jsxs)("button",{type:"button",className:(0,x.cn)("flex w-full items-center justify-between gap-4 px-4 py-3 text-left",n===c?"bg-base-200":"hover:bg-base-200/70"),onMouseEnter:()=>i(c),onClick:()=>o(a.path),children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-sm font-medium",children:d}),(0,b.jsx)("div",{className:"truncate text-xs opacity-65",children:a.path})]}),(0,b.jsx)("span",{className:"text-xs opacity-60",children:"Open"})]},a.path)})]}),(0,b.jsx)("div",{className:"border-t border-base-300 px-4 py-2 text-xs opacity-60",children:"Use ↑ ↓ to navigate, Enter to open, Esc to close."})]})}):null}function B({children:a}){let[c]=(0,r.useState)(()=>new p);return(0,b.jsx)(q.QueryClientProvider,{client:c,children:(0,b.jsxs)(s.ThemeProvider,{attribute:"data-theme",defaultTheme:"system",enableSystem:!0,children:[a,(0,b.jsx)(A,{}),(0,b.jsx)(u,{})]})})}a.s(["Providers",()=>B],43518)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_app_providers_tsx_2ae5be81._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/toaster.tsx","../../../../src/components/command-palette.tsx","../../../../node_modules/%40tanstack/query-core/build/modern/queryClient.js","../../../../src/app/providers.tsx","../../../../node_modules/%40tanstack/query-core/build/modern/mutationCache.js","../../../../node_modules/%40tanstack/query-core/build/modern/queryCache.js","../../../../node_modules/%40tanstack/query-core/build/modern/infiniteQueryBehavior.js"],"sourcesContent":["'use client';\n\nimport { useToast } from '@/hooks/use-toast';\nimport { useEffect, useState } from 'react';\n\nexport function Toaster() {\n const { toasts } = useToast();\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n\n return (\n <div className=\"toast toast-bottom toast-end z-50 p-4 gap-2\">\n {toasts.map((toast) => {\n let alertClass = 'alert-info';\n if (toast.type === 'success') alertClass = 'alert-success';\n else if (toast.type === 'warning' || toast.variant === 'warning') alertClass = 'alert-warning';\n else if (toast.type === 'error' || toast.variant === 'destructive') alertClass = 'alert-error';\n\n return (\n <div key={toast.id} className={`alert ${alertClass} shadow-lg max-w-md w-auto flex-col items-start gap-1 p-3 text-sm animate-in fade-in slide-in-from-bottom-2 duration-300`}>\n <div className=\"w-full\">\n {toast.title && <h3 className=\"font-bold\">{toast.title}</h3>}\n {toast.description && <div className=\"opacity-90 break-words\">{toast.description}</div>}\n </div>\n {toast.action && <div className=\"mt-2 w-full\">{toast.action}</div>}\n </div>\n )\n })}\n </div>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { Repository } from '@/lib/types';\nimport { useRepositories } from '@/hooks/use-git';\nimport { cn, getRepositoryDisplayName } from '@/lib/utils';\nimport { useEscapeDismiss } from '@/hooks/use-escape-dismiss';\n\nfunction sortByLastOpenedDesc(a: Repository, b: Repository) {\n return new Date(b.lastOpenedAt || 0).getTime() - new Date(a.lastOpenedAt || 0).getTime();\n}\n\nexport function CommandPalette() {\n const router = useRouter();\n const { data: repositories } = useRepositories();\n const [isOpen, setIsOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const recentRepositories = useMemo(\n () =>\n (repositories || [])\n .filter((repo) => Boolean(repo.lastOpenedAt))\n .sort(sortByLastOpenedDesc)\n .slice(0, 5),\n [repositories]\n );\n\n const filteredRepositories = useMemo(() => {\n const keyword = query.trim().toLowerCase();\n if (!keyword) return recentRepositories;\n\n return recentRepositories.filter((repo) => {\n const name = getRepositoryDisplayName(repo).toLowerCase();\n const repoPath = repo.path.toLowerCase();\n return name.includes(keyword) || repoPath.includes(keyword);\n });\n }, [query, recentRepositories]);\n\n const closePalette = useCallback(() => {\n setIsOpen(false);\n setQuery('');\n setSelectedIndex(0);\n }, []);\n\n const activeIndex =\n filteredRepositories.length === 0\n ? -1\n : Math.min(selectedIndex, filteredRepositories.length - 1);\n\n const openRepository = useCallback(\n (repoPath: string) => {\n closePalette();\n router.push(`/git?path=${encodeURIComponent(repoPath)}`);\n },\n [closePalette, router]\n );\n\n useEffect(() => {\n const onGlobalKeyDown = (event: KeyboardEvent) => {\n const isCommandOpenShortcut = (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k';\n if (isCommandOpenShortcut) {\n event.preventDefault();\n setIsOpen(true);\n }\n };\n\n window.addEventListener('keydown', onGlobalKeyDown);\n return () => window.removeEventListener('keydown', onGlobalKeyDown);\n }, []);\n\n useEscapeDismiss(isOpen, closePalette);\n\n useEffect(() => {\n if (!isOpen) return;\n requestAnimationFrame(() => inputRef.current?.focus());\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n return (\n <div\n className=\"fixed inset-0 z-50 bg-black/40 px-4 py-16\"\n onMouseDown={closePalette}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n >\n <div\n className=\"mx-auto w-full max-w-2xl overflow-hidden rounded-xl border border-base-300 bg-base-100 shadow-2xl\"\n onMouseDown={(event) => event.stopPropagation()}\n >\n <div className=\"border-b border-base-300 p-3\">\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(event) => {\n setQuery(event.target.value);\n setSelectedIndex(0);\n }}\n onKeyDown={(event) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (filteredRepositories.length > 0) {\n setSelectedIndex((current) => (current + 1) % filteredRepositories.length);\n }\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (filteredRepositories.length > 0) {\n setSelectedIndex((current) =>\n current <= 0 ? filteredRepositories.length - 1 : current - 1\n );\n }\n return;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n const selectedRepo = activeIndex >= 0 ? filteredRepositories[activeIndex] : null;\n if (selectedRepo) {\n openRepository(selectedRepo.path);\n }\n }\n }}\n placeholder=\"Type a command...\"\n className=\"input input-ghost w-full text-base focus:outline-none\"\n />\n </div>\n\n <div className=\"max-h-80 overflow-y-auto py-2\">\n <div className=\"px-4 pb-2 text-xs font-semibold uppercase tracking-wider opacity-60\">\n Recent repositories\n </div>\n\n {recentRepositories.length === 0 && (\n <div className=\"px-4 py-6 text-sm opacity-60\">No recently opened repositories yet.</div>\n )}\n\n {recentRepositories.length > 0 && filteredRepositories.length === 0 && (\n <div className=\"px-4 py-6 text-sm opacity-60\">No matching repositories.</div>\n )}\n\n {filteredRepositories.map((repo, index) => {\n const repoDisplayName = getRepositoryDisplayName(repo);\n return (\n <button\n key={repo.path}\n type=\"button\"\n className={cn(\n 'flex w-full items-center justify-between gap-4 px-4 py-3 text-left',\n activeIndex === index ? 'bg-base-200' : 'hover:bg-base-200/70'\n )}\n onMouseEnter={() => setSelectedIndex(index)}\n onClick={() => openRepository(repo.path)}\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium\">{repoDisplayName}</div>\n <div className=\"truncate text-xs opacity-65\">{repo.path}</div>\n </div>\n <span className=\"text-xs opacity-60\">Open</span>\n </button>\n );\n })}\n </div>\n\n <div className=\"border-t border-base-300 px-4 py-2 text-xs opacity-60\">\n Use ↑ ↓ to navigate, Enter to open, Esc to close.\n </div>\n </div>\n </div>\n );\n}\n","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1) return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0) return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(\n {\n type: \"active\",\n ...filters\n },\n options\n );\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n },\n options\n );\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","'use client';\n\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useState } from 'react';\nimport { ThemeProvider } from 'next-themes';\nimport { Toaster } from '@/components/toaster';\nimport { CommandPalette } from '@/components/command-palette';\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n const [queryClient] = useState(() => new QueryClient());\n\n return (\n <QueryClientProvider client={queryClient}>\n <ThemeProvider attribute=\"data-theme\" defaultTheme=\"system\" enableSystem>\n {children}\n <CommandPalette />\n <Toaster />\n </ThemeProvider>\n </QueryClientProvider>\n );\n}\n","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n client,\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id;\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/infiniteQueryBehavior.ts\nimport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n addConsumeAwareSignal(\n object,\n () => context.signal,\n () => cancelled = true\n );\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map"],"names":[],"mappings":"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","ignoreList":[2,4,5,6]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/toaster.tsx","../../../../src/components/command-palette.tsx","../../../../node_modules/%40tanstack/query-core/build/modern/queryClient.js","../../../../src/app/providers.tsx","../../../../node_modules/%40tanstack/query-core/build/modern/mutationCache.js","../../../../node_modules/%40tanstack/query-core/build/modern/queryCache.js","../../../../node_modules/%40tanstack/query-core/build/modern/infiniteQueryBehavior.js"],"sourcesContent":["'use client';\n\nimport { useToast } from '@/hooks/use-toast';\nimport { useEffect, useState } from 'react';\n\nexport function Toaster() {\n const { toasts } = useToast();\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n\n return (\n <div className=\"toast toast-bottom toast-end pointer-events-none z-50 p-4 gap-2\">\n {toasts.map((toast) => {\n let alertClass = 'alert-info';\n if (toast.type === 'success') alertClass = 'alert-success';\n else if (toast.type === 'warning' || toast.variant === 'warning') alertClass = 'alert-warning';\n else if (toast.type === 'error' || toast.variant === 'destructive') alertClass = 'alert-error';\n\n return (\n <div key={toast.id} className={`alert ${alertClass} pointer-events-auto shadow-lg max-w-md w-auto flex-col items-start gap-1 p-3 text-sm animate-in fade-in slide-in-from-bottom-2 duration-300`}>\n <div className=\"w-full\">\n {toast.title && <h3 className=\"font-bold\">{toast.title}</h3>}\n {toast.description && <div className=\"opacity-90 break-words\">{toast.description}</div>}\n </div>\n {toast.action && <div className=\"mt-2 w-full\">{toast.action}</div>}\n </div>\n )\n })}\n </div>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { Repository } from '@/lib/types';\nimport { useRepositories } from '@/hooks/use-git';\nimport { cn, getRepositoryDisplayName } from '@/lib/utils';\nimport { useEscapeDismiss } from '@/hooks/use-escape-dismiss';\n\nfunction sortByLastOpenedDesc(a: Repository, b: Repository) {\n return new Date(b.lastOpenedAt || 0).getTime() - new Date(a.lastOpenedAt || 0).getTime();\n}\n\nexport function CommandPalette() {\n const router = useRouter();\n const { data: repositories } = useRepositories();\n const [isOpen, setIsOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const recentRepositories = useMemo(\n () =>\n (repositories || [])\n .filter((repo) => Boolean(repo.lastOpenedAt))\n .sort(sortByLastOpenedDesc)\n .slice(0, 5),\n [repositories]\n );\n\n const filteredRepositories = useMemo(() => {\n const keyword = query.trim().toLowerCase();\n if (!keyword) return recentRepositories;\n\n return recentRepositories.filter((repo) => {\n const name = getRepositoryDisplayName(repo).toLowerCase();\n const repoPath = repo.path.toLowerCase();\n return name.includes(keyword) || repoPath.includes(keyword);\n });\n }, [query, recentRepositories]);\n\n const closePalette = useCallback(() => {\n setIsOpen(false);\n setQuery('');\n setSelectedIndex(0);\n }, []);\n\n const activeIndex =\n filteredRepositories.length === 0\n ? -1\n : Math.min(selectedIndex, filteredRepositories.length - 1);\n\n const openRepository = useCallback(\n (repoPath: string) => {\n closePalette();\n router.push(`/git?path=${encodeURIComponent(repoPath)}`);\n },\n [closePalette, router]\n );\n\n useEffect(() => {\n const onGlobalKeyDown = (event: KeyboardEvent) => {\n const isCommandOpenShortcut = (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k';\n if (isCommandOpenShortcut) {\n event.preventDefault();\n setIsOpen(true);\n }\n };\n\n window.addEventListener('keydown', onGlobalKeyDown);\n return () => window.removeEventListener('keydown', onGlobalKeyDown);\n }, []);\n\n useEscapeDismiss(isOpen, closePalette);\n\n useEffect(() => {\n if (!isOpen) return;\n requestAnimationFrame(() => inputRef.current?.focus());\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n return (\n <div\n className=\"fixed inset-0 z-50 bg-black/40 px-4 py-16\"\n onMouseDown={closePalette}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n >\n <div\n className=\"mx-auto w-full max-w-2xl overflow-hidden rounded-xl border border-base-300 bg-base-100 shadow-2xl\"\n onMouseDown={(event) => event.stopPropagation()}\n >\n <div className=\"border-b border-base-300 p-3\">\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(event) => {\n setQuery(event.target.value);\n setSelectedIndex(0);\n }}\n onKeyDown={(event) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (filteredRepositories.length > 0) {\n setSelectedIndex((current) => (current + 1) % filteredRepositories.length);\n }\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (filteredRepositories.length > 0) {\n setSelectedIndex((current) =>\n current <= 0 ? filteredRepositories.length - 1 : current - 1\n );\n }\n return;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n const selectedRepo = activeIndex >= 0 ? filteredRepositories[activeIndex] : null;\n if (selectedRepo) {\n openRepository(selectedRepo.path);\n }\n }\n }}\n placeholder=\"Type a command...\"\n className=\"input input-ghost w-full text-base focus:outline-none\"\n />\n </div>\n\n <div className=\"max-h-80 overflow-y-auto py-2\">\n <div className=\"px-4 pb-2 text-xs font-semibold uppercase tracking-wider opacity-60\">\n Recent repositories\n </div>\n\n {recentRepositories.length === 0 && (\n <div className=\"px-4 py-6 text-sm opacity-60\">No recently opened repositories yet.</div>\n )}\n\n {recentRepositories.length > 0 && filteredRepositories.length === 0 && (\n <div className=\"px-4 py-6 text-sm opacity-60\">No matching repositories.</div>\n )}\n\n {filteredRepositories.map((repo, index) => {\n const repoDisplayName = getRepositoryDisplayName(repo);\n return (\n <button\n key={repo.path}\n type=\"button\"\n className={cn(\n 'flex w-full items-center justify-between gap-4 px-4 py-3 text-left',\n activeIndex === index ? 'bg-base-200' : 'hover:bg-base-200/70'\n )}\n onMouseEnter={() => setSelectedIndex(index)}\n onClick={() => openRepository(repo.path)}\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium\">{repoDisplayName}</div>\n <div className=\"truncate text-xs opacity-65\">{repo.path}</div>\n </div>\n <span className=\"text-xs opacity-60\">Open</span>\n </button>\n );\n })}\n </div>\n\n <div className=\"border-t border-base-300 px-4 py-2 text-xs opacity-60\">\n Use ↑ ↓ to navigate, Enter to open, Esc to close.\n </div>\n </div>\n </div>\n );\n}\n","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1) return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0) return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(\n {\n type: \"active\",\n ...filters\n },\n options\n );\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n },\n options\n );\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","'use client';\n\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useState } from 'react';\nimport { ThemeProvider } from 'next-themes';\nimport { Toaster } from '@/components/toaster';\nimport { CommandPalette } from '@/components/command-palette';\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n const [queryClient] = useState(() => new QueryClient());\n\n return (\n <QueryClientProvider client={queryClient}>\n <ThemeProvider attribute=\"data-theme\" defaultTheme=\"system\" enableSystem>\n {children}\n <CommandPalette />\n <Toaster />\n </ThemeProvider>\n </QueryClientProvider>\n );\n}\n","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n client,\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id;\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/infiniteQueryBehavior.ts\nimport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n addConsumeAwareSignal(\n object,\n () => context.signal,\n () => cancelled = true\n );\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map"],"names":[],"mappings":"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","ignoreList":[2,4,5,6]}
|