[CLAUDE] FE-User: redesign density-first theo UI/UX guide AI_INFRA — giữ brand SOLUTION (S58)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m30s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m30s
Anh yêu cầu sau /check-email ai_infra (guide canonical 13 mục "Surgical Precision Minimalism", anh-approved 06-11): chỉnh giao diện eoffice giống guide, GIỮ nhận dạng thương hiệu SOLUTION. 14 file fe-user, visual-only (mirror design system fe-admin S55 + đối chiếu guide; fe-admin/BE untouched): - index.css: heading ladder semibold (bỏ font-bold) + .label-eyebrow uppercase + tnum note. 6 ui primitives (Button/Input/Label/Select/Textarea/Dialog): text-xs font-semibold, control h28-40, rounded-lg, focus ring brand-500, bỏ shadow trang trí — variant/size keys + props/forwardRef STABLE. - 6 shell: DataTable (thead sticky + density px-3 py-2 + tnum + RowActions/ RowActionButton ADDITIVE luôn-hiện không opacity-hover) / Layout (active leaf brand left-rail, logic nav/permission nguyên) / TopBar / PageHeader / PhaseBadge (ring-current/15) / EmptyState. + LoginPage polish nhẹ. - BRAND GIỮ: #1F7DC1 (brand-*) + Be Vietnam Pro + neutral slate (guide cho plug hue riêng — chia sẻ grammar, không chia sẻ vocabulary-màu). Verify: npm build ×2 PASS 0 TS err (fe-user 443ms + fe-admin 8.9s untouched- confirm). Diff-review từng file: functionality keys stable, additive-only. frontend-designer return-truncated gotcha #53 giữa FD2 screenshot → em main disk-recover + self-gate (precedent S55); visual live-check sau deploy. Email AI_INFRA 2026-06-11-ui-ux-design-guide: inbox copy verified hash ✓✓ (whole-file + body), processed sau commit này. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@ -1,9 +1,18 @@
|
||||
import { cn } from '@/lib/cn'
|
||||
import { ContractPhaseColor, ContractPhaseLabel } from '@/types/contracts'
|
||||
|
||||
// Density-first status pill (NAMGROUP convention): rounded-full, ring-bordered,
|
||||
// 11px semibold. Tint + text colour come from ContractPhaseColor (bg-{c}-100 /
|
||||
// text-{c}-700); a matching inset ring crisps the edge without a new colour map.
|
||||
export function PhaseBadge({ phase, className }: { phase: number; className?: string }) {
|
||||
return (
|
||||
<span className={cn('inline-flex rounded-full px-2 py-0.5 text-xs font-medium', ContractPhaseColor[phase], className)}>
|
||||
<span
|
||||
className={cn(
|
||||
'inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-semibold ring-1 ring-inset ring-current/15',
|
||||
ContractPhaseColor[phase],
|
||||
className,
|
||||
)}
|
||||
>
|
||||
{ContractPhaseLabel[phase]}
|
||||
</span>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user