[FEAT] Format code

This commit is contained in:
2026-01-01 18:46:46 +01:00
parent 221dcb7072
commit 65bdc2974f
17 changed files with 561 additions and 528 deletions

View File

@@ -0,0 +1,95 @@
import { ref, toRef, watch } from 'vue';
import { useLayers, createEmptyLayer, getMaxDimensionsAcrossLayers } from '@/composables/useLayers';
import { useSettingsStore } from '@/stores/useSettingsStore';
import { useProjectStore, type Project } from '@/stores/useProjectStore';
import { useExportLayers } from '@/composables/useExportLayers';
// Global state for editor visibility
const isEditorActive = ref(false);
export const useProjectManager = () => {
const settingsStore = useSettingsStore();
const projectStore = useProjectStore();
const { layers, columns, activeLayerId, visibleLayers } = useLayers();
const { generateProjectJSON, loadProjectData } = useExportLayers(
layers,
columns,
toRef(settingsStore, 'negativeSpacingEnabled'),
activeLayerId,
toRef(settingsStore, 'backgroundColor'),
toRef(settingsStore, 'manualCellSizeEnabled'),
toRef(settingsStore, 'manualCellWidth'),
toRef(settingsStore, 'manualCellHeight')
);
// Watch for sprites to automatically open editor (legacy behavior support)
watch(
() => layers.value.some(l => l.sprites.length > 0),
hasSprites => {
if (hasSprites) isEditorActive.value = true;
},
{ immediate: true }
);
const createProject = (config: { width: number; height: number; columns: number; rows: number }) => {
// 1. Reset Settings
settingsStore.setManualCellSize(config.width, config.height);
settingsStore.manualCellSizeEnabled = true;
// 2. Reset Layers
const newLayer = createEmptyLayer('Base');
layers.value = [newLayer];
activeLayerId.value = newLayer.id;
// 3. Set Columns
columns.value = config.columns;
// 4. Reset Project Store
projectStore.currentProject = null;
// 5. Force Editor Active
isEditorActive.value = true;
};
const openProject = async (project: Project) => {
try {
if (project.data) {
await loadProjectData(project.data);
}
projectStore.currentProject = project;
isEditorActive.value = true;
} catch (e) {
console.error('Failed to open project', e);
alert('Failed to open project data');
}
};
const saveProject = async (name: string) => {
try {
const data = await generateProjectJSON();
if (projectStore.currentProject && projectStore.currentProject.name === name) {
await projectStore.updateProject(projectStore.currentProject.id, data);
} else {
await projectStore.createProject(name, data);
}
} catch (e) {
console.error(e);
alert('Failed to save project');
throw e; // Re-throw to let caller know
}
};
const closeEditor = () => {
isEditorActive.value = false;
};
return {
isEditorActive,
createProject,
openProject,
saveProject,
closeEditor,
};
};