UNPKG

vue-form-schema

Version:

Two ways drag and drop form creator for Vue.

126 lines (119 loc) 3.89 kB
# Vue Form Schema A two ways drag and drop form builder for Vue. ```js npm install --save-dev vue-form-schema ``` ### Using form schema This package comes in with a default `dark.css` and `light.css` theme and can always be overriden with your custom style. ```js import 'vue-form-schema/dist/dark.css'; import VueFormSchema from 'vue-form-schema'; export default { components: { VueFormSchema }, } ``` ### Template ```html <vue-form-schema></vue-form-schema> ``` ![Screen Shot](https://github.com/Ghostff/vue-form-builder/blob/master/ss.png) ### Schema Params ```js <vue-form-schema :config="{}" :import="[]" :template="{}"></vue-form-schema> ``` ### Import Buids a form based on previosly exported JSON. ```js <div id="app"> <vue-form-schema :import="from"></vue-form-schema> </div> <script> import 'vue-form-schema/dist/dark.css'; import VueFormSchema from 'vue-form-schema'; export default { components: { VueFormSchema }, data() { return { from: [{"type":"text","required":false,"name":"name","label":{"text":"Full Name","class":"input"},"placeholder":"Enter your full name","value":null,"pattern":null,"autofocus":null,"autocomplete":null,"min":"2","max":"6","useName":true,"options":null,"multiple":false,"additionalAttr":[],"cols":null,"rows":null,"maxlength":null,"readonly":null,"disabled":null,"buttonType":"button","content":"Content","class":"input"}] } } } </script> ``` #### Template The default component for each of the element type. Eg ```js // Given were are using something like vue bootstrap <vue-form-schema :template="{text: 'b-form-input'}"></vue-form-schema> ``` | Name | Default | | ------ | ------ | | text | input | | file | input | | email | input | | number | input| | hidden | input | | password | input | | range | input | | url | input | | radio | input | | checkbox | input | | textarea | textarea | | button | button | | select | `select: {select: 'select', option: 'option'}` | | countries | `select: {select: 'select', option: 'option'}` | | paragraph | p | | label | label | #### Config | Name | Description | Example | | ------ | ------ | ------ | | hide | Element attributes to hide |`hide: {text: ['required', 'name']}` | | class | Element attributes default class | `class: {select: 'input select class'}` | | action | Action attributes config | `action: {remove: {icon: 'X'}}` | | additional | Additional attributes config| `additional: {add: {class: 'add-new-attr-btn'}}` | | showLabel | Show label field. | `showLabel: true` | | container | Each element wrapper | `container: {tag: 'div', attributes: {class: 'vue-form-gen-element'}}` Default config: ```js { hide: {}, class: { select: 'input', countries: 'input', button: 'button', textarea: 'input', buttonType: { span: 'span', select: 'input' } }, action: { remove: {icon: '⊗', class: null, style: 'font-size:16px;cursor:pointer;color:red'}, move: {up: '⇧', down: '⇩', class: null, style: 'font-size:16px;cursor:pointer;'}, toggle: {show: '⊕', hide: '⊖', class: null, style: 'font-size:16px;cursor:pointer;'} }, additional: { inputs: { style: null, class: null }, add: { style: 'margin-top:10px' }, remove: { style: 'margin-top:10px' } }, showLabel: true, container: {tag: 'div', attributes: {class: 'vue-form-gen-element'}}, button: { html: {class: 'vue-form-gen-button', show: true, click: null, content: 'Extract Html'}, json: {class: 'vue-form-gen-button', show: true, click: null, content: 'Extract JSON'}, view: {class: 'vue-form-gen-button', show: true, click: null, content: 'View'}, } } ```