mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-30 03:01:54 +00:00
[backport cloud/1.35] Feat: Fixed option for control after/before generate (#7663)
Backport of #7517 to `cloud/1.35` Automatically created by backport workflow. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7663-backport-cloud-1-35-Feat-Fixed-option-for-control-after-before-generate-2cf6d73d3650817e9bd9cfe4c05df3c4) by [Unito](https://www.unito.io) Co-authored-by: AustinMroz <austin@comfy.org>
This commit is contained in:
@@ -2032,6 +2032,8 @@
|
|||||||
"incrementDesc": "Adds 1 to the value number",
|
"incrementDesc": "Adds 1 to the value number",
|
||||||
"decrement": "Decrement Value",
|
"decrement": "Decrement Value",
|
||||||
"decrementDesc": "Subtracts 1 from the value number",
|
"decrementDesc": "Subtracts 1 from the value number",
|
||||||
|
"fixed": "Fixed Value",
|
||||||
|
"fixedDesc": "Leaves value unchanged",
|
||||||
"editSettings": "Edit control settings"
|
"editSettings": "Edit control settings"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import Button from 'primevue/button'
|
|
||||||
import Popover from 'primevue/popover'
|
import Popover from 'primevue/popover'
|
||||||
import ToggleSwitch from 'primevue/toggleswitch'
|
import RadioButton from 'primevue/radiobutton'
|
||||||
import { computed, ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
|
|
||||||
import { useSettingStore } from '@/platform/settings/settingStore'
|
import { useSettingStore } from '@/platform/settings/settingStore'
|
||||||
import { useDialogService } from '@/services/dialogService'
|
|
||||||
|
|
||||||
import { NumberControlMode } from '../composables/useStepperControl'
|
import { NumberControlMode } from '../composables/useStepperControl'
|
||||||
|
|
||||||
@@ -19,7 +17,6 @@ type ControlOption = {
|
|||||||
|
|
||||||
const popover = ref()
|
const popover = ref()
|
||||||
const settingStore = useSettingStore()
|
const settingStore = useSettingStore()
|
||||||
const dialogService = useDialogService()
|
|
||||||
|
|
||||||
const toggle = (event: Event) => {
|
const toggle = (event: Event) => {
|
||||||
popover.value.toggle(event)
|
popover.value.toggle(event)
|
||||||
@@ -40,10 +37,10 @@ const controlOptions: ControlOption[] = [
|
|||||||
] as ControlOption[])
|
] as ControlOption[])
|
||||||
: []),
|
: []),
|
||||||
{
|
{
|
||||||
mode: NumberControlMode.RANDOMIZE,
|
mode: NumberControlMode.FIXED,
|
||||||
icon: 'icon-[lucide--shuffle]',
|
icon: 'icon-[lucide--pencil-off]',
|
||||||
title: 'randomize',
|
title: 'fixed',
|
||||||
description: 'randomizeDesc'
|
description: 'fixedDesc'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
mode: NumberControlMode.INCREMENT,
|
mode: NumberControlMode.INCREMENT,
|
||||||
@@ -56,6 +53,12 @@ const controlOptions: ControlOption[] = [
|
|||||||
text: '-1',
|
text: '-1',
|
||||||
title: 'decrement',
|
title: 'decrement',
|
||||||
description: 'decrementDesc'
|
description: 'decrementDesc'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
mode: NumberControlMode.RANDOMIZE,
|
||||||
|
icon: 'icon-[lucide--shuffle]',
|
||||||
|
title: 'randomize',
|
||||||
|
description: 'randomizeDesc'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -63,27 +66,7 @@ const widgetControlMode = computed(() =>
|
|||||||
settingStore.get('Comfy.WidgetControlMode')
|
settingStore.get('Comfy.WidgetControlMode')
|
||||||
)
|
)
|
||||||
|
|
||||||
const props = defineProps<{
|
const controlMode = defineModel<NumberControlMode>()
|
||||||
controlMode: NumberControlMode
|
|
||||||
}>()
|
|
||||||
|
|
||||||
const emit = defineEmits<{
|
|
||||||
'update:controlMode': [mode: NumberControlMode]
|
|
||||||
}>()
|
|
||||||
|
|
||||||
const handleToggle = (mode: NumberControlMode) => {
|
|
||||||
if (props.controlMode === mode) return
|
|
||||||
emit('update:controlMode', mode)
|
|
||||||
}
|
|
||||||
|
|
||||||
const isActive = (mode: NumberControlMode) => {
|
|
||||||
return props.controlMode === mode
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleEditSettings = () => {
|
|
||||||
popover.value.hide()
|
|
||||||
dialogService.showSettingsDialog()
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -147,30 +130,14 @@ const handleEditSettings = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ToggleSwitch
|
<RadioButton
|
||||||
:model-value="isActive(option.mode)"
|
v-model="controlMode"
|
||||||
class="flex-shrink-0"
|
class="flex-shrink-0"
|
||||||
@update:model-value="
|
:input-id="option.mode"
|
||||||
(v) =>
|
:value="option.mode"
|
||||||
v
|
|
||||||
? handleToggle(option.mode)
|
|
||||||
: handleToggle(NumberControlMode.FIXED)
|
|
||||||
"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="border-t border-border-subtle"></div>
|
|
||||||
<Button
|
|
||||||
class="w-full bg-secondary-background hover:bg-secondary-background-hover border-0 rounded-lg p-2 text-sm"
|
|
||||||
@click="handleEditSettings"
|
|
||||||
>
|
|
||||||
<div class="flex items-center justify-center gap-1">
|
|
||||||
<i class="pi pi-cog text-xs text-muted-foreground" />
|
|
||||||
<span class="font-normal text-base-foreground">{{
|
|
||||||
$t('widgets.numberControl.editSettings')
|
|
||||||
}}</span>
|
|
||||||
</div>
|
|
||||||
</Button>
|
|
||||||
</div>
|
</div>
|
||||||
</Popover>
|
</Popover>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ const buttonTooltip = computed(() => {
|
|||||||
<span class="pi pi-minus text-sm" />
|
<span class="pi pi-minus text-sm" />
|
||||||
</template>
|
</template>
|
||||||
</InputNumber>
|
</InputNumber>
|
||||||
<div class="absolute top-5 right-8 h-4 w-7 -translate-y-4/5">
|
<div class="absolute top-5 right-8 h-4 w-7 -translate-y-4/5 flex">
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
</WidgetLayoutField>
|
</WidgetLayoutField>
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import Button from 'primevue/button'
|
import Button from 'primevue/button'
|
||||||
import { defineAsyncComponent, ref } from 'vue'
|
import { defineAsyncComponent, ref, watch } from 'vue'
|
||||||
|
|
||||||
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
|
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
|
||||||
|
|
||||||
import type { NumberControlMode } from '../composables/useStepperControl'
|
|
||||||
import { useStepperControl } from '../composables/useStepperControl'
|
import { useStepperControl } from '../composables/useStepperControl'
|
||||||
import WidgetInputNumberInput from './WidgetInputNumberInput.vue'
|
import WidgetInputNumberInput from './WidgetInputNumberInput.vue'
|
||||||
|
|
||||||
@@ -32,10 +31,7 @@ const { controlMode, controlButtonIcon } = useStepperControl(
|
|||||||
props.widget.controlWidget!.value
|
props.widget.controlWidget!.value
|
||||||
)
|
)
|
||||||
|
|
||||||
const setControlMode = (mode: NumberControlMode) => {
|
watch(controlMode, props.widget.controlWidget!.update)
|
||||||
controlMode.value = mode
|
|
||||||
props.widget.controlWidget!.update(mode)
|
|
||||||
}
|
|
||||||
|
|
||||||
const togglePopover = (event: Event) => {
|
const togglePopover = (event: Event) => {
|
||||||
popover.value.toggle(event)
|
popover.value.toggle(event)
|
||||||
@@ -58,10 +54,6 @@ const togglePopover = (event: Event) => {
|
|||||||
<i :class="`${controlButtonIcon} text-blue-100 text-xs`" />
|
<i :class="`${controlButtonIcon} text-blue-100 text-xs`" />
|
||||||
</Button>
|
</Button>
|
||||||
</WidgetInputNumberInput>
|
</WidgetInputNumberInput>
|
||||||
<NumberControlPopover
|
<NumberControlPopover ref="popover" v-model="controlMode" />
|
||||||
ref="popover"
|
|
||||||
:control-mode
|
|
||||||
@update:control-mode="setControlMode"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
Reference in New Issue
Block a user