Icon migration: antdlucide-react

Coop · PR #563 · issue #562

91client files changed
84distinct icon swaps
0@ant-design/icons imports left
+545 / −489lines

■ before = antd solid / LineIcons art  ·  ■ after = lucide stroke icons  ·  conflicts resolved, tsc / eslint / build green, merges clean into main.

What moved

@ant-design/icons65 files→ lucide-react39 icons
@/icons barrel (LineIcons filled)12 files→ lucide-react20 icons
@/icons/lni · lnif svg?react30 files→ lucide-react25 icons

Class rewrites: fill-*text-* (lucide uses currentColor stroke) · width/heightsize / w-* h-* · SVGProps types → LucideIcon. Some retired names kept as import aliases (ChevronLeft as LeftOutlined).

antd → lucide-react

39 icons · red glyph = antd, green = lucide

ArrowLeftOutlined
ArrowLeft
ArrowRightOutlined
ArrowRight
AuditOutlined
Scale
BarChartOutlined
BarChart3
BulbOutlined
Lightbulb
CaretRightFilled
Play
CheckCircleOutlined
CircleCheck
CheckOutlined
Check
ClockCircleOutlined
Clock
CloseCircleOutlined
CircleX
CodeOutlined
Code
CommentOutlined
MessageSquare
DeleteOutlined
Trash2
DownOutlined
ChevronDown
DownloadOutlined
Download
EditOutlined
Pencil
EllipsisOutlined
Ellipsis
ExclamationCircleOutlined
CircleAlert
FilterOutlined
Filter
GlobalOutlined
Globe
HistoryOutlined
History
HolderOutlined
GripVertical
InfoCircleOutlined
Info
LeftOutlined
ChevronLeft
LineChartOutlined
ChartLine
LoadingOutlined
LoaderCircle
PlayCircleFilled
CirclePlay
PlayCircleOutlined
CirclePlay
PlusOutlined
Plus
ReadOutlined
BookOpen
RedoOutlined
RotateCw
RightOutlined
ChevronRight
SearchOutlined
Search
SendOutlined
Send
StarFilled
Star
StarOutlined
Star
UpOutlined
ChevronUp
UserOutlined
User
WarningFilled
TriangleAlert

@/icons barrel (LineIcons filled) → lucide-react

20 icons

CheckmarkFilled
Check
CogFilled
Settings
ChevronDownFilled
ChevronDown
ChevronUpFilled
ChevronUp
CloseFilled
X
ExitFilled
LogOut
FileExclamationFilled
FileWarning
FlowChartAltFilled
GitBranch
FriendsFilled
Users
GraphAlt1Filled
ChartColumnIncreasing
InvestmentFilled
TrendingUp
PencilFilled
Pencil
PieChartAlt1Filled
ChartPie
PieChartAltFilled
ChartPie
SparklesFilled
Sparkles
StarFilled (barrel)
Star
TapFilled
MousePointerClick
TrashCanFilled
Trash2
UserAlt3Filled
User
UsersFilled
Users

@/icons/lni · lnif (svg?react) → lucide-react

25 icons

SortAmountAsc
ArrowUpNarrowWide
SortAmountDsc
ArrowDownWideNarrow
ArrowsHorizontal
ArrowLeftRight
AngleDoubleLeft
ChevronsLeft
AngleDoubleRight
ChevronsRight
CopyAlt
Copy
GridAlt
LayoutGrid
MoreAlt
Ellipsis
Sidebar1
PanelLeft
World2
Globe
TextUnderlineAlt
Underline
CrossCircle
CircleX
TrashCan
Trash2
UserAlt4
User
ChevronDown (lni)
ChevronDown
ChevronUp (lni)
ChevronUp
ChevronLeft (lni)
ChevronLeft
ChevronRight (lni)
ChevronRight
Checkmark (lni)
Check
Plus (lni)
Plus
Pencil (lni)
Pencil
Sparkles (lni)
Sparkles
Star (lni)
Star
SpinnerSolid
LoaderCircle
ArrowRight (lni)
ArrowRight

In the app — before / after

15 views · drag the divider on each

Overview dashboard

after before
BEFORE · antd / @/icons AFTER · lucide-react

Sidebar nav, KPI-card icons, chart-header icons, bottom nav (logout / settings / profile). Drag the divider.

Automated Enforcement — rules list

after before
BEFORE · antd / @/icons AFTER · lucide-react

Sidebar submenu icons (Matching Banks, User Strikes), row action icons. Drag the divider.

Create Rule

after before
BEFORE · antd / @/icons AFTER · lucide-react

Form chrome; deeper condition / signal-gallery icons are behind step 2. Drag the divider.

Policies list

after before
BEFORE · antd / @/icons AFTER · lucide-react

Empty-state and toolbar icons. Drag the divider.

Create Policy

after before
BEFORE · antd / @/icons AFTER · lucide-react

Add-severity (Plus), remove (Trash2), confirm (Check) icons. Drag the divider.

Review Console — queues

after before
BEFORE · antd / @/icons AFTER · lucide-react

Columns (LayoutGrid), Filter, sort-amount (ArrowUp/DownNarrowWide) icons. Drag the divider.

Queues — column picker

after before
BEFORE · antd / @/icons AFTER · lucide-react

LayoutGrid trigger + checkbox rows. Drag the divider.

Queue routing rules

after before
BEFORE · antd / @/icons AFTER · lucide-react

Drag handle (GripVertical), reorder chevrons, Pencil, Trash2. Drag the divider.

Settings — item types

after before
BEFORE · antd / @/icons AFTER · lucide-react

List + create-entry icons. Drag the divider.

Item type form

after before
BEFORE · antd / @/icons AFTER · lucide-react

Custom-field add/remove icons, code-sample (Code) dropdown. Drag the divider.

Settings — actions

after before
BEFORE · antd / @/icons AFTER · lucide-react

Action list icons. Drag the divider.

Settings — NCMEC

after before
BEFORE · antd / @/icons AFTER · lucide-react

Section icons. Drag the divider.

Settings — API auth

after before
BEFORE · antd / @/icons AFTER · lucide-react

Copy (Copy), regenerate (RotateCw) icons. Drag the divider.

Settings — users & roles

after before
BEFORE · antd / @/icons AFTER · lucide-react

User / Users icons, tab chrome. Drag the divider.

Account

after before
BEFORE · antd / @/icons AFTER · lucide-react

Profile icons. Drag the divider.

Verification

client tsc --noEmit✅ 0 errors
client eslint✅ 0 errors (163 pre-existing warnings)
client npm run build✅ built
prettier --check (touched files)✅ clean
git merge-tree vs upstream/main✅ no conflicts
@ant-design/icons in client/src✅ 0 import sites

Stragglers picked up that main added after the branch forked: HandleTimeByModeratorChart.tsx (Delete/Edit/Ellipsis/InfoCircle), ManualReviewDefaultCharts.tsx (HistoryOutlinedHistory), and hand-merges in NCMECReviewUser.tsx + ManualReviewJobReview.tsx.