diff --git a/docs/gitbook/Advanced/AJAX.md b/docs/gitbook/Advanced/AJAX.md
index e69de29..522945c 100644
--- a/docs/gitbook/Advanced/AJAX.md
+++ b/docs/gitbook/Advanced/AJAX.md
@@ -0,0 +1,60 @@
+## AJAX Remote Option Loading
+
+[](codepen://sagalbot/POMeOX?height=400)
+
+The `onSearch` prop allows you to load options via ajax in a parent component
+when the search text is updated. It is invoked with two parameters, `search` & `loading`.
+
+```js
+/**
+* Accepts a callback function that will be run
+* when the search text changes. The callback
+* will be invoked with these parameters:
+*
+* @param {search} String Current search text
+* @param {loading} Function Toggle loading class
+*/
+onSearch: {
+ type: Function,
+ default: false
+},
+```
+
+The `loading` function accepts a boolean parameter that will be assigned
+to the vue-select internal `loading` property. Call `loading(true)` to set the
+`loading` property to `true` - toggling the loading spinner. After your
+asynchronous operation completes, call `loading(false)` to toggle it off.
+
+#### Disabling Filtering
+
+When loading server side options, it can be useful to disable the
+client side filtering. Use the `filterable` prop to disable filtering.
+
+```js
+/**
+ * When true, existing options will be filtered
+ * by the search text. Should not be used in
+ * conjunction with taggable.
+ *
+ * @type {Boolean}
+ */
+filterable: {
+ type: Boolean,
+ default: true
+},
+```
+
+#### Loading Spinner
+
+Vue Select includes a default loading spinner that appears when the loading class is present. The `spinner` slot allows you to implement your own spinner.
+
+```html
+
Loading...
+```
+
+#### Library Agnostic
+
+Since Vue.js does not ship with ajax functionality as part of the core library, it's up to you to process the ajax requests in your parent component.
+
+I recommend using [axios](https://github.com/axios/axios) for creating your applications HTTP layer,
+or [`fetch()`](https://github.com/github/fetch) for simple requests.
diff --git a/docs/gitbook/Advanced/Templating.md b/docs/gitbook/Advanced/Templating.md
index e69de29..03d18fa 100644
--- a/docs/gitbook/Advanced/Templating.md
+++ b/docs/gitbook/Advanced/Templating.md
@@ -0,0 +1,17 @@
+#### Scoped Slot `option`
+
+vue-select provides the scoped `option` slot in order to create custom dropdown templates.
+
+```html
+
+
+
+ {{ option.title }}
+
+
+```
+
+Using the `option` slot with `slot-scope="option"` gives the
+provides the current option variable to the template.
+
+[](codepen://sagalbot/NXBwYG?height=500)
\ No newline at end of file
diff --git a/docs/gitbook/Advanced/Validation.md b/docs/gitbook/Advanced/Validation.md
new file mode 100644
index 0000000..220a5a4
--- /dev/null
+++ b/docs/gitbook/Advanced/Validation.md
@@ -0,0 +1 @@
+[](codepen://sagalbot/zZQJKW?height=600)
\ No newline at end of file
diff --git a/docs/gitbook/Advanced/Vuex.md b/docs/gitbook/Advanced/Vuex.md
index c638457..73c1156 100644
--- a/docs/gitbook/Advanced/Vuex.md
+++ b/docs/gitbook/Advanced/Vuex.md
@@ -1,18 +1,16 @@
-### Change Event Vuex Compatibility
-
-`vue-select` provides a `change` event. This function is passed the currently selected value(s) as it's only parameter.
-
-This is very useful when integrating with Vuex, as it will allow your to trigger an action to update your vuex state object. Choose a callback and see it in action.
+### Using the `input` Event with Vuex
+`vue-select` emits the `input` event any time the internal `value` is changed.
+This is the same event that allow the for the `v-model` syntax. When using
+Vuex for state management, you can use the `input` event to dispatch an
+action, or trigger a mutation.
```html
-
-```
+
+```
-```js
-methods: {
- consoleCallback(val) {
- console.dir(JSON.stringify(val))
- },
-}
-```
+[](codepen://sagalbot/aJQJyp?height=500)
\ No newline at end of file
diff --git a/docs/gitbook/Ajax/Ajax.md b/docs/gitbook/Ajax/Ajax.md
index 0cef7f5..e69de29 100644
--- a/docs/gitbook/Ajax/Ajax.md
+++ b/docs/gitbook/Ajax/Ajax.md
@@ -1,31 +0,0 @@
-## AJAX Remote Option Loading
-
-
-The `onSearch` prop allows you to load options via ajax in a parent component when the search text is updated. It is invoked with two parameters, `search` & `loading`.
-
-#### onSearch Callback Parameters search, loading
-
-`search` is a string containing the current search text. `loading` is a function that accepts a boolean value, and is used to toggle the 'loading' class on the top-level vue-select wrapper.
-
-#### Loading Spinner
-
-Vue Select includes a default loading spinner that appears when the loading class is present. The `spinner` slot allows you to implement your own spinner.
-
-
-
-
Loading...
-
-#### Debounce Input
-
-Vue Select also accepts a `debounce` prop that can be used to prevent `onSearch` from being called until input has completed.
-
-#### Library Agnostic
-
-Since Vue.js does not ship with ajax functionality as part of the core library, it's up to you to process the ajax requests in your parent component.
-
-
-#### Example GitHub API
-
-In this example, [Vue Resource](https://github.com/vuejs/vue-resource) is used to access the [GitHub API](https://developer.github.com/v3/).
-
-
diff --git a/docs/gitbook/Ajax/AjaxExample.md b/docs/gitbook/Ajax/AjaxExample.md
deleted file mode 100644
index 27ceaab..0000000
--- a/docs/gitbook/Ajax/AjaxExample.md
+++ /dev/null
@@ -1,28 +0,0 @@
-```html
-
-
-```
-```js
-data() {
- return {
- options: null
- }
-},
-methods: {
- getOptions(search, loading) {
- loading(true)
- this.$http.get('https://api.github.com/search/repositories', {
- q: search
- }).then(resp => {
- this.options = resp.data.items
- loading(false)
- })
- }
-}
-```
diff --git a/docs/gitbook/Ajax/AjaxProps.md b/docs/gitbook/Ajax/AjaxProps.md
index 7e1aa61..e69de29 100644
--- a/docs/gitbook/Ajax/AjaxProps.md
+++ b/docs/gitbook/Ajax/AjaxProps.md
@@ -1,24 +0,0 @@
-```js
-/**
-* Accept a callback function that will be run
-* when the search text changes. The callback
-* will be invoked with these parameters:
-
-* @param {search} String Current search text
-* @param {loading} Function(bool) Toggle loading class
-*/
-onSearch: {
- type: Function,
- default: false
-},
-
-/**
-* Milliseconds to wait before invoking this.onSearch().
-* Used to prevent sending an AJAX request until input
-* has completed.
-*/
-debounce: {
- type: Number,
- default: 0
-}
-```
diff --git a/docs/gitbook/Api/Props.md b/docs/gitbook/Api/Props.md
index 0c5ca26..740d04d 100644
--- a/docs/gitbook/Api/Props.md
+++ b/docs/gitbook/Api/Props.md
@@ -1,6 +1,290 @@
-{%
- includeCsv
- src="./props.csv",
- linkSrc="false",
- useHeader="true"
- %}{% endincludeCsv %}
\ No newline at end of file
+## Select
+
+```js
+/**
+ * Contains the currently selected value. Very similar to a
+ * `value` attribute on an . You can listen for changes
+ * using 'change' event using v-on
+ * @type {Object||String||null}
+ */
+value: {
+ default: null
+},
+
+/**
+ * An array of strings or objects to be used as dropdown choices.
+ * If you are using an array of objects, vue-select will look for
+ * a `label` key (ex. [{label: 'This is Foo', value: 'foo'}]). A
+ * custom label key can be set with the `label` prop.
+ * @type {Array}
+ */
+options: {
+ type: Array,
+ default() {
+ return []
+ },
+},
+
+/**
+ * Disable the entire component.
+ * @type {Boolean}
+ */
+disabled: {
+ type: Boolean,
+ default: false
+},
+
+/**
+ * Sets the max-height property on the dropdown list.
+ * @deprecated
+ * @type {String}
+ */
+maxHeight: {
+ type: String,
+ default: '400px'
+},
+
+/**
+ * Enable/disable filtering the options.
+ * @type {Boolean}
+ */
+searchable: {
+ type: Boolean,
+ default: true
+},
+
+/**
+ * Equivalent to the `multiple` attribute on a `