From b53f8c999a0d58cd3ee9630a2b6ee3c186b06e57 Mon Sep 17 00:00:00 2001 From: biast12 <53872542+biast12@users.noreply.github.com> Date: Sat, 5 Sep 2026 15:53:31 +0200 Subject: [PATCH] Unify colour handling in selects and buttons Adds shared colour utilities (`lib/colour.ts`) and centralized Discord button style constants (`constants/buttonStyles.ts`), then refactors components/pages to use them. This removes duplicated hex conversion logic, normalizes colour input formats, and applies consistent color swatches in Select/MultiSelect/role-related UIs (including proper fallback for Discord role color `0`). It also reuses shared gallery type badge/options metadata to eliminate duplicated type option definitions. --- .../components/AccessControlListEditor.tsx | 19 +++++++++++-- frontend/src/components/GalleryCard.tsx | 9 ++----- frontend/src/components/LabelBadge.tsx | 5 +--- frontend/src/components/MultiSelect.tsx | 16 ++++++----- frontend/src/components/Select.tsx | 9 ++++--- .../components/discord/container/Button.tsx | 27 +++++++++---------- .../gallery/GalleryListingPreview.tsx | 27 ++++++++++++++++--- frontend/src/constants/buttonStyles.ts | 17 ++++++++++++ frontend/src/lib/colour.ts | 16 +++++++++++ frontend/src/pages/admin/affiliate/_index.tsx | 12 ++++++--- frontend/src/pages/admin/bot-staff/_index.tsx | 12 ++++++--- frontend/src/pages/admin/gallery/_index.tsx | 13 ++++----- frontend/src/pages/gallery/_index.tsx | 9 ++----- frontend/src/pages/manage/GuildSettings.tsx | 2 ++ .../src/pages/manage/blacklist/_index.tsx | 3 ++- .../src/pages/manage/multipanels/create.tsx | 3 ++- .../src/pages/manage/multipanels/edit.tsx | 3 ++- frontend/src/pages/manage/panels/create.tsx | 23 ++++++++-------- frontend/src/pages/manage/panels/edit.tsx | 23 ++++++++-------- frontend/src/pages/manage/setup/Setup.tsx | 1 + .../manage/setup/components/TeamsStep.tsx | 9 +++++-- frontend/src/pages/manage/teams/_index.tsx | 3 ++- frontend/src/pages/manage/tickets/_index.tsx | 10 ++----- .../src/pages/manage/transcripts/_index.tsx | 10 ++----- 24 files changed, 173 insertions(+), 108 deletions(-) create mode 100644 frontend/src/constants/buttonStyles.ts create mode 100644 frontend/src/lib/colour.ts diff --git a/frontend/src/components/AccessControlListEditor.tsx b/frontend/src/components/AccessControlListEditor.tsx index 6f4467ff..547e8313 100644 --- a/frontend/src/components/AccessControlListEditor.tsx +++ b/frontend/src/components/AccessControlListEditor.tsx @@ -4,6 +4,7 @@ import Button from "@/components/Button"; import Select from "@/components/Select"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faArrowUp, faArrowDown, faXmark } from "@fortawesome/free-solid-svg-icons"; +import { roleColour } from "@/lib/colour"; interface AccessControlListEditorProps { guildId: string; @@ -60,12 +61,18 @@ const AccessControlListEditor: FC = ({ return role ? role.name : "Deleted Role"; }; + const roleColours = new Map(roles.map((r) => [r.id, roleColour(r.color)])); + return (
({ + key, + label, + color, + }))} onChange={(e) => setPanel((prev) => prev ? { ...prev, button_style: e ?? prev.button_style } : prev, @@ -515,15 +516,15 @@ const PanelsPage: FC = () => { options={ selectedGuild?.roles ? [ - { label: "Ticket Opener", key: "user", color: "ffffff" }, - { label: "@here", key: "here", color: "ffffff" }, + { label: "Ticket Opener", key: "user", color: "#FFFFFF" }, + { label: "@here", key: "here", color: "#FFFFFF" }, ...(selectedGuild.roles.map((role) => ({ label: role.name, key: role.id, - color: role.color.toString(16), - })) || [{ label: "@here", key: "here", color: "ffffff" }]), + color: roleColour(role.color), + })) || [{ label: "@here", key: "here", color: "#FFFFFF" }]), ] - : [{ label: "@here", key: "here", color: "ffffff" }] + : [{ label: "@here", key: "here", color: "#FFFFFF" }] } onChange={(e) => setPanel((prev) => (prev ? { ...prev, mentions: e } : prev))} /> diff --git a/frontend/src/pages/manage/panels/edit.tsx b/frontend/src/pages/manage/panels/edit.tsx index fa2adcbc..5d4562b7 100644 --- a/frontend/src/pages/manage/panels/edit.tsx +++ b/frontend/src/pages/manage/panels/edit.tsx @@ -22,6 +22,8 @@ import Select from "@/components/Select"; import TextInput from "@/components/TextInput"; import NumberInput from "@/components/NumberInput"; import ColourSelect from "@/components/ColourSelect"; +import { BUTTON_STYLE_OPTIONS } from "@/constants/buttonStyles"; +import { roleColour } from "@/lib/colour"; import Textarea from "@/components/Textarea"; import EmojiPicker from "@/components/EmojiPicker"; import PanelPreview from "@/components/PanelPreview"; @@ -265,12 +267,11 @@ const EditPanelsPage: FC = () => {