1.0.6 โ€ข Published 1 year ago

@chronicstone/vue-sweetforms v1.0.6

Weekly downloads
-
License
-
Repository
-
Last release
1 year ago

Key Features

  • ๐Ÿ“ Schema-based form definition

  • ๐Ÿ“ Auto grid-based templating, with breakpoint-based responsiveness control

  • โœ๏ธ Any type of field supported A lot of field types supported (text | textarea | password | number | slider | switch | select | radio | checkbox | checkboxGroup | date | time | datetime | datetimerange | daterange | month | year | file | array | object | customComponent)

  • ๐Ÿ“ Supports deeply nested data structures (objects & arrays)

  • ๐Ÿ”— Advanced cross-fields dependency system (conditional rendering, validation, field options, ...)

  • โœ”๏ธ Advanced validation based on Vuelidate

  • ๐ŸŒ™ Dark/Light mode

  • ๐ŸŽจ Highly customizable design

  • โš™๏ธ Supports multiple steps forms

  • โž• And many more !

Documentation and live examples

How To Use

1. Install the package

npm i -s @chronicstone/vue-sweetforms

2. Import styles in main.js

import "vue-sweetforms/dist/style.css"

3. Wrap your app with the FormProvider component

// App.vue

<script setup>
  import { FormProvider } from "vue-sweetforms"
</script>

<template>
  <FormProvider>
    <!-- Your app content here -->
    <router-view/>
  </FormProvider
</template>

4. Use the form API anywhere in your app :

<script setup>
  import { useSweetform } from "vue-sweetforms"
  import axios from "axios"
  
  const GetDogBreeds =  async () => await axios.get('https://dog.ceo/api/breeds/list/all').then(response => Object.keys(response.data.message).map(item => ({ label: item, value: item }))).catch(_ => [])
  
  const GetSubbreedByBreed = async ({ dogBreed }) => !dogBreed ? [] : await axios.get(`https://dog.ceo/api/breed/${dogBreed}/list`).then(response => response.data.message.map(item => ({ label: item, value: item }))).catch(err => [])
  
  const { createForm } = useSweetform()
  
  
  const OpenForm = async () => {
    const { isCompleted, formData } = await createForm({
      title: "Demonstration",
      gridSize: 6,
      fields: [
        { key: "firstName", type: "text", label: "First name", placeholder: "John", size: 2 },
        { key: "lastName", type: "text", label: "Last name", placeholder: "Doe", size: 2 },
        { key: "email", type: "text", label: "Email address", placeholder: "john.doe@gmail.com", size: 2 },
        { key: "dogBreed", type: "select", label: "Dog breed", placeholder: "Select a breed", options: GetDogBreeds, size: 3 },
        { key: "dogSubBreed", type: "select", label: "Dog sub-breed", placeholder: "Select a sub-breed", dependencies: ['dogBreed'], options: GetSubbreedByBreed, size: 3 }     
      ]
    })
  }
</script>

<template>
  <button @click="OpenForm">OPEN FORM</button>
</template>

Improvements roadmap

  • Improve / complete documentation
  • Migrate documentation to VitePress or IlesJs
  • Integrate documentation examples to docs app (w/ Vitepress or IlesJs)
  • Make Sweetform work as standalone component (If user don't want to use the function-based API)
  • Make optimizations to improve performance
  • Add full WAI-ARIA support
  • Improve styles customization API

Any PR is gladly welcomed and will be greatly appreciated.

Credits

This packages uses Naive UI component library internally to render most field types. Particular thanks to @TuSimple who was of a big help in how to immplement the underlying concepts behin

MIT


GitHub @ChronicStone ย ยทย 

1.0.6

1 year ago

1.0.5

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

0.6.12

2 years ago

0.6.11

2 years ago

0.6.14

2 years ago

0.6.13

2 years ago

0.7.1

2 years ago

0.7.0

2 years ago

1.0.2-rc1

1 year ago

1.0.2-rc0

1 year ago

0.5.10

2 years ago

0.5.11

2 years ago

0.6.7

2 years ago

0.6.6

2 years ago

0.6.9

2 years ago

0.6.8

2 years ago

0.6.10

2 years ago

0.5.4

2 years ago

0.5.3

2 years ago

0.5.6

2 years ago

0.5.5

2 years ago

0.5.2

2 years ago

0.5.8

2 years ago

0.5.7

2 years ago

0.5.9

2 years ago

0.6.3

2 years ago

0.6.2

2 years ago

0.6.5

2 years ago

0.6.4

2 years ago

0.6.1

2 years ago

0.6.0

2 years ago

0.5.0

2 years ago

0.5.1

2 years ago

0.4.15

2 years ago

0.4.13

2 years ago

0.4.14

2 years ago

0.4.11

2 years ago

0.4.12

2 years ago

0.4.9

2 years ago

0.4.8

2 years ago

0.4.7-rc0

2 years ago

0.4.10

2 years ago

0.4.7

2 years ago

0.4.6

2 years ago

0.4.2-rc0

2 years ago

0.4.5

2 years ago

0.4.4

2 years ago

0.4.1

2 years ago

0.4.0

2 years ago

0.4.3

2 years ago

0.4.2

2 years ago

0.3.6

2 years ago

0.3.5

2 years ago

0.3.2

2 years ago

0.3.4

2 years ago

0.3.3

2 years ago

0.3.1

2 years ago

0.3.0

2 years ago

0.2.3-beta.14

2 years ago

0.2.3-beta.13

2 years ago

0.2.3-beta.12

2 years ago

0.2.3-beta.11

2 years ago

0.2.3-beta.10

2 years ago

0.2.3-beta.9

2 years ago

0.2.3-beta.8

2 years ago

0.2.3-beta.7

2 years ago

0.2.3-beta.6

2 years ago

0.2.3-beta.5

2 years ago

0.2.3-beta.4

2 years ago

0.2.3-beta.3

2 years ago

0.2.3-beta.2

2 years ago

0.2.3-beta.1

2 years ago

0.2.3-beta.0

2 years ago

0.2.2

2 years ago

0.2.1-rc0

2 years ago

0.2.1

2 years ago

0.2.0-rc3

2 years ago

0.2.0-rc2

2 years ago

0.2.0-rc1

2 years ago

0.2.0-rc0

2 years ago

0.2.0

2 years ago

0.1.6-rc0

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4-rc0

2 years ago

0.1.4

2 years ago

0.1.3-rc0

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago