Merge branch 'feat/design-truth-source' into worktree-latency-probe-12b

This commit is contained in:
wangjia
2026-07-11 00:55:05 +08:00
39 changed files with 1191 additions and 494 deletions
+4 -7
View File
@@ -4,6 +4,7 @@ import { useEffect, useRef, useState } from 'react';
import { createRoot } from 'react-dom/client';
import '@dudu/design/styles.css';
import { Button } from '@dudu/design/components/core/Button';
import { Icon } from '@dudu/design/components/core/Icon';
import { Switch } from '@dudu/design/components/forms/Switch';
import { SettingRow } from '@dudu/design/components/forms/SettingRow';
import { invoke } from '../shared/tauri';
@@ -45,7 +46,7 @@ function Thumb({ img, onRemove }) {
background: 'var(--text-1)', color: 'var(--bg-app)',
display: 'flex', alignItems: 'center', justifyContent: 'center', padding: 0,
}}>
<svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round"><path d="M18 6 6 18M6 6l12 12"/></svg>
<Icon name="x" size={10} sw={3} />
</button>
</div>
);
@@ -65,11 +66,7 @@ function AddBox({ onClick, dragging }) {
display: 'flex', alignItems: 'center', justifyContent: 'center',
transition: 'border-color var(--dur-fast) var(--ease-out)',
}}>
{/* Lucide image-plus */}
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M16 5h6"/><path d="M19 2v6"/><path d="M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5"/>
<circle cx="9" cy="9" r="2"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/>
</svg>
<Icon name="imagePlus" size={20} />
</button>
);
}
@@ -81,7 +78,7 @@ function SuccessView({ onAgain }) {
width: 56, height: 56, borderRadius: '50%', background: 'var(--positive-soft)', color: 'var(--positive)',
display: 'flex', alignItems: 'center', justifyContent: 'center',
}}>
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"><path d="M20 6 9 17l-5-5"/></svg>
<Icon name="check" size={28} sw={2.5} />
</span>
<div style={{ fontSize: 17, fontWeight: 'var(--weight-semibold)', color: 'var(--text-1)' }}>已收到 · 谢谢你</div>
<Button variant="ghost" size="sm" onClick={onAgain}>继续反馈</Button>
+2 -1
View File
@@ -5,6 +5,7 @@ import { createRoot } from 'react-dom/client';
import '@dudu/design/styles.css';
import { Button } from '@dudu/design/components/core/Button';
import { Badge } from '@dudu/design/components/core/Badge';
import { Icon } from '@dudu/design/components/core/Icon';
import { invoke } from '../shared/tauri';
import { setThemePref } from '../shared/theme';
import { usePoll } from '../shared/usePoll';
@@ -172,7 +173,7 @@ function LoginApp() {
width: 56, height: 56, borderRadius: '50%', background: 'var(--positive-soft)', color: 'var(--positive)',
display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: 28,
}}>
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"><path d="M20 6 9 17l-5-5"/></svg>
<Icon name="check" size={28} sw={2.5} />
</span>
<div style={{ fontSize: 'var(--text-lg)', fontWeight: 'var(--weight-semibold)', color: 'var(--text-1)' }}>已到账 {pack.minutes} 分钟</div>
<div style={{ fontSize: 'var(--text-sm)', color: 'var(--text-2)', textAlign: 'center' }}>
+4 -13
View File
@@ -6,6 +6,7 @@ import '@dudu/design/styles.css';
import { Button } from '@dudu/design/components/core/Button';
import { Badge } from '@dudu/design/components/core/Badge';
import { HotkeyCombo } from '@dudu/design/components/core/Kbd';
import { Icon } from '@dudu/design/components/core/Icon';
import { invoke } from '../shared/tauri';
import { setThemePref } from '../shared/theme';
import { usePoll } from '../shared/usePoll';
@@ -56,17 +57,9 @@ function PermCard({ icon, title, desc, granted, onGrant }) {
);
}
const MicIcon = (
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M12 19v3"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><rect x="9" y="2" width="6" height="13" rx="3"/>
</svg>
);
const MicIcon = <Icon name="mic" size={18} />;
const KeyIcon = (
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="m15.5 7.5 3 3L22 7l-3-3"/><path d="m21 2-9.6 9.6"/><circle cx="7.5" cy="15.5" r="5.5"/>
</svg>
);
const KeyIcon = <Icon name="key" size={18} />;
function OnboardingApp() {
const [step, setStep] = useState(0);
@@ -105,9 +98,7 @@ function OnboardingApp() {
width: 64, height: 64, borderRadius: 18, background: 'var(--accent)', color: 'var(--text-on-accent)',
display: 'flex', alignItems: 'center', justifyContent: 'center', margin: '0 auto',
}}>
<svg width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M12 19v3"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><rect x="9" y="2" width="6" height="13" rx="3"/>
</svg>
<Icon name="mic" size={30} />
</span>
<Title>dudu 语音输入</Title>
<Desc>按住快捷键说话松开文字就出现在光标处<br />全程比打字快三倍</Desc>
+1 -1
View File
@@ -18,7 +18,7 @@ function Item({ children, right, onClick }) {
transition: 'background var(--dur-fast) var(--ease-out)',
}}>
<span style={{ whiteSpace: 'nowrap' }}>{children}</span>
{right && <span style={{ fontSize: 'var(--text-xs)', color: hover ? 'rgba(255,255,255,.8)' : 'var(--text-3)' }}>{right}</span>}
{right && <span style={{ fontSize: 'var(--text-xs)', color: hover ? 'var(--text-on-accent)' : 'var(--text-3)', opacity: hover ? 0.8 : 1 }}>{right}</span>}
</div>
);
}