Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
bit-pm
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
燕伟桐
bit-pm
Commits
25086730
Unverified
提交
25086730
authored
5月 21, 2025
作者:
Will Chen
提交者:
GitHub
5月 21, 2025
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add promo link for pro mode selector (#219)
上级
b520f7d9
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
80 行增加
和
57 行删除
+80
-57
ProModeSelector.tsx
src/components/ProModeSelector.tsx
+80
-57
没有找到文件。
src/components/ProModeSelector.tsx
浏览文件 @
25086730
...
...
@@ -13,6 +13,7 @@ import { Switch } from "@/components/ui/switch";
import
{
Label
}
from
"@/components/ui/label"
;
import
{
Sparkles
,
Info
}
from
"lucide-react"
;
import
{
useSettings
}
from
"@/hooks/useSettings"
;
import
{
IpcClient
}
from
"@/ipc/ipc_client"
;
export
function
ProModeSelector
()
{
const
{
settings
,
updateSettings
}
=
useSettings
();
...
...
@@ -33,9 +34,7 @@ export function ProModeSelector() {
});
};
if
(
!
settings
?.
enableDyadPro
)
{
return
null
;
}
const
proEnabled
=
Boolean
(
settings
?.
enableDyadPro
);
return
(
<
Popover
>
...
...
@@ -63,80 +62,104 @@ export function ProModeSelector() {
</
h4
>
<
div
className=
"h-px bg-gradient-to-r from-primary/50 via-primary/20 to-transparent"
/>
</
div
>
<
div
className=
"flex items-center justify-between"
>
<
div
className=
"space-y-2"
>
<
Label
htmlFor=
"saver-mode"
>
Saver Mode
</
Label
>
<
div
className=
"flex items-center gap-1"
>
<
Tooltip
>
<
TooltipTrigger
asChild
>
<
Info
className=
"h-4 w-4 text-muted-foreground cursor-help"
/>
</
TooltipTrigger
>
<
TooltipContent
side=
"right"
className=
"max-w-72"
>
Note: using the free Gemini API lets Google use your data to
improve their models.
</
TooltipContent
>
</
Tooltip
>
<
p
className=
"text-xs text-muted-foreground max-w-55"
>
Uses your free Gemini API quota before consuming Dyad Pro AI
credits
</
p
>
</
div
>
{
!
proEnabled
&&
(
<
div
className=
"text-sm text-center text-muted-foreground"
>
<
a
className=
"inline-flex items-center justify-center gap-2 rounded-md border border-primary/30 bg-primary/10 px-3 py-2 text-sm font-medium text-primary shadow-sm transition-colors hover:bg-primary/20 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
onClick=
{
()
=>
{
IpcClient
.
getInstance
().
openExternalUrl
(
"https://dyad.sh/pro#ai"
,
);
}
}
>
Unlock Pro modes
</
a
>
</
div
>
<
Switch
)
}
<
SelectorRow
id=
"saver-mode"
checked=
{
Boolean
(
settings
?.
enableProSaverMode
)
}
onCheckedChange=
{
toggleSaverMode
}
label=
"Saver Mode"
description=
"Uses your free Gemini API quota before consuming Dyad Pro AI credits"
tooltip=
"Note: using the free Gemini API lets Google use your data to
improve their models."
proEnabled=
{
proEnabled
}
settingEnabled=
{
Boolean
(
settings
?.
enableProSaverMode
)
}
toggle=
{
toggleSaverMode
}
/>
</
div
>
<
div
className=
"flex items-center justify-between"
>
<
div
className=
"space-y-2"
>
<
Label
htmlFor=
"lazy-edits"
>
Turbo Edits
</
Label
>
<
div
className=
"flex items-center gap-1"
>
<
Tooltip
>
<
TooltipTrigger
asChild
>
<
Info
className=
"h-4 w-4 text-muted-foreground cursor-help"
/>
</
TooltipTrigger
>
<
TooltipContent
side=
"right"
className=
"max-w-72"
>
Edits files faster.
</
TooltipContent
>
</
Tooltip
>
<
p
className=
"text-xs text-muted-foreground max-w-55"
>
Makes editing files faster and cheaper.
</
p
>
</
div
>
</
div
>
<
Switch
<
SelectorRow
id=
"lazy-edits"
checked=
{
Boolean
(
settings
?.
enableProLazyEditsMode
)
}
onCheckedChange=
{
toggleLazyEdits
}
label=
"Turbo Edits"
description=
"Makes editing files faster and cheaper."
tooltip=
"Uses a faster, cheaper model to generate full file updates."
proEnabled=
{
proEnabled
}
settingEnabled=
{
Boolean
(
settings
?.
enableProLazyEditsMode
)
}
toggle=
{
toggleLazyEdits
}
/>
<
SelectorRow
id=
"smart-context"
label=
"Smart Context"
description=
"Automatically detects the most relevant files for your chat"
tooltip=
"Improve efficiency and save credits working on large codebases."
proEnabled=
{
proEnabled
}
settingEnabled=
{
Boolean
(
settings
?.
enableProSmartFilesContextMode
)
}
toggle=
{
toggleSmartContext
}
/>
</
div
>
</
PopoverContent
>
</
Popover
>
);
}
function
SelectorRow
({
id
,
label
,
description
,
tooltip
,
proEnabled
,
settingEnabled
,
toggle
,
}:
{
id
:
string
;
label
:
string
;
description
:
string
;
tooltip
:
string
;
proEnabled
:
boolean
;
settingEnabled
:
boolean
;
toggle
:
()
=>
void
;
})
{
return
(
<
div
className=
"flex items-center justify-between"
>
<
div
className=
"space-y-2"
>
<
Label
htmlFor=
"smart-context"
>
Smart Context
</
Label
>
<
Label
htmlFor=
{
id
}
className=
{
!
proEnabled
?
"text-muted-foreground/50"
:
""
}
>
{
label
}
</
Label
>
<
div
className=
"flex items-center gap-1"
>
<
Tooltip
>
<
TooltipTrigger
asChild
>
<
Info
className=
"h-4 w-4 text-muted-foreground cursor-help"
/>
<
Info
className=
{
`h-4 w-4 cursor-help ${!proEnabled ? "text-muted-foreground/50" : "text-muted-foreground"}`
}
/>
</
TooltipTrigger
>
<
TooltipContent
side=
"right"
className=
"max-w-72"
>
Improve efficiency and save credits working on large
codebases.
{
tooltip
}
</
TooltipContent
>
</
Tooltip
>
<
p
className=
"text-xs text-muted-foreground max-w-55"
>
Automatically detects the most relevant files for your chat
<
p
className=
{
`text-xs ${!proEnabled ? "text-muted-foreground/50" : "text-muted-foreground"} max-w-55`
}
>
{
description
}
</
p
>
</
div
>
</
div
>
<
Switch
id=
"smart-context"
checked=
{
Boolean
(
settings
?.
enableProSmartFilesContextMode
)
}
onCheckedChange=
{
toggleSmartContext
}
id=
{
id
}
checked=
{
proEnabled
?
settingEnabled
:
false
}
onCheckedChange=
{
toggle
}
disabled=
{
!
proEnabled
}
/>
</
div
>
</
div
>
</
PopoverContent
>
</
Popover
>
);
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论