@@ -2,6 +2,7 @@ import React from 'react';
22import { ToolbarButton } from './toolbar-button' ;
33import { FormatIcon } from './format-icon' ;
44import { MaximizeIcon , MinimizeIcon } from './fullscreen-icon' ;
5+ import type { ToolbarItem } from '../types' ;
56
67// 锤子图标(编译/构建)
78const HammerIcon : React . FC < { color : string } > = ( { color } ) => (
@@ -42,6 +43,7 @@ export interface ToolbarProps {
4243 enableFullscreen ?: boolean ;
4344 isFullscreen ?: boolean ;
4445 onToggleFullscreen ?: ( ) => void ;
46+ toolbar ?: ToolbarItem [ ] ;
4547 toolbarExtra ?: React . ReactNode ;
4648}
4749
@@ -57,6 +59,7 @@ export const Toolbar: React.FC<ToolbarProps> = ({
5759 enableFullscreen,
5860 isFullscreen,
5961 onToggleFullscreen,
62+ toolbar,
6063 toolbarExtra,
6164} ) => {
6265 const isDark = theme === 'dark' ;
@@ -105,10 +108,10 @@ export const Toolbar: React.FC<ToolbarProps> = ({
105108 < ToolbarButton
106109 label = { isDark ? '🌞 浅色模式' : '🌙 深色模式' }
107110 title = { isDark ? '切换到浅色主题' : '切换到深色主题' }
108- bg = { btnBg }
109- hoverBg = { btnHoverBg }
110- color = { toolbarText }
111- border = { borderColor }
111+ backgroundColor = { btnBg }
112+ hoverBackgroundColor = { btnHoverBg }
113+ textColor = { toolbarText }
114+ borderColor = { borderColor }
112115 onClick = { handleThemeToggle }
113116 />
114117 ) }
@@ -122,10 +125,10 @@ export const Toolbar: React.FC<ToolbarProps> = ({
122125 </ >
123126 }
124127 title = "格式化代码"
125- bg = { isDark ? '#1e3a5f' : '#e6f4ff' }
126- hoverBg = { isDark ? '#264a73' : '#bae0ff' }
127- color = { isDark ? '#61afef' : '#1677ff' }
128- border = { isDark ? '#1e3a5f' : '#91caff' }
128+ backgroundColor = { isDark ? '#1e3a5f' : '#e6f4ff' }
129+ hoverBackgroundColor = { isDark ? '#264a73' : '#bae0ff' }
130+ textColor = { isDark ? '#61afef' : '#1677ff' }
131+ borderColor = { isDark ? '#1e3a5f' : '#91caff' }
129132 onClick = { onFormat }
130133 />
131134 ) }
@@ -139,10 +142,10 @@ export const Toolbar: React.FC<ToolbarProps> = ({
139142 </ >
140143 }
141144 title = "编译并验证脚本"
142- bg = { isDark ? '#2d5a27' : '#e6f4e5' }
143- hoverBg = { isDark ? '#3a7033' : '#d4ecd3' }
144- color = { isDark ? '#98c379' : '#389e0d' }
145- border = { isDark ? '#2d5a27' : '#b7eb8f' }
145+ backgroundColor = { isDark ? '#2d5a27' : '#e6f4e5' }
146+ hoverBackgroundColor = { isDark ? '#3a7033' : '#d4ecd3' }
147+ textColor = { isDark ? '#98c379' : '#389e0d' }
148+ borderColor = { isDark ? '#2d5a27' : '#b7eb8f' }
146149 onClick = { onCompile }
147150 />
148151 ) }
@@ -160,14 +163,28 @@ export const Toolbar: React.FC<ToolbarProps> = ({
160163 </ >
161164 }
162165 title = { isFullscreen ? '退出全屏(ESC)' : '全屏显示' }
163- bg = { isDark ? '#3a2d5a' : '#f3e8ff' }
164- hoverBg = { isDark ? '#4a3d6a' : '#e9d5ff' }
165- color = { isDark ? '#c678dd' : '#722ed1' }
166- border = { isDark ? '#3a2d5a' : '#d3adf7' }
166+ backgroundColor = { isDark ? '#3a2d5a' : '#f3e8ff' }
167+ hoverBackgroundColor = { isDark ? '#4a3d6a' : '#e9d5ff' }
168+ textColor = { isDark ? '#c678dd' : '#722ed1' }
169+ borderColor = { isDark ? '#3a2d5a' : '#d3adf7' }
167170 onClick = { ( ) => onToggleFullscreen ?.( ) }
168171 />
169172 ) }
170173
174+ { /* 自定义工具栏按钮列表 */ }
175+ { toolbar ?. map ( ( item ) => (
176+ < ToolbarButton
177+ key = { item . key }
178+ label = { item . label }
179+ title = { item . title }
180+ backgroundColor = { item . backgroundColor }
181+ hoverBackgroundColor = { item . hoverBackgroundColor }
182+ textColor = { item . textColor }
183+ borderColor = { item . borderColor }
184+ onClick = { item . onClick }
185+ />
186+ ) ) }
187+
171188 { /* 自定义工具栏内容 */ }
172189 { toolbarExtra }
173190 </ div >
0 commit comments