fix(widgets): restore readable summary text and icons (#7068)

* fix(widgets): restore readable summary text and icons

* fix: size Bazarr columns using displayed dimensions

* Revert "fix: size Bazarr columns using displayed dimensions"

This reverts commit 02e28a964faa191a91f840b7b45d79ea937dac5d.
This commit is contained in:
Thomas authored and GitHub committed 2026-10-07 17:02:38 +02:00
1 parent 8d78d0ae54
commit 2ea05f50cc
5 files changed
+58 -19

No files matched your search

@@ -35,11 +35,16 @@
.grid[data-short] .statTile {
flex-direction: row;
gap: 3px;
gap: calc(3px * var(--board-canvas-ui-scale, 1));
padding: 3px 4px;
}
.grid[data-short] .statValue {
flex-shrink: 0;
}
.grid[data-short] .statLabel {
min-width: 0;
text-align: left;
}
@@ -55,7 +60,7 @@
}
.statLabel {
font-size: clamp(8px, 2.5cqi, 12px);
font-size: clamp(var(--mantine-font-size-xs), 2.5cqi, var(--mantine-font-size-sm));
color: var(--mantine-color-dimmed);
line-height: 1.2;
text-align: center;
@@ -66,7 +71,7 @@
}
.statValue {
font-size: clamp(14px, 5.5cqi, 24px);
font-size: clamp(var(--mantine-font-size-lg), 5.5cqi, var(--mantine-font-size-2xl));
font-weight: 700;
color: var(--mantine-primary-color-filled);
line-height: 1.1;
+5 -2
View File
@@ -61,6 +61,7 @@ export default function BazarrWidget({
width,
height,
displayMode,
displayScale = 1,
}: WidgetComponentProps<"bazarr">) {
const t = useI18n("widget.bazarr");
const { data: badges, error } = clientApi.widget.bazarr.getBadges.useQuery(
@@ -84,7 +85,9 @@ export default function BazarrWidget({
const visibleStatKeys = getVisibleBazarrStatKeys(options, displayMode);
const gridCols = getGridCols(width, height, visibleStatKeys.length);
const iconSize = getIconSize(Math.min(width, height));
const iconSize = Math.max(20, getIconSize(Math.min(width, height)));
let responsiveHeight = height;
if (displayMode !== "advanced") responsiveHeight *= displayScale;
if (visibleStatKeys.length === 0) {
return (
@@ -102,7 +105,7 @@ export default function BazarrWidget({
<div className={classes.root}>
<div
className={classes.grid}
data-short={height < 120 || undefined}
data-short={(responsiveHeight < 120 && gridCols < visibleStatKeys.length) || undefined}
style={{ "--stat-cols": gridCols } as CSSProperties}
>
{visibleStatKeys.map((statKey) => {
@@ -169,7 +169,7 @@ export default function NotificationsWidget({
aria-label={t("openService")}
title={t("openService")}
>
<IconExternalLink size={16} />
<IconExternalLink style={iconSizes.md} />
</ActionIcon>
)}
{notification.integrationKind === "gotify" &&
@@ -187,7 +187,7 @@ export default function NotificationsWidget({
})
}
>
<IconTrash size={16} />
<IconTrash style={iconSizes.md} />
</ActionIcon>
)}
</Stack>
@@ -36,7 +36,7 @@
}
.heroTextOnly .heroValue {
font-size: clamp(22px, 10cqmin, 36px);
font-size: clamp(var(--mantine-font-size-2xl), 10cqmin, var(--mantine-font-size-4xl));
}
.heroText {
@@ -48,13 +48,13 @@
}
.heroLabel {
font-size: clamp(9px, 2.8cqmin, 13px);
font-size: clamp(var(--mantine-font-size-xs), 2.8cqmin, var(--mantine-font-size-sm));
color: var(--mantine-color-dimmed);
line-height: 1.2;
}
.heroValue {
font-size: clamp(18px, 8cqmin, 32px);
font-size: clamp(var(--mantine-font-size-xl), 8cqmin, var(--mantine-font-size-4xl));
font-weight: 700;
line-height: 1.1;
}
@@ -88,19 +88,32 @@
overflow: hidden;
}
.root[data-short] .statTile {
flex-direction: row;
}
.root[data-short] .statValue {
flex-shrink: 0;
}
.root[data-short] .statLabel {
min-width: 0;
text-align: left;
}
.statIcon {
flex-shrink: 0;
}
.statValue {
font-size: clamp(14px, 5.5cqmin, 24px);
font-size: clamp(var(--mantine-font-size-lg), 5.5cqmin, var(--mantine-font-size-2xl));
font-weight: 700;
line-height: 1.1;
text-align: center;
}
.statLabel {
font-size: clamp(8px, 2.5cqmin, 12px);
font-size: clamp(var(--mantine-font-size-xs), 2.5cqmin, var(--mantine-font-size-sm));
color: var(--mantine-color-dimmed);
line-height: 1.2;
text-align: center;
+25 -7
View File
@@ -85,6 +85,7 @@ export default function UptimeKumaWidget({
width,
height,
displayMode = "compact",
displayScale = 1,
}: WidgetComponentProps<"uptimeKuma">) {
if (integrationIds.length === 0) {
throw new NoIntegrationDataError();
@@ -97,6 +98,7 @@ export default function UptimeKumaWidget({
width={width}
height={height}
displayMode={displayMode}
displayScale={displayScale}
/>
);
}
@@ -107,9 +109,17 @@ interface UptimeKumaContentProps {
width: number;
height: number;
displayMode: "compact" | "advanced";
displayScale: number;
}
function UptimeKumaContent({ integrationIds, options, width, height, displayMode }: UptimeKumaContentProps) {
function UptimeKumaContent({
integrationIds,
options,
width,
height,
displayMode,
displayScale,
}: UptimeKumaContentProps) {
const t = useI18n("widget.uptimeKuma");
const dashboardQuery = clientApi.widget.uptimeKuma.getDashboard.useQuery({ integrationIds });
const dashboardData = getUsableWidgetQueryData(dashboardQuery);
@@ -129,11 +139,17 @@ function UptimeKumaContent({ integrationIds, options, width, height, displayMode
);
const uptimeValue = clampPercent(combined.averageUptimePercent);
const uptimeColor = getUptimeColor(uptimeValue);
const visualScale = Math.min(width, height);
const ringSize = getRingSize(visualScale);
const iconSize = getIconSize(visualScale);
const gridCols = getGridCols(width);
const isAdvanced = displayMode === "advanced";
let responsiveWidth = width;
let responsiveHeight = height;
if (!isAdvanced) {
responsiveWidth *= displayScale;
responsiveHeight *= displayScale;
}
const visualScale = Math.min(responsiveWidth, responsiveHeight);
const ringSize = getRingSize(visualScale);
const iconSize = getIconSize(Math.min(width, height));
const gridCols = getGridCols(responsiveWidth);
const enabledStatKeys = Object.entries(statVisibilityByOption)
.filter(([optionKey]) => isAdvanced || options[optionKey as keyof typeof options])
@@ -149,7 +165,7 @@ function UptimeKumaContent({ integrationIds, options, width, height, displayMode
const heroRingClass = heroVariantByRing[String(showRing) as keyof typeof heroVariantByRing];
const summaryContent = (
<div className={classes.root}>
<div className={classes.root} data-short={responsiveHeight < 240 || undefined}>
{showHero && (
<div className={`${classes.hero} ${heroLayoutClass} ${heroRingClass}`}>
<div className={classes.heroText}>
@@ -195,7 +211,9 @@ function UptimeKumaContent({ integrationIds, options, width, height, displayMode
color={`var(--mantine-color-${color}-6)`}
/>
<span className={classes.statValue}>{formatNumber(combined[statKey], 0)}</span>
<span className={classes.statLabel}>{t(`stats.${statKey}`)}</span>
<span className={classes.statLabel} title={t(`stats.${statKey}`)}>
{t(`stats.${statKey}`)}
</span>
</div>
);
})}