Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-05-21 14:50:37 +00:00
parent 197ea1faad
commit 02afc82701
+41 -2
View File
@@ -505,9 +505,48 @@ export const useModelStore = create<ModelStore>((set, get) => ({
resetChecklist: () => set({ checklist: defaultChecklist.map(i => ({ ...i })) }),
measureMode: false,
setMeasureMode: (measureMode) => set((s) => ({ measureMode, measurePoints: [], positionMode: measureMode ? false : s.positionMode })),
setMeasureMode: (measureMode) => set((s) => ({ measureMode, measurePoints: [], positionMode: measureMode ? false : s.positionMode, selectionMode: measureMode ? false : s.selectionMode })),
positionMode: false,
setPositionMode: (positionMode) => set((s) => ({ positionMode, measureMode: positionMode ? false : s.measureMode })),
setPositionMode: (positionMode) => set((s) => ({ positionMode, measureMode: positionMode ? false : s.measureMode, selectionMode: positionMode ? false : s.selectionMode })),
// ── Selection state ─────────────────────────────────────
selectionMode: false,
setSelectionMode: (on) => set((s) => ({
selectionMode: on,
measureMode: on ? false : s.measureMode,
positionMode: on ? false : s.positionMode,
selectedElementKeys: on ? s.selectedElementKeys : new Set(),
})),
selectedElementKeys: new Set<string>(),
hiddenElementKeys: new Set<string>(),
isolatedElementKeys: null,
visibilityNonce: 0,
toggleElementSelection: (key) => set((s) => {
const next = new Set(s.selectedElementKeys);
if (next.has(key)) next.delete(key); else next.add(key);
return { selectedElementKeys: next, visibilityNonce: s.visibilityNonce + 1 };
}),
clearElementSelection: () => set((s) => ({ selectedElementKeys: new Set(), visibilityNonce: s.visibilityNonce + 1 })),
hideSelectedElements: () => set((s) => {
if (s.selectedElementKeys.size === 0) return {} as Partial<ModelStore>;
const hidden = new Set(s.hiddenElementKeys);
s.selectedElementKeys.forEach(k => hidden.add(k));
const active = s.models.find(m => m.id === s.activeModelId);
if (active) saveVisibility(active.fileName, hidden, s.isolatedElementKeys);
return { hiddenElementKeys: hidden, selectedElementKeys: new Set(), visibilityNonce: s.visibilityNonce + 1 };
}),
isolateSelectedElements: () => set((s) => {
if (s.selectedElementKeys.size === 0) return {} as Partial<ModelStore>;
const iso = new Set(s.selectedElementKeys);
const active = s.models.find(m => m.id === s.activeModelId);
if (active) saveVisibility(active.fileName, s.hiddenElementKeys, iso);
return { isolatedElementKeys: iso, selectedElementKeys: new Set(), visibilityNonce: s.visibilityNonce + 1 };
}),
showAllElements: () => set((s) => {
const active = s.models.find(m => m.id === s.activeModelId);
if (active) saveVisibility(active.fileName, new Set(), null);
return { hiddenElementKeys: new Set(), isolatedElementKeys: null, selectedElementKeys: new Set(), visibilityNonce: s.visibilityNonce + 1 };
}),
measurePoints: [],
addMeasurePoint: (p) => set((state) => {
const points = [...state.measurePoints, p];