diff --git a/src/App.vue b/src/App.vue index b3c4678..fcb8888 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,33 +1,64 @@ diff --git a/src/components/Navigation.vue b/src/components/Navigation.vue new file mode 100644 index 0000000..01452af --- /dev/null +++ b/src/components/Navigation.vue @@ -0,0 +1,88 @@ + + + diff --git a/src/components/SettingsModal.vue b/src/components/SettingsModal.vue new file mode 100644 index 0000000..a910855 --- /dev/null +++ b/src/components/SettingsModal.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/components/Sidebar.vue b/src/components/Sidebar.vue index c1136db..faaaee7 100644 --- a/src/components/Sidebar.vue +++ b/src/components/Sidebar.vue @@ -13,88 +13,57 @@ - +
- - Sprites + + Quick Actions
- -
-
- - -
-
-
- - Tools -
-
-
-
- + + + - -
+
+
- -
-
Zoom Controls
- - - + +
+
+
+ + Stats
- -
-
Keyboard Shortcuts
-
- Shift - Fine-tune position +
+
+
+
+
Sprites
+
{{ sprites.length }}
-
- Space - Play/Pause animation +
+
Cell Size
+
{{ cellSize.width }}×{{ cellSize.height }}
-
- Esc - Close preview +
+
Zoom
+
{{ Math.round(zoomLevel * 100) }}%
-
-
- Ctrl - + - + -
- Zoom in -
-
-
- Ctrl - + - - -
- Zoom out -
-
-
- Ctrl - + - 0 -
- Reset zoom +
+
Columns
+
{{ columns }}
@@ -106,20 +75,18 @@ import { computed } from 'vue'; import { type Sprite, useSpritesheetStore } from '../composables/useSpritesheetStore'; import DropZone from './DropZone.vue'; - import SpriteList from './SpriteList.vue'; const store = useSpritesheetStore(); const sprites = computed(() => store.sprites.value); + const cellSize = computed(() => store.cellSize); + const zoomLevel = computed(() => store.zoomLevel.value); + const columns = computed(() => store.columns.value); const handleUpload = (sprites: Sprite[]) => { // The dropzone component handles adding sprites to the store // This is just for event handling if needed }; - const handleSpriteClick = (spriteId: string) => { - store.highlightSprite(spriteId); - }; - const openPreviewModal = () => { if (store.sprites.value.length === 0) { store.showNotification('Please add sprites first', 'error'); @@ -129,13 +96,11 @@ store.isModalOpen.value = true; }; - const confirmClearAll = () => { - if (confirm('Are you sure you want to clear all sprites?')) { - store.clearAllSprites(); - store.showNotification('All sprites cleared'); - } + const openSpritesModal = () => { + store.isSpritesModalOpen.value = true; }; - // Expose store methods directly - const { autoArrangeSprites, downloadSpritesheet, zoomIn, zoomOut, resetZoom } = store; + const openSettingsModal = () => { + store.isSettingsModalOpen.value = true; + }; diff --git a/src/components/SpritesModal.vue b/src/components/SpritesModal.vue new file mode 100644 index 0000000..1a0e016 --- /dev/null +++ b/src/components/SpritesModal.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/composables/useSpritesheetStore.ts b/src/composables/useSpritesheetStore.ts index 1fc1205..011550e 100644 --- a/src/composables/useSpritesheetStore.ts +++ b/src/composables/useSpritesheetStore.ts @@ -37,6 +37,8 @@ const draggedSprite = ref(null); const dragOffset = reactive({ x: 0, y: 0 }); const isShiftPressed = ref(false); const isModalOpen = ref(false); +const isSettingsModalOpen = ref(false); +const isSpritesModalOpen = ref(false); const zoomLevel = ref(1); // Default zoom level (1 = 100%) export function useSpritesheetStore() { @@ -446,6 +448,8 @@ export function useSpritesheetStore() { dragOffset, isShiftPressed, isModalOpen, + isSettingsModalOpen, + isSpritesModalOpen, animation, notification, zoomLevel,