import { Link } from "@tanstack/react-router";
import { deleteRelease, deleteReleaseAsset, updateRelease } from "~/fns/releases";
import { useAction } from "~/hooks/use-action";
import { useReleaseAssetUpload } from "~/hooks/use-release-asset-upload";
import { Badge } from "~/ui/Badge";
import { formatBytes } from "~/lib/format";
import { Markdown } from "~/ui/Markdown";
import { Panel } from "~/ui/Panel";
import { RelativeTime } from "~/ui/RelativeTime";
import { Button } from "~/ui/Button";
import { ErrorBanner } from "~/ui/Callout";
import type { listReleases } from "~/fns/releases";
import { ExternalLink } from "~/ui/TextLink";
type Release = Awaited<ReturnType<typeof listReleases>>["releases"][number];
function AssetUpload({ owner, repo, releaseId }: { owner: string; repo: string; releaseId: string }) {
const { upload, pending, error } = useReleaseAssetUpload(owner, repo, releaseId);
return (
<label className="inline-flex cursor-pointer items-center gap-2 text-xs text-accent-400 hover:underline">
{pending ? "Uploading…" : "Upload asset"}
<input
type="file"
className="sr-only"
onChange={(event) => {
const file = event.target.files?.[0];
if (file) void upload(file);
}}
/>
{error && <span className="text-kumo-danger">{error}</span>}
</label>
);
}
export function ReleaseCard({
owner,
repo,
release,
canWrite,
}: {