dodil/erp-ui
public/r/registry.json
{
"$schema": "https://ui.shadcn.com/schema/registry.json",
"name": "erp-ui",
"homepage": "https://git.dodil.io/dodil/erp-ui",
"items": [
{
"name": "format",
"type": "registry:lib",
"title": "ERP formatting",
"description": "Money as exact text (never a float), exact decimal comparison and addition, dates.",
"files": [
{
"path": "src/lib/format.ts",
"type": "registry:lib",
"target": "erp-ui/lib/format.ts"
}
]
},
{
"name": "theme",
"type": "registry:component",
"title": "ErpTheme",
"description": "Radix Themes with a Dodil-inspired default; rebrand with one prop.",
"dependencies": [
"@radix-ui/themes"
],
"files": [
{
"path": "src/theme.tsx",
"type": "registry:component",
"target": "erp-ui/theme.tsx"
},
{
"path": "src/theme.css",
"type": "registry:file",
"target": "erp-ui/theme.css"
}
]
},
{
"name": "status-badge",
"type": "registry:component",
"title": "StatusBadge",
"description": "A record's state as a coloured badge; brick-specific tones.",
"dependencies": [
"@radix-ui/themes"
],
"files": [
{
"path": "src/components/status-badge/StatusBadge.tsx",
"type": "registry:component",
"target": "erp-ui/components/status-badge/StatusBadge.tsx"
}
]
},
{
"name": "data-table",
"type": "registry:component",
"title": "DataTable",
"description": "Lists by column kind: exact money sorting, pagination, loading/empty/error states, keyboard row opening.",
"dependencies": [
"@radix-ui/themes",
"@tanstack/react-table@^9.3.1"
],
"registryDependencies": [
"@erp-ui/format",
"@erp-ui/status-badge"
],
"files": [
{
"path": "src/components/data-table/DataTable.tsx",
"type": "registry:component",
"target": "erp-ui/components/data-table/DataTable.tsx"
},
{
"path": "src/components/data-table/data-table.css",
"type": "registry:file",
"target": "erp-ui/components/data-table/data-table.css"
}
]
},
{
"name": "filter-bar",
"type": "registry:component",
"title": "FilterBar",
"description": "Controlled search and select filters with clear.",
"dependencies": [
"@radix-ui/themes"
],
"files": [
{
"path": "src/components/filter-bar/FilterBar.tsx",
"type": "registry:component",
"target": "erp-ui/components/filter-bar/FilterBar.tsx"
}
]
},
{
"name": "detail-page",
"type": "registry:component",
"title": "DetailPage",
"description": "One record: header, status, actions that say why they are unavailable, sections, other modules' panels.",
"dependencies": [
"@radix-ui/themes"
],
"registryDependencies": [
"@erp-ui/format",
"@erp-ui/status-badge"
],
"files": [
{
"path": "src/components/detail-page/DetailPage.tsx",
"type": "registry:component",
"target": "erp-ui/components/detail-page/DetailPage.tsx"
}
]
},
{
"name": "timeline",
"type": "registry:component",
"title": "Timeline",
"description": "What was said and done, newest first, grouped by day.",
"dependencies": [
"@radix-ui/themes"
],
"registryDependencies": [
"@erp-ui/format",
"@erp-ui/status-badge"
],
"files": [
{
"path": "src/components/timeline/Timeline.tsx",
"type": "registry:component",
"target": "erp-ui/components/timeline/Timeline.tsx"
}
]
},
{
"name": "contract",
"type": "registry:lib",
"title": "Module UI contract",
"description": "Screens, extension points and extensions every brick's UI exports; checkModules() refuses collisions.",
"files": [
{
"path": "src/contract.ts",
"type": "registry:lib",
"target": "erp-ui/contract.ts"
}
]
},
{
"name": "json",
"type": "registry:lib",
"title": "Lossless JSON",
"description": "JSON.parse that keeps integers past 2^53 (64-bit ids) exact, as strings.",
"files": [
{
"path": "src/lib/json.ts",
"type": "registry:lib",
"target": "erp-ui/lib/json.ts"
}
]
},
{
"name": "states",
"type": "registry:component",
"title": "Loading, empty, error, not found",
"description": "The states every screen has besides its data, one look for each.",
"dependencies": [
"@radix-ui/themes"
],
"files": [
{
"path": "src/components/states/States.tsx",
"type": "registry:component",
"target": "erp-ui/components/states/States.tsx"
}
]
},
{
"name": "confirm-dialog",
"type": "registry:component",
"title": "ConfirmDialog",
"description": "Confirm an irreversible step; asks for a reason when the API needs one; refusals shown in place.",
"dependencies": [
"@radix-ui/themes"
],
"files": [
{
"path": "src/components/confirm-dialog/ConfirmDialog.tsx",
"type": "registry:component",
"target": "erp-ui/components/confirm-dialog/ConfirmDialog.tsx"
}
]
},
{
"name": "money-input",
"type": "registry:component",
"title": "MoneyInput",
"description": "An amount typed by a person, kept as exact decimal text; invalid input is an error, never rounded.",
"dependencies": [
"@radix-ui/themes"
],
"files": [
{
"path": "src/components/form/MoneyInput.tsx",
"type": "registry:component",
"target": "erp-ui/components/form/MoneyInput.tsx"
}
]
},
{
"name": "form",
"type": "registry:component",
"title": "FormDialog",
"description": "Fields as data, required/shape checks before sending, the API's refusal shown in place.",
"dependencies": [
"@radix-ui/themes"
],
"registryDependencies": [
"@erp-ui/money-input"
],
"files": [
{
"path": "src/components/form/Form.tsx",
"type": "registry:component",
"target": "erp-ui/components/form/Form.tsx"
}
]
},
{
"name": "toast",
"type": "registry:component",
"title": "Toaster",
"description": "Confirm a step that worked \u2014 once, announced, dismissible. Refusals are never toasts.",
"dependencies": [
"@radix-ui/themes",
"radix-ui"
],
"files": [
{
"path": "src/components/toast/Toaster.tsx",
"type": "registry:component",
"target": "erp-ui/components/toast/Toaster.tsx"
}
]
},
{
"name": "kanban-board",
"type": "registry:component",
"title": "KanbanBoard",
"description": "Records in columns by state; every move has a keyboard path and goes through the screen's command.",
"dependencies": [
"@radix-ui/themes"
],
"registryDependencies": [
"@erp-ui/states"
],
"files": [
{
"path": "src/components/kanban/KanbanBoard.tsx",
"type": "registry:component",
"target": "erp-ui/components/kanban/KanbanBoard.tsx"
}
]
},
{
"name": "stat",
"type": "registry:component",
"title": "Stat",
"description": "A number to start the day from, in a responsive row.",
"dependencies": [
"@radix-ui/themes"
],
"files": [
{
"path": "src/components/stat/Stat.tsx",
"type": "registry:component",
"target": "erp-ui/components/stat/Stat.tsx"
}
]
},
{
"name": "app-shell",
"type": "registry:component",
"title": "AppShell",
"description": "The frame: modules' navigation by section, account, light/dark, a skip link; sidebar at a desk, menu on a phone.",
"dependencies": [
"@radix-ui/themes"
],
"files": [
{
"path": "src/components/app-shell/AppShell.tsx",
"type": "registry:component",
"target": "erp-ui/components/app-shell/AppShell.tsx"
},
{
"path": "src/components/app-shell/app-shell.css",
"type": "registry:file",
"target": "erp-ui/components/app-shell/app-shell.css"
}
]
}
]
}