@@ -43,6 +43,14 @@ const dateOnlyFormatter = new Intl.DateTimeFormat("zh-CN", {
4343 day : "numeric" ,
4444} ) ;
4545
46+ const ACCENT_OPTIONS = [
47+ { value : "blue" , label : "蓝色" } ,
48+ { value : "slate" , label : "石墨" } ,
49+ { value : "violet" , label : "紫色" } ,
50+ { value : "rose" , label : "玫瑰" } ,
51+ { value : "amber" , label : "琥珀" } ,
52+ ] ;
53+
4654function App ( ) {
4755 const [ library , setLibrary ] = useState ( loadLibrary ) ;
4856 const [ mobilePane , setMobilePane ] = useState ( "sources" ) ;
@@ -381,7 +389,10 @@ function App() {
381389 } ;
382390
383391 return (
384- < div className = { `app ${ library . config . density } ` } style = { cssVars } >
392+ < div
393+ className = { `app ${ library . config . density } accent-${ library . config . accentColor || "blue" } ` }
394+ style = { cssVars }
395+ >
385396 < header className = "topbar" >
386397 < nav className = "mobile-switch" aria-label = "移动端视图" >
387398 < button
@@ -582,7 +593,13 @@ function SourcesPane({
582593 </ Button >
583594 </ Tooltip >
584595 < Tooltip content = "添加订阅" placement = "right" >
585- < Button isIconOnly color = "primary" aria-label = "添加订阅" onPress = { onAdd } >
596+ < Button
597+ isIconOnly
598+ className = "accent-icon-button"
599+ variant = "flat"
600+ aria-label = "添加订阅"
601+ onPress = { onAdd }
602+ >
586603 < Plus size = { 18 } />
587604 </ Button >
588605 </ Tooltip >
@@ -618,7 +635,13 @@ function SourcesPane({
618635 </ Button >
619636 </ Tooltip >
620637 < Tooltip content = "添加订阅" >
621- < Button isIconOnly color = "primary" aria-label = "添加订阅" onPress = { onAdd } >
638+ < Button
639+ isIconOnly
640+ className = "accent-icon-button"
641+ variant = "flat"
642+ aria-label = "添加订阅"
643+ onPress = { onAdd }
644+ >
622645 < Plus size = { 18 } />
623646 </ Button >
624647 </ Tooltip >
@@ -988,7 +1011,7 @@ function AddFeedDialog({ folders, onClose, onSubmit }) {
9881011 < Button variant = "flat" onPress = { onClose } >
9891012 取消
9901013 </ Button >
991- < Button color = "primary " type = "submit" >
1014+ < Button className = "accent-button " type = "submit" >
9921015 添加
9931016 </ Button >
9941017 </ div >
@@ -1047,7 +1070,7 @@ function EditFeedDialog({ feed, folders, onClose, onSubmit }) {
10471070 < Button variant = "flat" onPress = { onClose } >
10481071 取消
10491072 </ Button >
1050- < Button color = "primary " type = "submit" >
1073+ < Button className = "accent-button " type = "submit" >
10511074 保存
10521075 </ Button >
10531076 </ div >
@@ -1094,9 +1117,12 @@ function SettingsDialog({
10941117 < input
10951118 value = { config . proxyTemplate }
10961119 onChange = { ( event ) => onConfigChange ( { proxyTemplate : event . target . value } ) }
1097- placeholder = "https://proxy.example/raw?url={url} "
1120+ placeholder = "留空则直接请求 RSS 地址 "
10981121 type = "text"
10991122 />
1123+ < small className = "field-note" >
1124+ 默认代理不会留存用户信息和请求记录;也可以替换为自己的代理地址,或清空后直接请求 RSS。
1125+ </ small >
11001126 </ label >
11011127 </ section >
11021128
@@ -1148,6 +1174,19 @@ function SettingsDialog({
11481174 < option value = "dark" > 深色</ option >
11491175 </ select >
11501176 </ label >
1177+ < label >
1178+ < span > 强调色</ span >
1179+ < select
1180+ value = { config . accentColor || "blue" }
1181+ onChange = { ( event ) => onConfigChange ( { accentColor : event . target . value } ) }
1182+ >
1183+ { ACCENT_OPTIONS . map ( ( option ) => (
1184+ < option key = { option . value } value = { option . value } >
1185+ { option . label }
1186+ </ option >
1187+ ) ) }
1188+ </ select >
1189+ </ label >
11511190 < label >
11521191 < span > 密度</ span >
11531192 < select
@@ -1195,24 +1234,42 @@ function SettingsDialog({
11951234 </ Button >
11961235 </ section >
11971236
1198- < section >
1237+ < section className = "data-section" >
11991238 < h3 > 数据</ h3 >
1200- < div className = "data-actions" >
1201- < Button startContent = { < Download size = { 17 } /> } variant = "flat" onPress = { onExport } >
1239+ < div className = "data-action-grid" >
1240+ < Button
1241+ className = "data-action-button"
1242+ startContent = { < Download size = { 17 } /> }
1243+ variant = "flat"
1244+ onPress = { onExport }
1245+ >
12021246 导出 JSON
12031247 </ Button >
1204- < Button startContent = { < Upload size = { 17 } /> } variant = "flat" onPress = { onImportClick } >
1248+ < Button
1249+ className = "data-action-button"
1250+ startContent = { < Upload size = { 17 } /> }
1251+ variant = "flat"
1252+ onPress = { onImportClick }
1253+ >
12051254 导入 JSON
12061255 </ Button >
1207- < Button color = " danger" variant = "flat" onPress = { onReset } >
1256+ < Button className = "data-action-button danger-action " variant = "flat" onPress = { onReset } >
12081257 重置
12091258 </ Button >
12101259 </ div >
12111260 </ section >
1261+
1262+ < section className = "about-section" >
1263+ < h3 > 关于</ h3 >
1264+ < p > Copyright © 2026 Zijian Zhang. Released under the MIT License.</ p >
1265+ < a href = "https://github.com/zijian-z/rss-reader" target = "_blank" rel = "noreferrer" >
1266+ github.com/zijian-z/rss-reader
1267+ </ a >
1268+ </ section >
12121269 </ div >
12131270
12141271 < div className = "dialog-actions" >
1215- < Button color = "primary " onPress = { onClose } >
1272+ < Button className = "accent-button " onPress = { onClose } >
12161273 完成
12171274 </ Button >
12181275 </ div >
0 commit comments