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:
parent
e520b8037c
commit
24fbc7cc19
1 changed files with 10 additions and 2 deletions
|
|
@ -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,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue