@kimuson/claude-code-viewer 0.6.0 → 0.6.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +78 -59
  2. package/dist/main.js +5241 -5070
  3. package/dist/main.js.map +4 -4
  4. package/dist/migrations/20260401113328_cute_stryfe/migration.sql +34 -0
  5. package/dist/migrations/20260401113328_cute_stryfe/snapshot.json +315 -0
  6. package/dist/static/apple-touch-icon.png +0 -0
  7. package/dist/static/assets/AuthProvider-BKc7q7ka.js +22 -0
  8. package/dist/static/assets/ProtectedRoute-DvQQEf13.js +1 -0
  9. package/dist/static/assets/card-DGrqtTaC.js +1 -0
  10. package/dist/static/assets/createLucideIcon-BL_meogc.js +1 -0
  11. package/dist/static/assets/dist-CG2L4mx5.js +1 -0
  12. package/dist/static/assets/dist-DiGJ7VFi.js +84 -0
  13. package/dist/static/assets/eye-SsvAY8oF.js +1 -0
  14. package/dist/static/assets/index-CxG0FuBy.css +2 -0
  15. package/dist/static/assets/index-Dmx9Pg1o.js +20 -0
  16. package/dist/static/assets/input-B_6IT1CP.js +1 -0
  17. package/dist/static/assets/label-Cw6sZ5kQ.js +1 -0
  18. package/dist/static/assets/login-pLhQHKNI.js +1 -0
  19. package/dist/static/assets/markdown-parser-vendor-D9j1a-bm.js +29 -0
  20. package/dist/static/assets/messages-C8LOJGiE.js +1 -0
  21. package/dist/static/assets/messages-DdODLCjv.js +1 -0
  22. package/dist/static/assets/messages-V7iLbj1C.js +1 -0
  23. package/dist/static/assets/projects-DdfUtEAX.js +1 -0
  24. package/dist/static/assets/refractor-vendor-B-OUwWR7.js +4 -0
  25. package/dist/static/assets/rolldown-runtime-Dw2cE7zH.js +1 -0
  26. package/dist/static/assets/routes-9aZugTrf.js +1 -0
  27. package/dist/static/assets/session-B8VBnvYB.js +8 -0
  28. package/dist/static/assets/session-BZFmVWep.js +1 -0
  29. package/dist/static/assets/syntax-highlighter-vendor-CwGXx8v4.js +6 -0
  30. package/dist/static/assets/workbox-window.prod.es5-DaBTyiAs.js +2 -0
  31. package/dist/static/assets/xterm-vendor-BrP-ENHg.css +1 -0
  32. package/dist/static/assets/xterm-vendor-DRG2K165.js +36 -0
  33. package/dist/static/favicon.ico +0 -0
  34. package/dist/static/icon-192x192.png +0 -0
  35. package/dist/static/icon-512x512.png +0 -0
  36. package/dist/static/icon-maskable-192x192.png +0 -0
  37. package/dist/static/icon-maskable-512x512.png +0 -0
  38. package/dist/static/index.html +20 -9
  39. package/dist/static/manifest.webmanifest +1 -0
  40. package/dist/static/sw.js +1 -0
  41. package/package.json +79 -66
  42. package/dist/static/assets/ProtectedRoute-KMCDjFpr.js +0 -1
  43. package/dist/static/assets/eye-DsqhY3YQ.js +0 -1
  44. package/dist/static/assets/index-BU5VCG8M.js +0 -1
  45. package/dist/static/assets/index-BUy-hZ_L.js +0 -1
  46. package/dist/static/assets/index-CTq99aOX.css +0 -1
  47. package/dist/static/assets/index-DhqtKAUx.js +0 -101
  48. package/dist/static/assets/label-Bx75JYJV.js +0 -1
  49. package/dist/static/assets/login-CIKB0Oew.js +0 -1
  50. package/dist/static/assets/messages-D_2afeYc.js +0 -1
  51. package/dist/static/assets/messages-lrmcxVGh.js +0 -1
  52. package/dist/static/assets/messages-m0e3n_U5.js +0 -1
  53. package/dist/static/assets/session-D50bOHyT.js +0 -58
  54. package/dist/static/assets/session-DDGTF8rc.css +0 -1
  55. package/dist/static/assets/session-WhX_gGJt.js +0 -1
