mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-30 03:01:54 +00:00
Drag/drop support for linear mode
Causes some border woes which need fixing
This commit is contained in:
37
src/renderer/extensions/linearMode/DropZone.vue
Normal file
37
src/renderer/extensions/linearMode/DropZone.vue
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
import { cn } from '@/utils/tailwindUtil'
|
||||||
|
|
||||||
|
defineProps<{
|
||||||
|
onDragOver?: (e: DragEvent) => boolean
|
||||||
|
onDragDrop?: (e: DragEvent) => Promise<boolean> | boolean
|
||||||
|
dropIndicator?: { label?: string; iconClass?: string }
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const canAcceptDrop = ref(false)
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<drop-wrapper
|
||||||
|
v-if="onDragOver && onDragDrop"
|
||||||
|
:class="cn(canAcceptDrop && 'ring-1 ring-primary-500 bg-primary-500/10')"
|
||||||
|
@dragover.prevent="(e: DragEvent) => (canAcceptDrop = onDragOver!(e))"
|
||||||
|
@dragleave="canAcceptDrop = false"
|
||||||
|
@drop.stop.prevent="
|
||||||
|
(e: DragEvent) => {
|
||||||
|
onDragDrop!(e)
|
||||||
|
canAcceptDrop = false
|
||||||
|
}
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<slot />
|
||||||
|
<div
|
||||||
|
v-if="dropIndicator"
|
||||||
|
class="flex flex-col items-center align-center border-dashed rounded-lg border grow-1 w-full border-border-subtle my-3"
|
||||||
|
>
|
||||||
|
<span v-if="dropIndicator.label" v-text="dropIndicator.label" />
|
||||||
|
<i v-if="dropIndicator.iconClass" :class="dropIndicator.iconClass" />
|
||||||
|
</div>
|
||||||
|
</drop-wrapper>
|
||||||
|
<slot v-else />
|
||||||
|
</template>
|
||||||
@@ -35,6 +35,7 @@ import { useTelemetry } from '@/platform/telemetry'
|
|||||||
import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore'
|
import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore'
|
||||||
import type { ComfyWorkflowJSON } from '@/platform/workflow/validation/schemas/workflowSchema'
|
import type { ComfyWorkflowJSON } from '@/platform/workflow/validation/schemas/workflowSchema'
|
||||||
import { useCanvasStore } from '@/renderer/core/canvas/canvasStore'
|
import { useCanvasStore } from '@/renderer/core/canvas/canvasStore'
|
||||||
|
import DropZone from '@/renderer/extensions/linearMode/DropZone.vue'
|
||||||
import NodeWidgets from '@/renderer/extensions/vueNodes/components/NodeWidgets.vue'
|
import NodeWidgets from '@/renderer/extensions/vueNodes/components/NodeWidgets.vue'
|
||||||
import WidgetInputNumberInput from '@/renderer/extensions/vueNodes/widgets/components/WidgetInputNumber.vue'
|
import WidgetInputNumberInput from '@/renderer/extensions/vueNodes/widgets/components/WidgetInputNumber.vue'
|
||||||
import { app } from '@/scripts/app'
|
import { app } from '@/scripts/app'
|
||||||
@@ -84,7 +85,9 @@ const nodeDatas = computed(() => {
|
|||||||
mode: 0,
|
mode: 0,
|
||||||
selected: false,
|
selected: false,
|
||||||
executing: false,
|
executing: false,
|
||||||
widgets
|
widgets,
|
||||||
|
onDragOver: node.onDragOver,
|
||||||
|
onDragDrop: node.onDragDrop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return graphNodes.value
|
return graphNodes.value
|
||||||
@@ -573,12 +576,17 @@ onKeyStroke('ArrowUp', gotoPreviousOutput)
|
|||||||
<linear-widgets
|
<linear-widgets
|
||||||
class="grow-1 justify-start flex-col overflow-y-auto contain-size *:max-h-100 flex"
|
class="grow-1 justify-start flex-col overflow-y-auto contain-size *:max-h-100 flex"
|
||||||
>
|
>
|
||||||
<NodeWidgets
|
<DropZone
|
||||||
v-for="nodeData of nodeDatas"
|
v-for="nodeData of nodeDatas"
|
||||||
:key="nodeData.id"
|
:key="nodeData.id"
|
||||||
:node-data
|
:on-drag-over="nodeData.onDragOver"
|
||||||
class="border-b-1 border-node-component-border pt-1 pb-2 last:border-none **:[.col-span-2]:grid-cols-1 not-has-[textarea]:flex-0"
|
:on-drag-drop="nodeData.onDragDrop"
|
||||||
/>
|
>
|
||||||
|
<NodeWidgets
|
||||||
|
:node-data
|
||||||
|
class="border-b-1 border-node-component-border pt-1 pb-2 last:border-none **:[.col-span-2]:grid-cols-1 not-has-[textarea]:flex-0"
|
||||||
|
/>
|
||||||
|
</DropZone>
|
||||||
</linear-widgets>
|
</linear-widgets>
|
||||||
<linear-run-button
|
<linear-run-button
|
||||||
class="p-4 pb-6 border-t border-node-component-border"
|
class="p-4 pb-6 border-t border-node-component-border"
|
||||||
|
|||||||
Reference in New Issue
Block a user