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"
        }
      ]
    }
  ]
}