Files
aurora-admin/frameworks/button.html
T
aurora-admin 7e3d442dab
Deploy to GitHub Pages / deploy (push) Failing after 2m30s
Regression / regression (push) Failing after 53s
feat(S2-P7+S3-P8): 行为断言6试点全绿+RTL28文件迁移/回归1009-1009
P7: tests/_behaviors.js新建(8动词+@input/@doc定位+同步pump+page-load
    幂等缓存); _runtime聚合+重载清缓存; _template引入; 6演示页标注;
    79测试页重生成。关键修:runner兜底重跑致行为二轮误报,加缓存解决。
P8: tools/migrate-rtl.mjs新建(白名单dry-run/--write); 28个CSS转逻辑
    属性;物理清零(排除auto/拼接/居中14处人工例外);三页RTL零溢出。
回归:100%(79/79页,1009/1009断言,N/A 35)。
2026-09-14 03:37:08 +08:00

118 lines
5.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Aurora Admin · Button (H5)</title>
<!-- 复用设计系统 token,保证与组件库一致 -->
<link rel="stylesheet" href="../.design_library/aurora-admin/colors_and_type.css">
<style>
/* 以下按钮样式对齐 components.css 与 button.json 契约 */
.btn {
display: inline-flex; align-items: center; justify-content: center;
gap: var(--space-4); border: 1px solid transparent; cursor: pointer;
white-space: nowrap; font-size: var(--font-size-body); line-height: var(--line-height-body);
border-radius: var(--radius-base); min-width: 64px; padding: 0 var(--space-12);
flex-shrink: 0; transition: background .15s, border-color .15s;
font-family: var(--font-family); box-sizing: border-box;
}
.btn:focus-visible { outline: 2px solid var(--color-focus-ring); outline-offset: 2px; }
.btn-primary { background: var(--color-brand); color: var(--color-text-inverse); }
.btn-primary:hover { background: var(--color-brand-hover); }
.btn-primary:active { background: var(--color-brand-active); }
.btn-default { background: var(--color-bg-card); border-color: var(--color-border); color: var(--color-text-body); }
.btn-default:hover { border-color: var(--color-brand); }
.btn-text { background: transparent; color: var(--color-brand); }
.btn-text:hover { background: var(--color-brand-bg); }
.btn-link { background: transparent; border: none; color: var(--color-brand); min-width: auto; padding: 0; }
.btn-link:hover { background: var(--color-brand-bg); }
.btn-danger { background: var(--color-error); color: var(--color-text-inverse); }
.btn-danger:hover { filter: brightness(.92); }
.btn-lg { height: var(--control-height-large); }
.btn-md { height: var(--control-height-default); }
.btn-sm { height: var(--control-height-small); }
.btn-disabled, .btn:disabled {
background: var(--color-bg-disabled); border-color: transparent;
color: var(--color-text-placeholder); cursor: not-allowed;
}
.btn-disabled:hover, .btn:disabled:hover { background: var(--color-bg-disabled); filter: none; }
/* 加载态:旋转 spinner + 文字 */
.btn.is-loading { cursor: progress; position: relative; }
.btn.is-loading .btn-label { opacity: .65; }
.btn .spinner {
width: 14px; height: 14px; border: 2px solid currentColor; border-top-color: transparent;
border-radius: 50%; animation: btn-spin .6s linear infinite; display: inline-block;
}
@keyframes btn-spin { to { transform: rotate(360deg); } }
/* 演示页布局 */
body { margin: 0; padding: 24px; background: var(--color-bg-page); color: var(--color-text-body);
font-family: var(--font-family); }
h1 { font-size: var(--font-size-h1); margin: 0 0 4px; }
.sub { color: var(--color-text-secondary); margin: 0 0 24px; font-size: var(--font-size-caption); }
.group { margin-bottom: 24px; }
.group h2 { font-size: var(--font-size-h2); margin: 0 0 12px; color: var(--color-text-title); }
.row { display: flex; flex-wrap: wrap; gap: var(--space-12); align-items: center; }
.tag { font-size: var(--font-size-caption); color: var(--color-text-secondary); width: 72px; flex-shrink: 0; }
</style>
</head>
<body>
<h1>Aurora Admin · Button 组件(纯 H5)</h1>
<p class="sub">对齐 button.json 契约:5 类型 × 3 尺寸,含禁用 / 加载 / 图标场景</p>
<div class="group">
<h2>1. 类型(默认尺寸)</h2>
<div class="row">
<button class="btn btn-primary btn-md" id="demo-toggle" data-behavior="click-toggles-class:#demo-toggle|is-loading">主按钮(点击切加载态)</button>
<button class="btn btn-default btn-md">次按钮</button>
<button class="btn btn-text btn-md">文字按钮</button>
<button class="btn btn-link btn-md">链接按钮</button>
<button class="btn btn-danger btn-md">危险按钮</button>
</div>
</div>
<div class="group">
<h2>2. 尺寸(主按钮)</h2>
<div class="row">
<button class="btn btn-primary btn-lg">大尺寸</button>
<button class="btn btn-primary btn-md">默认尺寸</button>
<button class="btn btn-primary btn-sm">小尺寸</button>
</div>
</div>
<div class="group">
<h2>3. 禁用态</h2>
<div class="row">
<button class="btn btn-primary btn-md btn-disabled" disabled>主按钮</button>
<button class="btn btn-default btn-md btn-disabled" disabled>次按钮</button>
<button class="btn btn-danger btn-md btn-disabled" disabled>危险按钮</button>
</div>
</div>
<div class="group">
<h2>4. 加载态</h2>
<div class="row">
<button class="btn btn-primary btn-md is-loading"><span class="spinner"></span><span class="btn-label">提交中</span></button>
<button class="btn btn-default btn-md is-loading"><span class="spinner"></span><span class="btn-label">加载中</span></button>
</div>
</div>
<div class="group">
<h2>5. 带图标(内联 SVG 占位)</h2>
<div class="row">
<button class="btn btn-primary btn-md"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 5v14M5 12h14"/></svg>新建</button>
<button class="btn btn-default btn-md"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3"/></svg>导出</button>
<button class="btn btn-danger btn-md"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 6h18M8 6V4h8v2M19 6l-1 14H6L5 6"/></svg>删除</button>
</div>
</div>
<script>
// P7 行为断言配套:演示用加载态切换(真实交互,非仅样式展示)
document.getElementById('demo-toggle').addEventListener('click', function () {
this.classList.toggle('is-loading');
});
</script>
</body>
</html>