From d09949228556a3f3998b495a7cb707de4fbeceab Mon Sep 17 00:00:00 2001 From: Romain Hamel Date: Sat, 14 Jun 2025 18:52:55 +0200 Subject: [PATCH] feat(FormField): add `inline` variant --- .../app/pages/components/form-field.vue | 4 +- src/runtime/components/FormField.vue | 37 +++++++++++++------ src/theme/form-field.ts | 8 ++++ 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/playground/app/pages/components/form-field.vue b/playground/app/pages/components/form-field.vue index 5dc1764b..a5f64e12 100644 --- a/playground/app/pages/components/form-field.vue +++ b/playground/app/pages/components/form-field.vue @@ -16,7 +16,7 @@ const feedbacks = [
- +
@@ -41,6 +41,8 @@ const feedbacks = [ :size="size" label="Email" description="This is a description" + hint="This is a hint" + help="This is a help" name="email" > diff --git a/src/runtime/components/FormField.vue b/src/runtime/components/FormField.vue index f8d8a3ff..02322b0c 100644 --- a/src/runtime/components/FormField.vue +++ b/src/runtime/components/FormField.vue @@ -2,6 +2,7 @@ import type { AppConfig } from '@nuxt/schema' import theme from '#build/ui/form-field' import type { ComponentConfig } from '../types/utils' +import { createReusableTemplate } from '@vueuse/core' type FormField = ComponentConfig @@ -20,6 +21,8 @@ export interface FormFieldProps { help?: string error?: string | boolean hint?: string + + variant?: 'default' | 'inline' /** * @defaultValue 'md' */ @@ -61,6 +64,7 @@ const appConfig = useAppConfig() as FormField['AppConfig'] const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.formField || {}) })({ size: props.size, + variant: props.variant, required: props.required })) @@ -87,9 +91,28 @@ provide(formFieldInjectionKey, computed(() => ({ help: props.help, ariaId }) as FormFieldInjectedOptions)) + +const [DefineHintTemplate, ReuseHintTemplate] = createReusableTemplate() +const [DefineDescriptionTemplate, ReuseDescriptionTemplate] = createReusableTemplate()