Skip to content

Examples

Contact Form

vue
<template>
  <VsCompactForm
    v-model:form="form"
    v-model:formValues="formValues"
    :schema="contactSchema"
    @handle-submit="submitContact"
  />
</template>

<script setup>
  import { ref } from 'vue';

  const form = ref({});
  const formValues = ref({});

  const contactSchema = [
    {
      name: 'firstName',
      type: 'text',
      label: 'First Name',
      rules: ['required'],
    },
    {
      name: 'lastName',
      type: 'text',
      label: 'Last Name',
      rules: ['required'],
    },
    {
      name: 'email',
      type: 'text',
      label: 'Email',
      rules: ['required', 'email'],
    },
    {
      name: 'phone',
      type: 'text',
      label: 'Phone',
      rules: [
        {
          type: 'regexp',
          pattern: /^\+?[\d\s\-\(\)]+$/,
          message: 'Invalid phone number format',
        },
      ],
    },
    {
      name: 'message',
      type: 'text',
      label: 'Message',
      rules: ['required'],
    },
  ];

  const submitContact = values => {
    console.log('Contact form submitted:', values);
    // Send to API, etc.
  };
</script>

User Registration Form

vue
<template>
  <VsCompactForm
    v-model:form="form"
    v-model:formValues="formValues"
    :schema="registrationSchema"
    @handle-submit="registerUser"
  />
</template>

<script setup>
  import { ref } from 'vue';

  const form = ref({});
  const formValues = ref({});

  const registrationSchema = [
    {
      name: 'personal',
      type: 'container',
      label: 'Personal Information',
      schema: [
        {
          name: 'username',
          type: 'text',
          label: 'Username',
          rules: ['required'],
        },
        {
          name: 'email',
          type: 'text',
          label: 'Email',
          rules: ['required', 'email'],
        },
        {
          name: 'password',
          type: 'text',
          label: 'Password',
          rules: [
            'required',
            {
              type: 'custom',
              function: '(value) => value.length >= 8',
              message: 'Password must be at least 8 characters',
            },
          ],
        },
      ],
    },
    {
      name: 'preferences',
      type: 'container',
      label: 'Preferences',
      schema: [
        {
          name: 'newsletter',
          type: 'switcher',
          label: 'Subscribe to newsletter',
        },
        {
          name: 'notifications',
          type: 'radio',
          label: 'Notification frequency',
          options: [
            { id: 'daily', text: 'Daily' },
            { id: 'weekly', text: 'Weekly' },
            { id: 'never', text: 'Never' },
          ],
        },
      ],
    },
  ];

  const registerUser = values => {
    console.log('User registration:', values);
    // Register user logic
  };
</script>