From c0e8d569b2c03a611546265d875798cab063581e Mon Sep 17 00:00:00 2001 From: chodeus Date: Fri, 14 Aug 2026 09:04:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20device=20touch=20pass=20=E2=80=94=20?= =?UTF-8?q?real=20geometry=20for=20the=20deferred=20controls?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every deferred control gets an honest treatment: real 44px where rows absorb it, 36px + a min-w-pinned expansion where density rules, and documented leave-alones (display-only pills; a chip x whose expansion reached the neighbouring chip's x). Selects reach a real 44px trigger — LogFileSelect/ModuleSelect's inner select was unsized, so the true hit area was ~16px regardless of wrapper. SegmentedControl gains min-w-11 so its expansion can never spill horizontally for any schema label; the gap-0.5 track is safe by construction. Poster-card action bars wrap instead of silently clipping at md/lg widths. --- frontend/src/components/RecentQueries.jsx | 6 ++++-- .../components/fields/custom/ArrayObjectField.jsx | 4 ++-- .../components/fields/custom/DirPickerField.jsx | 2 +- .../components/fields/custom/InstancesField.jsx | 2 +- .../fields/features/schedule/CronInput.jsx | 6 +++--- .../components/fields/primitives/FieldLabel.jsx | 3 ++- .../components/fields/select/MultiSelectField.jsx | 6 ++++-- frontend/src/components/instances/InstanceCard.jsx | 8 +++++--- .../src/components/logs/controls/LogFileSelect.jsx | 4 ++-- .../src/components/logs/controls/ModuleSelect.jsx | 4 ++-- .../components/maintenance/LibraryMaintenance.jsx | 2 +- frontend/src/components/modals/EditMediaModal.jsx | 4 ++-- .../components/modules/ScheduleBlocksEditor.jsx | 2 +- frontend/src/components/modules/ScheduleCard.jsx | 6 ++++-- frontend/src/components/ui/InfoTooltip.jsx | 6 +++++- frontend/src/components/ui/Pagination.jsx | 2 +- frontend/src/components/ui/SegmentedControl.jsx | 6 ++++-- frontend/src/pages/Logs.jsx | 8 +++++--- frontend/src/pages/media/LabelarrPage.jsx | 6 +++--- frontend/src/pages/media/MediaStatsPage.jsx | 2 +- frontend/src/pages/poster/BorderPreviewPage.jsx | 2 +- .../src/pages/poster/PosterAssetsSearchPage.jsx | 10 ++++++---- frontend/src/pages/poster/PosterCleanarrPage.jsx | 4 ++-- .../src/pages/poster/PosterGDriveSearchPage.jsx | 5 ++--- frontend/src/pages/poster/PosterStatsPage.jsx | 2 +- frontend/src/pages/poster/UnmatchedAssetsPage.jsx | 14 +++++++------- .../src/pages/settings/GeneralSettingsPage.jsx | 2 +- frontend/src/pages/settings/InstancesPage.jsx | 2 +- frontend/src/pages/settings/JobsPage.jsx | 2 +- frontend/src/pages/settings/NotificationsPage.jsx | 6 +++--- frontend/src/pages/settings/SystemSettingsPage.jsx | 2 +- frontend/src/pages/settings/WebhooksPage.jsx | 4 ++-- .../pages/settings/modules/ModuleSettingsPage.jsx | 6 ++++-- 33 files changed, 85 insertions(+), 65 deletions(-) diff --git a/frontend/src/components/RecentQueries.jsx b/frontend/src/components/RecentQueries.jsx index 5817cc15..0b7732e5 100644 --- a/frontend/src/components/RecentQueries.jsx +++ b/frontend/src/components/RecentQueries.jsx @@ -70,19 +70,21 @@ export default function RecentQueries({ entries, onSelect, onClear, label = 'Rec )} + {/* min-w-11 keeps touch-expand's 44px box inside the chip, so a + one-character query can't reach into its neighbour. */}
{entries.map(q => ( diff --git a/frontend/src/components/fields/custom/ArrayObjectField.jsx b/frontend/src/components/fields/custom/ArrayObjectField.jsx index 4a7fb96a..861defb0 100755 --- a/frontend/src/components/fields/custom/ArrayObjectField.jsx +++ b/frontend/src/components/fields/custom/ArrayObjectField.jsx @@ -462,7 +462,7 @@ export const ArrayObjectField = ({ })); const lbl = 'font-mono text-[10px] tracking-[0.8px] text-fg-subtle'; const ctrl = - 'h-9 px-2.5 rounded-md bg-surface-inset border border-border text-fg text-sm outline-none focus:border-primary w-full'; + 'h-11 px-2.5 rounded-md bg-surface-inset border border-border text-fg text-sm outline-none focus:border-primary w-full'; return (
set('app_instance', e.target.value)} disabled={disabled} - className="h-9 px-2.5 rounded-md bg-surface border border-border text-fg text-sm font-semibold outline-none focus:border-primary min-w-[160px] flex-1" + className="h-11 px-2.5 rounded-md bg-surface border border-border text-fg text-sm font-semibold outline-none focus:border-primary min-w-[160px] flex-1" > {instanceOptions.map(o => ( diff --git a/frontend/src/components/fields/custom/DirPickerField.jsx b/frontend/src/components/fields/custom/DirPickerField.jsx index 4ff81bc7..1e22558b 100644 --- a/frontend/src/components/fields/custom/DirPickerField.jsx +++ b/frontend/src/components/fields/custom/DirPickerField.jsx @@ -167,7 +167,7 @@ export const DirPickerField = React.memo(({ field, value, onChange, disabled = f value={activeRoot || ''} onChange={handleRootChange} disabled={disabled || loading} - className="flex-1 px-2 py-1 text-xs bg-input border border-border rounded text-fg focus:border-primary focus:outline-none" + className="flex-1 h-11 px-2 text-xs bg-input border border-border rounded text-fg focus:border-primary focus:outline-none" > {roots.map(r => (