40760aa884
- server:Go 网关(WS 流式识别中继/计费配额/微信登录支付 mock/反馈/埋点),gummy provider 已真实联调 - desktop:Tauri 2(全局快捷键 push-to-talk/浮层/托盘/设置/登录购买/反馈/首启引导) - android:Compose 主 App + IME(键盘内录音直传) - ios:App + 键盘扩展(1A spike 实证键盘内不可录音,走 deep link 听写) - design/design-pipeline:设计系统 + token 导出 iOS/Android 主题 - doc:前后端设计文档(HTML);web:官网宣传页;todo:任务看板 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
41 lines
2.1 KiB
React
41 lines
2.1 KiB
React
const ddButtonCss = `
|
|
.dd-btn {
|
|
display: inline-flex; align-items: center; justify-content: center; gap: 6px;
|
|
font-family: var(--font-sans); font-weight: var(--weight-medium);
|
|
border-radius: var(--radius-sm); border: 1px solid transparent;
|
|
cursor: pointer; white-space: nowrap; user-select: none;
|
|
transition: background var(--dur-fast) var(--ease-out),
|
|
border-color var(--dur-fast) var(--ease-out),
|
|
color var(--dur-fast) var(--ease-out);
|
|
}
|
|
.dd-btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
|
.dd-btn--sm { height: var(--control-sm); padding: 0 12px; font-size: var(--text-sm); }
|
|
.dd-btn--md { height: var(--control-md); padding: 0 16px; font-size: var(--text-base); }
|
|
.dd-btn--lg { height: var(--control-lg); padding: 0 20px; font-size: var(--text-md); }
|
|
.dd-btn--block { width: 100%; }
|
|
.dd-btn--primary { background: var(--accent); color: var(--text-on-accent); }
|
|
.dd-btn--primary:hover { background: var(--accent-hover); }
|
|
.dd-btn--primary:active { background: var(--accent-press); }
|
|
.dd-btn--secondary { background: var(--surface-card); border-color: var(--border-2); color: var(--text-1); }
|
|
.dd-btn--secondary:hover { background: var(--surface-2); }
|
|
.dd-btn--secondary:active { background: var(--surface-3); }
|
|
.dd-btn--ghost { background: transparent; color: var(--accent-text); }
|
|
.dd-btn--ghost:hover { background: var(--accent-soft); }
|
|
.dd-btn--ghost:active { background: var(--accent-soft-2); }
|
|
.dd-btn--danger { background: var(--danger); color: #fff; }
|
|
.dd-btn--danger:hover { filter: brightness(0.94); }
|
|
.dd-btn[disabled] { opacity: 0.45; pointer-events: none; }
|
|
`;
|
|
|
|
if (typeof document !== 'undefined' && !document.getElementById('dd-button-css')) {
|
|
const s = document.createElement('style');
|
|
s.id = 'dd-button-css';
|
|
s.textContent = ddButtonCss;
|
|
document.head.appendChild(s);
|
|
}
|
|
|
|
export function Button({ variant = 'primary', size = 'md', block = false, disabled = false, children, ...rest }) {
|
|
const cls = `dd-btn dd-btn--${variant} dd-btn--${size}${block ? ' dd-btn--block' : ''}`;
|
|
return <button type="button" className={cls} disabled={disabled} {...rest}>{children}</button>;
|
|
}
|