diff --git a/src/App.vue b/src/App.vue index e83b8a7..593e77b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -85,5 +85,3 @@ } }; - - diff --git a/src/components/SpriteCanvas.vue b/src/components/SpriteCanvas.vue index 1c0ad25..b4214dc 100644 --- a/src/components/SpriteCanvas.vue +++ b/src/components/SpriteCanvas.vue @@ -33,32 +33,7 @@ -
-
-

Copy sprite to frame

- -
-
- - -
- -
- - -
-
- -
- - -
-
-
+
@@ -206,6 +181,7 @@ import { useFileDrop } from '@/composables/useFileDrop'; import { useGridMetrics } from '@/composables/useGridMetrics'; import { useBackgroundStyles } from '@/composables/useBackgroundStyles'; + import CopyToFrameModal from './utilities/CopyToFrameModal.vue'; import type { Layer } from '@/types/sprites'; @@ -302,15 +278,9 @@ // Copy to frame modal state const showCopyToFrameModal = ref(false); - const copyTargetFrame = ref(0); const copyTargetLayerId = ref(props.activeLayerId); const copySpriteId = ref(null); - const maxFrameCount = computed(() => { - const maxLen = Math.max(1, ...props.layers.map(l => l.sprites.length)); - return maxLen + 1; // Allow copying to one frame beyond current max - }); - // Clear selection when toggling multi-select mode watch( () => props.isMultiSelectMode, @@ -556,7 +526,6 @@ if (contextMenuSpriteId.value) { copySpriteId.value = contextMenuSpriteId.value; copyTargetLayerId.value = props.activeLayerId; - copyTargetFrame.value = 0; showCopyToFrameModal.value = true; showContextMenu.value = false; } @@ -567,9 +536,9 @@ copySpriteId.value = null; }; - const confirmCopyToFrame = () => { + const confirmCopyToFrame = (targetLayerId: string, targetFrameIndex: number) => { if (copySpriteId.value) { - emit('copySpriteToFrame', copySpriteId.value, copyTargetLayerId.value, copyTargetFrame.value); + emit('copySpriteToFrame', copySpriteId.value, targetLayerId, targetFrameIndex); closeCopyToFrameModal(); } }; diff --git a/src/components/SpritePreview.vue b/src/components/SpritePreview.vue index 87157c8..eba2ecf 100644 --- a/src/components/SpritePreview.vue +++ b/src/components/SpritePreview.vue @@ -24,32 +24,7 @@
-
-
-

Copy Sprite to Frame

- -
-
- - -
- -
- - -
-
- -
- - -
-
-
+
@@ -308,6 +283,7 @@ import { useAnimationFrames } from '@/composables/useAnimationFrames'; import { useGridMetrics } from '@/composables/useGridMetrics'; import { useBackgroundStyles } from '@/composables/useBackgroundStyles'; + import CopyToFrameModal from './utilities/CopyToFrameModal.vue'; const props = defineProps<{ layers: Layer[]; @@ -373,14 +349,8 @@ // Copy to frame modal state const showCopyToFrameModal = ref(false); - const copyTargetFrame = ref(0); const copyTargetLayerId = ref(props.activeLayerId); - const maxFrameCount = computed(() => { - const maxLen = Math.max(1, ...props.layers.map(l => l.sprites.length)); - return maxLen + 1; // Allow copying to one frame beyond current max - }); - // Drag and drop for new sprites const onDragOver = () => { isDragOver.value = true; @@ -713,7 +683,6 @@ const openCopyToFrameModal = () => { if (contextMenuSpriteId.value) { copyTargetLayerId.value = contextMenuLayerId.value || props.activeLayerId; - copyTargetFrame.value = 0; showCopyToFrameModal.value = true; showContextMenu.value = false; } @@ -723,9 +692,9 @@ showCopyToFrameModal.value = false; }; - const confirmCopyToFrame = () => { + const confirmCopyToFrame = (targetLayerId: string, targetFrameIndex: number) => { if (contextMenuSpriteId.value) { - emit('copySpriteToFrame', contextMenuSpriteId.value, copyTargetLayerId.value, copyTargetFrame.value); + emit('copySpriteToFrame', contextMenuSpriteId.value, targetLayerId, targetFrameIndex); closeCopyToFrameModal(); contextMenuSpriteId.value = null; } diff --git a/src/components/auth/AuthModal.vue b/src/components/auth/AuthModal.vue index b5566b0..040add4 100644 --- a/src/components/auth/AuthModal.vue +++ b/src/components/auth/AuthModal.vue @@ -1,58 +1,52 @@ diff --git a/src/components/utilities/Modal.vue b/src/components/utilities/Modal.vue index 0fbc709..de31098 100644 --- a/src/components/utilities/Modal.vue +++ b/src/components/utilities/Modal.vue @@ -10,31 +10,39 @@ width: isFullScreen ? '100%' : `${size.width}px`, height: isFullScreen ? '100%' : `${size.height}px`, }" - class="bg-white dark:bg-gray-800 rounded-2xl border-2 border-gray-300 dark:border-gray-700 shadow-xl flex flex-col fixed z-50 transition-colors duration-300" + class="bg-white dark:bg-gray-800 rounded-2xl border border-gray-200 dark:border-gray-700 shadow-2xl flex flex-col fixed z-50 transition-colors duration-300" :class="{ 'rounded-none border-0': isFullScreen, 'select-none': isDragging }" > -
-

{{ title }}

-
- -
-
+
-
- - +
+ +
@@ -49,6 +57,7 @@ title: string; initialWidth?: number; initialHeight?: number; + noPadding?: boolean; }>(); const emit = defineEmits<{