> mantine
Build React applications with the Mantine UI component library. Use when a user asks to use Mantine components, configure themes, implement forms with validation, add notifications, or build responsive layouts with Mantine hooks.
curl "https://skillshub.wtf/TerminalSkills/skills/mantine?format=md"Mantine — Full-Featured React Component Library
Overview
You are an expert in Mantine, the React component library with 100+ customizable components, 50+ hooks, and a CSS-in-JS styling solution. You help developers build polished UIs with form handling, notifications, modals, rich text editing, date pickers, and responsive layouts — all with excellent TypeScript support and accessibility.
Instructions
Setup
npm install @mantine/core @mantine/hooks @mantine/form @mantine/notifications
npm install @mantine/dates dayjs # Date components
npm install @mantine/tiptap @tiptap/react # Rich text editor
Theme and Provider
// src/App.tsx — Mantine theme configuration
import { MantineProvider, createTheme } from "@mantine/core";
import { Notifications } from "@mantine/notifications";
import "@mantine/core/styles.css";
import "@mantine/notifications/styles.css";
const theme = createTheme({
primaryColor: "indigo",
fontFamily: "Inter, system-ui, sans-serif",
defaultRadius: "md",
colors: {
brand: ["#f0f0ff", "#d6d6ff", "#b3b3ff", "#8080ff", "#4d4dff", "#1a1aff", "#0000e6", "#0000b3", "#000080", "#00004d"],
},
components: {
Button: { defaultProps: { variant: "filled" } },
TextInput: { defaultProps: { size: "md" } },
},
});
function App() {
return (
<MantineProvider theme={theme} defaultColorScheme="auto">
<Notifications position="top-right" />
<Router />
</MantineProvider>
);
}
Components
// Dashboard layout with Mantine components
import {
AppShell, Navbar, Header, Group, Text, Badge, Card,
SimpleGrid, Stack, Button, ActionIcon, Menu, Avatar,
Progress, Table, Tabs, Tooltip, ThemeIcon,
} from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { notifications } from "@mantine/notifications";
import { IconBell, IconSettings, IconLogout } from "@tabler/icons-react";
function Dashboard() {
const [navOpen, { toggle }] = useDisclosure(true);
return (
<AppShell
navbar={{ width: 260, breakpoint: "sm", collapsed: { mobile: !navOpen } }}
header={{ height: 60 }}
padding="md"
>
<AppShell.Header>
<Group h="100%" px="md" justify="space-between">
<Text size="xl" fw={700}>Dashboard</Text>
<Group>
<ActionIcon variant="subtle" size="lg">
<IconBell size={20} />
</ActionIcon>
<Menu>
<Menu.Target>
<Avatar src={null} alt="User" radius="xl" size="md" />
</Menu.Target>
<Menu.Dropdown>
<Menu.Item leftSection={<IconSettings size={14} />}>Settings</Menu.Item>
<Menu.Divider />
<Menu.Item color="red" leftSection={<IconLogout size={14} />}>Logout</Menu.Item>
</Menu.Dropdown>
</Menu>
</Group>
</Group>
</AppShell.Header>
<AppShell.Main>
<SimpleGrid cols={{ base: 1, sm: 2, lg: 4 }} spacing="md">
<StatsCard title="Revenue" value="$45,200" change="+12%" />
<StatsCard title="Users" value="1,234" change="+5%" />
<StatsCard title="Orders" value="892" change="+18%" />
<StatsCard title="Churn" value="2.1%" change="-0.3%" positive />
</SimpleGrid>
</AppShell.Main>
</AppShell>
);
}
Form Handling
// Mantine form with validation
import { useForm } from "@mantine/form";
import { TextInput, PasswordInput, Select, Checkbox, Button, Stack } from "@mantine/core";
function SignupForm() {
const form = useForm({
initialValues: { name: "", email: "", password: "", role: "", terms: false },
validate: {
name: (v) => (v.length < 2 ? "Name too short" : null),
email: (v) => (/^\S+@\S+$/.test(v) ? null : "Invalid email"),
password: (v) => (v.length < 8 ? "At least 8 characters" : null),
role: (v) => (v ? null : "Select a role"),
terms: (v) => (v ? null : "You must accept terms"),
},
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Stack gap="sm">
<TextInput label="Name" placeholder="Your name" {...form.getInputProps("name")} />
<TextInput label="Email" placeholder="you@example.com" {...form.getInputProps("email")} />
<PasswordInput label="Password" {...form.getInputProps("password")} />
<Select
label="Role"
data={["Developer", "Designer", "Product Manager", "Other"]}
{...form.getInputProps("role")}
/>
<Checkbox label="I accept terms" {...form.getInputProps("terms", { type: "checkbox" })} />
<Button type="submit">Create Account</Button>
</Stack>
</form>
);
}
Hooks
// Mantine provides 50+ utility hooks
import {
useDisclosure, useToggle, useDebouncedValue, useLocalStorage,
useClipboard, useMediaQuery, useHotkeys, useIdle, useNetwork,
useDocumentTitle, useIntersection, useScrollIntoView,
} from "@mantine/hooks";
// Debounced search
const [search, setSearch] = useState("");
const [debounced] = useDebouncedValue(search, 300);
// Clipboard
const clipboard = useClipboard({ timeout: 2000 });
clipboard.copy("Hello!"); // clipboard.copied is true for 2 seconds
// Responsive
const isMobile = useMediaQuery("(max-width: 768px)");
// Keyboard shortcuts
useHotkeys([
["mod+K", () => openSearch()],
["mod+S", () => saveDocument()],
]);
// Local storage with type safety
const [colorScheme, setColorScheme] = useLocalStorage<"light" | "dark">({
key: "color-scheme",
defaultValue: "light",
});
Examples
Example 1: User asks to set up mantine
User: "Help me set up mantine for my project"
The agent should:
- Check system requirements and prerequisites
- Install or configure mantine
- Set up initial project structure
- Verify the setup works correctly
Example 2: User asks to build a feature with mantine
User: "Create a dashboard using mantine"
The agent should:
- Scaffold the component or configuration
- Connect to the appropriate data source
- Implement the requested feature
- Test and validate the output
Guidelines
- Use the form library —
@mantine/formhandles validation, touched state, and nested fields; don't build your own - Theme over inline styles — Configure component defaults in the theme; avoid prop-based styling on every instance
- Hooks for logic — Mantine's hooks library (
useDisclosure,useDebouncedValue,useLocalStorage) reduces boilerplate - AppShell for layouts — Use
AppShellfor dashboard layouts with navbar, header, aside; handles responsive collapsing - Notifications system — Use
@mantine/notificationsfor toast messages; supports queue, auto-close, and custom components - CSS modules — Mantine v7 uses CSS modules by default; import component styles and extend with your own
- Dark mode built-in — Use
defaultColorScheme="auto"for system preference detection; all components adapt - Tabler icons — Use
@tabler/icons-react(free, MIT) — Mantine is designed to work with Tabler's icon set
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zoho
Integrate and automate Zoho products. Use when a user asks to work with Zoho CRM, Zoho Books, Zoho Desk, Zoho Projects, Zoho Mail, or Zoho Creator, build custom integrations via Zoho APIs, automate workflows with Deluge scripting, sync data between Zoho apps and external systems, manage leads and deals, automate invoicing, build custom Zoho Creator apps, set up webhooks, or manage Zoho organization settings. Covers Zoho CRM, Books, Desk, Projects, Creator, and cross-product integrations.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> zipkin
Deploy and configure Zipkin for distributed tracing and request flow visualization. Use when a user needs to set up trace collection, instrument Java/Spring or other services with Zipkin, analyze service dependencies, or configure storage backends for trace data.