UNPKG

anq-modal-form

Version:

A powerful, customizable modal form component for Quasar Framework and Vue 3 applications. Features include responsive design, dynamic form generation, validation, animations, and seamless integration with Quasar's design system.

185 lines (152 loc) 4.56 kB
# ANQ Modal Form A powerful, customizable modal form component for Quasar Framework and Vue 3 applications. This component provides a seamless way to handle forms within modals, featuring dynamic form generation, validation, and smooth animations. ## Features - 🎯 Dynamic form generation - ✅ Built-in form validation - 🎨 Seamless Quasar UI integration - 📱 Responsive design - ⚡ Vue 3 Composition API support - 🔒 TypeScript support - 🎭 Customizable animations - 🎨 Theme support - 🔄 Form state management - 📦 Easy to integrate ## Installation ```bash # Using npm npm install anq-modal-form # Using yarn yarn add anq-modal-form # Using pnpm pnpm add anq-modal-form ``` ## Quick Start ```vue <template> <div> <q-btn label="Open Form" color="primary" @click="modalRef?.show()" /> <AnqModalForm ref="modalRef" title="Form Title" @submit="onSubmit" @hide="onModalHide" > <template #content> <div class="q-pa-md"> <q-form @submit="onSubmit" class="q-gutter-md"> <q-input v-model="formData.field1" label="Field 1" :rules="[val => !!val || 'Field is required']" outlined /> <!-- Add more form fields as needed --> </q-form> </div> </template> </AnqModalForm> </div> </template> <script setup lang="ts"> import { ref, reactive } from 'vue'; import { AnqModalForm } from 'anq-modal-form'; const modalRef = ref<InstanceType<typeof AnqModalForm> | null>(null); const formData = reactive({ field1: '' }); const onSubmit = () => { console.log('Form submitted:', formData); modalRef.value?.hide(); }; const onModalHide = () => { console.log('Modal hidden'); }; </script> ``` ## Props | Prop | Type | Default | Description | |------|------|---------|-------------| | isLoading | Boolean | false | Shows loading state on the submit button | | formIsLoading | Boolean | false | Shows loading state on the form | | okLabel | String | 'Ok' | Label for the submit button | | cancelLabel | String | 'Cancel' | Label for the cancel button | | title | String | 'Title' | Modal title | | btnsColor | QBtnProps['color'] | 'primary' | Color for the buttons | | modalCardProps | { class?: string; style?: string } & QCard['$props'] | undefined | Additional props for the q-card component | ## Events | Event | Parameters | Description | |-------|------------|-------------| | submit | () | Emitted when form is submitted | | hide | () | Emitted when modal is hidden | ## Slots | Slot | Props | Description | |------|-------|-------------| | content | - | Main content of the modal | | close-icon-btn | color, disable | Custom close button | | cancel-btn | color, disable, label | Custom cancel button | | ok-btn | color, label, disable, loading | Custom submit button | ## Examples ### Basic Form with Validation ```vue <template> <AnqModalForm ref="modalRef" title="User Registration" @submit="onSubmit" > <template #content> <div class="q-pa-md"> <q-form @submit="onSubmit" class="q-gutter-md"> <q-input v-model="formData.email" label="Email" type="email" :rules="[ val => !!val || 'Email is required', val => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val) || 'Invalid email format' ]" outlined /> </q-form> </div> </template> </AnqModalForm> </template> ``` ### Form with Custom Buttons ```vue <template> <AnqModalForm ref="modalRef" title="Custom Form" @submit="onSubmit" > <template #ok-btn="{ color, label, disable, loading }"> <q-btn :color="color" :label="label" :disable="disable" :loading="loading" icon="check" /> </template> </AnqModalForm> </template> ``` ## Contributing Contributions are welcome! Please feel free to submit a Pull Request. 1. Fork the repository 2. Create your feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add some amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ## Author - **Aymane Nahji** - [GitHub](https://github.com/AymaneNahji) ## Support If you find this project helpful, please give it a ⭐️ on GitHub!