mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-29 18:52:19 +00:00
[feat] Add Vue input widgets
- WidgetInputText: Single-line text input with InputText component - WidgetTextarea: Multi-line text input with Textarea component - WidgetSlider: Numeric range input with Slider component - WidgetToggleSwitch: Boolean toggle with ToggleSwitch component
This commit is contained in:
30
src/components/graph/vueWidgets/WidgetInputText.vue
Normal file
30
src/components/graph/vueWidgets/WidgetInputText.vue
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<template>
|
||||||
|
<div class="flex flex-col gap-1">
|
||||||
|
<label v-if="widget.name" class="text-sm opacity-80">{{
|
||||||
|
widget.name
|
||||||
|
}}</label>
|
||||||
|
<InputText v-model="value" v-bind="filteredProps" :disabled="readonly" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import InputText from 'primevue/inputtext'
|
||||||
|
import { computed } from 'vue'
|
||||||
|
|
||||||
|
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
|
||||||
|
import {
|
||||||
|
INPUT_EXCLUDED_PROPS,
|
||||||
|
filterWidgetProps
|
||||||
|
} from '@/utils/widgetPropFilter'
|
||||||
|
|
||||||
|
const value = defineModel<string>({ required: true })
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
widget: SimplifiedWidget<string>
|
||||||
|
readonly?: boolean
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const filteredProps = computed(() =>
|
||||||
|
filterWidgetProps(props.widget.options, INPUT_EXCLUDED_PROPS)
|
||||||
|
)
|
||||||
|
</script>
|
||||||
30
src/components/graph/vueWidgets/WidgetSlider.vue
Normal file
30
src/components/graph/vueWidgets/WidgetSlider.vue
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<template>
|
||||||
|
<div class="flex flex-col gap-1">
|
||||||
|
<label v-if="widget.name" class="text-sm opacity-80">{{
|
||||||
|
widget.name
|
||||||
|
}}</label>
|
||||||
|
<Slider v-model="value" v-bind="filteredProps" :disabled="readonly" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import Slider from 'primevue/slider'
|
||||||
|
import { computed } from 'vue'
|
||||||
|
|
||||||
|
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
|
||||||
|
import {
|
||||||
|
STANDARD_EXCLUDED_PROPS,
|
||||||
|
filterWidgetProps
|
||||||
|
} from '@/utils/widgetPropFilter'
|
||||||
|
|
||||||
|
const value = defineModel<number>({ required: true })
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
widget: SimplifiedWidget<number>
|
||||||
|
readonly?: boolean
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const filteredProps = computed(() =>
|
||||||
|
filterWidgetProps(props.widget.options, STANDARD_EXCLUDED_PROPS)
|
||||||
|
)
|
||||||
|
</script>
|
||||||
30
src/components/graph/vueWidgets/WidgetTextarea.vue
Normal file
30
src/components/graph/vueWidgets/WidgetTextarea.vue
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<template>
|
||||||
|
<div class="flex flex-col gap-1">
|
||||||
|
<label v-if="widget.name" class="text-sm opacity-80">{{
|
||||||
|
widget.name
|
||||||
|
}}</label>
|
||||||
|
<Textarea v-model="value" v-bind="filteredProps" :disabled="readonly" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import Textarea from 'primevue/textarea'
|
||||||
|
import { computed } from 'vue'
|
||||||
|
|
||||||
|
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
|
||||||
|
import {
|
||||||
|
INPUT_EXCLUDED_PROPS,
|
||||||
|
filterWidgetProps
|
||||||
|
} from '@/utils/widgetPropFilter'
|
||||||
|
|
||||||
|
const value = defineModel<string>({ required: true })
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
widget: SimplifiedWidget<string>
|
||||||
|
readonly?: boolean
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const filteredProps = computed(() =>
|
||||||
|
filterWidgetProps(props.widget.options, INPUT_EXCLUDED_PROPS)
|
||||||
|
)
|
||||||
|
</script>
|
||||||
30
src/components/graph/vueWidgets/WidgetToggleSwitch.vue
Normal file
30
src/components/graph/vueWidgets/WidgetToggleSwitch.vue
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<template>
|
||||||
|
<div class="flex flex-col gap-1">
|
||||||
|
<label v-if="widget.name" class="text-sm opacity-80">{{
|
||||||
|
widget.name
|
||||||
|
}}</label>
|
||||||
|
<ToggleSwitch v-model="value" v-bind="filteredProps" :disabled="readonly" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import ToggleSwitch from 'primevue/toggleswitch'
|
||||||
|
import { computed } from 'vue'
|
||||||
|
|
||||||
|
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
|
||||||
|
import {
|
||||||
|
STANDARD_EXCLUDED_PROPS,
|
||||||
|
filterWidgetProps
|
||||||
|
} from '@/utils/widgetPropFilter'
|
||||||
|
|
||||||
|
const value = defineModel<boolean>({ required: true })
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
widget: SimplifiedWidget<boolean>
|
||||||
|
readonly?: boolean
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const filteredProps = computed(() =>
|
||||||
|
filterWidgetProps(props.widget.options, STANDARD_EXCLUDED_PROPS)
|
||||||
|
)
|
||||||
|
</script>
|
||||||
Reference in New Issue
Block a user