{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "movement-status-badge",
  "title": "Movement Status Badge",
  "description": "The nx-ui Movement Status Badge block.",
  "dependencies": [
    "@untitledui/icons@^0.0.22",
    "class-variance-authority@^0.7.1"
  ],
  "registryDependencies": [
    "@nx-ui/badge",
    "@nx-ui/utils"
  ],
  "files": [
    {
      "path": "components/blocks/domain/movement-status-badge/index.ts",
      "content": "export {\n  MovementStatusBadge,\n  MOVEMENT_STATUS_META,\n  type MovementStatus,\n  type MovementStatusBadgeProps,\n} from \"./movement-status-badge\"\n",
      "type": "registry:component",
      "target": "components/blocks/domain/movement-status-badge/index.ts"
    },
    {
      "path": "components/blocks/domain/movement-status-badge/movement-status-badge.tsx",
      "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n  CheckCircle,\n  ClipboardCheck,\n  File02,\n  PackageCheck,\n  Truck01,\n  XCircle,\n} from \"@untitledui/icons\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Badge } from \"@/components/ui/badge\"\n\n/**\n * MovementStatusBadge — a status pill for the waste-movement lifecycle.\n *\n * One badge per movement status, proposed through reconciled (plus\n * cancelled), each with a tone from the ui Badge variant scale and a default\n * icon. Pair with MovementTimeline for the full lifecycle view.\n */\n\nexport type MovementStatus =\n  | \"proposed\"\n  | \"consented\"\n  | \"in-transit\"\n  | \"received\"\n  | \"reconciled\"\n  | \"cancelled\"\n\ntype BadgeTone = \"gray\" | \"blue\" | \"warning\" | \"success\" | \"brand\" | \"error\"\n\nexport const MOVEMENT_STATUS_META: Record<\n  MovementStatus,\n  {\n    Icon: React.ComponentType<{ className?: string }>\n    label: string\n    tone: BadgeTone\n  }\n> = {\n  proposed: { Icon: File02, label: \"Proposed\", tone: \"gray\" },\n  consented: { Icon: ClipboardCheck, label: \"Consented\", tone: \"blue\" },\n  \"in-transit\": { Icon: Truck01, label: \"In transit\", tone: \"warning\" },\n  received: { Icon: PackageCheck, label: \"Received\", tone: \"success\" },\n  reconciled: { Icon: CheckCircle, label: \"Reconciled\", tone: \"brand\" },\n  cancelled: { Icon: XCircle, label: \"Cancelled\", tone: \"error\" },\n}\n\nconst movementStatusBadgeVariants = cva(\"\", {\n  variants: {\n    size: {\n      sm: \"\",\n      md: \"h-6 px-2.5 text-sm [&>svg]:size-3.5!\",\n    },\n  },\n  defaultVariants: {\n    size: \"sm\",\n  },\n})\n\nexport interface MovementStatusBadgeProps\n  extends VariantProps<typeof movementStatusBadgeVariants> {\n  status: MovementStatus\n  /** Override the default status label. */\n  label?: string\n  /** Show the status icon (default true). */\n  showIcon?: boolean\n  className?: string\n}\n\nexport function MovementStatusBadge({\n  status,\n  label,\n  showIcon = true,\n  size,\n  className,\n}: MovementStatusBadgeProps) {\n  const meta = MOVEMENT_STATUS_META[status]\n\n  return (\n    <Badge\n      data-slot=\"movement-status-badge\"\n      data-status={status}\n      variant={meta.tone}\n      className={cn(movementStatusBadgeVariants({ size }), className)}\n    >\n      {showIcon ? <meta.Icon aria-hidden=\"true\" /> : null}\n      {label ?? meta.label}\n    </Badge>\n  )\n}\n",
      "type": "registry:component",
      "target": "components/blocks/domain/movement-status-badge/movement-status-badge.tsx"
    }
  ],
  "type": "registry:block"
}