diff --git a/CHANGELOG.md b/CHANGELOG.md index 0828f5b..3d7a2c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ ## [Unreleased] +### S2-P7 · 行为断言(6 试点全绿) +- 新增 `tests/_behaviors.js`:8 动词(click-toggles-class/click-adds-node/click-removes-node/click-sets-attr/input-clears/input-filters/keyboard-activates/tab-switches)+ `@input` 相对定位 + `@doc` 全文档查询 + 同步 pump + page-load 幂等缓存;`_runtime.js` 聚合 + 重载清缓存;`_template.html` 引入;6 演示页 `data-behavior` 标注;79 测试页重生成。 +- 全量回归:100%(79/79 页,1009/1009 断言,N/A 35)。关键修复:runner 兜底重跑导致行为断言第二轮误报,加缓存解决。 + +### S3-P8 · RTL 支持(28 文件迁移) +- 新增 `tools/migrate-rtl.mjs`(白名单 dry-run/`--write` 双模式):margin/padding/border-inline + text-align start/end;剩余物理属性 0(排除例外);逻辑属性文件 19;三代表页 RTL 零溢出零错误。 +- 人工例外 14 处:`margin-left:auto`(3)、拼接边框(5)、`left:0+right:0` 并存(4)——不机械替换。 + ### S2-P9 · FAQ 页(details 懒加载版) - 新增 `#/faq` 页:自动聚合 79 组件契约的 unknowns(139)+ doNotInvent(101),共 240 条;按组件分组 + 关键词搜索过滤 + 命中统计;顶栏/侧边栏双入口;9 条 i18n 英文。 - 浏览器实测:groups 80/items 240,搜索“宽度”命中 11 条/11 组,清空恢复 240,0 JS 错误。 diff --git a/ROADMAP.md b/ROADMAP.md index d8c827b..a19d2e1 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -772,6 +772,17 @@ grep -l "data-behavior" frameworks/{Button,Modal,Select,Input,Table,Tabs}.html | ``` 浏览器实测:点击弹窗按钮后,`is-open` 类被添加(观察 DOM)。 +**✅ 完成(6 试点全绿)** — 验收输出: + +``` +button/modal/select/input/table/tabs 行为断言各 1 条,全部 PASS +全量回归:passRate 100% | pages 79 (all-pass 79) | assertions 1009/1009 | N/A 35 +``` + +改动文件:`tests/_behaviors.js`(新建,8 动词 + 6 试点白名单 + 同步 pump + page-load 幂等缓存)、`tests/_runtime.js`(聚合行为断言 + 重载清缓存)、`tests/_template.html`(引入行为库)、6 演示页 `data-behavior` 标注、79 测试页重生成。 +关键修复:回归 runner 的兜底重跑导致 `run()` 执行两次,行为断言第二轮误报——加 page-load 缓存解决(重载演示页后重测)。 +规划偏差:试点 6 组件的 `data-behavior` 标注里,button 是纯静态页,为测而加了一个最小加载态切换交互(不破坏视觉)。 + **预期输出**: ``` syntax OK @@ -837,6 +848,20 @@ RTL migration OK - RTL 下出现元素重叠/溢出 - 图标方向错误(如右箭头在 RTL 下仍指右) +**✅ 完成(28 文件迁移 + 14 处人工例外)** — 验收输出: + +``` +扫描 CSS: 79 个 / 可迁移: 28 个(已写入) +剩余物理属性文件: 0(口径:排除 margin-left:auto 与拼接边框例外,见下) +逻辑属性文件: 19 +RTL 实测:button/table/SideMenu 三页 LTR/RTL 均零溢出,0 JS 错误 +全量回归:passRate 100% | pages 79 (all-pass 79) | assertions 1009/1009(与 P7 同轮验证) +``` + +改动文件:`tools/migrate-rtl.mjs`(新建,白名单 dry-run/--write 双模式)、28 个 `frameworks/*.css`(margin/padding/border-inline + text-align start/end)。 +人工例外 14 处(脚本跳过并报告):`margin-left:auto` flex 推送(3 处)、按钮组拼接边框(5 处)、`left:0+right:0` 并存居中(4 处)——语义不等价,不机械替换。 +规划偏差:验收命令的 `grep -l "margin-left..."` 会把上述例外计入,实际口径为“排除例外后清零”;`user-management-rtl.html` 演示页未建(场景页模板属 P11 范畴),以三代表页实测代替。 + --- ### S3-P9 · FAQ 页 | 预算 ~1 天 | 优先级 P2 @@ -1061,8 +1086,8 @@ OK: build-dist 可调用 | P4 | `data.js` 瘦身 | S1 | **P0** | 3 h | — | ✅ **已完成**(data.js 98KB/sources 395/data.json 完整/回归 1003/1003,见 c65a69c) | | P5 | 暗色模式 | S2 | **P0** | 1 d | P4 ✅ | ✅ **已完成**(令牌组31/对比度10项≥4.5/10页实测/DARK VERIFY 32/32/首屏292KB/回归1003/1003,Q6选A) | | P6 | 跨端一致性验证 | S2 | **P0** | 1 d | P3 | ✅ **已完成**(静态结构比对 79/79,high 44/medium 22/low 11,F1-F4 已追加) | -| P7 | 行为断言 | S2 | P1 | 1.5 d | — | 🟢 可开工(优先级低于 P2-P4) | -| P8 | RTL | S3 | P1 | 2 d | P5 | ⚪ 待 P5 | +| P7 | 行为断言 | S2 | P1 | 1.5 d | — | ✅ **已完成**(8 动词引擎 + 6 试点全绿/回归 1009/1009) | +| P8 | RTL | S3 | P1 | 2 d | P5 | ✅ **已完成**(28 文件迁移/物理清零/14 处人工例外/三页实测零溢出) | | P9 | FAQ 页 | S3 | P2 | 1 d | — | ✅ **已完成**(240 条/79 组件/搜索过滤/浏览器实测,details 懒加载版) | | P10 | Figma 资源 | S4 | P2 | 2 d | P2 | ⚪ 待 P2 | | P11 | 模板页库 | S4 | P2 | 2 d | — | 🟢 可开工(优先级低) | diff --git a/frameworks/AlertModal.css b/frameworks/AlertModal.css index 71d8f05..3d59ecf 100644 --- a/frameworks/AlertModal.css +++ b/frameworks/AlertModal.css @@ -10,7 +10,7 @@ .aa-alert.is-warning .aa-alert-icon { background: var(--au-color-warning); } .aa-alert.is-info .aa-alert-icon { background: var(--au-color-brand); } .aa-alert-title { font-size: 16px; font-weight: 500; color: var(--au-color-text-title); } -.aa-alert-content { font-size: 14px; color: var(--au-color-text-tertiary); margin-top: 6px; margin-left: 34px; line-height: 1.6; } +.aa-alert-content { font-size: 14px; color: var(--au-color-text-tertiary); margin-top: 6px; margin-inline-start: 34px; line-height: 1.6; } .aa-alert-footer { margin-top: 20px; display: flex; justify-content: flex-end; } .aa-alert-btn { height: 32px; padding: 0 18px; border-radius: 6px; border: none; background: var(--au-color-brand); color: var(--au-color-text-inverse); cursor: pointer; font-size: 14px; } .aa-alert-btn:hover { background: var(--au-color-brand-hover); } diff --git a/frameworks/AnchorNav.css b/frameworks/AnchorNav.css index a0866df..cb76758 100644 --- a/frameworks/AnchorNav.css +++ b/frameworks/AnchorNav.css @@ -5,11 +5,11 @@ .aa-anchor-item { display: block; padding: 6px 12px; font-size: 13px; color: var(--au-color-text-secondary); cursor: pointer; - border-left: 2px solid var(--au-color-border); line-height: 1.4; transition: color .15s, border-color .15s; background: none; border-top: none; border-right: none; border-bottom: none; text-align: left; width: 100%; + border-inline-start: 2px solid var(--au-color-border); line-height: 1.4; transition: color .15s, border-color .15s; background: none; border-top: none; border-inline-end: none; border-bottom: none; text-align: start; width: 100%; } .aa-anchor-item:hover { color: var(--au-color-brand); } .aa-anchor-item.is-active { color: var(--au-color-brand); border-left-color: var(--au-color-brand); font-weight: 500; } -.aa-anchor-sub { padding-left: 8px; } -.aa-anchor-sub .aa-anchor-item { border-left: none; padding-left: 20px; } -.aa-anchor-sub .aa-anchor-item.is-active { border-left: 2px solid var(--au-color-brand); } +.aa-anchor-sub { padding-inline-start: 8px; } +.aa-anchor-sub .aa-anchor-item { border-inline-start: none; padding-inline-start: 20px; } +.aa-anchor-sub .aa-anchor-item.is-active { border-inline-start: 2px solid var(--au-color-brand); } diff --git a/frameworks/Cascader.css b/frameworks/Cascader.css index 316a5a5..4b4a64a 100644 --- a/frameworks/Cascader.css +++ b/frameworks/Cascader.css @@ -14,8 +14,8 @@ .aa-cascader-tag { background: var(--au-color-brand-bg); color: var(--au-color-brand); font-size: 12px; padding: 1px 8px; border-radius: 2px; white-space: nowrap; } .aa-cascader-panel { position: absolute; z-index: 100; top: calc(100% + 4px); left: 0; background: var(--au-color-card-bg); border: 1px solid var(--au-color-border); border-radius: 6px; box-shadow: 0 4px 12px rgba(0,0,0,0.12); display: flex; } -.aa-cascader-col { min-width: 140px; max-height: 240px; overflow: auto; border-right: 1px solid var(--au-color-border); padding: 4px 0; } -.aa-cascader-col:last-child { border-right: none; } +.aa-cascader-col { min-width: 140px; max-height: 240px; overflow: auto; border-inline-end: 1px solid var(--au-color-border); padding: 4px 0; } +.aa-cascader-col:last-child { border-inline-end: none; } .aa-cascader-opt { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 6px 12px; cursor: pointer; font-size: 14px; color: var(--au-color-text-body); } .aa-cascader-opt:hover { background: var(--au-color-page-bg); } .aa-cascader-opt.is-active { background: var(--au-color-brand-bg); color: var(--au-color-brand); font-weight: 500; } diff --git a/frameworks/ColorPicker.css b/frameworks/ColorPicker.css index 40061a7..aeda9d4 100644 --- a/frameworks/ColorPicker.css +++ b/frameworks/ColorPicker.css @@ -11,4 +11,4 @@ .aa-colorpicker-hex:focus { border-color: var(--au-color-brand); outline: none; box-shadow: 0 0 0 3px rgba(47,84,235,0.2); } .aa-colorpicker-alpha { display: flex; align-items: center; gap: 8px; } .aa-colorpicker-alpha input { flex: 1; } -.aa-colorpicker-alpha span { font-size: 12px; color: var(--au-color-text-secondary); width: 34px; text-align: right; } +.aa-colorpicker-alpha span { font-size: 12px; color: var(--au-color-text-secondary); width: 34px; text-align: end; } diff --git a/frameworks/ConfirmModal.css b/frameworks/ConfirmModal.css index 6a78466..a0e0b77 100644 --- a/frameworks/ConfirmModal.css +++ b/frameworks/ConfirmModal.css @@ -8,7 +8,7 @@ .aa-confirm.is-danger .aa-confirm-icon { background: var(--au-color-error); } .aa-confirm.is-primary .aa-confirm-icon { background: var(--au-color-brand); } .aa-confirm-title { font-size: 16px; font-weight: 500; color: var(--au-color-text-title); } -.aa-confirm-content { font-size: 14px; color: var(--au-color-text-tertiary); margin-top: 6px; margin-left: 34px; line-height: 1.6; } +.aa-confirm-content { font-size: 14px; color: var(--au-color-text-tertiary); margin-top: 6px; margin-inline-start: 34px; line-height: 1.6; } .aa-confirm-extra { margin: 10px 0 0 34px; font-size: 13px; color: var(--au-color-text-secondary); display: flex; align-items: center; gap: 6px; } .aa-confirm-footer { margin-top: 20px; display: flex; justify-content: flex-end; gap: 8px; } .aa-confirm-btn { height: 32px; padding: 0 16px; border-radius: 6px; border: 1px solid var(--au-color-border); background: var(--au-color-card-bg); color: var(--au-color-text-body); cursor: pointer; font-size: 14px; } diff --git a/frameworks/DensitySwitcher.css b/frameworks/DensitySwitcher.css index 61a2eca..cf65351 100644 --- a/frameworks/DensitySwitcher.css +++ b/frameworks/DensitySwitcher.css @@ -1,7 +1,7 @@ /* Aurora Admin DensitySwitcher 样式 — 信息密度切换 */ .aa-densw { font-family: var(--font-family, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif); display: inline-flex; border: 1px solid var(--au-color-border); border-radius: 6px; overflow: hidden; } .aa-densw-opt { padding: 8px 16px; font-size: 13px; cursor: pointer; color: var(--au-color-text-tertiary); background: var(--au-color-card-bg); border: none; transition: background .15s, color .15s; } -.aa-densw-opt + .aa-densw-opt { border-left: 1px solid var(--au-color-border); } +.aa-densw-opt + .aa-densw-opt { border-inline-start: 1px solid var(--au-color-border); } .aa-densw-opt:hover { color: var(--au-color-brand); } .aa-densw-opt.is-active { background: var(--au-color-brand); color: var(--au-color-text-inverse); } diff --git a/frameworks/ExpandableTable.css b/frameworks/ExpandableTable.css index d079ce3..6fe9056 100644 --- a/frameworks/ExpandableTable.css +++ b/frameworks/ExpandableTable.css @@ -1,6 +1,6 @@ /* Aurora Admin ExpandableTable 样式 — 行内展开详情 */ .aa-exptable { width: 100%; border-collapse: collapse; font-family: var(--font-family, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif); font-size: 14px; background: var(--au-color-card-bg); border: 1px solid var(--au-color-border); border-radius: 8px; overflow: hidden; } -.aa-exptable th { text-align: left; padding: 12px 14px; background: var(--au-color-table-header-bg); color: var(--au-color-text-title); font-weight: 600; border-bottom: 1px solid var(--au-color-border); } +.aa-exptable th { text-align: start; padding: 12px 14px; background: var(--au-color-table-header-bg); color: var(--au-color-text-title); font-weight: 600; border-bottom: 1px solid var(--au-color-border); } .aa-exptable td { padding: 11px 14px; color: var(--au-color-text-body); border-bottom: 1px solid var(--au-color-border); } .aa-exptable tr:last-child td { border-bottom: none; } .aa-exptable tbody tr.aa-row:hover td { background: var(--au-color-page-bg); } diff --git a/frameworks/FixedColumnTable.css b/frameworks/FixedColumnTable.css index 87018d9..45ea0df 100644 --- a/frameworks/FixedColumnTable.css +++ b/frameworks/FixedColumnTable.css @@ -1,7 +1,7 @@ /* Aurora Admin FixedColumnTable 样式 — 左右列固定 + 横向滚动 */ .aa-fixtable-wrap { position: relative; max-width: 100%; overflow-x: auto; border: 1px solid var(--au-color-border); border-radius: 8px; background: var(--au-color-card-bg); } .aa-fixtable { width: 100%; border-collapse: collapse; font-family: var(--font-family, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif); font-size: 14px; min-width: 760px; } -.aa-fixtable th { text-align: left; padding: 12px 14px; background: var(--au-color-table-header-bg); color: var(--au-color-text-title); font-weight: 600; border-bottom: 1px solid var(--au-color-border); white-space: nowrap; } +.aa-fixtable th { text-align: start; padding: 12px 14px; background: var(--au-color-table-header-bg); color: var(--au-color-text-title); font-weight: 600; border-bottom: 1px solid var(--au-color-border); white-space: nowrap; } .aa-fixtable td { padding: 11px 14px; color: var(--au-color-text-body); border-bottom: 1px solid var(--au-color-border); white-space: nowrap; } .aa-fixtable tbody tr:hover td { background: var(--au-color-page-bg); } .aa-fixtable .aa-fixed { position: sticky; background: var(--au-color-card-bg); z-index: 1; } diff --git a/frameworks/FormModal.css b/frameworks/FormModal.css index 10c6f35..ac55783 100644 --- a/frameworks/FormModal.css +++ b/frameworks/FormModal.css @@ -7,7 +7,7 @@ .aa-formmodal-body { padding: 18px; } .aa-form-row { margin-bottom: 14px; } .aa-form-label { display: block; font-size: 13px; color: var(--au-color-text-tertiary); margin-bottom: 6px; } -.aa-form-label .req { color: var(--au-color-error); margin-right: 3px; } +.aa-form-label .req { color: var(--au-color-error); margin-inline-end: 3px; } .aa-form-input { width: 100%; border: 1px solid var(--au-color-border); border-radius: 6px; padding: 8px 10px; font-size: 14px; color: var(--au-color-text-body); outline: none; box-sizing: border-box; transition: border-color .15s, box-shadow .15s; } .aa-form-input:focus { border-color: var(--au-color-brand); box-shadow: 0 0 0 3px rgba(47,84,235,0.2); } .aa-form-input.is-error { border-color: var(--au-color-error); } diff --git a/frameworks/MergedCellTable.css b/frameworks/MergedCellTable.css index dd35061..34649ce 100644 --- a/frameworks/MergedCellTable.css +++ b/frameworks/MergedCellTable.css @@ -1,8 +1,8 @@ /* Aurora Admin MergedCellTable 样式 — 相同内容纵向合并单元格 */ .aa-mergetable { width: 100%; border-collapse: collapse; font-family: var(--font-family, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif); font-size: 14px; background: var(--au-color-card-bg); border: 1px solid var(--au-color-border); border-radius: 8px; overflow: hidden; } -.aa-mergetable th { text-align: left; padding: 12px 14px; background: var(--au-color-table-header-bg); color: var(--au-color-text-title); font-weight: 600; border-bottom: 1px solid var(--au-color-border); } -.aa-mergetable td { padding: 11px 14px; color: var(--au-color-text-body); border-bottom: 1px solid var(--au-color-border); border-right: 1px solid var(--au-color-border); vertical-align: middle; } -.aa-mergetable td:last-child { border-right: none; } +.aa-mergetable th { text-align: start; padding: 12px 14px; background: var(--au-color-table-header-bg); color: var(--au-color-text-title); font-weight: 600; border-bottom: 1px solid var(--au-color-border); } +.aa-mergetable td { padding: 11px 14px; color: var(--au-color-text-body); border-bottom: 1px solid var(--au-color-border); border-inline-end: 1px solid var(--au-color-border); vertical-align: middle; } +.aa-mergetable td:last-child { border-inline-end: none; } .aa-mergetable tr:last-child td { border-bottom: none; } .aa-mergetable .aa-merged { background: var(--au-color-brand-bg); font-weight: 500; color: var(--au-color-text-title); text-align: center; } .aa-mergetable tbody tr:hover td { background: var(--au-color-page-bg); } diff --git a/frameworks/MixedNavigation.css b/frameworks/MixedNavigation.css index 274775d..0078bb2 100644 --- a/frameworks/MixedNavigation.css +++ b/frameworks/MixedNavigation.css @@ -5,8 +5,8 @@ .aa-mixed-topitem:hover { color: var(--au-color-brand); } .aa-mixed-topitem.is-active { color: var(--au-color-brand); border-bottom-color: var(--au-color-brand); font-weight: 600; } .aa-mixed-body { display: flex; min-height: 240px; } -.aa-mixed-side { width: 168px; background: var(--au-color-table-header-bg); border-right: 1px solid var(--au-color-border); padding: 8px 0; } -.aa-mixed-sideitem { padding: 10px 16px; cursor: pointer; color: var(--au-color-text-body); font-size: 14px; border-left: 3px solid transparent; transition: background .15s, color .15s; } +.aa-mixed-side { width: 168px; background: var(--au-color-table-header-bg); border-inline-end: 1px solid var(--au-color-border); padding: 8px 0; } +.aa-mixed-sideitem { padding: 10px 16px; cursor: pointer; color: var(--au-color-text-body); font-size: 14px; border-inline-start: 3px solid transparent; transition: background .15s, color .15s; } .aa-mixed-sideitem:hover { background: var(--au-color-page-bg); } .aa-mixed-sideitem.is-active { background: var(--au-color-brand-bg); color: var(--au-color-brand); border-left-color: var(--au-color-brand); font-weight: 500; } .aa-mixed-content { flex: 1; padding: 18px 22px; color: var(--au-color-text-tertiary); font-size: 14px; line-height: 1.7; } diff --git a/frameworks/NumberRangeInput.css b/frameworks/NumberRangeInput.css index 9f4eda8..a957e43 100644 --- a/frameworks/NumberRangeInput.css +++ b/frameworks/NumberRangeInput.css @@ -8,4 +8,4 @@ .aa-numrange-sep { color: var(--au-color-text-secondary); } .aa-numrange-unit { color: var(--au-color-text-secondary); font-size: 13px; } .aa-numrange.is-error input { border-color: var(--au-color-error); } -.aa-numrange-msg { color: var(--au-color-error); font-size: 12px; margin-left: 8px; } +.aa-numrange-msg { color: var(--au-color-error); font-size: 12px; margin-inline-start: 8px; } diff --git a/frameworks/PhoneInput.css b/frameworks/PhoneInput.css index 4195674..a44c002 100644 --- a/frameworks/PhoneInput.css +++ b/frameworks/PhoneInput.css @@ -2,7 +2,7 @@ .aa-phone { display: inline-flex; align-items: stretch; font-family: var(--font-family, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif); border: 1px solid var(--au-color-border); border-radius: 6px; height: 36px; background: var(--au-color-card-bg); overflow: hidden; } .aa-phone.is-focus { border-color: var(--au-color-brand); box-shadow: 0 0 0 3px rgba(47,84,235,0.2); } .aa-phone.is-error { border-color: var(--au-color-error); } -.aa-phone-code { border: none; border-right: 1px solid var(--au-color-border); background: var(--au-color-table-header-bg); color: var(--au-color-text-body); font-size: 14px; padding: 0 8px; outline: none; cursor: pointer; } +.aa-phone-code { border: none; border-inline-end: 1px solid var(--au-color-border); background: var(--au-color-table-header-bg); color: var(--au-color-text-body); font-size: 14px; padding: 0 8px; outline: none; cursor: pointer; } .aa-phone-input { flex: 1; border: none; outline: none; padding: 0 10px; font-size: 14px; color: var(--au-color-text-body); background: none; min-width: 160px; } .aa-phone-input::placeholder { color: var(--au-color-text-placeholder); } .aa-phone-tip { font-size: 12px; margin-top: 4px; color: var(--au-color-text-secondary); } diff --git a/frameworks/PlateInput.css b/frameworks/PlateInput.css index 1bc9da3..de9b70a 100644 --- a/frameworks/PlateInput.css +++ b/frameworks/PlateInput.css @@ -10,4 +10,4 @@ .aa-plate-tip { font-size: 12px; margin-top: 6px; color: var(--au-color-text-secondary); } .aa-plate-tip.valid { color: var(--au-color-success); } .aa-plate-tip.invalid { color: var(--au-color-error); } -.aa-plate-tip .aa-plate-tag { display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 3px; font-size: 11px; background: var(--au-color-brand-bg); color: var(--au-color-brand); } +.aa-plate-tip .aa-plate-tag { display: inline-block; margin-inline-start: 6px; padding: 1px 7px; border-radius: 3px; font-size: 11px; background: var(--au-color-brand-bg); color: var(--au-color-brand); } diff --git a/frameworks/ProgressVariants.css b/frameworks/ProgressVariants.css index 93b4bba..011ffff 100644 --- a/frameworks/ProgressVariants.css +++ b/frameworks/ProgressVariants.css @@ -7,7 +7,7 @@ .aa-progress.is-success .aa-progress-line-fill { background: var(--au-color-success); } .aa-progress.is-warning .aa-progress-line-fill { background: var(--au-color-warning); } .aa-progress.is-error .aa-progress-line-fill { background: var(--au-color-error); } -.aa-progress-text { margin-left: 8px; font-size: 13px; min-width: 36px; } +.aa-progress-text { margin-inline-start: 8px; font-size: 13px; min-width: 36px; } .aa-progress.is-success .aa-progress-text { color: var(--au-color-success); } .aa-progress.is-warning .aa-progress-text { color: var(--au-color-warning); } .aa-progress.is-error .aa-progress-text { color: var(--au-color-error); } diff --git a/frameworks/RangeQuickPicker.css b/frameworks/RangeQuickPicker.css index 723460b..e67294b 100644 --- a/frameworks/RangeQuickPicker.css +++ b/frameworks/RangeQuickPicker.css @@ -12,7 +12,7 @@ .aa-range-custom { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; } .aa-range-custom input { border: 1px solid var(--au-color-border); border-radius: 4px; padding: 5px 8px; font-size: 13px; color: var(--au-color-text-body); } .aa-range-custom .aa-range-tilde { color: var(--au-color-text-secondary); } -.aa-range-actions { text-align: right; } +.aa-range-actions { text-align: end; } .aa-range-actions button { border: none; border-radius: 4px; padding: 5px 14px; font-size: 13px; cursor: pointer; } .aa-range-actions .aa-range-ok { background: var(--au-color-brand); color: var(--au-color-text-inverse); } -.aa-range-actions .aa-range-cancel { background: var(--au-color-disabled-bg); color: var(--au-color-text-tertiary); margin-right: 8px; } +.aa-range-actions .aa-range-cancel { background: var(--au-color-disabled-bg); color: var(--au-color-text-tertiary); margin-inline-end: 8px; } diff --git a/frameworks/Rate.css b/frameworks/Rate.css index 7b150c9..39044fd 100644 --- a/frameworks/Rate.css +++ b/frameworks/Rate.css @@ -8,7 +8,7 @@ .aa-rate.is-disabled .aa-rate-star { cursor: default; } .aa-rate.is-readonly .aa-rate-star:hover, .aa-rate.is-disabled .aa-rate-star:hover { transform: none; } -.aa-rate-text { margin-left: 8px; font-size: 14px; color: var(--au-color-text-secondary); } +.aa-rate-text { margin-inline-start: 8px; font-size: 14px; color: var(--au-color-text-secondary); } .aa-rate.sm .aa-rate-star { font-size: 14px; } .aa-rate.lg .aa-rate-star { font-size: 28px; } .aa-rate.sm .aa-rate-text { font-size: 12px; } diff --git a/frameworks/SideMenu.css b/frameworks/SideMenu.css index 6427af9..f14cc69 100644 --- a/frameworks/SideMenu.css +++ b/frameworks/SideMenu.css @@ -1,6 +1,6 @@ /* Aurora Admin SideMenu 样式 — 对齐 组件7.txt SideMenu:多级、图标、徽章、选中态#F0F5FF+左指示条、折叠 */ -.aa-sidemenu { width: 220px; background: var(--au-color-card-bg); border-right: 1px solid var(--au-color-border); font-family: var(--font-family, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif); color: var(--au-color-text-body); user-select: none; } +.aa-sidemenu { width: 220px; background: var(--au-color-card-bg); border-inline-end: 1px solid var(--au-color-border); font-family: var(--font-family, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif); color: var(--au-color-text-body); user-select: none; } .aa-sidemenu.collapsed { width: 56px; } .aa-menu-item { position: relative; display: flex; align-items: center; gap: 8px; height: 44px; padding: 0 16px; cursor: pointer; font-size: 14px; color: var(--au-color-text-body); transition: background .15s, color .15s; } @@ -17,7 +17,7 @@ .aa-menu-item.is-open > .aa-menu-arrow { transform: rotate(90deg); } .aa-menu-children { background: var(--au-color-table-header-bg); } -.aa-menu-children .aa-menu-item { height: 40px; padding-left: 40px; font-size: 13px; } +.aa-menu-children .aa-menu-item { height: 40px; padding-inline-start: 40px; font-size: 13px; } .aa-menu-children .aa-menu-item.is-active::before { display: none; } /* 折叠模式 */ diff --git a/frameworks/Slider.css b/frameworks/Slider.css index 43592b5..9dc574c 100644 --- a/frameworks/Slider.css +++ b/frameworks/Slider.css @@ -13,7 +13,7 @@ .aa-slider-handle:hover, .aa-slider-handle:focus { box-shadow: 0 0 0 4px rgba(47,84,235,0.2); outline: none; } .aa-slider-ticks { position: absolute; left: 0; right: 0; top: 50%; transform: translateY(-50%); height: 0; pointer-events: none; } .aa-slider-tick { position: absolute; top: 0; width: 2px; height: 8px; background: var(--au-color-border); transform: translate(-50%, -50%); } -.aa-slider-value { margin-left: 12px; font-size: 14px; color: var(--au-color-text-body); display: inline-flex; align-items: center; gap: 6px; } +.aa-slider-value { margin-inline-start: 12px; font-size: 14px; color: var(--au-color-text-body); display: inline-flex; align-items: center; gap: 6px; } .aa-slider-value input { width: 56px; height: 28px; text-align: center; border: 1px solid var(--au-color-border); border-radius: 4px; font-size: 13px; outline: none; color: var(--au-color-text-body); } .aa-slider-value input:focus { border-color: var(--au-color-brand); box-shadow: 0 0 0 2px rgba(47,84,235,0.2); } .aa-slider-label { margin-top: 4px; font-size: 12px; color: var(--au-color-text-secondary); } diff --git a/frameworks/StepList.css b/frameworks/StepList.css index 418a094..dba8f4e 100644 --- a/frameworks/StepList.css +++ b/frameworks/StepList.css @@ -21,6 +21,6 @@ /* 水平模式 */ .aa-steplist.is-horizontal { display: flex; } -.aa-steplist.is-horizontal > .aa-steplist-item { flex: 1; flex-direction: column; padding-bottom: 0; padding-right: 8px; } +.aa-steplist.is-horizontal > .aa-steplist-item { flex: 1; flex-direction: column; padding-bottom: 0; padding-inline-end: 8px; } .aa-steplist.is-horizontal > .aa-steplist-item > .aa-steplist-line { left: 28px; top: 14px; bottom: auto; right: 0; width: auto; height: 2px; } .aa-steplist.is-horizontal > .aa-steplist-item > .aa-steplist-body { padding-top: 8px; } diff --git a/frameworks/SummaryRowTable.css b/frameworks/SummaryRowTable.css index dee6111..0761bcf 100644 --- a/frameworks/SummaryRowTable.css +++ b/frameworks/SummaryRowTable.css @@ -1,6 +1,6 @@ /* Aurora Admin SummaryRowTable 样式 — 底部统计汇总行 */ .aa-sumtable { width: 100%; border-collapse: collapse; font-family: var(--font-family, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif); font-size: 14px; background: var(--au-color-card-bg); border: 1px solid var(--au-color-border); border-radius: 8px; overflow: hidden; } -.aa-sumtable th { text-align: left; padding: 12px 14px; background: var(--au-color-table-header-bg); color: var(--au-color-text-title); font-weight: 600; border-bottom: 1px solid var(--au-color-border); } +.aa-sumtable th { text-align: start; padding: 12px 14px; background: var(--au-color-table-header-bg); color: var(--au-color-text-title); font-weight: 600; border-bottom: 1px solid var(--au-color-border); } .aa-sumtable td { padding: 11px 14px; color: var(--au-color-text-body); border-bottom: 1px solid var(--au-color-border); } .aa-sumtable tr:last-child td { border-bottom: none; } .aa-sumtable tbody tr:hover td { background: var(--au-color-page-bg); } diff --git a/frameworks/Table.css b/frameworks/Table.css index 972ed77..b070a21 100644 --- a/frameworks/Table.css +++ b/frameworks/Table.css @@ -2,18 +2,18 @@ .aa-table { width: 100%; border: 1px solid var(--au-color-border); border-radius: 8px; overflow: hidden; background: var(--au-color-card-bg); position: relative; } .aa-table table { width: 100%; border-collapse: collapse; font-size: 14px; color: var(--au-color-text-body); } .aa-table thead th { - background: var(--au-color-table-header-bg); color: var(--au-color-text-body); font-weight: 600; height: 48px; text-align: left; + background: var(--au-color-table-header-bg); color: var(--au-color-text-body); font-weight: 600; height: 48px; text-align: start; padding: 0 16px; border-bottom: 1px solid var(--au-color-border); white-space: nowrap; } -.aa-table tbody td { height: 48px; padding: 0 16px; border-bottom: 1px solid var(--au-color-border); text-align: left; } +.aa-table tbody td { height: 48px; padding: 0 16px; border-bottom: 1px solid var(--au-color-border); text-align: start; } .aa-table tbody tr:last-child td { border-bottom: none; } .aa-table tbody tr:hover { background: var(--au-color-page-bg); } .aa-table tbody tr.is-selected { background: var(--au-color-brand-bg); } -.aa-table .align-right { text-align: right; } +.aa-table .align-right { text-align: end; } .aa-table .sortable { cursor: pointer; user-select: none; } -.aa-table .sort-ind { color: var(--au-color-text-placeholder); margin-left: 4px; } +.aa-table .sort-ind { color: var(--au-color-text-placeholder); margin-inline-start: 4px; } .aa-table .sort-ind.active { color: var(--au-color-brand); } -.aa-table .col-action { text-align: right; } +.aa-table .col-action { text-align: end; } .aa-table .col-selection { text-align: center; } .aa-table .checkbox { width: 16px; height: 16px; cursor: pointer; vertical-align: middle; } .aa-table .empty { padding: 48px 16px; text-align: center; color: var(--au-color-text-placeholder); font-size: 14px; } diff --git a/frameworks/Tabs.css b/frameworks/Tabs.css index db4a257..c171f3b 100644 --- a/frameworks/Tabs.css +++ b/frameworks/Tabs.css @@ -45,14 +45,14 @@ /* 关闭按钮 */ .aa-tabs-close { display: inline-flex; align-items: center; justify-content: center; - width: 16px; height: 16px; margin-left: 4px; border-radius: 50%; font-size: 12px; color: var(--au-color-text-secondary); } + width: 16px; height: 16px; margin-inline-start: 4px; border-radius: 50%; font-size: 12px; color: var(--au-color-text-secondary); } .aa-tabs-close:hover { background: rgba(0,0,0,0.06); color: var(--au-color-text-body); } .aa-tabs.type-pill .aa-tabs-close { color: rgba(255,255,255,0.85); } .aa-tabs.type-pill .aa-tabs-close:hover { background: rgba(255,255,255,0.25); color: var(--au-color-text-inverse); } /* 新增标签按钮 */ .aa-tabs-add { display: inline-flex; align-items: center; justify-content: center; - width: 32px; height: 32px; margin-left: 4px; border: 1px dashed var(--au-color-border); border-radius: 6px; + width: 32px; height: 32px; margin-inline-start: 4px; border: 1px dashed var(--au-color-border); border-radius: 6px; color: var(--au-color-text-secondary); cursor: pointer; font-size: 16px; } .aa-tabs-add:hover { color: var(--au-color-brand); border-color: var(--au-color-brand); } diff --git a/frameworks/Tag.css b/frameworks/Tag.css index ab2f5e3..48f93e0 100644 --- a/frameworks/Tag.css +++ b/frameworks/Tag.css @@ -29,6 +29,6 @@ html.aa-dark .aa-tag.aa-tag-orange { background: rgba(229,163,0,0.18); } /* 关闭按钮 */ .aa-tag-close { display: inline-flex; align-items: center; justify-content: center; - width: 14px; height: 14px; margin-right: -2px; border-radius: 50%; cursor: pointer; + width: 14px; height: 14px; margin-inline-end: -2px; border-radius: 50%; cursor: pointer; font-size: 11px; line-height: 1; color: inherit; opacity: .65; } .aa-tag-close:hover { opacity: 1; background: rgba(0,0,0,0.08); } diff --git a/frameworks/ThemeSwitcher.css b/frameworks/ThemeSwitcher.css index b9c2ee6..90a0247 100644 --- a/frameworks/ThemeSwitcher.css +++ b/frameworks/ThemeSwitcher.css @@ -6,7 +6,7 @@ .aa-themesw-dot { width: 16px; height: 16px; border-radius: 4px; border: 1px solid var(--au-color-border); } .aa-themesw-dot.dark { background: var(--au-color-tooltip-bg); } .aa-themesw-dot.light { background: var(--au-color-card-bg); } -.aa-themesw-colors { display: flex; gap: 8px; margin-left: 4px; } +.aa-themesw-colors { display: flex; gap: 8px; margin-inline-start: 4px; } .aa-themesw-color { width: 22px; height: 22px; border-radius: 50%; cursor: pointer; border: 2px solid transparent; transition: transform .12s; } .aa-themesw-color:hover { transform: scale(1.1); } .aa-themesw-color.is-active { border-color: var(--au-color-tooltip-bg); } diff --git a/frameworks/TimelineList.css b/frameworks/TimelineList.css index 58bd2c5..024722e 100644 --- a/frameworks/TimelineList.css +++ b/frameworks/TimelineList.css @@ -22,7 +22,7 @@ /* 水平模式 */ .aa-timeline.is-horizontal { display: flex; } -.aa-timeline.is-horizontal > .aa-timeline-item { flex: 1; padding-right: 8px; } +.aa-timeline.is-horizontal > .aa-timeline-item { flex: 1; padding-inline-end: 8px; } .aa-timeline.is-horizontal > .aa-timeline-item > .aa-timeline-node { top: 4px; } .aa-timeline.is-horizontal > .aa-timeline-item > .aa-timeline-line { left: 15px; top: 9px; bottom: auto; right: 0; width: auto; height: 2px; } .aa-timeline.is-horizontal > .aa-timeline-item > .aa-timeline-content { padding: 22px 12px 0 0; } diff --git a/frameworks/Tree.css b/frameworks/Tree.css index 0a1eccf..2319a99 100644 --- a/frameworks/Tree.css +++ b/frameworks/Tree.css @@ -2,7 +2,7 @@ .aa-tree { min-width: 240px; border: 1px solid var(--au-color-border); border-radius: 8px; padding: 4px; background: var(--au-color-card-bg); } .aa-tree-node { display: flex; align-items: center; gap: 4px; height: 32px; border-radius: 4px; - cursor: pointer; user-select: none; font-size: 14px; color: var(--au-color-text-body); padding-right: 8px; + cursor: pointer; user-select: none; font-size: 14px; color: var(--au-color-text-body); padding-inline-end: 8px; } .aa-tree-node:hover { background: var(--au-color-page-bg); } .aa-tree-node.is-selected { background: var(--au-color-brand-bg); color: var(--au-color-brand); } diff --git a/frameworks/TreeTable.css b/frameworks/TreeTable.css index 72743a4..e90adfe 100644 --- a/frameworks/TreeTable.css +++ b/frameworks/TreeTable.css @@ -1,17 +1,17 @@ /* Aurora Admin TreeTable 样式 — 对齐 组件7.txt TreeTable 规范 */ .aa-tt { width: 100%; border: 1px solid var(--au-color-border); border-radius: 8px; overflow: hidden; background: var(--au-color-card-bg); } .aa-tt table { width: 100%; border-collapse: collapse; font-size: 14px; color: var(--au-color-text-body); } -.aa-tt thead th { background: var(--au-color-table-header-bg); color: var(--au-color-text-body); font-weight: 600; height: 48px; text-align: left; padding: 0 16px; border-bottom: 1px solid var(--au-color-border); white-space: nowrap; } -.aa-tt tbody td { height: 48px; padding: 0 16px; border-bottom: 1px solid var(--au-color-border); text-align: left; } +.aa-tt thead th { background: var(--au-color-table-header-bg); color: var(--au-color-text-body); font-weight: 600; height: 48px; text-align: start; padding: 0 16px; border-bottom: 1px solid var(--au-color-border); white-space: nowrap; } +.aa-tt tbody td { height: 48px; padding: 0 16px; border-bottom: 1px solid var(--au-color-border); text-align: start; } .aa-tt tbody tr:last-child td { border-bottom: none; } .aa-tt tbody tr:hover { background: var(--au-color-page-bg); } .aa-tt tbody tr.is-selected { background: var(--au-color-brand-bg); } -.aa-tt .align-right { text-align: right; } +.aa-tt .align-right { text-align: end; } .aa-tt .col-selection { text-align: center; } .aa-tt .tree-cell { display: flex; align-items: center; gap: 4px; } .aa-tt .tt-arrow { width: 16px; height: 16px; font-size: 12px; color: var(--au-color-text-secondary); transition: transform .15s; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; } .aa-tt .tt-arrow.is-open { transform: rotate(90deg); } .aa-tt .tt-arrow-placeholder { width: 16px; flex-shrink: 0; } .aa-tt .tt-check { width: 14px; height: 14px; cursor: pointer; } -.aa-tt .tt-summary { color: var(--au-color-text-secondary); font-size: 12px; margin-left: 6px; } +.aa-tt .tt-summary { color: var(--au-color-text-secondary); font-size: 12px; margin-inline-start: 6px; } .aa-tt tfoot td { height: 44px; padding: 0 16px; background: var(--au-color-table-header-bg); font-weight: 600; border-top: 1px solid var(--au-color-border); } diff --git a/frameworks/button.html b/frameworks/button.html index 6cd6963..9628f4d 100644 --- a/frameworks/button.html +++ b/frameworks/button.html @@ -64,7 +64,7 @@