Files
claude-code/src/components/IdeOnboardingDialog.tsx
claude-code-best 5b1a52b8e0 更新大量 tsx 原始文件; 已经迁移 login panel; 部分 (#121)
* style(B1-1): 格式化 ink/buddy/cli/context/screens/tasks/services/keybindings/state (43 files)

纯格式化:移除分号、React Compiler import、import 多行展开。
修复了 Box.tsx 和 ScrollBox.tsx 中无效的 global.d.ts import。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(B1-2): 格式化 commands (79 files)

纯格式化:移除分号、React Compiler import、import 多行展开。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(B1-3): 格式化 components/messages,permissions,mcp,sandbox,shell (104 files)

纯格式化:移除分号、React Compiler import、import 多行展开。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(B1-4): 格式化 components/PromptInput,FeedbackSurvey,tasks,agents,skills,design-system,wizard (73 files)

纯格式化:移除分号、React Compiler import、import 多行展开。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(B1-5): 格式化 components其余 + hooks + tools (232 files)

纯格式化:移除分号、React Compiler import、import 多行展开。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(B1-6): 格式化 main/entrypoints/utils/moreright (21 files)

纯格式化:移除分号、React Compiler import、import 多行展开。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: 更新 README,新增 Run.ps1/TODO.md,删除 V6.md

- README.md: 大幅重写,更详细版本历史和配置示例
- Run.ps1: 新增 Windows 启动脚本
- TODO.md: 新增包完成清单
- V6.md: 删除(架构重构规划已不适用)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: 修复以前的问题

* fix: 修复 login 面板的问题

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 23:24:27 +08:00

109 lines
3.0 KiB
TypeScript

import React from 'react'
import { envDynamic } from 'src/utils/envDynamic.js'
import { Box, Text } from '../ink.js'
import { useKeybindings } from '../keybindings/useKeybinding.js'
import { getGlobalConfig, saveGlobalConfig } from '../utils/config.js'
import { env } from '../utils/env.js'
import {
getTerminalIdeType,
type IDEExtensionInstallationStatus,
isJetBrainsIde,
toIDEDisplayName,
} from '../utils/ide.js'
import { Dialog } from './design-system/Dialog.js'
interface Props {
onDone: () => void
installationStatus: IDEExtensionInstallationStatus | null
}
export function IdeOnboardingDialog({
onDone,
installationStatus,
}: Props): React.ReactNode {
markDialogAsShown()
// Handle Enter/Escape to dismiss
useKeybindings(
{
'confirm:yes': onDone,
'confirm:no': onDone,
},
{ context: 'Confirmation' },
)
const ideType = installationStatus?.ideType ?? getTerminalIdeType()
const isJetBrains = isJetBrainsIde(ideType)
const ideName = toIDEDisplayName(ideType)
const installedVersion = installationStatus?.installedVersion
const pluginOrExtension = isJetBrains ? 'plugin' : 'extension'
const mentionShortcut =
env.platform === 'darwin' ? 'Cmd+Option+K' : 'Ctrl+Alt+K'
return (
<>
<Dialog
title={
<>
<Text color="claude"> </Text>
<Text>Welcome to Claude Code for {ideName}</Text>
</>
}
subtitle={
installedVersion
? `installed ${pluginOrExtension} v${installedVersion}`
: undefined
}
color="ide"
onCancel={onDone}
hideInputGuide
>
<Box flexDirection="column" gap={1}>
<Text>
Claude has context of <Text color="suggestion"> open files</Text>{' '}
and <Text color="suggestion"> selected lines</Text>
</Text>
<Text>
Review Claude Code&apos;s changes{' '}
<Text color="diffAddedWord">+11</Text>{' '}
<Text color="diffRemovedWord">-22</Text> in the comfort of your IDE
</Text>
<Text>
Cmd+Esc<Text dimColor> for Quick Launch</Text>
</Text>
<Text>
{mentionShortcut}
<Text dimColor> to reference files or lines in your input</Text>
</Text>
</Box>
</Dialog>
<Box paddingX={1}>
<Text dimColor italic>
Press Enter to continue
</Text>
</Box>
</>
)
}
export function hasIdeOnboardingDialogBeenShown(): boolean {
const config = getGlobalConfig()
const terminal = envDynamic.terminal || 'unknown'
return config.hasIdeOnboardingBeenShown?.[terminal] === true
}
function markDialogAsShown(): void {
if (hasIdeOnboardingDialogBeenShown()) {
return
}
const terminal = envDynamic.terminal || 'unknown'
saveGlobalConfig(current => ({
...current,
hasIdeOnboardingBeenShown: {
...current.hasIdeOnboardingBeenShown,
[terminal]: true,
},
}))
}