@@ -0,0 +1 @@
1
+ var e=JSON.parse(`{"Available commands":["可用命令"],"Available files and directories":["可用的文件和目录"],"Close sidebar":["关闭侧边栏"],"Compare from":["比较起点"],"Compare to":["比较终点"],"Custom tool name...":["自定义工具名称..."],"Failed to commit":["提交失败"],"Failed to commit and push":["提交和推送失败"],"Failed to push":["推送失败"],"Key":["键"],"Message input with completion support":["带补全支持的消息输入"],"New chat":["新建聊天"],"Reload MCP servers":["重新加载 MCP 服务器"],"Retry Push":["重试推送"],"Select enter key behavior":["选择回车键行为"],"Select find hotkey":["选择页内搜索快捷键"],"Select language":["选择语言"],"Select search hotkey":["选择搜索快捷键"],"Select theme":["选择主题"],"Uncommitted changes":["未提交的更改"],"Value":["值"],"assistant.thinking":["思考中"],"assistant.tool.binary_file":["无法显示二进制文件"],"assistant.tool.error_loading_file":["加载文件失败"],"assistant.tool.error_loading_task":["加载任务失败"],"assistant.tool.file_not_found":["文件未找到"],"assistant.tool.file_truncated":["已截断"],"assistant.tool.input_parameters":["输入参数"],"assistant.tool.invalid_path":["无效的文件路径"],"assistant.tool.loading_file":["正在加载文件..."],"assistant.tool.loading_task":["正在加载任务..."],"assistant.tool.message_count":[["count"]," 条消息"],"assistant.tool.no_task_data":["无任务数据"],"assistant.tool.no_task_data_description":["此任务的数据不可用"],"assistant.tool.read_error":["读取文件错误"],"assistant.tool.result":["工具结果"],"assistant.tool.retry":["重试"],"assistant.tool.task_id":["任务 ID"],"assistant.tool.view_file":["查看文件"],"assistant.tool.view_task_details":["查看任务详情"],"assistant.turn_duration":["响应时间"],"chat.attach_file":["附加"],"chat.button.start":["开始对话"],"chat.error.send_failed":["发送消息失败。请重试。"],"chat.history.button":["会话历史"],"chat.history.title":["最近会话"],"chat.modal.title":["开始新对话"],"chat.placeholder.continue.command_enter":["输入消息...(输入 / 使用命令,@ 使用文件,Command+Enter 发送)"],"chat.placeholder.continue.enter":["输入消息...(输入 / 使用命令,@ 使用文件,Enter 发送)"],"chat.placeholder.continue.shift_enter":["输入消息...(输入 / 使用命令,@ 使用文件,Shift+Enter 发送)"],"chat.placeholder.resume.command_enter":["输入消息...(输入 / 使用命令,@ 使用文件,Command+Enter 发送)"],"chat.placeholder.resume.enter":["输入消息...(输入 / 使用命令,@ 使用文件,Enter 发送)"],"chat.placeholder.resume.shift_enter":["输入消息...(输入 / 使用命令,@ 使用文件,Shift+Enter 发送)"],"chat.placeholder.running.command_enter":["Claude正在运行… 输入下一条消息,准备好后发送(Command+Enter发送)"],"chat.placeholder.running.enter":["Claude正在运行… 输入下一条消息,准备好后发送(Enter发送)"],"chat.placeholder.running.shift_enter":["Claude正在运行… 输入下一条消息,准备好后发送(Shift+Enter发送)"],"chat.resume":["继续"],"chat.scheduled_send.failed":["定时发送消息失败"],"chat.scheduled_send.success":["消息定时发送成功"],"chat.scheduled_send.success_description":["您可以在定时任务选项卡中查看和管理"],"chat.send":["发送"],"chat.send_mode.immediate":["立即发送"],"chat.send_mode.label":["发送模式"],"chat.send_mode.scheduled":["定时发送"],"chat.send_mode.scheduled_time":["定时发送时间"],"chat.toolbar.effort.tooltip":["选择推理努力程度"],"chat.toolbar.model.tooltip":["选择模型"],"chat.toolbar.permission_mode.accept_edits":["接受编辑"],"chat.toolbar.permission_mode.bypass":["跳过"],"chat.toolbar.permission_mode.default":["默认"],"chat.toolbar.permission_mode.plan":["计划"],"chat.toolbar.permission_mode.tooltip":["选择权限模式"],"chat.toolbar.system_prompt.tooltip":["包含默认 Claude Code 提示词"],"chat.voice_input":["语音输入"],"common.action.cancel":["取消"],"common.cancel":["取消"],"common.create":["创建"],"common.delete":["删除"],"common.deleting":["删除中..."],"common.error":["错误"],"common.loading":["加载中..."],"common.reload":["刷新"],"common.saving":["保存中..."],"common.update":["更新"],"control.branch":["分支"],"control.metadata":["元数据"],"control.model":["模型"],"control.new":["新建"],"control.new_chat":["新建对话"],"control.project_path":["项目路径"],"control.scroll_to_bottom":["滚动到底部"],"control.scroll_to_top":["滚动到顶部"],"control.session_id":["会话 ID"],"conversation.copy":["复制消息"],"conversation.copy.failed":["复制消息失败"],"conversation.copy.success":["消息已复制"],"conversation.error.raw_content":["原始数据:"],"conversation.error.report_issue":["报告此问题"],"conversation.error.schema":["模式错误"],"conversation.error.schema_validation":["模式验证错误"],"conversation.error.schema_validation.description":["无法解析此对话条目。这可能是由于格式更改或解析问题。"],"cron_builder.cron_expression":["Cron 表达式"],"cron_builder.custom":["自定义"],"cron_builder.daily":["每天"],"cron_builder.day_of_week":["星期"],"cron_builder.expression":["Cron 表达式"],"cron_builder.friday":["星期五"],"cron_builder.hour":["小时(0-23)"],"cron_builder.hourly":["每小时"],"cron_builder.minute":["分钟(0-59)"],"cron_builder.monday":["星期一"],"cron_builder.preview":["预览"],"cron_builder.saturday":["星期六"],"cron_builder.schedule_type":["调度类型"],"cron_builder.sunday":["星期日"],"cron_builder.thursday":["星期四"],"cron_builder.tuesday":["星期二"],"cron_builder.wednesday":["星期三"],"cron_builder.weekly":["每周"],"diff.commit":["提交"],"diff.commit.changes":["提交更改"],"diff.commit.message":["提交信息"],"diff.commit.push":["提交并推送"],"diff.committing":["提交中..."],"diff.committing.pushing":["提交并推送中..."],"diff.deselect.all":["取消全选"],"diff.enter.message":["请输入提交信息"],"diff.files":["文件"],"diff.files.changed":["个文件已更改"],"diff.loading":["加载差异中..."],"diff.push":["推送"],"diff.pushing":["推送中..."],"diff.select.all":["全选"],"diff.select.file":["请至少选择一个文件"],"directory_picker.current":["当前:"],"directory_picker.loading":["加载中..."],"directory_picker.no_directories":["未找到目录"],"directory_picker.show_hidden":["显示隐藏文件"],"e.g., 1.00":["例如: 1.00"],"e.g., 10":["例如: 10"],"e.g., 10000":["例如: 10000"],"e.g., api.example.com, cdn.example.com":["例如: api.example.com, cdn.example.com"],"layout.bottom_panel.title":["终端"],"layout.toggle_bottom_panel":["切换底部面板"],"layout.toggle_left_panel":["切换左侧面板"],"layout.toggle_right_panel":["切换右侧面板"],"mcp.error.load_failed":["加载 MCP 服务器失败:",["error"]],"mcp.no.servers":["未找到 MCP 服务器"],"mcp.title":["MCP 服务器"],"notfound.button.go_home":["返回首页"],"notfound.default.description":["您查找的页面不存在或已被移动。"],"notfound.default.title":["页面未找到"],"notfound.session.description":["您查找的会话不存在。"],"notfound.session.title":["会话未找到"],"notification.beep":["哔哔声"],"notification.chime":["铃声"],"notification.description":["选择 Claude Code 任务完成时播放的提示音"],"notification.empty":["没有新通知"],"notification.none":["无"],"notification.permission_requested":["需要权限许可"],"notification.ping":["Ping 音"],"notification.pop":["Pop 音"],"notification.question_asked":["来自Claude的提问"],"notification.session_completed":["会话已完成"],"notification.session_paused":["会话已暂停"],"notification.test":["测试"],"notification.title":["通知"],"panel.browser.empty.description":["在上方输入URL或点击对话中的链接"],"panel.browser.empty.title":["未加载页面"],"panel.files.edited_section":["已编辑文件"],"panel.files.filter_tools":["按工具筛选"],"panel.files.loading_agents":["正在加载 Agent..."],"panel.files.no_agents":["还没有 Agent"],"panel.files.no_edited_files":["还没有已编辑文件"],"panel.files.no_filtered_tool_calls":["没有与所选筛选条件匹配的工具调用"],"panel.files.no_tool_calls":["暂无工具调用"],"panel.files.tool_calls_section":["工具调用"],"panel.git.empty":["没有Git更改"],"panel.git.pr_links":["拉取请求"],"panel.git.view_content":["内容"],"panel.git.view_diff":["差异"],"panel.review.empty":["没有待审查内容"],"panel.tab.browser":["浏览器"],"panel.tab.explorer":["资源管理器"],"panel.tab.git":["Git"],"panel.tab.review":["审查"],"panel.todo.collapsed_title":["Todo"],"project.new":["新建项目"],"project.setup.action.setting_up":["正在设置..."],"project.setup.action.setup":["设置项目"],"project.setup.description":["导航到要设置为 Claude Code 项目的目录。如果存在 CLAUDE.md,它将描述项目;否则使用 <0>/init</0> 初始化。"],"project.setup.title":["设置新项目"],"project_list.last_modified":["最后修改时间:"],"project_list.messages":["消息数:"],"project_list.no_projects.description":["在您的 ~/.claude/projects 目录中未找到 Claude Code 项目。与 Claude Code 开始对话以创建您的第一个项目。"],"project_list.no_projects.title":["未找到项目"],"project_list.view_conversations":["查看对话"],"project_switcher.no_project":["没有项目"],"project_switcher.no_results":["没有匹配的项目"],"projects.page.description":["查看 Claude Code 对话历史和项目操作"],"projects.page.loading":["正在加载项目..."],"projects.page.title":["项目"],"review.action.insert":["插入审查"],"review.action.insert.success":["审查已插入聊天输入"],"review.action.reset":["重置"],"review.action.reset.success":["已清除所有评论"],"review.comment.placeholder":["添加评论..."],"review.comment.save":["保存"],"review.comments.count":[["count"]," 条评论"],"review.comments.empty":["无评论"],"scheduler.create_job":["创建任务"],"scheduler.delete_dialog.description":["确定要删除此定时任务吗?此操作无法撤销。"],"scheduler.delete_dialog.title":["删除定时任务"],"scheduler.dialog.description":["配置定时任务以向 Claude Code 发送消息"],"scheduler.dialog.title.create":["创建定时任务"],"scheduler.dialog.title.edit":["编辑定时任务"],"scheduler.error.load_failed":["加载定时任务失败:",["error"]],"scheduler.form.concurrency_policy":["并发策略"],"scheduler.form.concurrency_policy.run":["即使已在运行也执行"],"scheduler.form.concurrency_policy.skip":["如果已在运行则跳过"],"scheduler.form.enabled":["启用"],"scheduler.form.enabled.description":["启用或禁用此定时任务"],"scheduler.form.message":["消息内容"],"scheduler.form.message.aria_label":["带补全支持的消息输入(输入 / 使用命令,@ 使用文件)"],"scheduler.form.message.hint":["输入 / 获取命令补全,@ 获取文件补全"],"scheduler.form.message.placeholder":["输入要发送给 Claude Code 的消息...(输入 / 使用命令,@ 使用文件)"],"scheduler.form.name":["任务名称"],"scheduler.form.reserved_time":["预定执行时间"],"scheduler.form.reserved_time.hint":["将在指定的日期和时间执行一次,然后自动删除"],"scheduler.form.schedule_type":["调度类型"],"scheduler.form.schedule_type.cron":["循环执行(Cron)"],"scheduler.form.schedule_type.reserved":["一次性执行"],"scheduler.job.create_failed":["创建任务失败"],"scheduler.job.created":["任务创建成功"],"scheduler.job.delete_failed":["删除任务失败"],"scheduler.job.deleted":["任务删除成功"],"scheduler.job.update_failed":["更新任务失败"],"scheduler.job.updated":["任务更新成功"],"scheduler.last_run":["上次运行"],"scheduler.no_jobs":["暂无定时任务"],"scheduler.status.disabled":["已禁用"],"scheduler.status.enabled":["已启用"],"scheduler.title":["定时任务"],"session.conversation.abort":["中止"],"session.cost.cache_creation":["缓存创建"],"session.cost.cache_read":["缓存读取"],"session.cost.input_tokens":["输入令牌"],"session.cost.label":["会话成本"],"session.cost.output_tokens":["输出令牌"],"session.cost.total":["总计"],"session.delete.failed":["删除会话失败"],"session.delete.success":["会话已删除"],"session.delete_dialog.description":["确定要删除会话「",["title"],"」吗?此操作无法撤销。"],"session.delete_dialog.title":["删除会话"],"session.empty_state.description":["开始新对话以展开交流"],"session.menu.copy_session_path":["复制会话文件路径"],"session.menu.export_html":["导出为 HTML"],"session.menu.export_jsonl":["导出为 JSONL"],"session.processing":["Claude Code 正在处理..."],"session.scheduled_messages.disabled":["已禁用"],"session.scheduled_messages.message_label":["消息"],"session.scheduled_messages.title":["定时消息"],"session.status.paused":["已暂停"],"session.status.running":["运行中"],"sessions.load.more":["加载更多"],"sessions.title":["会话"],"sessions.total":["总计"],"settings.advanced":["高级设置"],"settings.description":["显示和行为设置"],"settings.disallowedTools.label":["禁用的工具"],"settings.env.add":["添加环境变量"],"settings.env.label":["环境变量"],"settings.input.enter_key_behavior":["回车键行为"],"settings.input.enter_key_behavior.command_enter":["使用 Command+Enter 发送"],"settings.input.enter_key_behavior.description":["选择消息输入的回车键行为"],"settings.input.enter_key_behavior.enter":["使用 Enter 发送"],"settings.input.enter_key_behavior.shift_enter":["使用 Shift+Enter 发送(默认)"],"settings.input.find_hotkey":["页内搜索快捷键"],"settings.input.find_hotkey.command_f":["Command+F"],"settings.input.find_hotkey.ctrl_f":["Ctrl+F"],"settings.input.find_hotkey.description":["选择打开页内搜索的快捷键"],"settings.input.search_hotkey":["搜索快捷键"],"settings.input.search_hotkey.command_k":["Command+K"],"settings.input.search_hotkey.ctrl_k":["Ctrl+K"],"settings.input.search_hotkey.description":["选择打开搜索对话框的快捷键"],"settings.loading":["正在加载设置..."],"settings.locale":["语言"],"settings.locale.description":["选择您偏好的语言"],"settings.locale.en":["英语"],"settings.locale.ja":["日语"],"settings.locale.zh_CN":["简体中文"],"settings.maxBudgetUsd.label":["最大预算 (USD)"],"settings.maxThinkingTokens.label":["最大思考令牌数"],"settings.maxTurns.label":["最大轮次"],"settings.model_choices.description":["配置会话工具栏中可用的模型选项"],"settings.model_choices.label":["模型选项"],"settings.model_choices.placeholder":["添加模型选项..."],"settings.notifications":["通知"],"settings.sandbox.allowUnsandboxedCommands":["允许非沙盒命令"],"settings.sandbox.autoAllowBash":["沙盒化时自动允许 Bash"],"settings.sandbox.label":["沙盒"],"settings.sandbox.network.allowLocalBinding":["允许本地绑定"],"settings.sandbox.network.allowedDomains":["允许的域名 (逗号分隔)"],"settings.sandbox.network.label":["网络设置"],"settings.section.notifications":["通知"],"settings.section.session_display":["会话显示"],"settings.section.system_info":["系统信息"],"settings.session.auto_schedule_continue_on_rate_limit":["达到速率限制时自动调度继续"],"settings.session.auto_schedule_continue_on_rate_limit.description":["当 Claude 达到速率限制时,自动调度继续消息"],"settings.session.display":["会话显示"],"settings.session.hide_no_user_message":["隐藏无用户消息的会话"],"settings.session.hide_no_user_message.description":["仅显示包含用户命令或消息的会话"],"settings.session.unify_same_title":["合并同名会话"],"settings.session.unify_same_title.description":["当多个会话标题相同时,仅显示最新的会话"],"settings.settingSources.label":["设置来源"],"settings.tab.title":["显示和通知设置"],"settings.theme":["主题"],"settings.theme.dark":["深色"],"settings.theme.description":["选择您偏好的颜色主题"],"settings.theme.light":["浅色"],"settings.theme.system":["跟随系统"],"settings.title":["设置"],"sidebar.back.to.projects":["返回项目列表"],"sidebar.edited_files.count":[["count"]," 个文件"],"sidebar.edited_files.empty":["没有编辑的文件"],"sidebar.edited_files.external":["项目外"],"sidebar.edited_files.internal":["项目内"],"sidebar.edited_files.title":["编辑的文件"],"sidebar.show.mcp.settings":["显示 MCP 服务器设置"],"sidebar.show.scheduler.jobs":["显示定时任务"],"sidebar.show.session.list":["显示会话列表"],"sidebar.show.task.list":["显示任务列表"],"sidebar.tab.mcp":["MCP"],"sidebar.tab.projects":["项目列表"],"sidebar.tab.scheduler":["调度器"],"sidebar.tab.sessions":["会话列表"],"sidebar.tab.settings":["设置"],"sidebar.tab.system_info":["系统信息"],"sidebar.tab.tasks":["任务列表"],"system_info.available_features":["可用功能"],"system_info.claude_code":["Claude Code"],"system_info.description":["版本和功能信息"],"system_info.executable_path":["可执行文件路径"],"system_info.feature.agent_sdk.description":["使用 @anthropic-ai/claude-agent-sdk 而非 @anthropic-ai/claude-code"],"system_info.feature.agent_sdk.title":["扩展 Agent 模式"],"system_info.feature.run_skills_directly.description":["启用直接执行技能功能"],"system_info.feature.run_skills_directly.title":["直接执行技能"],"system_info.feature.sidechain_separation.description":["侧链对话将单独存储在 agent-*.jsonl 文件中"],"system_info.feature.sidechain_separation.title":["侧链分离"],"system_info.feature.tool_approval.description":["在 Claude 执行工具前批准或拒绝,让您完全掌控操作"],"system_info.feature.tool_approval.title":["工具审批"],"system_info.feature.unknown.description":["功能信息不可用"],"system_info.feature.uuid_on_sdk_message.description":["SDK 消息包含 UUID 用于跟踪"],"system_info.feature.uuid_on_sdk_message.title":["SDK 消息 UUID"],"system_info.title":["系统信息"],"system_info.unknown":["未知"],"system_info.version_label":["版本"],"system_info.viewer_version":["Claude Code Viewer"],"user.content.document.pdf":["PDF 文档"],"user.content.document.text":["文本文档"],"user.content.image":["附加图片"],"user.content.unsupported_document":["不支持的文档"],"user.content.unsupported_document.description":["不支持显示此文档类型"],"user.content.unsupported_media":["不支持的媒体"],"user.content.unsupported_media.description":["不支持显示此媒体格式"]}`);export{e as messages};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{d as t,f as n}from"./markdown-parser-vendor-D9j1a-bm.js";import{E as r,F as i,P as a,b as o,c as s,ot as c,st as l}from"./AuthProvider-BKc7q7ka.js";import{$ as u,N as d,P as f,Y as p,Z as m,c as h,d as g,f as _,i as v,l as y,n as b,o as x,s as S,u as C}from"./dist-DiGJ7VFi.js";import{n as w}from"./dist-CG2L4mx5.js";import{b as T,n as E,r as D,t as O,v as k,y as A}from"./ProtectedRoute-DvQQEf13.js";import{a as j,i as M,n as N,o as P,r as F,t as I}from"./card-DGrqtTaC.js";import{t as L}from"./label-Cw6sZ5kQ.js";var R=e(n(),1),z=()=>i({queryKey:o.queryKey,queryFn:o.queryFn}),B=t(),V=()=>{let{data:{projects:e}}=z(),{config:t}=f();return e.length,(0,B.jsx)(`div`,{className:`grid gap-4 md:grid-cols-2 lg:grid-cols-3`,children:e.map(e=>(0,B.jsxs)(I,{className:`hover:shadow-md transition-shadow`,children:[(0,B.jsxs)(M,{children:[(0,B.jsxs)(j,{className:`flex items-center gap-2 justify-start items-start`,children:[(0,B.jsx)(A,{className:`w-5 h-5 flex-shrink-0`}),(0,B.jsx)(`span`,{className:`text-wrap flex-1`,children:e.meta.projectName??e.claudeProjectPath})]}),e.meta.projectPath!==void 0&&e.meta.projectPath!==``?(0,B.jsx)(F,{children:e.meta.projectPath}):null]}),(0,B.jsxs)(N,{className:`space-y-2`,children:[(0,B.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[(0,B.jsx)(w,{id:`project_list.last_modified`}),` `,e.lastModifiedAt?d(e.lastModifiedAt,{locale:t.locale,target:`time`}):``]}),(0,B.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[(0,B.jsx)(w,{id:`project_list.messages`}),` `,e.meta.sessionCount]})]}),(0,B.jsx)(N,{className:`pt-0`,children:(0,B.jsx)(P,{asChild:!0,className:`w-full`,children:(0,B.jsx)(u,{to:`/projects/$projectId/session`,params:{projectId:e.id},children:(0,B.jsx)(w,{id:`project_list.view_conversations`})})})})]},e.id))})},H=({onPathChange:e})=>{let[t,n]=(0,R.useState)(void 0),[r,i]=(0,R.useState)(!1),{data:a,isLoading:o}=p(s(t,r));(0,R.useEffect)(()=>{a?.currentPath!==void 0&&a.currentPath!==``&&e(a.currentPath)},[a?.currentPath,e]);let c=e=>{if(e===``){n(void 0);return}n(`/${e}`)};return(0,B.jsxs)(`div`,{className:`border rounded-md`,children:[(0,B.jsx)(`div`,{className:`p-3 border-b bg-muted/50`,children:(0,B.jsxs)(`p`,{className:`text-sm font-medium`,children:[(0,B.jsx)(w,{id:`directory_picker.current`}),` `,(0,B.jsx)(`span`,{className:`font-mono`,children:a?.currentPath??`~`})]})}),(0,B.jsxs)(`div`,{className:`p-3 border-b flex items-center gap-2`,children:[(0,B.jsx)(E,{id:`show-hidden`,checked:r,onCheckedChange:e=>i(e===!0)}),(0,B.jsx)(L,{htmlFor:`show-hidden`,className:`text-sm cursor-pointer`,children:(0,B.jsx)(w,{id:`directory_picker.show_hidden`})})]}),(0,B.jsx)(`div`,{className:`max-h-96 overflow-auto`,children:o?(0,B.jsx)(`div`,{className:`p-8 text-center text-sm text-muted-foreground`,children:(0,B.jsx)(w,{id:`directory_picker.loading`})}):a?.entries&&a.entries.length>0?(0,B.jsx)(`div`,{className:`divide-y`,children:a.entries.filter(e=>e.type===`directory`).filter(e=>r||e.name===`..`||!e.name.startsWith(`.`)).map(e=>(0,B.jsxs)(`button`,{type:`button`,onClick:()=>c(e.path),className:`w-full px-3 py-2 flex items-center gap-2 hover:bg-muted/50 transition-colors text-left`,children:[e.name===`..`?(0,B.jsx)(T,{className:`w-4 h-4 rotate-180`}):(0,B.jsx)(A,{className:`w-4 h-4 text-blue-500`}),(0,B.jsx)(`span`,{className:`text-sm`,children:e.name})]},e.path))}):(0,B.jsx)(`div`,{className:`p-8 text-center text-sm text-muted-foreground`,children:(0,B.jsx)(w,{id:`directory_picker.no_directories`})})})]})},U=()=>{let[e,t]=(0,R.useState)(!1),[n,i]=(0,R.useState)(``),o=l(),s=a({mutationFn:async()=>{let e=await r.api.projects.$post({json:{projectPath:n}});if(!e.ok)throw Error(`Failed to set up project`);return await e.json()},onSuccess:e=>{b.success(`Project set up successfully`),t(!1),o({to:`/projects/$projectId/session`,params:{projectId:e.projectId},search:{sessionId:e.sessionId}})},onError:e=>{b.error(e instanceof Error?e.message:`Failed to set up project`)}});return(0,B.jsxs)(x,{open:e,onOpenChange:t,children:[(0,B.jsx)(_,{asChild:!0,children:(0,B.jsxs)(P,{"data-testid":`new-project-button`,children:[(0,B.jsx)(k,{className:`w-4 h-4 mr-2`}),(0,B.jsx)(w,{id:`project.new`})]})}),(0,B.jsxs)(S,{className:`max-w-2xl`,"data-testid":`new-project-modal`,children:[(0,B.jsxs)(C,{children:[(0,B.jsx)(g,{children:(0,B.jsx)(w,{id:`project.setup.title`})}),(0,B.jsx)(h,{children:(0,B.jsx)(w,{id:`project.setup.description`,components:{0:(0,B.jsx)(`code`,{className:`text-sm bg-muted px-1 py-0.5 rounded`})}})})]}),(0,B.jsx)(`div`,{className:`py-4`,children:(0,B.jsx)(H,{onPathChange:i})}),(0,B.jsxs)(y,{children:[(0,B.jsx)(P,{variant:`outline`,onClick:()=>t(!1),children:(0,B.jsx)(w,{id:`common.action.cancel`})}),(0,B.jsx)(P,{onClick:()=>{s.mutateAsync()},disabled:n===``||s.isPending,children:s.isPending?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(c,{className:`w-4 h-4 mr-2 animate-spin`}),(0,B.jsx)(w,{id:`project.setup.action.setting_up`})]}):(0,B.jsx)(w,{id:`project.setup.action.setup`})})]})]})]})},W=()=>{let{openSearch:e}=v();return(0,B.jsxs)(`div`,{className:`flex flex-col h-screen max-h-screen overflow-hidden`,children:[(0,B.jsxs)(`header`,{className:`h-(--spacing-header-height) flex items-center justify-between px-3 bg-muted/30 border-b border-border/40 text-xs flex-shrink-0 select-none`,children:[(0,B.jsx)(`span`,{className:`text-sm font-semibold text-foreground`,children:`claude-code-viewer`}),(0,B.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,B.jsx)(`button`,{type:`button`,onClick:e,className:`w-11 h-11 md:w-7 md:h-7 flex items-center justify-center rounded transition-colors hover:bg-muted text-muted-foreground hover:text-foreground`,"aria-label":`Search`,children:(0,B.jsx)(m,{className:`w-3.5 h-3.5`})}),(0,B.jsx)(D,{})]})]}),(0,B.jsx)(`div`,{className:`flex-1 overflow-auto`,children:(0,B.jsxs)(`div`,{className:`container mx-auto px-4 py-8`,children:[(0,B.jsx)(`header`,{className:`mb-8`,children:(0,B.jsx)(`p`,{className:`text-muted-foreground`,children:(0,B.jsx)(w,{id:`projects.page.description`})})}),(0,B.jsx)(`main`,{children:(0,B.jsxs)(`section`,{children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between mb-4`,children:[(0,B.jsx)(`h2`,{className:`text-xl font-semibold`,children:(0,B.jsx)(w,{id:`projects.page.title`})}),(0,B.jsx)(U,{})]}),(0,B.jsx)(R.Suspense,{fallback:(0,B.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,B.jsx)(`div`,{className:`text-muted-foreground`,children:(0,B.jsx)(w,{id:`projects.page.loading`})})}),children:(0,B.jsx)(V,{})})]})})]})})]})},G=()=>(0,B.jsx)(O,{children:(0,B.jsx)(W,{})});export{G as component};