From a2308c9d712f9346eb8219865fc544ee1a75a420 Mon Sep 17 00:00:00 2001 From: LukeGus Date: Wed, 4 Nov 2026 20:03:15 -0600 Subject: [PATCH] fix: plugin page clipping and badges, match select and textarea sizes --- CHANGELOG.md | 9 ++++++++ src/ui/components/panel-layout.tsx | 6 +++--- src/ui/components/select.tsx | 4 ++-- src/ui/components/select2.tsx | 8 +++---- src/ui/components/textarea.tsx | 2 +- src/ui/look/LookSettings.tsx | 2 +- src/ui/plugins/PluginDetail.tsx | 26 ++++++++++++++--------- src/ui/plugins/PluginReleaseNotes.tsx | 6 +++--- src/ui/plugins/PluginsTab.tsx | 23 ++++++++++++-------- src/ui/plugins/plugin-bits.tsx | 15 ++++++++----- src/ui/plugins/plugin-model.ts | 5 +++++ src/ui/sidebar/AuthEnrollmentSections.tsx | 4 ++-- 12 files changed, 70 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 181facccf..dd551b0d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ - Host status, import and export, and credential tools now start on for new installs - Sync now starts on in a new desktop app, so it can link to a server - The first run plugin picker leaves plugins you did not choose off instead of removing them +- Dropdowns and text areas are the same size as the text fields next to them +- A page's own tabs sit above its search bar ### Fixed @@ -30,6 +32,13 @@ - An installed plugin update older than the copy in a newer image is removed at startup instead of logging an error every boot - Canceling a download to the desktop app right as it starts no longer leaves a partial file behind - Changing two interface settings at once, like resetting the dashboard, now saves both instead of only the last one +- Release notes on a plugin's page are no longer cut off on the left +- The Community badge in Browse is no longer missing its top border +- Official plugin pages no longer show a stray divider before the author +- The version picker on a plugin's page is no longer empty for a plugin installed from a local build +- The plugin video no longer has a second border around it +- The hint at the bottom of Browse and the stored data footer on plugin pages have the same padding as the rest of the page +- Sign in methods on the Security page have a line between them ## 26.11.0 diff --git a/src/ui/components/panel-layout.tsx b/src/ui/components/panel-layout.tsx index 9a09ea04a..c90d384ac 100644 --- a/src/ui/components/panel-layout.tsx +++ b/src/ui/components/panel-layout.tsx @@ -118,6 +118,9 @@ export function PanelShell({ const bands = ( <> + {tabs && ( +
{tabs}
+ )} {toolbar && (
)} - {tabs && ( -
{tabs}
- )} ); diff --git a/src/ui/components/select.tsx b/src/ui/components/select.tsx index 9207fe81c..1ac0f2ab3 100644 --- a/src/ui/components/select.tsx +++ b/src/ui/components/select.tsx @@ -35,7 +35,7 @@ function SelectTrigger({ data-slot="select-trigger" data-size={size} className={cn( - "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-none border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-none border bg-transparent px-2.5 py-1 text-xs whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-8 data-[size=sm]:h-7 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className, )} {...props} @@ -105,7 +105,7 @@ function SelectItem({ { @@ -189,7 +189,7 @@ function Select2({ value={query} onChange={(event) => setQuery(event.target.value)} placeholder={t("common.search")} - className="h-9 w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground" + className="h-8 w-full bg-transparent text-xs outline-none placeholder:text-muted-foreground" autoFocus />
@@ -198,7 +198,7 @@ function Select2({ className="max-h-64 overflow-y-auto p-1 thin-scrollbar" > {filteredOptions.length === 0 ? ( -
+
{t("common.noResults")}
) : ( @@ -222,7 +222,7 @@ function Select2({ aria-selected={isSelected} disabled={option.disabled} className={cn( - "flex w-full items-center gap-2 rounded-none px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-muted disabled:pointer-events-none disabled:opacity-50", + "flex w-full items-center gap-2 rounded-none px-2 py-1.5 text-left text-xs outline-none transition-colors hover:bg-muted disabled:pointer-events-none disabled:opacity-50", isSelected && "bg-muted text-accent-foreground", )} onClick={() => selectValue(option.value)} diff --git a/src/ui/components/textarea.tsx b/src/ui/components/textarea.tsx index 0293c3af8..3c5f1d457 100644 --- a/src/ui/components/textarea.tsx +++ b/src/ui/components/textarea.tsx @@ -9,7 +9,7 @@ const Textarea = React.forwardRef( return (