/* Aurora Admin Menu 族样式 — 由 tools/gen-family-impl.mjs 从族模板生成,勿手改。 * * @generated by tools/gen-family-impl.mjs * 族:nav-menu(基座 Menu + direction 参数)。 * 本文件服务:sidemenu / topmenu / mixednavigation。 * * 三个组件的 CSS 是同一份样式表 —— 差异全部由根元素的 data-direction / * data-collapsed 参数表达,不再各自手写一遍。改样式请改模板后重跑生成器: * node tools/gen-family-impl.mjs nav-menu */ /* ---------- 基础:方向无关 ---------- */ .aa-menu { font-family: var(--font-family, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif); color: var(--au-color-text-body); background: var(--au-color-card-bg); user-select: none; } .aa-menu-item { position: relative; display: flex; align-items: center; gap: 8px; cursor: pointer; font-size: 14px; color: var(--au-color-text-body); transition: background .15s, color .15s, border-color .15s; } .aa-menu-item:hover { background: var(--au-color-page-bg); } .aa-menu-item.is-active { color: var(--au-color-brand); font-weight: 500; } .aa-menu-item.is-disabled { color: var(--au-color-text-disabled); cursor: not-allowed; } .aa-menu-item.is-disabled:hover { background: none; } .aa-menu-icon { width: 16px; text-align: center; flex-shrink: 0; font-size: 15px; } .aa-menu-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .aa-menu-badge { background: var(--au-color-error); color: var(--au-color-text-inverse); font-size: 11px; min-width: 16px; height: 16px; border-radius: var(--au-radius-large); padding: 0 5px; display: inline-flex; align-items: center; justify-content: center; } .aa-menu-arrow { color: var(--au-color-text-secondary); font-size: 12px; transition: transform .15s; } .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-inline-start: 40px; font-size: 13px; } /* 折叠态悬浮浮层(side 方向专用) */ .aa-menu-pop { position: absolute; inset-inline-start: 56px; top: 0; min-width: 180px; background: var(--au-color-card-bg); border: 1px solid var(--au-color-border); border-radius: var(--au-radius-medium); box-shadow: var(--au-shadow-medium, 0 4px 12px rgba(0, 0, 0, .12)); padding: 4px 0; z-index: 200; } .aa-menu-pop-title { padding: 6px 16px; font-size: 12px; color: var(--au-color-text-secondary); } .aa-menu-pop .aa-menu-item { height: 40px; padding: 0 16px; } /* ---------- direction=top:水平导航,选中态底部指示条 ---------- */ .aa-menu[data-direction="top"] { display: flex; align-items: stretch; border-bottom: 1px solid var(--au-color-border); padding: 0 8px; } .aa-menu[data-direction="top"] > .aa-menu-item { height: 48px; padding: 0 16px; } .aa-menu[data-direction="top"] > .aa-menu-item:hover { background: none; color: var(--au-color-brand); } .aa-menu[data-direction="top"] > .aa-menu-item.is-active::after { content: ''; position: absolute; inset-inline: 12px; bottom: 0; height: 2px; background: var(--au-color-brand); } /* top 方向的下拉:绝对定位面板,hover / focus-within 展开(键盘同样可达) */ .aa-menu[data-direction="top"] .aa-menu-children { position: absolute; top: 100%; inset-inline-start: 0; display: none; min-width: 160px; background: var(--au-color-card-bg); border: 1px solid var(--au-color-border); border-radius: var(--au-radius-medium); box-shadow: var(--au-shadow-medium, 0 4px 12px rgba(0, 0, 0, .08)); padding: 4px; z-index: 50; } .aa-menu[data-direction="top"] .aa-menu-item:hover > .aa-menu-children, .aa-menu[data-direction="top"] .aa-menu-item:focus-within > .aa-menu-children { display: block; } .aa-menu[data-direction="top"] .aa-menu-children .aa-menu-item { height: auto; padding: 8px 12px; font-size: 13px; border-radius: var(--au-radius-small); } .aa-menu[data-direction="top"] .aa-menu-children .aa-menu-item:hover { background: var(--au-color-brand-bg); color: var(--au-color-brand); } .aa-menu[data-direction="top"] .aa-menu-children .aa-menu-item.is-active { background: var(--au-color-brand-bg); } /* ---------- direction=side:侧边栏,选中态品牌底 + 侧指示条 ---------- */ .aa-menu[data-direction="side"] { width: 220px; border-inline-end: 1px solid var(--au-color-border); } .aa-menu[data-direction="side"] > .aa-menu-item { height: 44px; padding: 0 16px; } .aa-menu[data-direction="side"] > .aa-menu-item.is-active { background: var(--au-color-brand-bg); } .aa-menu[data-direction="side"] > .aa-menu-item.is-active::before { content: ''; position: absolute; inset-inline-start: 0; top: 0; bottom: 0; width: 3px; background: var(--au-color-brand); } /* ---------- direction=mixed:顶部一级 + 侧边二级 ---------- */ .aa-menu[data-direction="mixed"] { border: 1px solid var(--au-color-border); border-radius: var(--au-radius-large); overflow: hidden; } .aa-menu[data-direction="mixed"] > .aa-menu-top { display: flex; gap: 4px; border-bottom: 1px solid var(--au-color-border); padding: 0 8px; } .aa-menu[data-direction="mixed"] > .aa-menu-top > .aa-menu-item { height: 48px; padding: 0 16px; } .aa-menu[data-direction="mixed"] > .aa-menu-top > .aa-menu-item:hover { background: none; } .aa-menu[data-direction="mixed"] > .aa-menu-top > .aa-menu-item.is-active::after { content: ''; position: absolute; inset-inline: 12px; bottom: 0; height: 2px; background: var(--au-color-brand); } .aa-menu[data-direction="mixed"] > .aa-menu-side { width: 168px; min-height: 200px; background: var(--au-color-table-header-bg); border-inline-end: 1px solid var(--au-color-border); padding: 8px 0; } .aa-menu[data-direction="mixed"] > .aa-menu-side > .aa-menu-item { height: 40px; padding: 0 16px; } .aa-menu[data-direction="mixed"] > .aa-menu-side > .aa-menu-item.is-active { background: var(--au-color-brand-bg); } .aa-menu[data-direction="mixed"] > .aa-menu-side > .aa-menu-item.is-active::before { content: ''; position: absolute; inset-inline-start: 0; top: 0; bottom: 0; width: 3px; background: var(--au-color-brand); } /* ---------- 参数:collapsed(仅 side 方向生效) ---------- */ .aa-menu[data-direction="side"][data-collapsed="true"] { width: 56px; } .aa-menu[data-direction="side"][data-collapsed="true"] .aa-menu-label, .aa-menu[data-direction="side"][data-collapsed="true"] .aa-menu-badge, .aa-menu[data-direction="side"][data-collapsed="true"] .aa-menu-arrow { display: none; } .aa-menu[data-direction="side"][data-collapsed="true"] > .aa-menu-item { justify-content: center; padding: 0; } .aa-menu[data-direction="side"][data-collapsed="true"] > .aa-menu-item.is-active::before { display: none; } /* 嵌套 children 的层级缩进(side 方向展开时) */ .aa-menu[data-direction="side"] > .aa-menu-item > .aa-menu-children .aa-menu-item.is-active::before { display: none; }