refactor(frontend): finish shadcn→custom primitive migration (green build)

- Remove tw-animate-css import + dead src/components/ui shadcn tree
- Convert 7 orphaned components (moderation, analysis, guild-selector,
  voice/activity-timeline, shared/empty+error) to new primitives
- Add missing moderation/view.tsx; analysis uses SearchPanel directly
- globals.css now uses new signal-driven ops-console tokens
- tsc --noEmit clean, next build green (11 routes), local smoke 200
This commit is contained in:
asepharyana
2026-08-14 10:49:44 +07:00
parent 5816e94a63
commit 5bbf75a65b
130 changed files with 4431 additions and 12978 deletions
@@ -1,24 +1,25 @@
/**
* Moderation page — Server Component. Seeds summary + action log from
* server-fetched moderation state (shared across all users).
* Moderation — Server Component.
* Seeds moderation stats + action log for SSR first paint; live via WS.
*/
import { ModerationSection } from "@/components/moderation/moderation-section";
import { getModerationActions, getModerationStats } from "@/lib/api/server";
import ModerationView from "./view";
export default async function ModerationPage() {
const [stats, actions] = await Promise.allSettled([
getModerationStats(),
getModerationActions(100),
getModerationStats().catch(() => undefined),
getModerationActions(100).catch(() => undefined),
]);
return (
<div className="space-y-4 animate-fade-in-up">
<ModerationSection
initialStats={stats.status === "fulfilled" ? stats.value : undefined}
initialActions={
actions.status === "fulfilled" ? actions.value : undefined
}
/>
</div>
<ModerationView
initialStats={
stats.status === "fulfilled" && stats.value ? stats.value : undefined
}
initialActions={
actions.status === "fulfilled" && actions.value
? actions.value
: undefined
}
/>
);
}
@@ -0,0 +1,19 @@
"use client";
import { ModerationSection } from "@/components/moderation/moderation-section";
import type { ModerationAction, ModerationStats } from "@/lib/types";
export default function ModerationView({
initialStats,
initialActions,
}: {
initialStats?: ModerationStats;
initialActions?: ModerationAction[];
}) {
return (
<ModerationSection
initialStats={initialStats}
initialActions={initialActions}
/>
);
}