# Vue.js 2.0+ modal [![npm version](https://badge.fury.io/js/vue-js-modal.svg)](https://badge.fury.io/js/vue-js-modal) ##### Simple to use, highly customizable, mobile friendly Vue.js 2.0+ modal. http://vue-js-modal.yev.io/

Demo: http://vue-js-modal.yev.io/ ### Install ```bash npm install vue-js-modal --save ``` ### How to use Include plugin in your `main.js` file. ```javascript import vmodal from 'vue-js-modal' Vue.use(vmodal) ``` Create modal: ```html hello, world! ``` Call it from anywhere in the app: ```javascript methods: { show () { this.$modal.show('hello-world'); }, hide () { this.$modal.hide('hello-world'); } } ``` ### SSR Include plugin in your `nuxt.config.js` file: ```javascript module.exports = { plugins: ['~plugins/vue-js-modal'] } ``` And your `plugins/vue-js-modal.js` will look like: ```javascript import Vue from 'vue' import VModal from 'vue-js-modal/dist/ssr.index' Vue.use(VModal) ``` For full demo please look at `demo/server_side_rendering` ### Properties | Name | Required | Type | Default | Description | | --- | --- | --- | --- | --- | | name | true | [String, Number] | | Name of the modal | | delay | false | Number | 0 | Delay between showing overlay and actual modal box | | resizable | false | Boolean | false | If true, allows to resize modal window, keeping it in the center of the screen. | | adaptive | false | Boolean | false | If true, modal box will try to adapt to the window size | | draggable | false | [Boolean, String]| false | If true, modal box will be draggable. | | transition| false | String | | Transition name | | classes | false | [String, Array] | 'vue--modal'| Classes that will be applied to the actual modal box, if not specified, the default 'vue--modal' class will be applied | | width | false | Number | 600 | | | height | false | Number | 300 | | | minWidth | false | Number | 0 | The minimum width to which modal can be resized | | minHeight | false | Number | 0 | The minimum height to which modal can be resized | | pivotX | false | Number (0 - 1.0) | 0.5 | Horizontal position in %, default is 0.5 (meaning that modal box will be in the middle (50% from top) of the window | | pivotY | false | Number (0 - 1.0) | 0.5 | | ### Events | Name | Description | | --- | --- | | before-open | Emits while modal is still invisible, but was added to the DOM | | opened | Emits after modal became visible or started transition | | before-close | Emits before modal is going to be closed. Can be stopped from the event listener calling `event.stop()` (example: you are creating a text editor, and want to stop closisng and ask user to correct mistakes if text is not valid) | closed | Emits right before modal is destoyed | Example: ```vue ``` This example, initializes `time` variable every time the modal is being opened. And then forbits closing it for the next 5000 ms ### Other #### Close button If you want to have a Close (x) button in the top-right corner, you can use "top-right" slot for it. There is deliberately no predefined Close button style - you will have to implement/use your own button. Example: ```vue ``` #### Draggable handler Draggable property can accept not only `Boolean` but also `String` paramenters. With `String` value, you can specify a CSS selector to the element which will be a "handler" for dragging. Example: ```vue
DRAG ME HERE
    Hello, 🌎!
``` ### Developers To run an example: ```sh # Clone repo git clone https://github.com/euvl/vue-js-modal.git # Build main library cd vue-js-modal npm install npm run build # Build and run demo cd demo npm install npm run dev ```