"use client"; import { useState } from "react"; import { Button } from "./Button"; import { Field } from "./Field"; const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; export function RelinkPanel({ used, max, onRelink, error, }: { instanceId: string; used: number; max: number; onRelink: (newId: string) => void; error?: string; }) { const [open, setOpen] = useState(false); const [value, setValue] = useState(""); const remaining = Math.max(0, max - used); const exhausted = remaining === 0; return (

Moved to a new server?

Relinking issues a replacement licence for the new install, covering the rest of your current term.

{open && !exhausted && ( setValue(e.target.value)} error={error} hint="From Settings → Licence on the new install." /> )}
{exhausted ? "You have used every relink for this term — contact support and we will sort it out." : `${remaining} of ${max} relinks left this term`}
); }