@gg-software/cms
Opinionated, higher-level building blocks composed from ui + utils + auth — what gets
a customer admin panel up fast.
pnpm add @gg-software/cms @gg-software/ui @gg-software/utils @gg-software/auth react react-domimport { AdminLayout, ResourceTable, ResourceForm } from '@gg-software/cms';
import '@gg-software/ui/styles.css';
import '@gg-software/cms/styles.css'; // on top of the ui stylesheetBoth stylesheets are needed — the cms styles use the ui design tokens.
| Group | Components |
|---|---|
| Layout | AdminLayout, DashboardLayout, PageHeader, NavSidebar, UserMenu, NotificationCenter |
| Auth flows | LoginForm, LoginPage, ForgotPasswordForm, ResetPasswordForm, PermissionGate |
| CRUD | ResourceTable, ResourceForm, FormBuilder, DetailView, FilterBar, BulkActions, DataTableToolbar, ConfirmDeleteDialog, DataExport + the FieldDef schema |
| Content | RichTextEditor, MarkdownEditor, MediaLibrary, ImageUploader, SEOFields, ContentScheduler |
| Dashboard | StatCard, KpiGrid, ActivityFeed, AuditLog |
| Settings | SettingsLayout, SettingsForm, ProfileForm |
A minimal admin page
import { AdminLayout, PageHeader, ResourceTable, UserMenu } from '@gg-software/cms';
export function OrdersPage() {
return (
<AdminLayout
brand={<Logo />}
sections={[{ title: 'Shop', items: [{ key: 'orders', label: 'Orders' }] }]}
activeKey="orders"
headerActions={<UserMenu user={{ name: 'Ada' }} onLogout={logout} />}
breadcrumbs={[{ label: 'Home', href: '/' }, { label: 'Orders' }]}
>
<PageHeader title="Orders" actions={<Button variant="primary">New order</Button>} />
<ResourceTable columns={columns} data={orders} rowKey={(o) => o.id} exportFilename="orders" />
</AdminLayout>
);
}