{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "theme",
"title": "ErpTheme",
"description": "Radix Themes with a Dodil-inspired default; rebrand with one prop.",
"dependencies": [
"@radix-ui/themes"
],
"files": [
{
"path": "src/theme.tsx",
"content": "/**\n * The ERP theme — Radix Themes with a Dodil-inspired default (purple accent, cool gray), and the client's\n * to change. Every erp-ui component draws its colour, spacing and radius from Radix's tokens and nothing\n * else, so rebranding is one prop (or the --accent-* variables), never an edit to a component.\n */\nimport \"@radix-ui/themes/styles.css\";\nimport \"./theme.css\";\nimport { Theme, type ThemeProps } from \"@radix-ui/themes\";\nimport type { ReactNode } from \"react\";\n\nexport const ERP_THEME_DEFAULTS = {\n accentColor: \"purple\",\n grayColor: \"slate\",\n radius: \"medium\",\n scaling: \"100%\",\n} as const satisfies Partial<ThemeProps>;\n\nexport function ErpTheme({ children, ...overrides }: { children: ReactNode } & Partial<ThemeProps>) {\n return (\n <Theme {...ERP_THEME_DEFAULTS} {...overrides}>\n {children}\n </Theme>\n );\n}\n",
"type": "registry:component",
"target": "erp-ui/theme.tsx"
},
{
"path": "src/theme.css",
"content": "/*\n * Accessibility adjustments to Radix Themes' defaults, found by axe in a real browser (colour contrast is not\n * checked in jsdom) on the CRM screens, 2026-10-17. Tokens only, so a rebrand keeps them.\n */\n\n/* A placeholder is text a person must read (\"Move to stage…\"): gray-a10 is under 4.5:1, gray-11 is not. */\n.rt-SelectTrigger[data-placeholder] .rt-SelectTriggerInner,\n.rt-TextFieldInput::placeholder,\n.rt-TextAreaInput::placeholder {\n color: var(--gray-11);\n}\n",
"type": "registry:file",
"target": "erp-ui/theme.css"
}
],
"type": "registry:component"
}