From 8dc6291eabf409c82211b43a542d4b9b00920759 Mon Sep 17 00:00:00 2001
From: Oliver Bryan <04oliverbryan@gmail.com>
Date: Sat, 17 Jan 2026 03:46:09 +0000
Subject: [PATCH] IconButton
---
.../src/components/issue-detail-pane.tsx | 23 +++-------
.../frontend/src/components/login-form.tsx | 8 ++--
.../src/components/multi-assignee-select.tsx | 12 ++---
.../src/components/organisations-dialog.tsx | 32 ++++++++------
.../server-configuration-dialog.tsx | 27 +++++-------
.../frontend/src/components/theme-toggle.tsx | 10 ++---
.../src/components/ui/icon-button.tsx | 44 +++++++++++++++++++
7 files changed, 92 insertions(+), 64 deletions(-)
create mode 100644 packages/frontend/src/components/ui/icon-button.tsx
diff --git a/packages/frontend/src/components/issue-detail-pane.tsx b/packages/frontend/src/components/issue-detail-pane.tsx
index ab87269..7f06fa9 100644
--- a/packages/frontend/src/components/issue-detail-pane.tsx
+++ b/packages/frontend/src/components/issue-detail-pane.tsx
@@ -9,13 +9,13 @@ import { StatusSelect } from "@/components/status-select";
import StatusTag from "@/components/status-tag";
import { TimerDisplay } from "@/components/timer-display";
import { TimerModal } from "@/components/timer-modal";
-import { Button } from "@/components/ui/button";
import { ConfirmDialog } from "@/components/ui/confirm-dialog";
import { SelectTrigger } from "@/components/ui/select";
import { issue } from "@/lib/server";
import { issueID } from "@/lib/utils";
import SmallSprintDisplay from "./small-sprint-display";
import { SprintSelect } from "./sprint-select";
+import { IconButton } from "./ui/icon-button";
function assigneesToStringArray(assignees: UserRecord[]): string[] {
if (assignees.length === 0) return ["unassigned"];
@@ -245,24 +245,15 @@ export function IssueDetailPane({
-
-
-
+
diff --git a/packages/frontend/src/components/login-form.tsx b/packages/frontend/src/components/login-form.tsx
index 882914b..dad2608 100644
--- a/packages/frontend/src/components/login-form.tsx
+++ b/packages/frontend/src/components/login-form.tsx
@@ -10,6 +10,7 @@ import { useSession } from "@/components/session-provider";
import { Button } from "@/components/ui/button";
import { Dialog, DialogContent, DialogTitle, DialogTrigger } from "@/components/ui/dialog";
import { Field } from "@/components/ui/field";
+import { IconButton } from "@/components/ui/icon-button";
import { Label } from "@/components/ui/label";
import { UploadAvatar } from "@/components/upload-avatar";
import { capitalise, cn, getServerURL, setCsrfToken } from "@/lib/utils";
@@ -144,9 +145,8 @@ export default function LogInForm() {
{/* under construction warning */}
{showWarning && (
-
+
diff --git a/packages/frontend/src/components/multi-assignee-select.tsx b/packages/frontend/src/components/multi-assignee-select.tsx
index 16e6fef..e4ceff2 100644
--- a/packages/frontend/src/components/multi-assignee-select.tsx
+++ b/packages/frontend/src/components/multi-assignee-select.tsx
@@ -1,6 +1,6 @@
import type { UserRecord } from "@sprint/shared";
import { Plus } from "lucide-react";
-import { Button } from "@/components/ui/button";
+import { IconButton } from "@/components/ui/icon-button";
import { UserSelect } from "@/components/user-select";
export function MultiAssigneeSelect({
@@ -61,15 +61,9 @@ export function MultiAssigneeSelect({
/>
{index === assigneeIds.length - 1 && canAddMore && (
-
+
)}
>
))}
diff --git a/packages/frontend/src/components/organisations-dialog.tsx b/packages/frontend/src/components/organisations-dialog.tsx
index f7c4629..80d107d 100644
--- a/packages/frontend/src/components/organisations-dialog.tsx
+++ b/packages/frontend/src/components/organisations-dialog.tsx
@@ -28,6 +28,7 @@ import {
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
+import { IconButton } from "@/components/ui/icon-button";
import { Input } from "@/components/ui/input";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
@@ -552,9 +553,7 @@ function OrganisationsDialog({
member.OrganisationMember.role !== "owner" &&
member.User.id !== user.id && (
<>
-
-
+
+
>
)}
@@ -802,9 +806,9 @@ function OrganisationsDialog({
asChild={false}
className="w-9 h-9"
/>
-
+
{statusError && (
diff --git a/packages/frontend/src/components/server-configuration-dialog.tsx b/packages/frontend/src/components/server-configuration-dialog.tsx
index f6a7b8d..b5f1f30 100644
--- a/packages/frontend/src/components/server-configuration-dialog.tsx
+++ b/packages/frontend/src/components/server-configuration-dialog.tsx
@@ -1,8 +1,8 @@
import { CheckIcon, ServerIcon, Undo2 } from "lucide-react";
import { type ReactNode, useState } from "react";
import { createPortal } from "react-dom";
-import { Button } from "@/components/ui/button";
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog";
+import { IconButton } from "@/components/ui/icon-button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { getServerURL } from "@/lib/utils";
@@ -113,14 +113,13 @@ export function ServerConfigurationDialog({ trigger }: { trigger?: ReactNode })