Home

Awesome

<h1 style="color: red">DEPRECATED PROJECT, NOW REFER TO https://github.com/ChronicStone/vue-sweettools/</h1> <h1 align="center"> <a><img src="https://github.com/ChronicStone/sweetforms/blob/main/logo_sweetforms.svg" alt="Vue SweetForms" width="200"></a> </h1> <h4 align="center">A Vue 3 package based on <a href="https://github.com/TuSimple/naive-ui" target="_blank">Naive UI</a> that provides highly customizable promised-based popup forms, with features like form advanced validation, optional http request handling, multiple-steps, and many more !</h4> <p align="center"> <a href="https://badge.fury.io/js/@chronicstone%2Fvue-sweetforms"><img src="https://badge.fury.io/js/@chronicstone%2Fvue-sweetforms.svg" alt="npm version" height="18"></a> </p> <p align="center"> <a href="#key-features">Key Features</a> โ€ข <a href="#how-to-use">How To Use</a> โ€ข <a href="#documentation-and-live-examples">Documentation & Live Examples</a> โ€ข <a href="#improvements-roadmap">Improvements roadmap</a> โ€ข <a href="#credits">Credits</a> </p>

Key Features

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

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 ย ยทย