refactor(notification): 删 AnnouncementBanner 废弃文件
AnnouncementBanner 在 v0.12.6 公告改 modal 之后就已经废弃了, VideoGenerationPage L148 注释明确写"公告已改为弹窗,旧的横幅不再显示", 现在公告整合到 Notification 表后,无任何 import 引用,清理。 同步删 AnnouncementBanner.module.css 配套样式。 typecheck 0 error,smoke 全过。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7a503db814
commit
850acf646e
@ -1,81 +0,0 @@
|
||||
.banner {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 10px 16px;
|
||||
/* 深色 - 紫青渐变玻璃 */
|
||||
background: linear-gradient(90deg, rgba(108, 99, 255, 0.10), rgba(0, 184, 230, 0.08));
|
||||
border-left: 3px solid var(--color-primary);
|
||||
border-bottom: 1px solid var(--color-border-soft);
|
||||
backdrop-filter: var(--bf-glass-md);
|
||||
-webkit-backdrop-filter: var(--bf-glass-md);
|
||||
box-shadow: inset 0 1px 0 var(--color-inset-highlight);
|
||||
font-size: 13px;
|
||||
color: var(--color-text-primary);
|
||||
line-height: 1.5;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
[data-theme="light"] .banner {
|
||||
/* 浅色 - 暖米色 chip */
|
||||
background: var(--color-chip-warm-bg);
|
||||
border-left-color: var(--color-chip-warm-border);
|
||||
border-bottom-color: var(--color-chip-warm-border);
|
||||
color: var(--color-chip-warm-text);
|
||||
}
|
||||
|
||||
[data-theme="light"] .icon {
|
||||
color: var(--color-chip-warm-badge-text);
|
||||
}
|
||||
|
||||
.icon {
|
||||
flex-shrink: 0;
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
.marqueeWrapper {
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
|
||||
-webkit-mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
|
||||
}
|
||||
|
||||
.marqueeText {
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
animation: marquee 20s linear infinite;
|
||||
padding-left: 100%;
|
||||
}
|
||||
|
||||
.marqueeWrapper:hover .marqueeText {
|
||||
animation-play-state: paused;
|
||||
}
|
||||
|
||||
@keyframes marquee {
|
||||
0% {
|
||||
transform: translateX(0);
|
||||
}
|
||||
100% {
|
||||
transform: translateX(-100%);
|
||||
}
|
||||
}
|
||||
|
||||
.closeBtn {
|
||||
flex-shrink: 0;
|
||||
background: none;
|
||||
border: none;
|
||||
color: var(--color-text-secondary);
|
||||
cursor: pointer;
|
||||
padding: 4px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 4px;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.closeBtn:hover {
|
||||
color: var(--color-text-primary);
|
||||
background: var(--color-bg-hover);
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import { videoApi } from '../lib/api';
|
||||
import styles from './AnnouncementBanner.module.css';
|
||||
|
||||
export function AnnouncementBanner() {
|
||||
const [text, setText] = useState('');
|
||||
const [dismissed, setDismissed] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
videoApi.getAnnouncement().then(({ data }) => {
|
||||
if (data.enabled && data.announcement) {
|
||||
setText(data.announcement);
|
||||
}
|
||||
}).catch(() => {});
|
||||
}, []);
|
||||
|
||||
if (!text || dismissed) return null;
|
||||
|
||||
return (
|
||||
<div className={styles.banner}>
|
||||
<svg className={styles.icon} width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
|
||||
<path d="M22 17H2a3 3 0 0 0 3-3V9a7 7 0 0 1 14 0v5a3 3 0 0 0 3 3zm-8.27 4a2 2 0 0 1-3.46 0" />
|
||||
</svg>
|
||||
<div className={styles.marqueeWrapper}>
|
||||
<span className={styles.marqueeText}>{text}</span>
|
||||
</div>
|
||||
<button className={styles.closeBtn} onClick={() => setDismissed(true)} title="关闭">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
|
||||
<path d="M18 6L6 18M6 6l12 12" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user