From 82a8aba7042b4ea47bddf51d9f71ac9911d00d3a Mon Sep 17 00:00:00 2001 From: Miguel C Date: Mon, 3 Mar 2025 09:54:16 -0600 Subject: [PATCH] [Feature] Add InputKnob component and integrate with FormItem (#2821) --- src/components/common/FormItem.vue | 8 +++ src/components/common/InputKnob.vue | 89 +++++++++++++++++++++++++++++ src/types/settingTypes.ts | 1 + 3 files changed, 98 insertions(+) create mode 100644 src/components/common/InputKnob.vue diff --git a/src/components/common/FormItem.vue b/src/components/common/FormItem.vue index 49805a02d..7acca557a 100644 --- a/src/components/common/FormItem.vue +++ b/src/components/common/FormItem.vue @@ -39,6 +39,7 @@ import { type Component, markRaw } from 'vue' import CustomFormValue from '@/components/common/CustomFormValue.vue' import FormColorPicker from '@/components/common/FormColorPicker.vue' import FormImageUpload from '@/components/common/FormImageUpload.vue' +import InputKnob from '@/components/common/InputKnob.vue' import InputSlider from '@/components/common/InputSlider.vue' import UrlInput from '@/components/common/UrlInput.vue' import { FormItem } from '@/types/settingTypes' @@ -91,6 +92,8 @@ function getFormComponent(item: FormItem): Component { return InputNumber case 'slider': return InputSlider + case 'knob': + return InputKnob case 'combo': return Select case 'image': @@ -111,6 +114,11 @@ function getFormComponent(item: FormItem): Component { @apply w-20; } +.form-input :deep(.input-knob) .p-inputnumber input, +.form-input :deep(.input-knob) .knob-part { + @apply w-32; +} + .form-input :deep(.p-inputtext), .form-input :deep(.p-select) { @apply w-44; diff --git a/src/components/common/InputKnob.vue b/src/components/common/InputKnob.vue new file mode 100644 index 000000000..60d0ce0cc --- /dev/null +++ b/src/components/common/InputKnob.vue @@ -0,0 +1,89 @@ + + + diff --git a/src/types/settingTypes.ts b/src/types/settingTypes.ts index dc6a8c469..e1104943e 100644 --- a/src/types/settingTypes.ts +++ b/src/types/settingTypes.ts @@ -4,6 +4,7 @@ export type SettingInputType = | 'boolean' | 'number' | 'slider' + | 'knob' | 'combo' | 'text' | 'image'