From 8de8031ecb941ee90efe4587f1fa8f85e89c5bc8 Mon Sep 17 00:00:00 2001 From: Glary-Bot Date: Thu, 14 May 2026 22:54:30 +0000 Subject: [PATCH] fix: address PR review (round 2) - isValidGridTrack helper using CSS.supports('grid-template-rows', value), cached per-string. Applied in gridTemplateRows so a bad persisted value falls back to the existing auto/min-content default instead of breaking the whole node's row layout. - writeGridOverrides: skip node.properties initialization on empty (clear) writes so clearing overrides on a node that never had any properties stays a true no-op. --- .../composables/useProcessedWidgets.ts | 3 ++- src/utils/widgetGridOverrides.ts | 21 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/renderer/extensions/vueNodes/composables/useProcessedWidgets.ts b/src/renderer/extensions/vueNodes/composables/useProcessedWidgets.ts index fbc0d4f099..914fc54d61 100644 --- a/src/renderer/extensions/vueNodes/composables/useProcessedWidgets.ts +++ b/src/renderer/extensions/vueNodes/composables/useProcessedWidgets.ts @@ -42,6 +42,7 @@ import { getExecutionIdFromNodeData, getLocatorIdFromNodeData } from '@/utils/graphTraversalUtil' +import { isValidGridTrack } from '@/utils/widgetGridOverrides' interface ProcessedWidget { advanced: boolean @@ -424,7 +425,7 @@ export function useProcessedWidgets( return visibleWidgets.value .map((w) => { const override = overrides?.[w.slotName ?? w.name] - if (override) return override + if (override && isValidGridTrack(override)) return override return shouldExpand(w.type) || w.hasLayoutSize ? 'auto' : 'min-content' }) .join(' ') diff --git a/src/utils/widgetGridOverrides.ts b/src/utils/widgetGridOverrides.ts index 5781fa7aa8..88452f3649 100644 --- a/src/utils/widgetGridOverrides.ts +++ b/src/utils/widgetGridOverrides.ts @@ -2,6 +2,19 @@ import type { LGraphNode } from '@/lib/litegraph/src/LGraphNode' const GRID_OVERRIDES_PROPERTY_KEY = 'gridOverrides' +const gridTrackValidityCache = new Map() + +export function isValidGridTrack(value: string): boolean { + const cached = gridTrackValidityCache.get(value) + if (cached !== undefined) return cached + const valid = + typeof CSS !== 'undefined' && + typeof CSS.supports === 'function' && + CSS.supports('grid-template-rows', value) + gridTrackValidityCache.set(value, valid) + return valid +} + /** * Maps widget name -> CSS grid-template-rows track value * (e.g. '200px', 'minmax(150px, 300px)', '1fr', 'auto'). @@ -25,12 +38,12 @@ function writeGridOverrides( node: LGraphNode, overrides: WidgetGridOverrides ): void { - node.properties ??= {} if (Object.keys(overrides).length === 0) { - delete node.properties[GRID_OVERRIDES_PROPERTY_KEY] - } else { - node.properties[GRID_OVERRIDES_PROPERTY_KEY] = overrides + if (node.properties) delete node.properties[GRID_OVERRIDES_PROPERTY_KEY] + return } + node.properties ??= {} + node.properties[GRID_OVERRIDES_PROPERTY_KEY] = overrides } export function setGridOverride(