Paneler husker brukerens foretrukne størrelse per verktøy-type

Når et panel resizes lagres width/height per trait-type i
workspace-metadata. Neste gang verktøyet instansieres brukes
den lagrede størrelsen i stedet for default. Persisteres mellom
besøk.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
vegard 2026-03-19 07:24:25 +00:00
parent e520b8037c
commit 24fbc7cc19

View file

@ -90,6 +90,9 @@
if (Array.isArray(meta.savedThemes)) { if (Array.isArray(meta.savedThemes)) {
savedThemes = meta.savedThemes as ThemeConfig[]; savedThemes = meta.savedThemes as ThemeConfig[];
} }
if (meta.panelSizes && typeof meta.panelSizes === 'object') {
panelSizes = meta.panelSizes as Record<string, { width: number; height: number }>;
}
} }
}) })
.catch((err) => { .catch((err) => {
@ -114,6 +117,7 @@
let savedCamera = $state<Camera>({ x: 0, y: 0, zoom: 1.0 }); let savedCamera = $state<Camera>({ x: 0, y: 0, zoom: 1.0 });
let gridEnabled = $state(false); let gridEnabled = $state(false);
let savedThemes = $state<ThemeConfig[]>([]); let savedThemes = $state<ThemeConfig[]>([]);
let panelSizes = $state<Record<string, { width: number; height: number }>>({});
// When workspace node appears in store (after creation), load its layout // When workspace node appears in store (after creation), load its layout
$effect(() => { $effect(() => {
@ -161,6 +165,7 @@
camera: savedCamera, camera: savedCamera,
gridEnabled, gridEnabled,
savedThemes, savedThemes,
panelSizes,
preferences: { preferences: {
...(currentMeta.preferences ?? {}), ...(currentMeta.preferences ?? {}),
theme: themeToMetadata(currentTheme), theme: themeToMetadata(currentTheme),
@ -197,6 +202,8 @@
y: panel.y + (dy ?? 0), y: panel.y + (dy ?? 0),
}; };
layout = { ...layout }; layout = { ...layout };
// Remember size per trait type
panelSizes = { ...panelSizes, [trait]: { width, height } };
persistLayout(); persistLayout();
} }
} }
@ -220,6 +227,7 @@
function handleAddPanel(trait: string) { function handleAddPanel(trait: string) {
if (layout.panels.some(p => p.trait === trait)) return; if (layout.panels.some(p => p.trait === trait)) return;
const info = getPanelInfo(trait); const info = getPanelInfo(trait);
const remembered = panelSizes[trait];
const maxY = layout.panels.length > 0 const maxY = layout.panels.length > 0
? Math.max(...layout.panels.map(p => p.y + p.height)) ? Math.max(...layout.panels.map(p => p.y + p.height))
: 0; : 0;
@ -230,8 +238,8 @@
trait, trait,
x: 30, x: 30,
y: maxY + 30, y: maxY + 30,
width: info.defaultWidth, width: remembered?.width ?? info.defaultWidth,
height: info.defaultHeight, height: remembered?.height ?? info.defaultHeight,
}, },
], ],
}; };