From 97474ebc8710f22f51a05bf34e59b850229cbbb3 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 3 Oct 2026 01:08:42 +0200 Subject: [PATCH] fix: restore app icon sizing on scaled boards (#6972) --- packages/widgets/src/app/app.module.css | 12 ++++++++ packages/widgets/src/app/component.tsx | 40 ++++++++++++++++++++----- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/packages/widgets/src/app/app.module.css b/packages/widgets/src/app/app.module.css index b14962396..f5535be88 100644 --- a/packages/widgets/src/app/app.module.css +++ b/packages/widgets/src/app/app.module.css @@ -1,4 +1,16 @@ +.appText { + min-height: 0; + min-width: 0; + overflow: hidden; +} + +.appText > * { + flex-shrink: 0; +} + .appIcon { + /* Keep labels and descriptions from consuming all of a short tile. */ + min-height: 40%; max-height: 100%; max-width: 100%; overflow: auto; diff --git a/packages/widgets/src/app/component.tsx b/packages/widgets/src/app/component.tsx index cb8c3cef6..87d48cd62 100644 --- a/packages/widgets/src/app/component.tsx +++ b/packages/widgets/src/app/component.tsx @@ -21,7 +21,13 @@ import classes from "./app.module.css"; import { PingDot } from "./ping/ping-dot"; import { PingIndicator } from "./ping/ping-indicator"; -export default function AppWidget({ options, isEditMode, height, width }: WidgetComponentProps<"app">) { +export default function AppWidget({ + options, + isEditMode, + height, + width, + displayScale = 1, +}: WidgetComponentProps<"app">) { const tCommon = useI18n("common"); const settings = useSettings(); const board = useRequiredBoard(); @@ -33,33 +39,50 @@ export default function AppWidget({ options, isEditMode, height, width }: Widget if (isInitialWidgetQueryPending(appQuery)) return ; if (!app) return ; - const isTiny = height < 100 || width < 100; + let layoutScale = displayScale; + if (!Number.isFinite(layoutScale) || layoutScale <= 0) layoutScale = 1; + + // Widget dimensions are logical pixels; compact sizing follows the displayed tile. + const isTiny = height * layoutScale < 100 || width * layoutScale < 100; const isColumnLayout = options.layout.startsWith("column"); + let padding = 12; + let fontSize = rem(14); + let gap = 12; + let titleLineClamp = 2; + if (isTiny) { + padding = 4; + fontSize = rem(8); + titleLineClamp = 1; + } + if (isColumnLayout) gap = 0; return ( - + e.preventDefault() : undefined} > - + {options.showTitle && ( {app.name} @@ -68,7 +91,8 @@ export default function AppWidget({ options, isEditMode, height, width }: Widget {options.descriptionDisplayMode === "normal" && (