@surething/cockpit 1.0.197 → 1.0.199
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-prod/BUILD_ID +1 -1
- package/.next-prod/app-path-routes-manifest.json +11 -8
- package/.next-prod/build-manifest.json +3 -3
- package/.next-prod/diagnostics/build-diagnostics.json +1 -1
- package/.next-prod/prerender-manifest.json +3 -3
- package/.next-prod/react-loadable-manifest.json +85 -32
- package/.next-prod/required-server-files.js +74 -1
- package/.next-prod/required-server-files.json +74 -1
- package/.next-prod/routes-manifest.json +18 -0
- package/.next-prod/server/app/_global-error/page.js +3 -3
- package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
- package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/_global-error.html +1 -1
- package/.next-prod/server/app/_global-error.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found/page.js +2 -2
- package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
- package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/_not-found.html +2 -2
- package/.next-prod/server/app/_not-found.rsc +3 -3
- package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next-prod/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next-prod/server/app/api/bash/route.js +1 -1
- package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/codex/route.js +13 -13
- package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/deepseek/route.js +2 -2
- package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/kimi/route.js +13 -13
- package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/ollama/route.js +50 -36
- package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/route.js +1 -1
- package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/claude-stats/route.js +1 -1
- package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/commands/route.js +1 -1
- package/.next-prod/server/app/api/commands/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/comments/route.js +1 -1
- package/.next-prod/server/app/api/comments/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/columns/route.js +2 -2
- package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/connect/route.js +1 -1
- package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/disconnect/route.js +1 -1
- package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/export/route.js +1 -1
- package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/query/route.js +1 -1
- package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/schemas/route.js +1 -1
- package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/extension/version/route.js +1 -1
- package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/file/route.js +1 -1
- package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/blame/route.js +1 -1
- package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/clipboard/route.js +1 -1
- package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/copy/route.js +1 -1
- package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/delete/route.js +1 -1
- package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/expanded/route.js +1 -1
- package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/index/route.js +1 -1
- package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/init/route.js +1 -1
- package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/paste/route.js +1 -1
- package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/read/route.js +1 -1
- package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/readdir/route.js +1 -1
- package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/recent/route.js +1 -1
- package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/save/route.js +1 -1
- package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/search/route.js +1 -1
- package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/stat/route.js +1 -1
- package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/text/route.js +1 -1
- package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/branch-diff/route.js +1 -1
- package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/branches/route.js +1 -1
- package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/commit-diff/route.js +1 -1
- package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/commits/route.js +1 -1
- package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/diff/route.js +1 -1
- package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/discard/route.js +1 -1
- package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/stage/route.js +1 -1
- package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/status/route.js +1 -1
- package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/unstage/route.js +1 -1
- package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/worktree/route.js +1 -1
- package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/global-state/route.js +1 -1
- package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/load/route.js +1 -1
- package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/save/route.js +1 -1
- package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/shutdown/route.js +1 -1
- package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/definition/route.js +1 -1
- package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/hover/route.js +1 -1
- package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/references/route.js +1 -1
- package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/status/route.js +1 -1
- package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/warmup/route.js +1 -1
- package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/columns/route.js +2 -2
- package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/connect/route.js +1 -1
- package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/disconnect/route.js +1 -1
- package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/export/route.js +1 -1
- package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/query/route.js +1 -1
- package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/schemas/route.js +2 -2
- package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/connect/route.js +1 -1
- package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/disconnect/route.js +1 -1
- package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/query/route.js +1 -1
- package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/schema/route.js +1 -1
- package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/note/route.js +1 -1
- package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/ollama/models/route.js +1 -1
- package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/ollama/start/route.js +1 -1
- package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/open-cursor/route.js +1 -1
- package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/open-vscode/route.js +1 -1
- package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/pick-folder/route.js +1 -1
- package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/pinned-sessions/route.js +1 -1
- package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/project-settings/route.js +1 -1
- package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/project-state/route.js +1 -1
- package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/file/route.js +1 -0
- package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -0
- package/.next-prod/server/app/api/projectGraph/file/route_client-reference-manifest.js +1 -0
- package/.next-prod/server/app/api/projectGraph/file-functions/route.js +1 -0
- package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -0
- package/.next-prod/server/app/api/projectGraph/file-functions/route_client-reference-manifest.js +1 -0
- package/.next-prod/server/app/api/projectGraph/search/route.js +1 -0
- package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -0
- package/.next-prod/server/app/api/projectGraph/search/route_client-reference-manifest.js +1 -0
- package/.next-prod/server/app/api/projects/route.js +1 -1
- package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/command/route.js +1 -1
- package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/connect/route.js +1 -1
- package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/delete/route.js +1 -1
- package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/disconnect/route.js +1 -1
- package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/get/route.js +1 -1
- package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/keys/route.js +1 -1
- package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/set/route.js +1 -1
- package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/[id]/comments/route.js +1 -1
- package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/[id]/replies/route.js +1 -1
- package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/[id]/route.js +1 -1
- package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/identify/route.js +1 -1
- package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/order/route.js +1 -1
- package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/route.js +1 -1
- package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/share-info/route.js +1 -1
- package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/users/route.js +1 -1
- package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/scheduled-tasks/route.js +1 -1
- package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/services/config/route.js +1 -1
- package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/services/scripts/route.js +1 -1
- package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/history/route.js +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/session-by-path/route.js +1 -1
- package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js +1 -1
- package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/projects/route.js +1 -1
- package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/route.js +1 -1
- package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/settings/route.js +1 -1
- package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/skills/[id]/route.js +1 -1
- package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/skills/content/route.js +1 -1
- package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/skills/route.js +1 -1
- package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/aliases/route.js +1 -1
- package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/autocomplete/route.js +1 -1
- package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/bubble-order/route.js +1 -1
- package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/env/route.js +1 -1
- package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/history/route.js +1 -1
- package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/version/route.js +1 -1
- package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
- package/.next-prod/server/app/favicon.ico/route.js +1 -1
- package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next-prod/server/app/manifest.webmanifest/route.js +2 -2
- package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/.next-prod/server/app/page.js +17 -15
- package/.next-prod/server/app/page.js.nft.json +1 -1
- package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/project/page.js +20 -17
- package/.next-prod/server/app/project/page.js.nft.json +1 -1
- package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/review/[id]/page.js +2 -2
- package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
- package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app-paths-manifest.json +11 -8
- package/.next-prod/server/chunks/2491.js +1 -0
- package/.next-prod/server/chunks/3269.js +1 -1
- package/.next-prod/server/chunks/3353.js +1 -1
- package/.next-prod/server/chunks/3863.js +1 -1
- package/.next-prod/server/chunks/4098.js +1 -1
- package/.next-prod/server/chunks/4490.js +1 -1
- package/.next-prod/server/chunks/4793.js +1 -1
- package/.next-prod/server/chunks/4796.js +4 -0
- package/.next-prod/server/chunks/5394.js +1 -1
- package/.next-prod/server/chunks/6043.js +1 -1
- package/.next-prod/server/chunks/7514.js +1 -1
- package/.next-prod/server/chunks/8491.js +2 -2
- package/.next-prod/server/chunks/9298.js +2 -2
- package/.next-prod/server/chunks/static/media/web-tree-sitter.f7f7244f.wasm +0 -0
- package/.next-prod/server/functions-config-manifest.json +3 -0
- package/.next-prod/server/middleware-build-manifest.js +1 -1
- package/.next-prod/server/middleware-react-loadable-manifest.js +1 -1
- package/.next-prod/server/pages/404.html +2 -2
- package/.next-prod/server/pages/500.html +1 -1
- package/.next-prod/server/server-reference-manifest.json +1 -1
- package/.next-prod/server/webpack-runtime.js +1 -1
- package/.next-prod/static/Gxin8huIJYob3ajiI7kX1/_buildManifest.js +1 -0
- package/.next-prod/static/chunks/1142.8248bfb76c695146.js +1 -0
- package/.next-prod/static/chunks/1410.276ad7bf15452d27.js +1 -0
- package/.next-prod/static/chunks/1456.217c3832b3e76b7f.js +1 -0
- package/.next-prod/static/chunks/1705-a6a68dffe3e7737f.js +4 -0
- package/.next-prod/static/chunks/194.76dbdc07cdc2311d.js +1 -0
- package/.next-prod/static/chunks/2278.0b14de1cb2041bfd.js +1 -0
- package/.next-prod/static/chunks/2839.c9a657d5b4031a19.js +1 -0
- package/.next-prod/static/chunks/3526.2d446315a022bc48.js +1 -0
- package/.next-prod/static/chunks/3530-fc8a5ada5a6dc865.js +14 -0
- package/.next-prod/static/chunks/{3579-2dddc4a9ac5a5b31.js → 3579-51f0ad7204c67e22.js} +1 -1
- package/.next-prod/static/chunks/3633.17e30dbc99941b40.js +1 -0
- package/.next-prod/static/chunks/3643-fe2ac2f1accd0649.js +1 -0
- package/.next-prod/static/chunks/3743-1f5d8cfd9d92ad97.js +4 -0
- package/.next-prod/static/chunks/3942.085da8d58242eeab.js +1 -0
- package/.next-prod/static/chunks/4174.b6ff75dd91a2a32e.js +1 -0
- package/.next-prod/static/chunks/4186-2bbbcdf03b3c15f5.js +17 -0
- package/.next-prod/static/chunks/4357.3fe2cd657f69ff7b.js +1 -0
- package/.next-prod/static/chunks/4358.f89b14cf7a988731.js +1 -0
- package/.next-prod/static/chunks/4567.7dc81a6e1c7df565.js +1 -0
- package/.next-prod/static/chunks/4659.0b14de1cb2041bfd.js +1 -0
- package/.next-prod/static/chunks/480.60af76ef919bafc9.js +1 -0
- package/.next-prod/static/chunks/5005.73745d7fcae6989e.js +1 -0
- package/.next-prod/static/chunks/5320.50f81e2e2f74ba52.js +1 -0
- package/.next-prod/static/chunks/54a60aa6-9f9f856e5049cd65.js +82 -0
- package/.next-prod/static/chunks/5645.0b86853ae26d9ee3.js +1 -0
- package/.next-prod/static/chunks/{5922.0d75c174139a59a4.js → 5922.ce56021f8cc6ebbc.js} +1 -1
- package/.next-prod/static/chunks/6358.8c64eb45ea2b4418.js +1 -0
- package/.next-prod/static/chunks/{6729.0f91dcaaaffa2ed4.js → 6729.77a5381ac8f5c9ae.js} +1 -1
- package/.next-prod/static/chunks/{700.642136ad4fbe16ca.js → 700.b97255576133e9ca.js} +1 -1
- package/.next-prod/static/chunks/7040.0b14de1cb2041bfd.js +1 -0
- package/.next-prod/static/chunks/{70e0d97a-6903b8594c742784.js → 70e0d97a-bbb0ec05083da54f.js} +1 -1
- package/.next-prod/static/chunks/7113.39704408fef3d26e.js +1 -0
- package/.next-prod/static/chunks/7799.40b047a634f96a24.js +1 -0
- package/.next-prod/static/chunks/7884.390ae2efbbf230c4.js +1 -0
- package/.next-prod/static/chunks/816.f909c891b91aa79f.js +1 -0
- package/.next-prod/static/chunks/8243.1450514f8390977e.js +1 -0
- package/.next-prod/static/chunks/8288.9bd1d26060cb00a1.js +1 -0
- package/.next-prod/static/chunks/8318.81c7ac586fcbb728.js +1 -0
- package/.next-prod/static/chunks/862.fe3b86ecfb9c0716.js +1 -0
- package/.next-prod/static/chunks/8848.1e41678a18f85af6.js +1 -0
- package/.next-prod/static/chunks/8977.01b9c429327004e9.js +1 -0
- package/.next-prod/static/chunks/9005.33cf91e617920d4f.js +1 -0
- package/.next-prod/static/chunks/{9114-abef8471519b7dee.js → 9114-0d2717c9c2752d0f.js} +1 -1
- package/.next-prod/static/chunks/{9220.0206dd0432eca784.js → 9220.bc767ebb5adb9f49.js} +1 -1
- package/.next-prod/static/chunks/968.237f19aca13543fe.js +1 -0
- package/.next-prod/static/chunks/app/_global-error/page-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/bash/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/codex/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/deepseek/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/kimi/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/ollama/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/claude-stats/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/commands/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/comments/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/db/columns/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/db/connect/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/db/disconnect/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/db/export/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/db/query/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/db/schemas/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/extension/version/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/file/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/blame/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/clipboard/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/copy/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/delete/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/expanded/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/index/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/init/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/paste/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/read/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/readdir/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/recent/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/save/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/search/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/stat/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/files/text/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/git/branch-diff/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/git/branches/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/git/commit-diff/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/git/commits/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/git/diff/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/git/discard/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/git/stage/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/git/status/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/git/unstage/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/git/worktree/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/global-state/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/jupyter/load/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/jupyter/save/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/definition/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/hover/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/references/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/status/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/warmup/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/columns/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/connect/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/disconnect/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/export/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/query/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/schemas/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/connect/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/query/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/schema/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/note/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/ollama/models/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/ollama/start/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/open-cursor/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/open-vscode/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/pick-folder/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/pinned-sessions/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/project-settings/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/project-state/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/file/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/search/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/projects/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/command/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/connect/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/delete/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/disconnect/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/get/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/keys/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/set/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/review/[id]/comments/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/review/[id]/replies/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/review/[id]/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/review/identify/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/review/order/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/review/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/review/share-info/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/review/users/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/scheduled-tasks/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/services/config/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/services/scripts/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/session-by-path/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/projects/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/settings/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/skills/[id]/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/skills/content/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/skills/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/aliases/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/env/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/history/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/api/version/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/manifest.webmanifest/route-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/app/page-c9a30c88afc0a0c5.js +1 -0
- package/.next-prod/static/chunks/app/project/page-cf0d2dc22fe0e7ec.js +29 -0
- package/.next-prod/static/chunks/app/review/[id]/{page-feeb4d9d472b00ab.js → page-f8bb4748e9a94a0f.js} +1 -1
- package/.next-prod/static/chunks/d3ac728e-ee038320ef1e4bdf.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-7975a2b8c7d0b214.js +1 -0
- package/.next-prod/static/chunks/webpack-189b823e597db3a4.js +1 -0
- package/.next-prod/static/css/52b314bf20332f7c.css +1 -0
- package/.next-prod/static/css/de4a1a4297dcf755.css +1 -0
- package/.next-prod/static/media/web-tree-sitter.f7f7244f.wasm +0 -0
- package/.next-prod/trace +12 -12
- package/.next-prod/trace-build +1 -1
- package/.next-prod/types/app/api/projectGraph/file/route.ts +351 -0
- package/.next-prod/types/app/api/projectGraph/file-functions/route.ts +351 -0
- package/.next-prod/types/app/api/projectGraph/search/route.ts +351 -0
- package/.next-prod/types/routes.d.ts +4 -1
- package/.next-prod/types/validator.ts +27 -0
- package/bin/postinstall.mjs +11 -0
- package/dist/{chunk-J6PMXUI4.mjs → chunk-5NL2LMKP.mjs} +2 -2
- package/dist/scheduledTasks.mjs +47 -25
- package/dist/wsServer.mjs +31 -24
- package/next.config.mjs +48 -1
- package/package.json +16 -3
- package/public/tree-sitter/tree-sitter-go.wasm +0 -0
- package/public/tree-sitter/tree-sitter-javascript.wasm +0 -0
- package/public/tree-sitter/tree-sitter-python.wasm +0 -0
- package/public/tree-sitter/tree-sitter-rust.wasm +0 -0
- package/public/tree-sitter/tree-sitter-tsx.wasm +0 -0
- package/public/tree-sitter/tree-sitter-typescript.wasm +0 -0
- package/public/tree-sitter/web-tree-sitter.wasm +0 -0
- package/scripts/copy-tree-sitter-wasms.mjs +104 -0
- package/.next-prod/server/chunks/700.js +0 -1
- package/.next-prod/static/NaXs216rAk1OT3eFxc2qt/_buildManifest.js +0 -1
- package/.next-prod/static/chunks/1142.17e45d200709420d.js +0 -1
- package/.next-prod/static/chunks/1456.a1f849b334fff0da.js +0 -1
- package/.next-prod/static/chunks/194.dace825a3ddbbbff.js +0 -1
- package/.next-prod/static/chunks/2839.a832cb0d77a9d298.js +0 -1
- package/.next-prod/static/chunks/3530-74191451ec2a46c4.js +0 -14
- package/.next-prod/static/chunks/3695-9503d0b646958dd4.js +0 -18
- package/.next-prod/static/chunks/3700-e32aa43691d128b2.js +0 -1
- package/.next-prod/static/chunks/3743-5e5ffaf674977450.js +0 -4
- package/.next-prod/static/chunks/3942.00e2e29e2d62b039.js +0 -1
- package/.next-prod/static/chunks/4174.9e84de8f8816fe01.js +0 -1
- package/.next-prod/static/chunks/4357.05060a5a3fea9ff1.js +0 -1
- package/.next-prod/static/chunks/4358.f15dd467571f7594.js +0 -1
- package/.next-prod/static/chunks/4567.d405b50b917bd2c2.js +0 -1
- package/.next-prod/static/chunks/4659.b8e05ba7cbf46556.js +0 -1
- package/.next-prod/static/chunks/5005.cf839e066f3d3efe.js +0 -1
- package/.next-prod/static/chunks/5320.191be461ff110fb3.js +0 -1
- package/.next-prod/static/chunks/54a60aa6-1a0e6738c5ca0c78.js +0 -79
- package/.next-prod/static/chunks/5645.9002948124d25d41.js +0 -1
- package/.next-prod/static/chunks/6148-ceb1b58ea7be6767.js +0 -1
- package/.next-prod/static/chunks/7040.b8e05ba7cbf46556.js +0 -1
- package/.next-prod/static/chunks/7113.86e40b60c804b8c5.js +0 -1
- package/.next-prod/static/chunks/7799.f90cda9aba4e0e77.js +0 -1
- package/.next-prod/static/chunks/7884.79af1a2f4511cea5.js +0 -1
- package/.next-prod/static/chunks/816.ccc7dc455fcaf7c0.js +0 -1
- package/.next-prod/static/chunks/8243.aa3ccfb41335eb1f.js +0 -1
- package/.next-prod/static/chunks/8288.8ff86c6a3bee6b7c.js +0 -1
- package/.next-prod/static/chunks/8318.a70d7a81445f8cf9.js +0 -1
- package/.next-prod/static/chunks/862.7cd3197e1ba5fd00.js +0 -1
- package/.next-prod/static/chunks/8848.b0a10ee0b0a2b91b.js +0 -1
- package/.next-prod/static/chunks/9005.473ce947d16e7f65.js +0 -1
- package/.next-prod/static/chunks/968.29d4ba7ee8bd5ccb.js +0 -1
- package/.next-prod/static/chunks/app/_global-error/page-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/bash/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/codex/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/deepseek/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/kimi/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/ollama/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/claude-stats/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/commands/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/comments/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/db/columns/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/db/connect/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/db/disconnect/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/db/export/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/db/query/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/db/schemas/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/extension/version/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/file/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/blame/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/clipboard/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/copy/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/delete/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/expanded/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/index/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/init/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/paste/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/read/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/readdir/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/recent/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/save/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/search/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/stat/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/files/text/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/git/branch-diff/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/git/branches/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/git/commit-diff/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/git/commits/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/git/diff/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/git/discard/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/git/stage/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/git/status/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/git/unstage/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/git/worktree/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/global-state/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/jupyter/load/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/jupyter/save/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/definition/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/hover/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/references/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/status/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/warmup/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/columns/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/connect/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/disconnect/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/export/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/query/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/schemas/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/connect/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/query/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/schema/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/note/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/ollama/models/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/ollama/start/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/open-cursor/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/open-vscode/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/pick-folder/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/pinned-sessions/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/project-settings/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/project-state/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/projects/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/command/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/connect/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/delete/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/disconnect/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/get/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/keys/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/set/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/review/[id]/comments/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/review/[id]/replies/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/review/[id]/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/review/identify/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/review/order/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/review/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/review/share-info/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/review/users/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/scheduled-tasks/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/services/config/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/services/scripts/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/session-by-path/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/projects/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/settings/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/skills/[id]/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/skills/content/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/skills/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/aliases/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/env/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/history/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/api/version/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/manifest.webmanifest/route-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/app/page-95c3cb3c5c7c5ef1.js +0 -1
- package/.next-prod/static/chunks/app/project/page-3a148e22b1d92a17.js +0 -29
- package/.next-prod/static/chunks/d3ac728e-ba6c269aebe5932e.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-aa58df485295770f.js +0 -1
- package/.next-prod/static/chunks/webpack-c669c0003eb75661.js +0 -1
- package/.next-prod/static/css/18aae55f9fdae00a.css +0 -1
- package/.next-prod/static/css/2163ab5e45fedc6a.css +0 -1
- /package/.next-prod/static/{NaXs216rAk1OT3eFxc2qt → Gxin8huIJYob3ajiI7kX1}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2951],{7482:(e,t,r)=>{Promise.resolve().then(r.bind(r,97899))},14978:(e,t,r)=>{"use strict";r.d(t,{T:()=>j});var n=r(95155),o=r(46361),s=r(79204),i=r(98164),l=r(77815),a=r(75035),d=r(88374);r(84559),r(21227);var c=r(91334),u=r(38194),m=r(88522),x=r(12115),h=r(72816);let f=[s.A,i.A,l.jb],p=[s.A,l.jb],g=[a.A,d.A],b=[a.A];function v(e){return e.replace(/^(\|.+\|)$/gm,e=>/^\|[\s:|-]+\|$/.test(e)?e:e.replace(/`([^`]*)`/g,(e,t)=>t.includes("|")?"`"+t.replace(/\|/g,"\\|")+"`":e))}function w(e){return e.replace(/\$(\d)/g,"\\$$1")}let j=(0,x.memo)(function({content:e,isUser:t=!1,isStreaming:r=!1,enableMath:s=!0,rehypePlugins:i}){let{resolvedTheme:l}=(0,h.D)(),a="dark"===l,d=(0,x.useMemo)(()=>({code({className:e,children:t,node:r,...o}){let s=/language-(\w+)/.exec(e||""),i=String(t);if(!s&&!e&&!i.includes("\n"))return(0,n.jsx)("code",{className:"px-1.5 py-0.5 mx-0.5 rounded bg-accent text-sm font-mono",...o,children:t});let l=String(t).replace(/\n$/,""),d=s?.[1]||"text",x=Number(o["data-source-start"])||0,h=x?x+1:0,f=0;return(0,n.jsx)(c.A,{style:a?u.A:m.A,language:d,PreTag:"div",customStyle:{margin:"0.75rem 0",borderRadius:"0.375rem",fontSize:"0.875rem"},wrapLines:!0,lineProps:()=>{let e=h+f;return f++,{"data-source-start":e,"data-source-end":e,style:{display:"block"}}},children:l})},p:({children:e,node:t,...r})=>(0,n.jsx)("p",{className:"mb-3 last:mb-0",...r,children:e}),h1:({children:e,node:t,...r})=>(0,n.jsx)("h1",{className:"text-xl font-bold mb-3 mt-4 first:mt-0",...r,children:e}),h2:({children:e,node:t,...r})=>(0,n.jsx)("h2",{className:"text-lg font-bold mb-2 mt-3 first:mt-0",...r,children:e}),h3:({children:e,node:t,...r})=>(0,n.jsx)("h3",{className:"text-base font-bold mb-2 mt-3 first:mt-0",...r,children:e}),ul:({children:e,node:t,...r})=>(0,n.jsx)("ul",{className:"list-disc list-inside mb-3 space-y-1",...r,children:e}),ol:({children:e,node:t,...r})=>(0,n.jsx)("ol",{className:"list-decimal list-inside mb-3 space-y-1",...r,children:e}),li:({children:e,node:t,...r})=>(0,n.jsx)("li",{className:"leading-relaxed",...r,children:e}),blockquote:({children:e,node:t,...r})=>(0,n.jsx)("blockquote",{className:"border-l-4 border-border pl-4 my-3 italic text-muted-foreground",...r,children:e}),a:({href:e,children:t,node:r,...o})=>(0,n.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"text-brand hover:underline",...o,children:t}),table:({children:e,node:t,...r})=>(0,n.jsx)("div",{className:"overflow-x-auto my-3",...r,children:(0,n.jsx)("table",{className:"min-w-full border border-border",children:e})}),thead:({children:e,node:t,...r})=>(0,n.jsx)("thead",{className:"bg-accent",...r,children:e}),th:({children:e,node:t,...r})=>(0,n.jsx)("th",{className:"px-4 py-2 text-left font-semibold border-b border-border",...r,children:e}),td:({children:e,node:t,...r})=>(0,n.jsx)("td",{className:"px-4 py-2 border-b border-border",...r,children:e}),hr:({node:e,...t})=>(0,n.jsx)("hr",{className:"my-4 border-border",...t}),img:({src:e,alt:t,node:r,height:o,width:s,style:i,...l})=>{if(!(o||s||i))return(0,n.jsx)("img",{src:e,alt:t||"",className:"max-w-full h-auto rounded-lg my-3",...l});let a=e=>e?/^\d+$/.test(String(e))?`${e}px`:String(e):void 0,d={...i,height:a(o)??i?.height,width:a(s)??i?.width};return(0,n.jsx)("img",{src:e,alt:t||"",style:d,className:"inline-block align-middle",...l})},strong:({children:e,node:t,...r})=>(0,n.jsx)("strong",{className:"font-bold",...r,children:e}),em:({children:e,node:t,...r})=>(0,n.jsx)("em",{className:"italic",...r,children:e}),del:({children:e,node:t,...r})=>(0,n.jsx)("del",{className:"line-through",...r,children:e})}),[a]),j=s?f:p,y=s?g:b,k=(0,x.useMemo)(()=>{if(t||r)return e;let n=v(!function(e){if(/^\|[\s:|-]+\|$/m.test(e))return!1;if(/[┌┐└┘│─├┤┬┴┼╔╗╚╝║═╭╮╯╰▲▼◀▶△▽◁▷]/.test(e)||/\+[-=]{2,}\+/.test(e))return!0;let t=e.split("\n").filter(e=>/^\s*\||\|\s*$/.test(e));if(t.length>=3){let e=t.map(e=>(e.match(/\|/g)||[]).length);return!e.every(t=>t===e[0])||!(e[0]>=3)}return!1}(e)||/^```[\s\S]*```$/m.test(e.trim())?e:"```text\n"+e.trim()+"\n```");return s?w(n):n},[e,t,r,s]),N=(0,x.useMemo)(()=>i?.length?[...y,...i]:y,[i,y]);if(t)return(0,n.jsx)("div",{className:"whitespace-pre-wrap break-words",children:e});if(r){let t=e.lastIndexOf("\n");if(-1===t)return(0,n.jsx)("div",{className:"whitespace-pre-wrap break-words",children:e});let r=e.slice(0,t+1),i=e.slice(t+1);return(0,n.jsxs)("div",{className:"markdown-body",children:[(0,n.jsx)(o.oz,{remarkPlugins:j,rehypePlugins:y,components:d,children:s?w(v(r)):v(r)}),i&&(0,n.jsx)("span",{className:"whitespace-pre-wrap",children:i})]})}return(0,n.jsx)("div",{className:"markdown-body",children:(0,n.jsx)(o.oz,{remarkPlugins:j,rehypePlugins:N,components:d,children:k})})})},44810:(e,t,r)=>{"use strict";r.d(t,{F2:()=>m,ZL:()=>c,a9:()=>u});var n=r(95155),o=r(12115),s=r(47650);let i=()=>()=>{},l=()=>document.body,a=()=>null,d=(0,o.createContext)(null);function c({children:e}){let t=(0,o.useContext)(d),r=(0,o.useSyncExternalStore)(i,l,a),n=t??r;return n?(0,s.createPortal)(e,n):null}function u({children:e}){let[t,r]=(0,o.useState)(null);return(0,n.jsxs)("div",{className:"relative w-full h-full",style:{transform:"translateZ(0)"},children:[(0,n.jsx)(d.Provider,{value:t,children:e}),(0,n.jsx)("div",{ref:r,className:"absolute inset-0 pointer-events-none [&>*]:pointer-events-auto"})]})}function m(){return(0,o.useContext)(d)}},97899:(e,t,r)=>{"use strict";r.d(t,{ReviewPage:()=>E});var n=r(95155),o=r(12115),s=r(79114),i=r(14978),l=r(94002),a=r(72816),d=r(95766);function c({selectedText:e,position:t,onSubmit:r,onCancel:i}){let{t:l}=(0,s.Bd)(),[a,d]=(0,o.useState)(""),u=(0,o.useRef)(null),m=(0,o.useRef)(null);(0,o.useEffect)(()=>{u.current?.focus()},[]),(0,o.useEffect)(()=>{let e=e=>{"Escape"===e.key&&i()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[i]),(0,o.useEffect)(()=>{let e=e=>{!m.current||m.current.contains(e.target)||a.trim()||i()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[a,i]);let x=()=>{let e=a.trim();e&&r(e)},h=e.length>60?e.slice(0,57)+"...":e;return(0,n.jsxs)("div",{ref:m,className:"absolute z-50 w-96 bg-card border border-border rounded-lg shadow-lg",style:{top:t.top,left:Math.max(8,t.left-192)},children:[(0,n.jsxs)("div",{className:"px-3 pt-3 pb-2",children:[(0,n.jsx)("div",{className:"text-xs text-muted-foreground mb-1",children:l("review.selectedText")}),(0,n.jsx)("div",{className:"text-xs bg-yellow-500/10 border-l-2 border-yellow-500 px-2 py-1 rounded-r truncate",children:h})]}),(0,n.jsx)("div",{className:"px-3 pb-2",children:(0,n.jsx)("textarea",{ref:u,value:a,onChange:e=>d(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),x())},placeholder:l("review.addCommentPlaceholder"),className:"w-full px-2 py-1.5 text-sm bg-secondary border border-border rounded resize-none focus:outline-none focus:border-brand",rows:4})}),(0,n.jsxs)("div",{className:"px-3 pb-3 flex items-center justify-between",children:[(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground",children:l("review.enterSubmitHint")}),(0,n.jsxs)("div",{className:"flex gap-1",children:[(0,n.jsx)("button",{onClick:i,className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:l("common.cancel")}),(0,n.jsx)("button",{onClick:x,disabled:!a.trim(),className:"px-2 py-1 text-xs rounded bg-brand text-white hover:bg-brand/90 transition-colors disabled:opacity-40",children:l("review.commentBtn")})]})]})]})}let u={bg:"rgba(234, 179, 8, 0.15)",bgActive:"rgba(234, 179, 8, 0.4)",bgPending:"rgba(234, 179, 8, 0.3)",border:"rgba(234, 179, 8, 0.7)",borderPending:"rgba(234, 179, 8, 0.9)"},m={bg:"rgba(234, 179, 8, 0.1)",bgActive:"rgba(234, 179, 8, 0.3)",bgPending:"rgba(234, 179, 8, 0.2)",border:"rgba(234, 179, 8, 0.5)",borderPending:"rgba(234, 179, 8, 0.7)"};function x({rects:e,activeCommentId:t,pendingCommentId:r,isDark:o}){if(0===e.length)return null;let s=o?m:u;return(0,n.jsx)("div",{style:{position:"absolute",top:0,left:0,width:"100%",height:0,overflow:"visible",pointerEvents:"none",zIndex:5},children:e.map((e,o)=>{let i=e.commentId===t,l=e.commentId===r,a=s.bg;return l?a=s.bgPending:i&&(a=s.bgActive),(0,n.jsx)("div",{"data-comment-id":e.commentId,style:{position:"absolute",top:e.top,left:e.left,width:e.width,height:e.height,backgroundColor:a,borderBottom:`1px solid ${l?s.borderPending:s.border}`,borderRadius:1,pointerEvents:"none"}},`${e.commentId}-${o}`)})})}let h=[d.W];function f({content:e,comments:t,activeCommentId:r,isActive:s,onAddComment:d,onHighlightClick:u,scrollToHighlightRef:m}){let{resolvedTheme:p}=(0,a.D)(),g=(0,o.useRef)(null),b=(0,o.useRef)(null),[v,w]=(0,o.useState)(null),{rects:j,scrollToHighlight:y}=function(e,t,r,n){let[s,i]=(0,o.useState)([]),l=(0,o.useRef)(0),a=(0,o.useRef)(r);(0,o.useEffect)(()=>{a.current=r},[r]);let d=(0,o.useCallback)(()=>{l.current&&cancelAnimationFrame(l.current),l.current=requestAnimationFrame(()=>{let r=e.current,n=t.current;if(!r||!n)return;let o=function(e,t,r){let n=[],o=t.getBoundingClientRect(),s=function(e){let t=[],r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),n=0;for(;r.nextNode();){let e=r.currentNode,o=e.textContent?.length||0;t.push({node:e,start:n,end:n+o}),n+=o}return t}(e);if(0===s.length)return n;for(let e of r){let{startOffset:r,endOffset:i}=e.anchor;if(r>=i)continue;let l=null,a=0,d=null,c=0;for(let{node:e,start:t,end:n}of s)if(!l&&r>=t&&r<n&&(l=e,a=r-t),i>t&&i<=n){d=e,c=i-t;break}if(!l||!d)continue;let u=document.createRange();try{u.setStart(l,a),u.setEnd(d,c)}catch{continue}for(let r of u.getClientRects())r.width<1||r.height<1||n.push({commentId:e.id,top:r.top-o.top+t.scrollTop,left:r.left-o.left+t.scrollLeft,width:r.width,height:r.height})}return n}(r,n,a.current);i(e=>e.length===o.length&&e.every((e,t)=>e.commentId===o[t].commentId&&.5>Math.abs(e.top-o[t].top)&&.5>Math.abs(e.left-o[t].left)&&.5>Math.abs(e.width-o[t].width)&&.5>Math.abs(e.height-o[t].height))?e:o)})},[e,t]);(0,o.useEffect)(()=>{d()},[r,n,d]),(0,o.useEffect)(()=>{let t=e.current;if(!t)return;let r=new MutationObserver(()=>d());return r.observe(t,{childList:!0,subtree:!0,characterData:!0}),()=>r.disconnect()},[e,d]),(0,o.useEffect)(()=>{let t=e.current;if(!t)return;let r=new ResizeObserver(()=>d());return r.observe(t),()=>r.disconnect()},[e,d]),(0,o.useEffect)(()=>()=>{l.current&&cancelAnimationFrame(l.current)},[]);let c=(0,o.useCallback)(e=>{let r=t.current;if(!r)return;let n=s.find(t=>t.commentId===e);if(!n)return;let o=r.clientHeight;r.scrollTo({top:n.top-o/2+n.height/2,behavior:"smooth"})},[t,s]);return{rects:s,scrollToHighlight:c}}(g,b,(0,o.useMemo)(()=>v?[...t,{id:"__pending__",author:"",authorId:"",content:"",anchor:v.anchor,createdAt:0,replies:[]}]:t,[t,v]),r);(0,o.useEffect)(()=>{m.current=y},[y,m]);let k=(0,o.useRef)(j);(0,o.useEffect)(()=>{k.current=j},[j]);let N=(0,o.useCallback)(e=>{let t=window.getSelection(),r=t&&!t.isCollapsed;if(r&&s&&g.current){let r=t.getRangeAt(0);if(g.current.contains(r.startContainer)&&g.current.contains(r.endContainer)){let n=function(e,t){let r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),n=0,o=-1,s=-1;for(;r.nextNode();){let e=r.currentNode,i=e.textContent?.length||0;if(e===t.startContainer&&(o=n+t.startOffset),e===t.endContainer){s=n+t.endOffset;break}n+=i}if(-1===o||-1===s||o>=s)return null;let i=e.textContent?.slice(o,s)||"";return i.trim()?{startOffset:o,endOffset:s,selectedText:i}:null}(g.current,r);if(n){let r=b.current??g.current.parentElement,o=r.getBoundingClientRect();w({anchor:n,position:{top:e.clientY-o.top+r.scrollTop+8,left:e.clientX-o.left}}),t.removeAllRanges();return}}}if(!r&&!v){let t=b.current;if(!t)return;let r=t.getBoundingClientRect(),n=e.clientX-r.left+t.scrollLeft,o=e.clientY-r.top+t.scrollTop;for(let e of k.current)if("__pending__"!==e.commentId&&n>=e.left&&n<=e.left+e.width&&o>=e.top&&o<=e.top+e.height)return void u(e.commentId)}},[s,v,u]),C=(0,o.useCallback)(e=>{v&&(d(e,v.anchor),w(null),window.getSelection()?.removeAllRanges())},[v,d]),E=(0,o.useCallback)(()=>{w(null),window.getSelection()?.removeAllRanges()},[]);return(0,n.jsxs)("div",{className:"h-full flex bg-card",children:[(0,n.jsx)(l.l,{content:e,containerRef:b}),(0,n.jsxs)("div",{ref:b,className:"flex-1 overflow-auto relative",onMouseUp:N,children:[(0,n.jsx)("div",{ref:g,className:"p-6 review-markdown-container",children:(0,n.jsx)(i.T,{content:e,rehypePlugins:h})}),(0,n.jsx)(x,{rects:j,activeCommentId:r,pendingCommentId:v?"__pending__":null,isDark:"dark"===p}),v&&(0,n.jsx)(c,{selectedText:v.anchor.selectedText,position:v.position,onSubmit:C,onCancel:E})]})]})}var p=r(87918);function g(e){let t=new Date(e),r=Math.floor((new Date().getTime()-t.getTime())/6e4);if(r<1)return p.A.t("common.justNow");if(r<60)return p.A.t("common.minutesAgo",{count:r});let n=Math.floor(r/60);if(n<24)return p.A.t("common.hoursAgo",{count:n});let o=Math.floor(n/24);return o<7?p.A.t("common.daysAgo",{count:o}):t.toLocaleDateString()}let b=(0,o.forwardRef)(function({comment:e,isActive:t,isOwnComment:r,isAdmin:i,currentAuthorId:l,canInteract:a,userNameMap:d,onClick:c,onDelete:u,onEdit:m,onToggleClosed:x,onAddReply:h,onDeleteReply:f,onEditReply:p},b){let{t:v}=(0,s.Bd)(),w=(e,t)=>d[e]||t,[j,y]=(0,o.useState)(""),[k,N]=(0,o.useState)(!1),[C,E]=(0,o.useState)(!1),[S,R]=(0,o.useState)(""),[T,A]=(0,o.useState)(null),[I,L]=(0,o.useState)(""),P=()=>{let e=j.trim();e&&(h(e),y(""),N(!1))},$=()=>{let t=S.trim();t&&t!==e.content&&m(t),E(!1)},M=()=>{if(!T)return;let t=I.trim(),r=e.replies.find(e=>e.id===T);!t||r&&t===r.content||p(T,t),A(null)},D=e.anchor.selectedText.length>80?e.anchor.selectedText.slice(0,77)+"...":e.anchor.selectedText,O=i||r||a;return e.closed?(0,n.jsxs)("div",{ref:b,className:"rounded-lg border border-border/50 bg-card/50 opacity-60 hover:opacity-80 transition-all cursor-pointer px-3 py-2 flex items-center gap-2",onClick:c,children:[(0,n.jsx)("span",{className:"w-4 h-4 rounded-full bg-brand/20 text-brand flex items-center justify-center text-[9px] font-bold flex-shrink-0",children:w(e.authorId,e.author).charAt(0)}),(0,n.jsx)("span",{className:"text-xs text-muted-foreground truncate flex-1",children:D}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground/50 flex-shrink-0",children:v("review.closedLabel")}),O&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),x(!1)},className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors flex-shrink-0",title:v("review.reopenReview"),children:v("review.reopen")}),(r&&a||i)&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),u()},className:"text-[10px] text-muted-foreground hover:text-red-500 transition-colors flex-shrink-0",title:v("review.deleteComment"),children:v("common.delete")})]}):(0,n.jsxs)("div",{ref:b,className:`rounded-lg border transition-all cursor-pointer ${t?"border-brand bg-brand/5 shadow-sm":"border-border bg-card hover:border-muted-foreground/30"}`,onClick:c,children:[(0,n.jsx)("div",{className:"px-3 pt-3 pb-1",children:(0,n.jsx)("div",{className:"text-xs bg-yellow-500/10 border-l-2 border-yellow-500 px-2 py-1 rounded-r text-muted-foreground truncate",children:D})}),(0,n.jsxs)("div",{className:"px-3 pt-2 flex items-center gap-2",children:[(0,n.jsx)("span",{className:"w-5 h-5 rounded-full bg-brand/20 text-brand flex items-center justify-center text-[10px] font-bold flex-shrink-0",children:w(e.authorId,e.author).charAt(0)}),(0,n.jsx)("span",{className:"text-xs font-medium",children:w(e.authorId,e.author)}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground",children:g(e.createdAt)}),(0,n.jsx)("div",{className:"flex-1"}),!C&&(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[O&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),x(!0)},className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors",title:v("review.closeComment"),children:v("review.closeComment")}),r&&a&&(0,n.jsx)("button",{onClick:t=>{t.stopPropagation(),R(e.content),E(!0)},className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors",title:v("review.editComment"),children:v("common.edit")}),(r&&a||i)&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),u()},className:"text-[10px] text-muted-foreground hover:text-red-500 transition-colors",title:v("review.deleteComment"),children:v("common.delete")})]})]}),(0,n.jsx)("div",{className:"px-3 pt-1 pb-2",children:C?(0,n.jsxs)("div",{onClick:e=>e.stopPropagation(),children:[(0,n.jsx)("textarea",{value:S,onChange:e=>R(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),$()),"Escape"===e.key&&E(!1)},className:"w-full px-2 py-1.5 text-sm bg-secondary border border-border rounded resize-none focus:outline-none focus:border-brand",rows:3,autoFocus:!0}),(0,n.jsxs)("div",{className:"flex items-center justify-end gap-1 mt-1",children:[(0,n.jsx)("button",{onClick:()=>E(!1),className:"px-2 py-0.5 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:v("common.cancel")}),(0,n.jsx)("button",{onClick:$,disabled:!S.trim(),className:"px-2 py-0.5 text-xs rounded bg-brand text-white hover:bg-brand/90 transition-colors disabled:opacity-40",children:v("common.save")})]})]}):(0,n.jsxs)("div",{className:"text-sm whitespace-pre-wrap",children:[e.content,e.edited&&(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground ml-1",children:v("review.edited")})]})}),e.replies.length>0&&(0,n.jsx)("div",{className:"mx-3 border-t border-border",children:e.replies.map(e=>(0,n.jsxs)("div",{className:"py-2 border-b border-border last:border-b-0",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"w-4 h-4 rounded-full bg-accent text-muted-foreground flex items-center justify-center text-[9px] font-bold flex-shrink-0",children:w(e.authorId,e.author).charAt(0)}),(0,n.jsx)("span",{className:"text-xs font-medium",children:w(e.authorId,e.author)}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground",children:g(e.createdAt)}),(0,n.jsx)("div",{className:"flex-1"}),T!==e.id&&(e.authorId===l&&a||i)&&(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[e.authorId===l&&a&&(0,n.jsx)("button",{onClick:t=>{var r;t.stopPropagation(),r=e.id,L(e.content),A(r)},className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors",title:v("review.editReply"),children:v("common.edit")}),(0,n.jsx)("button",{onClick:t=>{t.stopPropagation(),f(e.id)},className:"text-[10px] text-muted-foreground hover:text-red-500 transition-colors",title:v("review.deleteReply"),children:v("common.delete")})]})]}),T===e.id?(0,n.jsxs)("div",{className:"mt-1 pl-6",onClick:e=>e.stopPropagation(),children:[(0,n.jsx)("textarea",{value:I,onChange:e=>L(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),M()),"Escape"===e.key&&A(null)},className:"w-full px-2 py-1 text-sm bg-secondary border border-border rounded resize-none focus:outline-none focus:border-brand",rows:2,autoFocus:!0}),(0,n.jsxs)("div",{className:"flex items-center justify-end gap-1 mt-1",children:[(0,n.jsx)("button",{onClick:()=>A(null),className:"px-2 py-0.5 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:v("common.cancel")}),(0,n.jsx)("button",{onClick:M,disabled:!I.trim(),className:"px-2 py-0.5 text-xs rounded bg-brand text-white hover:bg-brand/90 transition-colors disabled:opacity-40",children:v("common.save")})]})]}):(0,n.jsxs)("div",{className:"text-sm mt-0.5 pl-6 whitespace-pre-wrap",children:[e.content,e.edited&&(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground ml-1",children:v("review.edited")})]})]},e.id))}),(0,n.jsx)("div",{className:"px-3 pb-2 pt-1",children:k?(0,n.jsxs)("div",{className:"mt-1",onClick:e=>e.stopPropagation(),children:[(0,n.jsx)("textarea",{value:j,onChange:e=>y(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),P()),"Escape"===e.key&&N(!1)},placeholder:v("review.replyPlaceholder"),className:"w-full px-2 py-1 text-sm bg-secondary border border-border rounded resize-none focus:outline-none focus:border-brand",rows:2,autoFocus:!0}),(0,n.jsxs)("div",{className:"flex items-center justify-end gap-1 mt-1",children:[(0,n.jsx)("button",{onClick:()=>N(!1),className:"px-2 py-0.5 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:v("common.cancel")}),(0,n.jsx)("button",{onClick:P,disabled:!j.trim(),className:"px-2 py-0.5 text-xs rounded bg-brand text-white hover:bg-brand/90 transition-colors disabled:opacity-40",children:v("review.reply")})]})]}):a&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),N(!0)},className:"text-xs text-muted-foreground hover:text-foreground transition-colors",children:v("review.reply")})})]})});function v({comments:e,activeCommentId:t,currentAuthorId:r,isActive:i,isAdmin:l,userNameMap:a,onCommentClick:d,onNavigateComment:c,onDeleteComment:u,onEditComment:m,onToggleCommentClosed:x,onAddReply:h,onDeleteReply:f,onEditReply:p,scrollToCommentRef:g}){let{t:w}=(0,s.Bd)(),j=(0,o.useRef)(new Map),y=(0,o.useRef)(null),k=(0,o.useCallback)(e=>{let t=j.current.get(e);t&&t.scrollIntoView({behavior:"smooth",block:"center"})},[]);(0,o.useEffect)(()=>{g.current=k},[k,g]);let N=[...e].sort((e,t)=>e.anchor.startOffset-t.anchor.startOffset);return(0,n.jsxs)("div",{ref:y,className:"h-full flex flex-col bg-card",children:[(0,n.jsxs)("div",{className:"px-4 py-2 bg-secondary border-b border-border flex-shrink-0 flex items-center",children:[(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:0===e.length?w("review.selectTextToComment"):t?w("review.commentsNavCount",{current:N.findIndex(e=>e.id===t)+1,total:e.length}):w("review.commentsCount",{count:e.length})}),e.length>0&&(0,n.jsxs)("div",{className:"flex items-center gap-1 ml-2",children:[(0,n.jsxs)("button",{onClick:()=>c("prev"),className:"px-1.5 py-0.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors flex items-center gap-0.5",title:w("review.prevComment"),children:[(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"15 18 9 12 15 6"})}),w("review.prevComment")]}),(0,n.jsxs)("button",{onClick:()=>c("next"),className:"px-1.5 py-0.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors flex items-center gap-0.5",title:w("review.nextComment"),children:[w("review.nextComment"),(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"9 18 15 12 9 6"})})]})]})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto",children:0===N.length?(0,n.jsx)("div",{className:"flex items-center justify-center h-full text-muted-foreground text-sm",children:(0,n.jsxs)("div",{className:"text-center",children:[(0,n.jsx)("div",{className:"text-2xl mb-2",children:"\uD83D\uDCAC"}),(0,n.jsx)("div",{children:w("review.selectTextHint")})]})}):(0,n.jsx)("div",{className:"p-3 space-y-3",children:N.map(e=>(0,n.jsx)(b,{ref:t=>{t?j.current.set(e.id,t):j.current.delete(e.id)},comment:e,isActive:e.id===t,isOwnComment:e.authorId===r,isAdmin:l,currentAuthorId:r,canInteract:i,userNameMap:a,onClick:()=>d(e.id),onDelete:()=>u(e.id),onEdit:t=>m(e.id,t),onToggleClosed:t=>x(e.id,t),onAddReply:t=>h(e.id,t),onDeleteReply:t=>f(e.id,t),onEditReply:(t,r)=>p(e.id,t,r)},e.id))})})]})}function w({identity:e}){let{t}=(0,s.Bd)(),[r,i]=(0,o.useState)(!1),[l,a]=(0,o.useState)(""),d=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(!r)return;let e=e=>{d.current&&!d.current.contains(e.target)&&i(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[r]);let c=()=>{let t=l.trim();t&&t!==e.name&&e.confirmName(t),i(!1)};return(0,n.jsxs)("div",{className:"relative",ref:d,children:[(0,n.jsxs)("button",{onClick:()=>{r||a(e.name),i(!r)},className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors flex items-center gap-1",title:t("review.identitySettings"),children:[(0,n.jsx)("span",{className:"w-5 h-5 rounded-full bg-brand/20 text-brand flex items-center justify-center text-[10px] font-bold",children:e.name.charAt(0)}),(0,n.jsx)("span",{className:"text-muted-foreground",children:e.name})]}),r&&(0,n.jsxs)("div",{className:"absolute right-0 top-full mt-1 w-56 bg-card border border-border rounded-lg shadow-lg p-3 z-50",children:[(0,n.jsx)("div",{className:"text-xs text-muted-foreground mb-2",children:t("review.reviewNickname")}),(0,n.jsx)("input",{type:"text",value:l,onChange:e=>a(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.nativeEvent.isComposing||c()},className:"w-full px-2 py-1 text-sm bg-secondary border border-border rounded focus:outline-none focus:border-brand",autoFocus:!0}),(0,n.jsxs)("div",{className:"flex items-center gap-2 mt-2",children:[(0,n.jsx)("button",{onClick:()=>{e.randomize(),i(!1)},className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:t("review.random")}),(0,n.jsx)("div",{className:"flex-1"}),(0,n.jsx)("button",{onClick:()=>i(!1),className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:t("common.cancel")}),(0,n.jsx)("button",{onClick:c,className:"px-2 py-1 text-xs rounded bg-brand text-white hover:bg-brand/90 transition-colors",children:t("common.save")})]})]})]})}function j({currentReviewId:e,onSelect:t,readOnly:r,refreshTrigger:i,onViewComments:l}){let{t:a}=(0,s.Bd)(),[d,c]=(0,o.useState)([]),[u,m]=(0,o.useState)(null),[x,h]=(0,o.useState)(null),[f,p]=(0,o.useState)(!1),[g,b]=(0,o.useState)(null),v=(0,o.useRef)(null),[w,y]=(0,o.useState)(null),k=(0,o.useCallback)(async()=>{try{let e=await fetch("/api/review");if(e.ok){let t=await e.json();c(t.reviews||[])}}catch{}},[]);(0,o.useEffect)(()=>{queueMicrotask(()=>k())},[k]),(0,o.useEffect)(()=>{queueMicrotask(()=>k())},[e,i,k]);let N=(0,o.useCallback)(async(e,t,r)=>{if(e.stopPropagation(),!x){h(t);try{(await fetch(`/api/review/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({active:!r})})).ok&&c(e=>e.map(e=>e.id===t?{...e,active:!r}:e))}catch{}h(null)}},[x]),C=(0,o.useCallback)(async(r,n)=>{if(r.stopPropagation(),!u){m(n);try{if((await fetch(`/api/review/${n}`,{method:"DELETE"})).ok&&(c(e=>e.filter(e=>e.id!==n)),n===e)){let e=d.filter(e=>e.id!==n);e.length>0&&t(e[0].id)}}catch{}m(null)}},[u,e,d,t]),E=(0,o.useCallback)((e,t)=>{v.current=t,e.dataTransfer.effectAllowed="move";let r=e.currentTarget;requestAnimationFrame(()=>r.classList.add("opacity-30"))},[]),S=(0,o.useCallback)(e=>{v.current=null,y(null),e.currentTarget instanceof HTMLElement&&e.currentTarget.classList.remove("opacity-30")},[]),R=(0,o.useCallback)((e,t)=>{e.preventDefault(),e.dataTransfer.dropEffect="move",v.current&&v.current!==t&&y(t)},[]),T=(0,o.useCallback)(async(e,t)=>{e.preventDefault(),y(null);let r=v.current;v.current=null,r&&r!==t&&c(e=>{let n=[...e],o=n.findIndex(e=>e.id===r),s=n.findIndex(e=>e.id===t);if(-1===o||-1===s)return e;let[i]=n.splice(o,1);return n.splice(s,0,i),fetch("/api/review/order",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({order:n.map(e=>e.id)})}).catch(()=>{}),n})},[]),A=r?d.filter(e=>e.active):d,I=!r;return f?(0,n.jsxs)("div",{className:"h-full flex flex-col items-center bg-secondary/50 w-9 flex-shrink-0 border-r border-border",children:[(0,n.jsx)("button",{onClick:()=>p(!1),className:"p-1.5 mt-2 text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",title:a("review.expandList"),children:(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"9 18 15 12 9 6"})})}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground/50 mt-2",style:{writingMode:"vertical-rl"},children:r?a("review.nDocs",{count:A.length}):a("review.nReviews",{count:A.length})})]}):(0,n.jsxs)("div",{className:"h-full flex flex-col bg-secondary/50 w-[200px] flex-shrink-0 border-r border-border",children:[(0,n.jsxs)("div",{className:"px-3 py-2 border-b border-border flex-shrink-0 flex items-center justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:r?a("review.docList"):a("review.allReviewsList")}),(0,n.jsx)("span",{className:"text-xs text-muted-foreground/60 ml-1.5",children:A.length})]}),(0,n.jsx)("button",{onClick:()=>p(!0),className:"p-0.5 text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",title:a("review.collapseList"),children:(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"15 18 9 12 15 6"})})})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-y-auto",children:[A.map(o=>(0,n.jsxs)("div",{draggable:I,onDragStart:I?e=>E(e,o.id):void 0,onDragEnd:I?S:void 0,onDragOver:I?e=>R(e,o.id):void 0,onDrop:I?e=>T(e,o.id):void 0,onMouseEnter:e=>{let t=e.currentTarget.getBoundingClientRect();b({id:o.id,text:o.title,top:t.top+t.height/2,left:t.right})},onMouseLeave:()=>b(e=>e?.id===o.id?null:e),onClick:()=>t(o.id),className:`group px-3 py-2 cursor-pointer border-b transition-colors ${w===o.id?"border-b-brand border-t border-t-transparent":"border-b-border/50"} ${o.id===e?"bg-accent/60":"hover:bg-accent/30"}`,children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[!r&&(0,n.jsx)("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${o.active?"bg-green-500":"bg-muted-foreground/40"}`}),(0,n.jsx)("span",{className:"text-xs truncate flex-1",children:o.title}),o.commentCount>0&&l&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),l(o.id)},className:"flex-shrink-0 p-0.5 rounded text-muted-foreground/0 group-hover:text-muted-foreground/60 hover:!text-brand hover:!bg-brand/10 transition-colors",title:a("review.viewComments"),children:(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"})})}),!r&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{onClick:e=>N(e,o.id,o.active),className:`flex-shrink-0 p-0.5 rounded text-muted-foreground/0 group-hover:text-muted-foreground/60 hover:!text-foreground hover:!bg-accent transition-colors ${x===o.id?"opacity-50 pointer-events-none":""}`,title:o.active?a("review.closeReview"):a("review.reopenReview"),children:o.active?(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M18.36 6.64a9 9 0 1 1-12.73 0"}),(0,n.jsx)("line",{x1:"12",y1:"2",x2:"12",y2:"12"})]}):(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M18.36 6.64A9 9 0 0 1 12 21 9 9 0 0 1 5.64 6.64"}),(0,n.jsx)("line",{x1:"12",y1:"2",x2:"12",y2:"12"})]})}),(0,n.jsx)("button",{onClick:e=>C(e,o.id),className:`flex-shrink-0 p-0.5 rounded text-muted-foreground/0 group-hover:text-muted-foreground/60 hover:!text-red-500 hover:!bg-red-500/10 transition-colors ${u===o.id?"opacity-50 pointer-events-none":""}`,title:a("review.deleteReview"),children:(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("polyline",{points:"3 6 5 6 21 6"}),(0,n.jsx)("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})]})})]})]}),o.commentCount>0&&(0,n.jsx)("div",{className:`text-[10px] text-muted-foreground/50 mt-0.5 ${r?"":"pl-3"}`,children:a("review.nComments",{count:o.commentCount})})]},o.id)),0===A.length&&(0,n.jsx)("div",{className:"px-3 py-4 text-xs text-muted-foreground/50 text-center",children:r?a("review.noOpenDocs"):a("review.noReviews")})]}),g&&(0,n.jsx)("div",{className:"fixed z-50 px-2 py-1 text-xs bg-popover text-popover-foreground border border-border rounded shadow-md whitespace-nowrap pointer-events-none",style:{top:g.top,left:g.left+8,transform:"translateY(-50%)"},children:g.text})]})}function y({currentName:e,onConfirm:t,onSkip:r}){let{t:i}=(0,s.Bd)(),[l,a]=(0,o.useState)(e),d=(0,o.useRef)(null);(0,o.useEffect)(()=>{d.current?.select()},[]);let c=()=>{let e=l.trim();e&&t(e)};return(0,n.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",children:(0,n.jsxs)("div",{className:"bg-card border border-border rounded-xl shadow-2xl w-80 p-5",children:[(0,n.jsx)("h2",{className:"text-base font-semibold mb-1",children:i("review.setNickname")}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground mb-4",children:i("review.nicknameHint")}),(0,n.jsx)("input",{ref:d,type:"text",value:l,onChange:e=>a(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.nativeEvent.isComposing||c(),"Escape"===e.key&&r()},placeholder:i("review.nicknamePlaceholder"),maxLength:20,className:"w-full px-3 py-2 text-sm bg-secondary border border-border rounded-lg focus:outline-none focus:border-brand",autoFocus:!0}),(0,n.jsxs)("div",{className:"flex items-center justify-end gap-2 mt-4",children:[(0,n.jsx)("button",{onClick:r,className:"px-3 py-1.5 text-xs rounded-lg hover:bg-accent transition-colors text-muted-foreground",children:i("review.skipForNow")}),(0,n.jsx)("button",{onClick:c,disabled:!l.trim(),className:"px-4 py-1.5 text-xs rounded-lg bg-brand text-white hover:bg-brand/90 transition-colors disabled:opacity-40",children:i("common.save")})]})]})})}var k=r(24750);function N(){let e=p.A.t("reviewUtils.adjectives",{returnObjects:!0}),t=p.A.t("reviewUtils.nouns",{returnObjects:!0}),r=e[Math.floor(Math.random()*e.length)],n=t[Math.floor(Math.random()*t.length)];return`${r}${n}`}r(34015);var C=r(38093);function E({reviewId:e}){let{t}=(0,s.Bd)(),[r,i]=(0,o.useState)(e),[l,d]=(0,o.useState)(null),[c,u]=(0,o.useState)(!0),[m,x]=(0,o.useState)(null),[h,p]=(0,o.useState)(null),[g,b]=(0,o.useState)(!1),S=function(){let[e,t]=(0,o.useState)(""),[r,n]=(0,o.useState)(""),[s,i]=(0,o.useState)(!1),[l,a]=(0,o.useState)(!0);(0,o.useEffect)(()=>{fetch("/api/review/identify").then(e=>e.ok?e.json():null).then(e=>{e?.authorId?(t(e.authorId),e.name?(n(e.name),i(!0)):(n(N()),i(!1))):(t(Math.random().toString(36).slice(2,10)),n(N()),i(!1))}).catch(()=>{t(Math.random().toString(36).slice(2,10)),n(N()),i(!1)}).finally(()=>a(!1))},[]);let d=(0,o.useCallback)(e=>{let t=e.trim();t&&(n(t),i(!0),fetch("/api/review/identify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t})}).catch(()=>{}))},[]);return{authorId:e,name:r,nameConfirmed:s,loading:l,setName:(0,o.useCallback)(e=>{let t=e.trim();t&&(n(t),fetch("/api/review/identify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t})}).catch(()=>{}))},[]),confirmName:d,randomize:(0,o.useCallback)(()=>{n(N())},[])}}(),{resolvedTheme:R,setTheme:T}=(0,a.D)(),[A,I]=(0,o.useState)({}),[L,P]=(0,o.useState)(!1),[$,M]=(0,o.useState)(!1),D=(0,o.useCallback)(async()=>{try{let e=await fetch("/api/review/users");if(e.ok){let t=await e.json(),r={};for(let[e,n]of Object.entries(t.users))r[e]=n.name;I(r)}}catch{}},[]);(0,o.useEffect)(()=>{D()},[D]),(0,o.useEffect)(()=>{S.loading||!S.authorId||S.nameConfirmed||P(!0)},[S.loading,S.authorId,S.nameConfirmed]),(0,o.useEffect)(()=>{b("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname)},[]),(0,o.useEffect)(()=>{let e=localStorage.getItem("theme");e&&"system"!==e||T("dark")},[T]);let O=(0,o.useRef)(void 0),B=(0,o.useRef)(void 0),F=(0,o.useCallback)(e=>{e!==r&&(i(e),x(null),p(null),window.history.replaceState(null,"",`/review/${e}`))},[r]),_=(0,o.useCallback)(async()=>{try{let e=await fetch(`/api/review/${r}`);if(!e.ok)return void(404===e.status?x(t("review.reviewNotExist")):x(t("review.loadFailed")));let n=await e.json();d(n.review),x(null)}catch{x(t("review.networkError"))}finally{u(!1)}},[r]);(0,o.useEffect)(()=>{_()},[_]),(0,o.useEffect)(()=>{let e=setInterval(()=>{_(),D()},1e4);return()=>clearInterval(e)},[_,D]);let z=(0,o.useCallback)(async(e,n)=>{if(S.authorId)try{(await fetch(`/api/review/${r}/comments`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({author:S.name,authorId:S.authorId,content:e,anchor:n})})).ok&&await _()}catch{(0,C.oR)(t("toast.addCommentFailed"),"error")}},[r,S,_]),W=(0,o.useCallback)(async e=>{try{(await fetch(`/api/review/${r}/comments?commentId=${e}`,{method:"DELETE"})).ok&&await _()}catch{(0,C.oR)(t("toast.deleteCommentFailed"),"error")}},[r,_]),H=(0,o.useCallback)(async(e,n)=>{try{(await fetch(`/api/review/${r}/comments`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({commentId:e,content:n})})).ok&&await _()}catch{(0,C.oR)(t("toast.editCommentFailed"),"error")}},[r,_]),K=(0,o.useCallback)(async(e,n)=>{try{(await fetch(`/api/review/${r}/comments`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({commentId:e,closed:n})})).ok&&await _()}catch{(0,C.oR)(t("toast.operationFailed"),"error")}},[r,_,t]),J=(0,o.useCallback)(async(e,n)=>{if(S.authorId)try{(await fetch(`/api/review/${r}/replies`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({commentId:e,author:S.name,authorId:S.authorId,content:n})})).ok&&await _()}catch{(0,C.oR)(t("toast.addReplyFailed"),"error")}},[r,S,_]),q=(0,o.useCallback)(async(e,n)=>{try{(await fetch(`/api/review/${r}/replies?commentId=${e}&replyId=${n}`,{method:"DELETE"})).ok&&await _()}catch{(0,C.oR)(t("toast.deleteReplyFailed"),"error")}},[r,_]),V=(0,o.useCallback)(async(e,n,o)=>{try{(await fetch(`/api/review/${r}/replies`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({commentId:e,replyId:n,content:o})})).ok&&await _()}catch{(0,C.oR)(t("toast.editReplyFailed"),"error")}},[r,_]),U=(0,o.useCallback)(async()=>{try{let e=await fetch("/api/review/share-info"),n=await e.json(),o=n.shareBase?`${n.shareBase}/review/${r}`:window.location.href;await navigator.clipboard.writeText(o),(0,C.oR)(t("toast.linkCopied"),"success")}catch{(0,C.oR)(t("toast.copyFailed"),"error")}},[r]),X=(0,o.useCallback)(e=>{p(e),B.current?.(e)},[]),Y=(0,o.useCallback)(e=>{p(e),O.current?.(e)},[]),Z=(0,o.useCallback)(e=>{let t;if(!l||0===l.comments.length)return;let r=[...l.comments].sort((e,t)=>e.anchor.startOffset-t.anchor.startOffset),n=h?r.findIndex(e=>e.id===h):-1;t="next"===e?n<r.length-1?n+1:0:n>0?n-1:r.length-1;let o=r[t];p(o.id),B.current?.(o.id),O.current?.(o.id)},[l,h]);return(0,n.jsxs)("div",{className:"h-screen flex flex-col bg-background text-foreground overflow-hidden",children:[L&&(0,n.jsx)(y,{currentName:S.name,onConfirm:e=>{S.confirmName(e),P(!1),D()},onSkip:()=>P(!1)}),l&&(0,n.jsx)(k._,{isOpen:$,onClose:()=>M(!1),comments:l.comments,reviewTitle:l.title,userNameMap:A,onCommentClick:e=>{p(e),B.current?.(e),O.current?.(e)}}),l&&(0,n.jsx)("div",{className:"py-2 bg-secondary border-b border-border flex-shrink-0 flex justify-center",children:(0,n.jsxs)("div",{className:"w-full max-w-[1800px] px-4 flex items-center gap-3",children:[(0,n.jsx)("h1",{className:"text-sm font-semibold truncate",children:l.title}),(0,n.jsx)("span",{className:"text-[11px] text-muted-foreground flex-shrink-0",children:t("review.updatedAt",{date:new Date(l.updatedAt||l.createdAt).toLocaleDateString(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})})}),(0,n.jsx)("span",{className:"flex-1"}),!g&&(0,n.jsx)("span",{className:`px-2 py-0.5 text-xs rounded-full ${l.active?"bg-green-500/15 text-green-600 dark:text-green-400":"bg-muted text-muted-foreground"}`,children:l.active?t("review.active"):t("review.closed")}),(0,n.jsxs)("button",{onClick:()=>M(!0),className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors text-muted-foreground flex items-center gap-1",title:t("review.viewAllComments"),children:[(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"})}),t("review.viewCommentBtn")]}),(0,n.jsx)("button",{onClick:U,className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:t("review.copyLink")}),(0,n.jsx)("button",{onClick:()=>T("dark"===R?"light":"dark"),className:"p-1 text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",title:"dark"===R?t("settings.switchLight"):t("settings.switchDark"),children:"dark"===R?(0,n.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("circle",{cx:"12",cy:"12",r:"5"}),(0,n.jsx)("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),(0,n.jsx)("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),(0,n.jsx)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),(0,n.jsx)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),(0,n.jsx)("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),(0,n.jsx)("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),(0,n.jsx)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),(0,n.jsx)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})]}):(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})})}),(0,n.jsx)(w,{identity:S})]})}),(0,n.jsx)("div",{className:"flex-1 flex justify-center overflow-hidden",children:(0,n.jsxs)("div",{className:"w-full max-w-[1800px] flex overflow-hidden",children:[(0,n.jsx)(j,{currentReviewId:r,onSelect:F,readOnly:!g,refreshTrigger:l?.comments.length,onViewComments:e=>{e!==r&&F(e),M(!0)}}),c?(0,n.jsx)("div",{className:"flex-1 flex items-center justify-center",children:(0,n.jsx)("div",{className:"text-muted-foreground",children:t("common.loading")})}):m||!l?(0,n.jsx)("div",{className:"flex-1 flex items-center justify-center",children:(0,n.jsxs)("div",{className:"text-center",children:[(0,n.jsx)("div",{className:"text-xl mb-2",children:m||t("review.reviewNotFound")}),(0,n.jsx)("div",{className:"text-sm text-muted-foreground",children:t("review.checkLink")})]})}):(0,n.jsxs)("div",{className:"flex-1 flex overflow-hidden",children:[(0,n.jsx)("div",{className:"flex-1 h-full border-r border-border overflow-hidden",children:(0,n.jsx)(f,{content:l.content,comments:l.comments,activeCommentId:h,isActive:l.active,onAddComment:z,onHighlightClick:Y,scrollToHighlightRef:B})}),(0,n.jsx)("div",{className:"w-[360px] h-full overflow-hidden flex-shrink-0",children:(0,n.jsx)(v,{comments:l.comments,activeCommentId:h,currentAuthorId:S.authorId,isActive:l.active,isAdmin:g,userNameMap:A,onCommentClick:X,onNavigateComment:Z,onDeleteComment:W,onEditComment:H,onToggleCommentClosed:K,onAddReply:J,onDeleteReply:q,onEditReply:V,scrollToCommentRef:O})})]})]})})]})}}},e=>{e.O(0,[8653,7330,9268,9114,3700,2171,3530,9062,8441,3794,7358],()=>e(e.s=7482)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2951],{7482:(e,t,r)=>{Promise.resolve().then(r.bind(r,97899))},14978:(e,t,r)=>{"use strict";r.d(t,{T:()=>j});var n=r(95155),o=r(46361),s=r(79204),i=r(98164),l=r(77815),a=r(97720),d=r(88374);r(84559),r(21227);var c=r(91334),u=r(38194),m=r(88522),x=r(12115),h=r(72816);let f=[s.A,i.A,l.jb],p=[s.A,l.jb],g=[a.A,d.A],b=[a.A];function v(e){return e.replace(/^(\|.+\|)$/gm,e=>/^\|[\s:|-]+\|$/.test(e)?e:e.replace(/`([^`]*)`/g,(e,t)=>t.includes("|")?"`"+t.replace(/\|/g,"\\|")+"`":e))}function w(e){return e.replace(/\$(\d)/g,"\\$$1")}let j=(0,x.memo)(function({content:e,isUser:t=!1,isStreaming:r=!1,enableMath:s=!0,rehypePlugins:i}){let{resolvedTheme:l}=(0,h.D)(),a="dark"===l,d=(0,x.useMemo)(()=>({code({className:e,children:t,node:r,...o}){let s=/language-(\w+)/.exec(e||""),i=String(t);if(!s&&!e&&!i.includes("\n"))return(0,n.jsx)("code",{className:"px-1.5 py-0.5 mx-0.5 rounded bg-accent text-sm font-mono",...o,children:t});let l=String(t).replace(/\n$/,""),d=s?.[1]||"text",x=Number(o["data-source-start"])||0,h=x?x+1:0,f=0;return(0,n.jsx)(c.A,{style:a?u.A:m.A,language:d,PreTag:"div",customStyle:{margin:"0.75rem 0",borderRadius:"0.375rem",fontSize:"0.875rem"},wrapLines:!0,lineProps:()=>{let e=h+f;return f++,{"data-source-start":e,"data-source-end":e,style:{display:"block"}}},children:l})},p:({children:e,node:t,...r})=>(0,n.jsx)("p",{className:"mb-3 last:mb-0",...r,children:e}),h1:({children:e,node:t,...r})=>(0,n.jsx)("h1",{className:"text-xl font-bold mb-3 mt-4 first:mt-0",...r,children:e}),h2:({children:e,node:t,...r})=>(0,n.jsx)("h2",{className:"text-lg font-bold mb-2 mt-3 first:mt-0",...r,children:e}),h3:({children:e,node:t,...r})=>(0,n.jsx)("h3",{className:"text-base font-bold mb-2 mt-3 first:mt-0",...r,children:e}),ul:({children:e,node:t,...r})=>(0,n.jsx)("ul",{className:"list-disc list-inside mb-3 space-y-1",...r,children:e}),ol:({children:e,node:t,...r})=>(0,n.jsx)("ol",{className:"list-decimal list-inside mb-3 space-y-1",...r,children:e}),li:({children:e,node:t,...r})=>(0,n.jsx)("li",{className:"leading-relaxed",...r,children:e}),blockquote:({children:e,node:t,...r})=>(0,n.jsx)("blockquote",{className:"border-l-4 border-border pl-4 my-3 italic text-muted-foreground",...r,children:e}),a:({href:e,children:t,node:r,...o})=>(0,n.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"text-brand hover:underline",...o,children:t}),table:({children:e,node:t,...r})=>(0,n.jsx)("div",{className:"overflow-x-auto my-3",...r,children:(0,n.jsx)("table",{className:"min-w-full border border-border",children:e})}),thead:({children:e,node:t,...r})=>(0,n.jsx)("thead",{className:"bg-accent",...r,children:e}),th:({children:e,node:t,...r})=>(0,n.jsx)("th",{className:"px-4 py-2 text-left font-semibold border-b border-border",...r,children:e}),td:({children:e,node:t,...r})=>(0,n.jsx)("td",{className:"px-4 py-2 border-b border-border",...r,children:e}),hr:({node:e,...t})=>(0,n.jsx)("hr",{className:"my-4 border-border",...t}),img:({src:e,alt:t,node:r,height:o,width:s,style:i,...l})=>{if(!(o||s||i))return(0,n.jsx)("img",{src:e,alt:t||"",className:"max-w-full h-auto rounded-lg my-3",...l});let a=e=>e?/^\d+$/.test(String(e))?`${e}px`:String(e):void 0,d={...i,height:a(o)??i?.height,width:a(s)??i?.width};return(0,n.jsx)("img",{src:e,alt:t||"",style:d,className:"inline-block align-middle",...l})},strong:({children:e,node:t,...r})=>(0,n.jsx)("strong",{className:"font-bold",...r,children:e}),em:({children:e,node:t,...r})=>(0,n.jsx)("em",{className:"italic",...r,children:e}),del:({children:e,node:t,...r})=>(0,n.jsx)("del",{className:"line-through",...r,children:e})}),[a]),j=s?f:p,y=s?g:b,k=(0,x.useMemo)(()=>{if(t||r)return e;let n=v(!function(e){if(/^\|[\s:|-]+\|$/m.test(e))return!1;if(/[┌┐└┘│─├┤┬┴┼╔╗╚╝║═╭╮╯╰▲▼◀▶△▽◁▷]/.test(e)||/\+[-=]{2,}\+/.test(e))return!0;let t=e.split("\n").filter(e=>/^\s*\||\|\s*$/.test(e));if(t.length>=3){let e=t.map(e=>(e.match(/\|/g)||[]).length);return!e.every(t=>t===e[0])||!(e[0]>=3)}return!1}(e)||/^```[\s\S]*```$/m.test(e.trim())?e:"```text\n"+e.trim()+"\n```");return s?w(n):n},[e,t,r,s]),N=(0,x.useMemo)(()=>i?.length?[...y,...i]:y,[i,y]);if(t)return(0,n.jsx)("div",{className:"whitespace-pre-wrap break-words",children:e});if(r){let t=e.lastIndexOf("\n");if(-1===t)return(0,n.jsx)("div",{className:"whitespace-pre-wrap break-words",children:e});let r=e.slice(0,t+1),i=e.slice(t+1);return(0,n.jsxs)("div",{className:"markdown-body",children:[(0,n.jsx)(o.oz,{remarkPlugins:j,rehypePlugins:y,components:d,children:s?w(v(r)):v(r)}),i&&(0,n.jsx)("span",{className:"whitespace-pre-wrap",children:i})]})}return(0,n.jsx)("div",{className:"markdown-body",children:(0,n.jsx)(o.oz,{remarkPlugins:j,rehypePlugins:N,components:d,children:k})})})},44810:(e,t,r)=>{"use strict";r.d(t,{F2:()=>m,ZL:()=>c,a9:()=>u});var n=r(95155),o=r(12115),s=r(47650);let i=()=>()=>{},l=()=>document.body,a=()=>null,d=(0,o.createContext)(null);function c({children:e}){let t=(0,o.useContext)(d),r=(0,o.useSyncExternalStore)(i,l,a),n=t??r;return n?(0,s.createPortal)(e,n):null}function u({children:e}){let[t,r]=(0,o.useState)(null);return(0,n.jsxs)("div",{className:"relative w-full h-full",style:{transform:"translateZ(0)"},children:[(0,n.jsx)(d.Provider,{value:t,children:e}),(0,n.jsx)("div",{ref:r,className:"absolute inset-0 pointer-events-none [&>*]:pointer-events-auto"})]})}function m(){return(0,o.useContext)(d)}},97899:(e,t,r)=>{"use strict";r.d(t,{ReviewPage:()=>E});var n=r(95155),o=r(12115),s=r(79114),i=r(14978),l=r(94002),a=r(72816),d=r(95766);function c({selectedText:e,position:t,onSubmit:r,onCancel:i}){let{t:l}=(0,s.Bd)(),[a,d]=(0,o.useState)(""),u=(0,o.useRef)(null),m=(0,o.useRef)(null);(0,o.useEffect)(()=>{u.current?.focus()},[]),(0,o.useEffect)(()=>{let e=e=>{"Escape"===e.key&&i()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[i]),(0,o.useEffect)(()=>{let e=e=>{!m.current||m.current.contains(e.target)||a.trim()||i()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[a,i]);let x=()=>{let e=a.trim();e&&r(e)},h=e.length>60?e.slice(0,57)+"...":e;return(0,n.jsxs)("div",{ref:m,className:"absolute z-50 w-96 bg-card border border-border rounded-lg shadow-lg",style:{top:t.top,left:Math.max(8,t.left-192)},children:[(0,n.jsxs)("div",{className:"px-3 pt-3 pb-2",children:[(0,n.jsx)("div",{className:"text-xs text-muted-foreground mb-1",children:l("review.selectedText")}),(0,n.jsx)("div",{className:"text-xs bg-yellow-500/10 border-l-2 border-yellow-500 px-2 py-1 rounded-r truncate",children:h})]}),(0,n.jsx)("div",{className:"px-3 pb-2",children:(0,n.jsx)("textarea",{ref:u,value:a,onChange:e=>d(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),x())},placeholder:l("review.addCommentPlaceholder"),className:"w-full px-2 py-1.5 text-sm bg-secondary border border-border rounded resize-none focus:outline-none focus:border-brand",rows:4})}),(0,n.jsxs)("div",{className:"px-3 pb-3 flex items-center justify-between",children:[(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground",children:l("review.enterSubmitHint")}),(0,n.jsxs)("div",{className:"flex gap-1",children:[(0,n.jsx)("button",{onClick:i,className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:l("common.cancel")}),(0,n.jsx)("button",{onClick:x,disabled:!a.trim(),className:"px-2 py-1 text-xs rounded bg-brand text-white hover:bg-brand/90 transition-colors disabled:opacity-40",children:l("review.commentBtn")})]})]})]})}let u={bg:"rgba(234, 179, 8, 0.15)",bgActive:"rgba(234, 179, 8, 0.4)",bgPending:"rgba(234, 179, 8, 0.3)",border:"rgba(234, 179, 8, 0.7)",borderPending:"rgba(234, 179, 8, 0.9)"},m={bg:"rgba(234, 179, 8, 0.1)",bgActive:"rgba(234, 179, 8, 0.3)",bgPending:"rgba(234, 179, 8, 0.2)",border:"rgba(234, 179, 8, 0.5)",borderPending:"rgba(234, 179, 8, 0.7)"};function x({rects:e,activeCommentId:t,pendingCommentId:r,isDark:o}){if(0===e.length)return null;let s=o?m:u;return(0,n.jsx)("div",{style:{position:"absolute",top:0,left:0,width:"100%",height:0,overflow:"visible",pointerEvents:"none",zIndex:5},children:e.map((e,o)=>{let i=e.commentId===t,l=e.commentId===r,a=s.bg;return l?a=s.bgPending:i&&(a=s.bgActive),(0,n.jsx)("div",{"data-comment-id":e.commentId,style:{position:"absolute",top:e.top,left:e.left,width:e.width,height:e.height,backgroundColor:a,borderBottom:`1px solid ${l?s.borderPending:s.border}`,borderRadius:1,pointerEvents:"none"}},`${e.commentId}-${o}`)})})}let h=[d.W];function f({content:e,comments:t,activeCommentId:r,isActive:s,onAddComment:d,onHighlightClick:u,scrollToHighlightRef:m}){let{resolvedTheme:p}=(0,a.D)(),g=(0,o.useRef)(null),b=(0,o.useRef)(null),[v,w]=(0,o.useState)(null),{rects:j,scrollToHighlight:y}=function(e,t,r,n){let[s,i]=(0,o.useState)([]),l=(0,o.useRef)(0),a=(0,o.useRef)(r);(0,o.useEffect)(()=>{a.current=r},[r]);let d=(0,o.useCallback)(()=>{l.current&&cancelAnimationFrame(l.current),l.current=requestAnimationFrame(()=>{let r=e.current,n=t.current;if(!r||!n)return;let o=function(e,t,r){let n=[],o=t.getBoundingClientRect(),s=function(e){let t=[],r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),n=0;for(;r.nextNode();){let e=r.currentNode,o=e.textContent?.length||0;t.push({node:e,start:n,end:n+o}),n+=o}return t}(e);if(0===s.length)return n;for(let e of r){let{startOffset:r,endOffset:i}=e.anchor;if(r>=i)continue;let l=null,a=0,d=null,c=0;for(let{node:e,start:t,end:n}of s)if(!l&&r>=t&&r<n&&(l=e,a=r-t),i>t&&i<=n){d=e,c=i-t;break}if(!l||!d)continue;let u=document.createRange();try{u.setStart(l,a),u.setEnd(d,c)}catch{continue}for(let r of u.getClientRects())r.width<1||r.height<1||n.push({commentId:e.id,top:r.top-o.top+t.scrollTop,left:r.left-o.left+t.scrollLeft,width:r.width,height:r.height})}return n}(r,n,a.current);i(e=>e.length===o.length&&e.every((e,t)=>e.commentId===o[t].commentId&&.5>Math.abs(e.top-o[t].top)&&.5>Math.abs(e.left-o[t].left)&&.5>Math.abs(e.width-o[t].width)&&.5>Math.abs(e.height-o[t].height))?e:o)})},[e,t]);(0,o.useEffect)(()=>{d()},[r,n,d]),(0,o.useEffect)(()=>{let t=e.current;if(!t)return;let r=new MutationObserver(()=>d());return r.observe(t,{childList:!0,subtree:!0,characterData:!0}),()=>r.disconnect()},[e,d]),(0,o.useEffect)(()=>{let t=e.current;if(!t)return;let r=new ResizeObserver(()=>d());return r.observe(t),()=>r.disconnect()},[e,d]),(0,o.useEffect)(()=>()=>{l.current&&cancelAnimationFrame(l.current)},[]);let c=(0,o.useCallback)(e=>{let r=t.current;if(!r)return;let n=s.find(t=>t.commentId===e);if(!n)return;let o=r.clientHeight;r.scrollTo({top:n.top-o/2+n.height/2,behavior:"smooth"})},[t,s]);return{rects:s,scrollToHighlight:c}}(g,b,(0,o.useMemo)(()=>v?[...t,{id:"__pending__",author:"",authorId:"",content:"",anchor:v.anchor,createdAt:0,replies:[]}]:t,[t,v]),r);(0,o.useEffect)(()=>{m.current=y},[y,m]);let k=(0,o.useRef)(j);(0,o.useEffect)(()=>{k.current=j},[j]);let N=(0,o.useCallback)(e=>{let t=window.getSelection(),r=t&&!t.isCollapsed;if(r&&s&&g.current){let r=t.getRangeAt(0);if(g.current.contains(r.startContainer)&&g.current.contains(r.endContainer)){let n=function(e,t){let r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),n=0,o=-1,s=-1;for(;r.nextNode();){let e=r.currentNode,i=e.textContent?.length||0;if(e===t.startContainer&&(o=n+t.startOffset),e===t.endContainer){s=n+t.endOffset;break}n+=i}if(-1===o||-1===s||o>=s)return null;let i=e.textContent?.slice(o,s)||"";return i.trim()?{startOffset:o,endOffset:s,selectedText:i}:null}(g.current,r);if(n){let r=b.current??g.current.parentElement,o=r.getBoundingClientRect();w({anchor:n,position:{top:e.clientY-o.top+r.scrollTop+8,left:e.clientX-o.left}}),t.removeAllRanges();return}}}if(!r&&!v){let t=b.current;if(!t)return;let r=t.getBoundingClientRect(),n=e.clientX-r.left+t.scrollLeft,o=e.clientY-r.top+t.scrollTop;for(let e of k.current)if("__pending__"!==e.commentId&&n>=e.left&&n<=e.left+e.width&&o>=e.top&&o<=e.top+e.height)return void u(e.commentId)}},[s,v,u]),C=(0,o.useCallback)(e=>{v&&(d(e,v.anchor),w(null),window.getSelection()?.removeAllRanges())},[v,d]),E=(0,o.useCallback)(()=>{w(null),window.getSelection()?.removeAllRanges()},[]);return(0,n.jsxs)("div",{className:"h-full flex bg-card",children:[(0,n.jsx)(l.l,{content:e,containerRef:b}),(0,n.jsxs)("div",{ref:b,className:"flex-1 overflow-auto relative",onMouseUp:N,children:[(0,n.jsx)("div",{ref:g,className:"p-6 review-markdown-container",children:(0,n.jsx)(i.T,{content:e,rehypePlugins:h})}),(0,n.jsx)(x,{rects:j,activeCommentId:r,pendingCommentId:v?"__pending__":null,isDark:"dark"===p}),v&&(0,n.jsx)(c,{selectedText:v.anchor.selectedText,position:v.position,onSubmit:C,onCancel:E})]})]})}var p=r(87918);function g(e){let t=new Date(e),r=Math.floor((new Date().getTime()-t.getTime())/6e4);if(r<1)return p.A.t("common.justNow");if(r<60)return p.A.t("common.minutesAgo",{count:r});let n=Math.floor(r/60);if(n<24)return p.A.t("common.hoursAgo",{count:n});let o=Math.floor(n/24);return o<7?p.A.t("common.daysAgo",{count:o}):t.toLocaleDateString()}let b=(0,o.forwardRef)(function({comment:e,isActive:t,isOwnComment:r,isAdmin:i,currentAuthorId:l,canInteract:a,userNameMap:d,onClick:c,onDelete:u,onEdit:m,onToggleClosed:x,onAddReply:h,onDeleteReply:f,onEditReply:p},b){let{t:v}=(0,s.Bd)(),w=(e,t)=>d[e]||t,[j,y]=(0,o.useState)(""),[k,N]=(0,o.useState)(!1),[C,E]=(0,o.useState)(!1),[S,R]=(0,o.useState)(""),[T,A]=(0,o.useState)(null),[I,L]=(0,o.useState)(""),P=()=>{let e=j.trim();e&&(h(e),y(""),N(!1))},$=()=>{let t=S.trim();t&&t!==e.content&&m(t),E(!1)},M=()=>{if(!T)return;let t=I.trim(),r=e.replies.find(e=>e.id===T);!t||r&&t===r.content||p(T,t),A(null)},D=e.anchor.selectedText.length>80?e.anchor.selectedText.slice(0,77)+"...":e.anchor.selectedText,O=i||r||a;return e.closed?(0,n.jsxs)("div",{ref:b,className:"rounded-lg border border-border/50 bg-card/50 opacity-60 hover:opacity-80 transition-all cursor-pointer px-3 py-2 flex items-center gap-2",onClick:c,children:[(0,n.jsx)("span",{className:"w-4 h-4 rounded-full bg-brand/20 text-brand flex items-center justify-center text-[9px] font-bold flex-shrink-0",children:w(e.authorId,e.author).charAt(0)}),(0,n.jsx)("span",{className:"text-xs text-muted-foreground truncate flex-1",children:D}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground/50 flex-shrink-0",children:v("review.closedLabel")}),O&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),x(!1)},className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors flex-shrink-0",title:v("review.reopenReview"),children:v("review.reopen")}),(r&&a||i)&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),u()},className:"text-[10px] text-muted-foreground hover:text-red-500 transition-colors flex-shrink-0",title:v("review.deleteComment"),children:v("common.delete")})]}):(0,n.jsxs)("div",{ref:b,className:`rounded-lg border transition-all cursor-pointer ${t?"border-brand bg-brand/5 shadow-sm":"border-border bg-card hover:border-muted-foreground/30"}`,onClick:c,children:[(0,n.jsx)("div",{className:"px-3 pt-3 pb-1",children:(0,n.jsx)("div",{className:"text-xs bg-yellow-500/10 border-l-2 border-yellow-500 px-2 py-1 rounded-r text-muted-foreground truncate",children:D})}),(0,n.jsxs)("div",{className:"px-3 pt-2 flex items-center gap-2",children:[(0,n.jsx)("span",{className:"w-5 h-5 rounded-full bg-brand/20 text-brand flex items-center justify-center text-[10px] font-bold flex-shrink-0",children:w(e.authorId,e.author).charAt(0)}),(0,n.jsx)("span",{className:"text-xs font-medium",children:w(e.authorId,e.author)}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground",children:g(e.createdAt)}),(0,n.jsx)("div",{className:"flex-1"}),!C&&(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[O&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),x(!0)},className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors",title:v("review.closeComment"),children:v("review.closeComment")}),r&&a&&(0,n.jsx)("button",{onClick:t=>{t.stopPropagation(),R(e.content),E(!0)},className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors",title:v("review.editComment"),children:v("common.edit")}),(r&&a||i)&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),u()},className:"text-[10px] text-muted-foreground hover:text-red-500 transition-colors",title:v("review.deleteComment"),children:v("common.delete")})]})]}),(0,n.jsx)("div",{className:"px-3 pt-1 pb-2",children:C?(0,n.jsxs)("div",{onClick:e=>e.stopPropagation(),children:[(0,n.jsx)("textarea",{value:S,onChange:e=>R(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),$()),"Escape"===e.key&&E(!1)},className:"w-full px-2 py-1.5 text-sm bg-secondary border border-border rounded resize-none focus:outline-none focus:border-brand",rows:3,autoFocus:!0}),(0,n.jsxs)("div",{className:"flex items-center justify-end gap-1 mt-1",children:[(0,n.jsx)("button",{onClick:()=>E(!1),className:"px-2 py-0.5 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:v("common.cancel")}),(0,n.jsx)("button",{onClick:$,disabled:!S.trim(),className:"px-2 py-0.5 text-xs rounded bg-brand text-white hover:bg-brand/90 transition-colors disabled:opacity-40",children:v("common.save")})]})]}):(0,n.jsxs)("div",{className:"text-sm whitespace-pre-wrap",children:[e.content,e.edited&&(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground ml-1",children:v("review.edited")})]})}),e.replies.length>0&&(0,n.jsx)("div",{className:"mx-3 border-t border-border",children:e.replies.map(e=>(0,n.jsxs)("div",{className:"py-2 border-b border-border last:border-b-0",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"w-4 h-4 rounded-full bg-accent text-muted-foreground flex items-center justify-center text-[9px] font-bold flex-shrink-0",children:w(e.authorId,e.author).charAt(0)}),(0,n.jsx)("span",{className:"text-xs font-medium",children:w(e.authorId,e.author)}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground",children:g(e.createdAt)}),(0,n.jsx)("div",{className:"flex-1"}),T!==e.id&&(e.authorId===l&&a||i)&&(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[e.authorId===l&&a&&(0,n.jsx)("button",{onClick:t=>{var r;t.stopPropagation(),r=e.id,L(e.content),A(r)},className:"text-[10px] text-muted-foreground hover:text-foreground transition-colors",title:v("review.editReply"),children:v("common.edit")}),(0,n.jsx)("button",{onClick:t=>{t.stopPropagation(),f(e.id)},className:"text-[10px] text-muted-foreground hover:text-red-500 transition-colors",title:v("review.deleteReply"),children:v("common.delete")})]})]}),T===e.id?(0,n.jsxs)("div",{className:"mt-1 pl-6",onClick:e=>e.stopPropagation(),children:[(0,n.jsx)("textarea",{value:I,onChange:e=>L(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),M()),"Escape"===e.key&&A(null)},className:"w-full px-2 py-1 text-sm bg-secondary border border-border rounded resize-none focus:outline-none focus:border-brand",rows:2,autoFocus:!0}),(0,n.jsxs)("div",{className:"flex items-center justify-end gap-1 mt-1",children:[(0,n.jsx)("button",{onClick:()=>A(null),className:"px-2 py-0.5 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:v("common.cancel")}),(0,n.jsx)("button",{onClick:M,disabled:!I.trim(),className:"px-2 py-0.5 text-xs rounded bg-brand text-white hover:bg-brand/90 transition-colors disabled:opacity-40",children:v("common.save")})]})]}):(0,n.jsxs)("div",{className:"text-sm mt-0.5 pl-6 whitespace-pre-wrap",children:[e.content,e.edited&&(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground ml-1",children:v("review.edited")})]})]},e.id))}),(0,n.jsx)("div",{className:"px-3 pb-2 pt-1",children:k?(0,n.jsxs)("div",{className:"mt-1",onClick:e=>e.stopPropagation(),children:[(0,n.jsx)("textarea",{value:j,onChange:e=>y(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),P()),"Escape"===e.key&&N(!1)},placeholder:v("review.replyPlaceholder"),className:"w-full px-2 py-1 text-sm bg-secondary border border-border rounded resize-none focus:outline-none focus:border-brand",rows:2,autoFocus:!0}),(0,n.jsxs)("div",{className:"flex items-center justify-end gap-1 mt-1",children:[(0,n.jsx)("button",{onClick:()=>N(!1),className:"px-2 py-0.5 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:v("common.cancel")}),(0,n.jsx)("button",{onClick:P,disabled:!j.trim(),className:"px-2 py-0.5 text-xs rounded bg-brand text-white hover:bg-brand/90 transition-colors disabled:opacity-40",children:v("review.reply")})]})]}):a&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),N(!0)},className:"text-xs text-muted-foreground hover:text-foreground transition-colors",children:v("review.reply")})})]})});function v({comments:e,activeCommentId:t,currentAuthorId:r,isActive:i,isAdmin:l,userNameMap:a,onCommentClick:d,onNavigateComment:c,onDeleteComment:u,onEditComment:m,onToggleCommentClosed:x,onAddReply:h,onDeleteReply:f,onEditReply:p,scrollToCommentRef:g}){let{t:w}=(0,s.Bd)(),j=(0,o.useRef)(new Map),y=(0,o.useRef)(null),k=(0,o.useCallback)(e=>{let t=j.current.get(e);t&&t.scrollIntoView({behavior:"smooth",block:"center"})},[]);(0,o.useEffect)(()=>{g.current=k},[k,g]);let N=[...e].sort((e,t)=>e.anchor.startOffset-t.anchor.startOffset);return(0,n.jsxs)("div",{ref:y,className:"h-full flex flex-col bg-card",children:[(0,n.jsxs)("div",{className:"px-4 py-2 bg-secondary border-b border-border flex-shrink-0 flex items-center",children:[(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:0===e.length?w("review.selectTextToComment"):t?w("review.commentsNavCount",{current:N.findIndex(e=>e.id===t)+1,total:e.length}):w("review.commentsCount",{count:e.length})}),e.length>0&&(0,n.jsxs)("div",{className:"flex items-center gap-1 ml-2",children:[(0,n.jsxs)("button",{onClick:()=>c("prev"),className:"px-1.5 py-0.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors flex items-center gap-0.5",title:w("review.prevComment"),children:[(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"15 18 9 12 15 6"})}),w("review.prevComment")]}),(0,n.jsxs)("button",{onClick:()=>c("next"),className:"px-1.5 py-0.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors flex items-center gap-0.5",title:w("review.nextComment"),children:[w("review.nextComment"),(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"9 18 15 12 9 6"})})]})]})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto",children:0===N.length?(0,n.jsx)("div",{className:"flex items-center justify-center h-full text-muted-foreground text-sm",children:(0,n.jsxs)("div",{className:"text-center",children:[(0,n.jsx)("div",{className:"text-2xl mb-2",children:"\uD83D\uDCAC"}),(0,n.jsx)("div",{children:w("review.selectTextHint")})]})}):(0,n.jsx)("div",{className:"p-3 space-y-3",children:N.map(e=>(0,n.jsx)(b,{ref:t=>{t?j.current.set(e.id,t):j.current.delete(e.id)},comment:e,isActive:e.id===t,isOwnComment:e.authorId===r,isAdmin:l,currentAuthorId:r,canInteract:i,userNameMap:a,onClick:()=>d(e.id),onDelete:()=>u(e.id),onEdit:t=>m(e.id,t),onToggleClosed:t=>x(e.id,t),onAddReply:t=>h(e.id,t),onDeleteReply:t=>f(e.id,t),onEditReply:(t,r)=>p(e.id,t,r)},e.id))})})]})}function w({identity:e}){let{t}=(0,s.Bd)(),[r,i]=(0,o.useState)(!1),[l,a]=(0,o.useState)(""),d=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(!r)return;let e=e=>{d.current&&!d.current.contains(e.target)&&i(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[r]);let c=()=>{let t=l.trim();t&&t!==e.name&&e.confirmName(t),i(!1)};return(0,n.jsxs)("div",{className:"relative",ref:d,children:[(0,n.jsxs)("button",{onClick:()=>{r||a(e.name),i(!r)},className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors flex items-center gap-1",title:t("review.identitySettings"),children:[(0,n.jsx)("span",{className:"w-5 h-5 rounded-full bg-brand/20 text-brand flex items-center justify-center text-[10px] font-bold",children:e.name.charAt(0)}),(0,n.jsx)("span",{className:"text-muted-foreground",children:e.name})]}),r&&(0,n.jsxs)("div",{className:"absolute right-0 top-full mt-1 w-56 bg-card border border-border rounded-lg shadow-lg p-3 z-50",children:[(0,n.jsx)("div",{className:"text-xs text-muted-foreground mb-2",children:t("review.reviewNickname")}),(0,n.jsx)("input",{type:"text",value:l,onChange:e=>a(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.nativeEvent.isComposing||c()},className:"w-full px-2 py-1 text-sm bg-secondary border border-border rounded focus:outline-none focus:border-brand",autoFocus:!0}),(0,n.jsxs)("div",{className:"flex items-center gap-2 mt-2",children:[(0,n.jsx)("button",{onClick:()=>{e.randomize(),i(!1)},className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:t("review.random")}),(0,n.jsx)("div",{className:"flex-1"}),(0,n.jsx)("button",{onClick:()=>i(!1),className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:t("common.cancel")}),(0,n.jsx)("button",{onClick:c,className:"px-2 py-1 text-xs rounded bg-brand text-white hover:bg-brand/90 transition-colors",children:t("common.save")})]})]})]})}function j({currentReviewId:e,onSelect:t,readOnly:r,refreshTrigger:i,onViewComments:l}){let{t:a}=(0,s.Bd)(),[d,c]=(0,o.useState)([]),[u,m]=(0,o.useState)(null),[x,h]=(0,o.useState)(null),[f,p]=(0,o.useState)(!1),[g,b]=(0,o.useState)(null),v=(0,o.useRef)(null),[w,y]=(0,o.useState)(null),k=(0,o.useCallback)(async()=>{try{let e=await fetch("/api/review");if(e.ok){let t=await e.json();c(t.reviews||[])}}catch{}},[]);(0,o.useEffect)(()=>{queueMicrotask(()=>k())},[k]),(0,o.useEffect)(()=>{queueMicrotask(()=>k())},[e,i,k]);let N=(0,o.useCallback)(async(e,t,r)=>{if(e.stopPropagation(),!x){h(t);try{(await fetch(`/api/review/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({active:!r})})).ok&&c(e=>e.map(e=>e.id===t?{...e,active:!r}:e))}catch{}h(null)}},[x]),C=(0,o.useCallback)(async(r,n)=>{if(r.stopPropagation(),!u){m(n);try{if((await fetch(`/api/review/${n}`,{method:"DELETE"})).ok&&(c(e=>e.filter(e=>e.id!==n)),n===e)){let e=d.filter(e=>e.id!==n);e.length>0&&t(e[0].id)}}catch{}m(null)}},[u,e,d,t]),E=(0,o.useCallback)((e,t)=>{v.current=t,e.dataTransfer.effectAllowed="move";let r=e.currentTarget;requestAnimationFrame(()=>r.classList.add("opacity-30"))},[]),S=(0,o.useCallback)(e=>{v.current=null,y(null),e.currentTarget instanceof HTMLElement&&e.currentTarget.classList.remove("opacity-30")},[]),R=(0,o.useCallback)((e,t)=>{e.preventDefault(),e.dataTransfer.dropEffect="move",v.current&&v.current!==t&&y(t)},[]),T=(0,o.useCallback)(async(e,t)=>{e.preventDefault(),y(null);let r=v.current;v.current=null,r&&r!==t&&c(e=>{let n=[...e],o=n.findIndex(e=>e.id===r),s=n.findIndex(e=>e.id===t);if(-1===o||-1===s)return e;let[i]=n.splice(o,1);return n.splice(s,0,i),fetch("/api/review/order",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({order:n.map(e=>e.id)})}).catch(()=>{}),n})},[]),A=r?d.filter(e=>e.active):d,I=!r;return f?(0,n.jsxs)("div",{className:"h-full flex flex-col items-center bg-secondary/50 w-9 flex-shrink-0 border-r border-border",children:[(0,n.jsx)("button",{onClick:()=>p(!1),className:"p-1.5 mt-2 text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",title:a("review.expandList"),children:(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"9 18 15 12 9 6"})})}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground/50 mt-2",style:{writingMode:"vertical-rl"},children:r?a("review.nDocs",{count:A.length}):a("review.nReviews",{count:A.length})})]}):(0,n.jsxs)("div",{className:"h-full flex flex-col bg-secondary/50 w-[200px] flex-shrink-0 border-r border-border",children:[(0,n.jsxs)("div",{className:"px-3 py-2 border-b border-border flex-shrink-0 flex items-center justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:r?a("review.docList"):a("review.allReviewsList")}),(0,n.jsx)("span",{className:"text-xs text-muted-foreground/60 ml-1.5",children:A.length})]}),(0,n.jsx)("button",{onClick:()=>p(!0),className:"p-0.5 text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",title:a("review.collapseList"),children:(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"15 18 9 12 15 6"})})})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-y-auto",children:[A.map(o=>(0,n.jsxs)("div",{draggable:I,onDragStart:I?e=>E(e,o.id):void 0,onDragEnd:I?S:void 0,onDragOver:I?e=>R(e,o.id):void 0,onDrop:I?e=>T(e,o.id):void 0,onMouseEnter:e=>{let t=e.currentTarget.getBoundingClientRect();b({id:o.id,text:o.title,top:t.top+t.height/2,left:t.right})},onMouseLeave:()=>b(e=>e?.id===o.id?null:e),onClick:()=>t(o.id),className:`group px-3 py-2 cursor-pointer border-b transition-colors ${w===o.id?"border-b-brand border-t border-t-transparent":"border-b-border/50"} ${o.id===e?"bg-accent/60":"hover:bg-accent/30"}`,children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[!r&&(0,n.jsx)("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${o.active?"bg-green-500":"bg-muted-foreground/40"}`}),(0,n.jsx)("span",{className:"text-xs truncate flex-1",children:o.title}),o.commentCount>0&&l&&(0,n.jsx)("button",{onClick:e=>{e.stopPropagation(),l(o.id)},className:"flex-shrink-0 p-0.5 rounded text-muted-foreground/0 group-hover:text-muted-foreground/60 hover:!text-brand hover:!bg-brand/10 transition-colors",title:a("review.viewComments"),children:(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"})})}),!r&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{onClick:e=>N(e,o.id,o.active),className:`flex-shrink-0 p-0.5 rounded text-muted-foreground/0 group-hover:text-muted-foreground/60 hover:!text-foreground hover:!bg-accent transition-colors ${x===o.id?"opacity-50 pointer-events-none":""}`,title:o.active?a("review.closeReview"):a("review.reopenReview"),children:o.active?(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M18.36 6.64a9 9 0 1 1-12.73 0"}),(0,n.jsx)("line",{x1:"12",y1:"2",x2:"12",y2:"12"})]}):(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M18.36 6.64A9 9 0 0 1 12 21 9 9 0 0 1 5.64 6.64"}),(0,n.jsx)("line",{x1:"12",y1:"2",x2:"12",y2:"12"})]})}),(0,n.jsx)("button",{onClick:e=>C(e,o.id),className:`flex-shrink-0 p-0.5 rounded text-muted-foreground/0 group-hover:text-muted-foreground/60 hover:!text-red-500 hover:!bg-red-500/10 transition-colors ${u===o.id?"opacity-50 pointer-events-none":""}`,title:a("review.deleteReview"),children:(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("polyline",{points:"3 6 5 6 21 6"}),(0,n.jsx)("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})]})})]})]}),o.commentCount>0&&(0,n.jsx)("div",{className:`text-[10px] text-muted-foreground/50 mt-0.5 ${r?"":"pl-3"}`,children:a("review.nComments",{count:o.commentCount})})]},o.id)),0===A.length&&(0,n.jsx)("div",{className:"px-3 py-4 text-xs text-muted-foreground/50 text-center",children:r?a("review.noOpenDocs"):a("review.noReviews")})]}),g&&(0,n.jsx)("div",{className:"fixed z-50 px-2 py-1 text-xs bg-popover text-popover-foreground border border-border rounded shadow-md whitespace-nowrap pointer-events-none",style:{top:g.top,left:g.left+8,transform:"translateY(-50%)"},children:g.text})]})}function y({currentName:e,onConfirm:t,onSkip:r}){let{t:i}=(0,s.Bd)(),[l,a]=(0,o.useState)(e),d=(0,o.useRef)(null);(0,o.useEffect)(()=>{d.current?.select()},[]);let c=()=>{let e=l.trim();e&&t(e)};return(0,n.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",children:(0,n.jsxs)("div",{className:"bg-card border border-border rounded-xl shadow-2xl w-80 p-5",children:[(0,n.jsx)("h2",{className:"text-base font-semibold mb-1",children:i("review.setNickname")}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground mb-4",children:i("review.nicknameHint")}),(0,n.jsx)("input",{ref:d,type:"text",value:l,onChange:e=>a(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.nativeEvent.isComposing||c(),"Escape"===e.key&&r()},placeholder:i("review.nicknamePlaceholder"),maxLength:20,className:"w-full px-3 py-2 text-sm bg-secondary border border-border rounded-lg focus:outline-none focus:border-brand",autoFocus:!0}),(0,n.jsxs)("div",{className:"flex items-center justify-end gap-2 mt-4",children:[(0,n.jsx)("button",{onClick:r,className:"px-3 py-1.5 text-xs rounded-lg hover:bg-accent transition-colors text-muted-foreground",children:i("review.skipForNow")}),(0,n.jsx)("button",{onClick:c,disabled:!l.trim(),className:"px-4 py-1.5 text-xs rounded-lg bg-brand text-white hover:bg-brand/90 transition-colors disabled:opacity-40",children:i("common.save")})]})]})})}var k=r(24750);function N(){let e=p.A.t("reviewUtils.adjectives",{returnObjects:!0}),t=p.A.t("reviewUtils.nouns",{returnObjects:!0}),r=e[Math.floor(Math.random()*e.length)],n=t[Math.floor(Math.random()*t.length)];return`${r}${n}`}r(34015);var C=r(38093);function E({reviewId:e}){let{t}=(0,s.Bd)(),[r,i]=(0,o.useState)(e),[l,d]=(0,o.useState)(null),[c,u]=(0,o.useState)(!0),[m,x]=(0,o.useState)(null),[h,p]=(0,o.useState)(null),[g,b]=(0,o.useState)(!1),S=function(){let[e,t]=(0,o.useState)(""),[r,n]=(0,o.useState)(""),[s,i]=(0,o.useState)(!1),[l,a]=(0,o.useState)(!0);(0,o.useEffect)(()=>{fetch("/api/review/identify").then(e=>e.ok?e.json():null).then(e=>{e?.authorId?(t(e.authorId),e.name?(n(e.name),i(!0)):(n(N()),i(!1))):(t(Math.random().toString(36).slice(2,10)),n(N()),i(!1))}).catch(()=>{t(Math.random().toString(36).slice(2,10)),n(N()),i(!1)}).finally(()=>a(!1))},[]);let d=(0,o.useCallback)(e=>{let t=e.trim();t&&(n(t),i(!0),fetch("/api/review/identify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t})}).catch(()=>{}))},[]);return{authorId:e,name:r,nameConfirmed:s,loading:l,setName:(0,o.useCallback)(e=>{let t=e.trim();t&&(n(t),fetch("/api/review/identify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t})}).catch(()=>{}))},[]),confirmName:d,randomize:(0,o.useCallback)(()=>{n(N())},[])}}(),{resolvedTheme:R,setTheme:T}=(0,a.D)(),[A,I]=(0,o.useState)({}),[L,P]=(0,o.useState)(!1),[$,M]=(0,o.useState)(!1),D=(0,o.useCallback)(async()=>{try{let e=await fetch("/api/review/users");if(e.ok){let t=await e.json(),r={};for(let[e,n]of Object.entries(t.users))r[e]=n.name;I(r)}}catch{}},[]);(0,o.useEffect)(()=>{D()},[D]),(0,o.useEffect)(()=>{S.loading||!S.authorId||S.nameConfirmed||P(!0)},[S.loading,S.authorId,S.nameConfirmed]),(0,o.useEffect)(()=>{b("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname)},[]),(0,o.useEffect)(()=>{let e=localStorage.getItem("theme");e&&"system"!==e||T("dark")},[T]);let O=(0,o.useRef)(void 0),B=(0,o.useRef)(void 0),F=(0,o.useCallback)(e=>{e!==r&&(i(e),x(null),p(null),window.history.replaceState(null,"",`/review/${e}`))},[r]),_=(0,o.useCallback)(async()=>{try{let e=await fetch(`/api/review/${r}`);if(!e.ok)return void(404===e.status?x(t("review.reviewNotExist")):x(t("review.loadFailed")));let n=await e.json();d(n.review),x(null)}catch{x(t("review.networkError"))}finally{u(!1)}},[r]);(0,o.useEffect)(()=>{_()},[_]),(0,o.useEffect)(()=>{let e=setInterval(()=>{_(),D()},1e4);return()=>clearInterval(e)},[_,D]);let z=(0,o.useCallback)(async(e,n)=>{if(S.authorId)try{(await fetch(`/api/review/${r}/comments`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({author:S.name,authorId:S.authorId,content:e,anchor:n})})).ok&&await _()}catch{(0,C.oR)(t("toast.addCommentFailed"),"error")}},[r,S,_]),W=(0,o.useCallback)(async e=>{try{(await fetch(`/api/review/${r}/comments?commentId=${e}`,{method:"DELETE"})).ok&&await _()}catch{(0,C.oR)(t("toast.deleteCommentFailed"),"error")}},[r,_]),H=(0,o.useCallback)(async(e,n)=>{try{(await fetch(`/api/review/${r}/comments`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({commentId:e,content:n})})).ok&&await _()}catch{(0,C.oR)(t("toast.editCommentFailed"),"error")}},[r,_]),K=(0,o.useCallback)(async(e,n)=>{try{(await fetch(`/api/review/${r}/comments`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({commentId:e,closed:n})})).ok&&await _()}catch{(0,C.oR)(t("toast.operationFailed"),"error")}},[r,_,t]),J=(0,o.useCallback)(async(e,n)=>{if(S.authorId)try{(await fetch(`/api/review/${r}/replies`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({commentId:e,author:S.name,authorId:S.authorId,content:n})})).ok&&await _()}catch{(0,C.oR)(t("toast.addReplyFailed"),"error")}},[r,S,_]),q=(0,o.useCallback)(async(e,n)=>{try{(await fetch(`/api/review/${r}/replies?commentId=${e}&replyId=${n}`,{method:"DELETE"})).ok&&await _()}catch{(0,C.oR)(t("toast.deleteReplyFailed"),"error")}},[r,_]),V=(0,o.useCallback)(async(e,n,o)=>{try{(await fetch(`/api/review/${r}/replies`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({commentId:e,replyId:n,content:o})})).ok&&await _()}catch{(0,C.oR)(t("toast.editReplyFailed"),"error")}},[r,_]),U=(0,o.useCallback)(async()=>{try{let e=await fetch("/api/review/share-info"),n=await e.json(),o=n.shareBase?`${n.shareBase}/review/${r}`:window.location.href;await navigator.clipboard.writeText(o),(0,C.oR)(t("toast.linkCopied"),"success")}catch{(0,C.oR)(t("toast.copyFailed"),"error")}},[r]),X=(0,o.useCallback)(e=>{p(e),B.current?.(e)},[]),Y=(0,o.useCallback)(e=>{p(e),O.current?.(e)},[]),Z=(0,o.useCallback)(e=>{let t;if(!l||0===l.comments.length)return;let r=[...l.comments].sort((e,t)=>e.anchor.startOffset-t.anchor.startOffset),n=h?r.findIndex(e=>e.id===h):-1;t="next"===e?n<r.length-1?n+1:0:n>0?n-1:r.length-1;let o=r[t];p(o.id),B.current?.(o.id),O.current?.(o.id)},[l,h]);return(0,n.jsxs)("div",{className:"h-screen flex flex-col bg-background text-foreground overflow-hidden",children:[L&&(0,n.jsx)(y,{currentName:S.name,onConfirm:e=>{S.confirmName(e),P(!1),D()},onSkip:()=>P(!1)}),l&&(0,n.jsx)(k._,{isOpen:$,onClose:()=>M(!1),comments:l.comments,reviewTitle:l.title,userNameMap:A,onCommentClick:e=>{p(e),B.current?.(e),O.current?.(e)}}),l&&(0,n.jsx)("div",{className:"py-2 bg-secondary border-b border-border flex-shrink-0 flex justify-center",children:(0,n.jsxs)("div",{className:"w-full max-w-[1800px] px-4 flex items-center gap-3",children:[(0,n.jsx)("h1",{className:"text-sm font-semibold truncate",children:l.title}),(0,n.jsx)("span",{className:"text-[11px] text-muted-foreground flex-shrink-0",children:t("review.updatedAt",{date:new Date(l.updatedAt||l.createdAt).toLocaleDateString(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})})}),(0,n.jsx)("span",{className:"flex-1"}),!g&&(0,n.jsx)("span",{className:`px-2 py-0.5 text-xs rounded-full ${l.active?"bg-green-500/15 text-green-600 dark:text-green-400":"bg-muted text-muted-foreground"}`,children:l.active?t("review.active"):t("review.closed")}),(0,n.jsxs)("button",{onClick:()=>M(!0),className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors text-muted-foreground flex items-center gap-1",title:t("review.viewAllComments"),children:[(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"})}),t("review.viewCommentBtn")]}),(0,n.jsx)("button",{onClick:U,className:"px-2 py-1 text-xs rounded hover:bg-accent transition-colors text-muted-foreground",children:t("review.copyLink")}),(0,n.jsx)("button",{onClick:()=>T("dark"===R?"light":"dark"),className:"p-1 text-muted-foreground hover:text-foreground hover:bg-accent rounded transition-colors",title:"dark"===R?t("settings.switchLight"):t("settings.switchDark"),children:"dark"===R?(0,n.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("circle",{cx:"12",cy:"12",r:"5"}),(0,n.jsx)("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),(0,n.jsx)("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),(0,n.jsx)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),(0,n.jsx)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),(0,n.jsx)("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),(0,n.jsx)("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),(0,n.jsx)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),(0,n.jsx)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})]}):(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})})}),(0,n.jsx)(w,{identity:S})]})}),(0,n.jsx)("div",{className:"flex-1 flex justify-center overflow-hidden",children:(0,n.jsxs)("div",{className:"w-full max-w-[1800px] flex overflow-hidden",children:[(0,n.jsx)(j,{currentReviewId:r,onSelect:F,readOnly:!g,refreshTrigger:l?.comments.length,onViewComments:e=>{e!==r&&F(e),M(!0)}}),c?(0,n.jsx)("div",{className:"flex-1 flex items-center justify-center",children:(0,n.jsx)("div",{className:"text-muted-foreground",children:t("common.loading")})}):m||!l?(0,n.jsx)("div",{className:"flex-1 flex items-center justify-center",children:(0,n.jsxs)("div",{className:"text-center",children:[(0,n.jsx)("div",{className:"text-xl mb-2",children:m||t("review.reviewNotFound")}),(0,n.jsx)("div",{className:"text-sm text-muted-foreground",children:t("review.checkLink")})]})}):(0,n.jsxs)("div",{className:"flex-1 flex overflow-hidden",children:[(0,n.jsx)("div",{className:"flex-1 h-full border-r border-border overflow-hidden",children:(0,n.jsx)(f,{content:l.content,comments:l.comments,activeCommentId:h,isActive:l.active,onAddComment:z,onHighlightClick:Y,scrollToHighlightRef:B})}),(0,n.jsx)("div",{className:"w-[360px] h-full overflow-hidden flex-shrink-0",children:(0,n.jsx)(v,{comments:l.comments,activeCommentId:h,currentAuthorId:S.authorId,isActive:l.active,isAdmin:g,userNameMap:A,onCommentClick:X,onNavigateComment:Z,onDeleteComment:W,onEditComment:H,onToggleCommentClosed:K,onAddReply:J,onDeleteReply:q,onEditReply:V,scrollToCommentRef:O})})]})]})})]})}}},e=>{e.O(0,[8653,7330,9268,9114,3643,2171,3530,9062,8441,3794,7358],()=>e(e.s=7482)),_N_E=e.O()}]);
|