Initial commit: DeskFloat 桌面透明浮动工具栏

Tauri 2 + React:任务列表、快捷方式、番茄钟、系统托盘、钉子穿透模式等。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
wjl
2026-05-26 20:01:43 +08:00
commit 8e9d108995
103 changed files with 12278 additions and 0 deletions
@@ -0,0 +1,155 @@
.indicator {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 0 10px;
height: 30px;
border-radius: var(--radius-md);
color: rgb(var(--fg-color));
font-variant-numeric: tabular-nums;
transition: background 0.12s;
}
.indicator:hover {
background: rgba(var(--border), 0.08);
}
.indicatorActive {
background: rgba(var(--accent), 0.18);
color: rgb(var(--accent));
}
.indicator:disabled {
opacity: 0.45;
cursor: not-allowed;
}
.indicator:disabled:hover {
background: transparent;
}
.time {
font-size: 12px;
font-weight: 600;
letter-spacing: 0.5px;
}
.dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: rgba(var(--fg-dim), 0.5);
transition: background 0.2s;
}
.dotIdle {
background: rgba(var(--fg-dim), 0.4);
}
.dotWork {
background: rgb(var(--success));
box-shadow: 0 0 6px rgba(var(--success), 0.6);
animation: pulse 1.6s ease-in-out infinite;
}
.dotBreak {
background: rgb(var(--warning));
box-shadow: 0 0 6px rgba(var(--warning), 0.6);
animation: pulse 1.6s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.panel {
width: 100%;
height: 220px;
display: flex;
flex-direction: column;
gap: 10px;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
}
.title {
display: inline-flex;
align-items: center;
gap: 6px;
font-weight: 600;
font-size: 12px;
}
.muted {
color: rgba(var(--fg-dim), 0.85);
font-weight: 600;
font-size: 16px;
font-variant-numeric: tabular-nums;
margin-left: auto;
}
.progress {
width: 100%;
height: 4px;
background: rgba(var(--border), 0.08);
border-radius: 2px;
overflow: hidden;
}
.progressFill {
height: 100%;
transition: width 1s linear;
border-radius: 2px;
}
.fillWork {
background: rgb(var(--success));
}
.fillBreak {
background: rgb(var(--warning));
}
.controls {
display: flex;
gap: 6px;
}
.primaryBtn,
.secondaryBtn {
flex: 1;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
height: 32px;
font-size: 12px;
border-radius: var(--radius-sm);
transition: all 0.12s;
}
.primaryBtn {
background: rgba(var(--accent), 0.22);
color: rgb(var(--accent));
}
.primaryBtn:hover {
background: rgba(var(--accent), 0.32);
}
.secondaryBtn {
background: rgba(var(--border), 0.06);
color: rgba(var(--fg-dim), 0.95);
}
.secondaryBtn:hover {
background: rgba(var(--border), 0.12);
color: rgb(var(--fg-color));
}
.config {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
}
.field {
display: flex;
flex-direction: column;
gap: 4px;
}
.field label {
font-size: 10px;
color: rgba(var(--fg-dim), 0.85);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.field input {
height: 28px;
font-size: 12px;
text-align: center;
}