diff --git a/fe-admin/src/components/Layout.tsx b/fe-admin/src/components/Layout.tsx index 98743f1..5eef65a 100644 --- a/fe-admin/src/components/Layout.tsx +++ b/fe-admin/src/components/Layout.tsx @@ -141,11 +141,13 @@ function MenuGroup({ node, depth }: { node: MenuNode; depth: number }) { : 'px-3 py-1.5 text-[13px] font-medium text-slate-600 hover:bg-slate-100 hover:text-slate-900', )} > - - - {node.label} + {/* Plan U S23 t11 — truncate label dài + tooltip hover (mirror fe-user + rule §3.9). min-w-0 cần thiết cho truncate flex child. */} + + + {node.label} - + {open && (
- - {node.label} + + {node.label} ) } diff --git a/fe-user/src/components/Layout.tsx b/fe-user/src/components/Layout.tsx index dac18fe..1843cf1 100644 --- a/fe-user/src/components/Layout.tsx +++ b/fe-user/src/components/Layout.tsx @@ -180,11 +180,14 @@ function MenuGroup({ node, depth }: { node: MenuNode; depth: number }) { isAccordion && open && 'bg-slate-50 text-slate-900', )} > - - - {effectiveLabel(node)} + {/* Plan U S23 t11 — truncate label dài + tooltip hover (admin Mig 27 + có thể đặt DisplayLabel dài). min-w-0 cần thiết để truncate hoạt + động trong flex child. shrink-0 giữ icon + chevron không co. */} + + + {effectiveLabel(node)} - + {open && (
- - {effectiveLabel(node)} + + {effectiveLabel(node)} ) } @@ -268,15 +272,16 @@ function StaticLeaf({ node }: { node: MenuNode }) { cn( - 'flex items-center gap-2.5 rounded-md px-3 py-2 text-sm font-medium transition', + 'flex min-w-0 items-center gap-2.5 rounded-md px-3 py-2 text-sm font-medium transition', isActive ? 'bg-brand-50 text-brand-700' : 'text-slate-600 hover:bg-slate-100 hover:text-slate-900', ) } > - - {effectiveLabel(node)} + + {effectiveLabel(node)} ) }