diff --git a/docs/Advanced/AJAX.md b/docs/Advanced/AJAX.md
new file mode 100644
index 0000000..522945c
--- /dev/null
+++ b/docs/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/Advanced/Ajax.html b/docs/Advanced/Ajax.html
new file mode 100644
index 0000000..c876b8a
--- /dev/null
+++ b/docs/Advanced/Ajax.html
@@ -0,0 +1,508 @@
+
+
+
+
+
+
+ AJAX · vue-select
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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.
+
/**
+* 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.
+
/**
+ * 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.
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.
/**
+ * Contains the currently selected value. Very similar to a
+ * `value` attribute on an <input>. 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 `<select>` input.
+ * @type {Boolean}
+ */
+multiple: {
+ type: Boolean,
+ default: false
+},
+
+/**
+ * Equivalent to the `placeholder` attribute on an `<input>`.
+ * @type {String}
+ */
+placeholder: {
+ type: String,
+ default: ''
+},
+
+/**
+ * Sets a Vue transition property on the `.dropdown-menu`. vue-select
+ * does not include CSS for transitions, you'll need to add them yourself.
+ * @type {String}
+ */
+transition: {
+ type: String,
+ default: 'fade'
+},
+
+/**
+ * Enables/disables clearing the search text when an option is selected.
+ * @type {Boolean}
+ */
+clearSearchOnSelect: {
+ type: Boolean,
+ default: true
+},
+
+/**
+ * Close a dropdown when an option is chosen. Set to false to keep the dropdown
+ * open (useful when combined with multi-select, for example)
+ * @type {Boolean}
+ */
+closeOnSelect: {
+ type: Boolean,
+ default: true
+},
+
+/**
+ * Tells vue-select what key to use when generating option
+ * labels when each `option` is an object.
+ * @type {String}
+ */
+label: {
+ type: String,
+ default: 'label'
+},
+
+/**
+ * Callback to generate the label text. If {option}
+ * is an object, returns option[this.label] by default.
+ * @type {Function}
+ * @param {Object || String} option
+ * @return {String}
+ */
+getOptionLabel: {
+ type: Function,
+ default(option) {
+ if (typeof option === 'object') {
+ if (!option.hasOwnProperty(this.label)) {
+ returnconsole.warn(
+ `[vue-select warn]: Label key "option.${this.label}" does not` +
+ ` exist in options object ${JSON.stringify(option)}.\n` +
+ 'http://sagalbot.github.io/vue-select/#ex-labels'
+ )
+ }
+ if (this.label && option[this.label]) {
+ return option[this.label]
+ }
+ }
+ return option;
+ }
+},
+
+/**
+ * Callback to filter the search result the label text.
+ * @type {Function}
+ * @param {Object || String} option
+ * @param {String} label
+ * @param {String} search
+ * @return {Boolean}
+ */
+filterFunction: {
+ type: Function,
+ default(option, label, search) {
+ return (label || '').toLowerCase().indexOf(search.toLowerCase()) > -1
+ }
+},
+
+/**
+ * An optional callback function that is called each time the selected
+ * value(s) change. When integrating with Vuex, use this callback to trigger
+ * an action, rather than using :value.sync to retreive the selected value.
+ * @type {Function}
+ * @param {Object || String} val
+ */
+onChange: {
+ type: Function,
+ default: function (val) {
+ this.$emit('input', val)
+ }
+},
+
+/**
+ * Enable/disable creating options from searchInput.
+ * @type {Boolean}
+ */
+taggable: {
+ type: Boolean,
+ default: false
+},
+
+/**
+ * Set the tabindex for the input field.
+ * @type {Number}
+ */
+tabindex: {
+ type: Number,
+ default: null
+},
+
+/**
+ * When true, newly created tags will be added to
+ * the options list.
+ * @type {Boolean}
+ */
+pushTags: {
+ type: Boolean,
+ default: false
+},
+
+/**
+ * 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
+},
+
+/**
+ * User defined function for adding Options
+ * @type {Function}
+ */
+createOption: {
+ type: Function,
+ default(newOption) {
+ if (typeofthis.mutableOptions[0] === 'object') {
+ newOption = {[this.label]: newOption}
+ }
+ this.$emit('option:created', newOption)
+ return newOption
+ }
+},
+
+/**
+ * When false, updating the options will not reset the select value
+ * @type {Boolean}
+ */
+resetOnOptionsChange: {
+ type: Boolean,
+ default: false
+},
+
+/**
+ * Disable the dropdown entirely.
+ * @type {Boolean}
+ */
+noDrop: {
+ type: Boolean,
+ default: false
+},
+
+/**
+ * Sets the id of the input element.
+ * @type {String}
+ * @default {null}
+ */
+inputId: {
+ type: String
+},
+
+/**
+ * Sets RTL support. Accepts 'ltr', 'rtl', 'auto'.
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir
+ * @type {String}
+ * @default 'auto'
+ */
+dir: {
+ type: String,
+ default: 'auto'
+},
+
+
AJAX
+
/**
+ * Toggles the adding of a 'loading' class to the main
+ * .v-select wrapper. Useful to control UI state when
+ * results are being processed through AJAX.
+ */
+loading: {
+ type: Boolean,
+ default: false
+},
+
+/**
+ * Accept a callback function that will be
+ * run when the search text changes.
+ *
+ * loading() accepts a boolean value, and can
+ * be used to toggle a loading class from
+ * the onSearch callback.
+ *
+ * @param {search} String Current search text
+ * @param {loading} Function(bool) Toggle loading class
+ */
+onSearch: {
+ type: Function,
+ default: function(search, loading){}
+}
+
vue-select accepts arrays of strings or objects to use as options through the options prop:
+
<v-select:options="['foo','bar']"></v-select>
+
+
When provided an array of objects, vue-select will display a single value of the object. By default, vue-select will look for a key named label on the object to use as display text.
When the options array contains objects, vue-select looks for the label key to display by default. You can set your own label to match your source data using the label prop.
+
For example, consider an object with countryCode and countryName properties:
vue-select requires the option property to be an array. If you are using Vue in development mode, you will get warnings attempting to pass anything other than an array to the options prop. If you need a null/empty value, use an empty array [].
The most common use case for vue-select is to have the chosen value synced with a parent component. vue-select takes advantage of the v-model syntax to sync values with a parent.
If you don't require the value to be synced, you can also pass the prop directly:
+
<v-select:value="selected"></v-select>
+
+
This method allows you to pre-select a value(s), without syncing any changes to the parent component. This is also very useful when using a state management tool, like Vuex.
+
Single/Multiple Selection
+
By default, vue-select supports choosing a single value. If you need multiple values, use the multiple prop:
To allow input that's not present within the options, set the taggable prop to true.
+If you want new tags to be pushed to the options list, set push-tags to true.
Include vue & vue-select.js - I recommend using unpkg.com.
+
<!-- include VueJS first -->
+<scriptsrc="https://unpkg.com/vue@latest"></script>
+
+<!-- use the latest release -->
+<scriptsrc="https://unpkg.com/vue-select@latest"></script>
+<!-- or point to a specific release -->
+<scriptsrc="https://unpkg.com/vue-select@1.30"></script>
+