{
  "mixins": [
    "composables/private.use-validate/use-validate"
  ],
  "meta": {
    "docsUrl": "https://v2.quasar.dev/vue-components/select"
  },
  "props": {
    "name": {
      "type": "String",
      "desc": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists",
      "examples": [
        "'car_id'"
      ],
      "category": "behavior"
    },
    "virtual-scroll-horizontal": {
      "type": "Boolean",
      "desc": "Make virtual list work in horizontal mode",
      "category": "behavior"
    },
    "virtual-scroll-slice-size": {
      "type": [
        "Number",
        "String",
        "null"
      ],
      "desc": "Minimum number of items to render in the virtual list",
      "default": "10",
      "examples": [
        "60",
        "'60'"
      ],
      "category": "virtual-scroll"
    },
    "virtual-scroll-slice-ratio-before": {
      "type": [
        "Number",
        "String"
      ],
      "desc": "Ratio of number of items in visible zone to render before it",
      "default": "1",
      "category": "virtual-scroll"
    },
    "virtual-scroll-slice-ratio-after": {
      "type": [
        "Number",
        "String"
      ],
      "desc": "Ratio of number of items in visible zone to render after it",
      "default": "1",
      "category": "virtual-scroll"
    },
    "virtual-scroll-item-size": {
      "type": [
        "Number",
        "String"
      ],
      "desc": "Default size in pixels (height if vertical, width if horizontal) of an item; This value is used for rendering the initial list; Try to use a value close to the minimum size of an item",
      "default": "24",
      "category": "virtual-scroll",
      "__runtimeDefault": true
    },
    "virtual-scroll-sticky-size-start": {
      "type": [
        "Number",
        "String"
      ],
      "desc": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the start of the list; A correct value will improve scroll precision",
      "default": "0",
      "category": "virtual-scroll"
    },
    "virtual-scroll-sticky-size-end": {
      "type": [
        "Number",
        "String"
      ],
      "desc": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the end of the list; A correct value will improve scroll precision",
      "default": "0",
      "category": "virtual-scroll"
    },
    "table-colspan": {
      "type": [
        "Number",
        "String"
      ],
      "desc": "The number of columns in the table (you need this if you use table-layout: fixed)",
      "category": "virtual-scroll|content"
    },
    "label": {
      "type": "String",
      "desc": "A text label that will “float” up above the input field, once the field gets focus",
      "examples": [
        "'Username'"
      ],
      "category": "content"
    },
    "stack-label": {
      "type": "Boolean",
      "desc": "Label will be always shown above the field regardless of field content (if any)",
      "category": "content"
    },
    "hint": {
      "type": "String",
      "desc": "Helper (hint) text which gets placed below your wrapped form component",
      "examples": [
        "'Fill in between 3 and 12 characters'"
      ],
      "category": "content"
    },
    "hide-hint": {
      "type": "Boolean",
      "desc": "Hide the helper (hint) text when field doesn't have focus",
      "category": "content"
    },
    "prefix": {
      "type": "String",
      "desc": "Prefix",
      "examples": [
        "'$'"
      ],
      "category": "content"
    },
    "suffix": {
      "type": "String",
      "desc": "Suffix",
      "examples": [
        "'@gmail.com'"
      ],
      "category": "content"
    },
    "label-color": {
      "extends": "color",
      "desc": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused"
    },
    "color": {
      "extends": "color"
    },
    "bg-color": {
      "extends": "color"
    },
    "dark": {
      "extends": "dark"
    },
    "loading": {
      "type": "Boolean",
      "desc": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot.",
      "category": "behavior|content"
    },
    "clearable": {
      "type": "Boolean",
      "desc": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null",
      "category": "behavior|content"
    },
    "clear-icon": {
      "type": "String",
      "desc": "Custom icon to use for the clear button when using along with 'clearable' prop",
      "examples": [
        "'close'"
      ],
      "category": "content"
    },
    "filled": {
      "type": "Boolean",
      "desc": "Use 'filled' design for the field",
      "category": "style"
    },
    "outlined": {
      "type": "Boolean",
      "desc": "Use 'outlined' design for the field",
      "category": "style"
    },
    "borderless": {
      "type": "Boolean",
      "desc": "Use 'borderless' design for the field",
      "category": "style"
    },
    "standout": {
      "type": [
        "Boolean",
        "String"
      ],
      "desc": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)",
      "examples": [
        "true",
        "'bg-primary text-white'"
      ],
      "category": "style"
    },
    "label-slot": {
      "type": "Boolean",
      "desc": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set",
      "category": "content"
    },
    "bottom-slots": {
      "type": "Boolean",
      "desc": "Enables bottom slots ('error', 'hint', 'counter')",
      "category": "content"
    },
    "hide-bottom-space": {
      "type": "Boolean",
      "desc": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content",
      "category": "style"
    },
    "counter": {
      "type": "Boolean",
      "desc": "Show an automatic counter on bottom right",
      "category": "content"
    },
    "rounded": {
      "extends": "rounded"
    },
    "square": {
      "type": "Boolean",
      "desc": "Remove border-radius so borders are squared; Overrides 'rounded' prop",
      "category": "style"
    },
    "dense": {
      "extends": "dense"
    },
    "item-aligned": {
      "type": "Boolean",
      "desc": "Match inner content alignment to that of QItem",
      "category": "style"
    },
    "disable": {
      "extends": "disable"
    },
    "readonly": {
      "extends": "readonly"
    },
    "autofocus": {
      "type": "Boolean",
      "desc": "Focus field on initial component render",
      "category": "behavior"
    },
    "for": {
      "type": "String",
      "desc": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well",
      "examples": [
        "'myFieldsId'"
      ],
      "category": "behavior"
    },
    "model-value": {
      "extends": "model-value",
      "type": "Any",
      "desc": "Model of the component; Must be Array if using 'multiple' prop; Either use this property (along with a listener for 'update:modelValue' event) OR use v-model directive",
      "examples": [
        "# v-model=\"myModel\""
      ]
    },
    "multiple": {
      "type": "Boolean",
      "desc": "Allow multiple selection; Model must be Array",
      "category": "model|selection"
    },
    "display-value": {
      "type": [
        "Number",
        "String"
      ],
      "desc": "Override default selection string, if not using 'selected' slot/scoped slot and if not using 'use-chips' prop",
      "examples": [
        "'Options: x, y, z'"
      ],
      "category": "selection"
    },
    "display-value-html": {
      "extends": "html",
      "desc": "Force render the selected option(s) as HTML; This can lead to XSS attacks so make sure that you sanitize the content; Does NOT apply when using 'selected' or 'selected-item' slots!",
      "category": "selection"
    },
    "options": {
      "type": "Array",
      "desc": "Available options that the user can select from. For best performance freeze the list of options.",
      "default": "[]",
      "examples": [
        "[ 'Tesla', 'iPhone' ]",
        "[ { label: 'Tesla', value: 'car' }, { label: 'iPhone', value: 'phone' } ]"
      ],
      "category": "options"
    },
    "option-value": {
      "type": [
        "Function",
        "String"
      ],
      "desc": "Property of option which holds the 'value'; If using a function then for best performance, reference it from your scope and do not define it inline",
      "default": "'value'",
      "__runtimeDefault": true,
      "params": {
        "option": {
          "type": [
            "String",
            "Object"
          ],
          "desc": "The current option being processed",
          "examples": [
            "'Tesla'",
            "'iPhone'",
            "{ label: 'Tesla', value: 'car', cannotSelect: true }"
          ]
        }
      },
      "returns": {
        "type": "Any",
        "desc": "Value of the current option",
        "examples": [
          "'car'",
          "34"
        ]
      },
      "examples": [
        "'modelNumber'",
        "item => (item === null ? null : item.modelNumber)"
      ],
      "category": "options"
    },
    "option-label": {
      "type": [
        "Function",
        "String"
      ],
      "desc": "Property of option which holds the 'label'; If using a function then for best performance, reference it from your scope and do not define it inline",
      "default": "'label'",
      "__runtimeDefault": true,
      "params": {
        "option": {
          "type": [
            "String",
            "Object"
          ],
          "desc": "The current option being processed",
          "examples": [
            "'Tesla'",
            "'iPhone'",
            "{ label: 'Tesla', value: 'car', cannotSelect: true }"
          ]
        }
      },
      "returns": {
        "type": "String",
        "desc": "Label of the current option",
        "examples": [
          "'Tesla'",
          "'iPhone'"
        ]
      },
      "examples": [
        "'itemName'",
        "item => (item === null ? 'Null value' : item.itemName)"
      ],
      "category": "options"
    },
    "option-disable": {
      "type": [
        "Function",
        "String"
      ],
      "desc": "Property of option which tells it's disabled; The value of the property must be a Boolean; If using a function then for best performance, reference it from your scope and do not define it inline",
      "default": "'disable'",
      "__runtimeDefault": true,
      "params": {
        "option": {
          "type": [
            "String",
            "Object"
          ],
          "desc": "The current option being processed",
          "examples": [
            "'Tesla'",
            "'iPhone'",
            "{ label: 'Tesla', value: 'car', cannotSelect: true }"
          ]
        }
      },
      "returns": {
        "type": "Boolean",
        "desc": "If true, the current option will be disabled"
      },
      "examples": [
        "item => (item === null ? true : item.cannotSelect)",
        "# option-disable=\"cannotSelect\""
      ],
      "category": "options"
    },
    "hide-selected": {
      "type": "Boolean",
      "desc": "Hides selection; Use the underlying input tag to hold the label (instead of showing it to the right of the input) of the selected option; Only works for non 'multiple' Selects",
      "category": "selection"
    },
    "hide-dropdown-icon": {
      "type": "Boolean",
      "desc": "Hides dropdown icon",
      "category": "content|behavior"
    },
    "dropdown-icon": {
      "extends": "icon"
    },
    "max-values": {
      "type": [
        "Number",
        "String"
      ],
      "desc": "Allow a maximum number of selections that the user can do",
      "category": "selection"
    },
    "options-dense": {
      "extends": "dense",
      "desc": "Dense mode for options list; occupies less space",
      "category": "options"
    },
    "options-dark": {
      "type": [
        "Boolean",
        "null"
      ],
      "default": "null",
      "desc": "Options menu will be colored with a dark color",
      "category": "options"
    },
    "options-selected-class": {
      "type": "String",
      "desc": "CSS class name for options that are active/selected; Set it to an empty string to stop applying the default (which is text-* where * is the 'color' prop value)",
      "examples": [
        "'text-orange'"
      ],
      "category": "options"
    },
    "options-html": {
      "extends": "html",
      "desc": "Force render the options as HTML; This can lead to XSS attacks so make sure that you sanitize the content; Does NOT apply when using 'option' slot!",
      "category": "options"
    },
    "options-cover": {
      "type": "Boolean",
      "desc": "Expanded menu will cover the component (will not work along with 'use-input' prop for obvious reasons)",
      "category": "options"
    },
    "menu-shrink": {
      "type": "Boolean",
      "desc": "Allow the options list to be narrower than the field (only in menu mode)",
      "category": "options"
    },
    "menu-anchor": {
      "type": "String",
      "desc": "Two values setting the starting position or anchor point of the options list relative to the field (only in menu mode)",
      "values": [
        "'top left'",
        "'top middle'",
        "'top right'",
        "'top start'",
        "'top end'",
        "'center left'",
        "'center middle'",
        "'center right'",
        "'center start'",
        "'center end'",
        "'bottom left'",
        "'bottom middle'",
        "'bottom right'",
        "'bottom start'",
        "'bottom end'"
      ],
      "category": "position"
    },
    "menu-self": {
      "type": "String",
      "desc": "Two values setting the options list's own position relative to its target (only in menu mode)",
      "values": [
        "'top left'",
        "'top middle'",
        "'top right'",
        "'top start'",
        "'top end'",
        "'center left'",
        "'center middle'",
        "'center right'",
        "'center start'",
        "'center end'",
        "'bottom left'",
        "'bottom middle'",
        "'bottom right'",
        "'bottom start'",
        "'bottom end'"
      ],
      "category": "position"
    },
    "menu-offset": {
      "type": "Array",
      "desc": "An array of two numbers to offset the options list horizontally and vertically in pixels (only in menu mode)",
      "examples": [
        "[ 8, 8 ]",
        "[ 5, 10 ]"
      ],
      "category": "position"
    },
    "popup-content-class": {
      "type": "String",
      "desc": "Class definitions to be attributed to the popup content",
      "examples": [
        "'my-special-class'"
      ],
      "category": "style"
    },
    "popup-content-style": {
      "type": [
        "String",
        "Array",
        "Object"
      ],
      "tsType": "VueStyleProp",
      "desc": "Style definitions to be attributed to the popup content",
      "examples": [
        "'background-color: #ff0000'",
        "{ backgroundColor: '#ff0000' }"
      ],
      "category": "style"
    },
    "popup-no-route-dismiss": {
      "type": "Boolean",
      "desc": "Changing route app won't dismiss the popup (menu or dialog)",
      "category": "behavior",
      "addedIn": "v2.15"
    },
    "use-chips": {
      "type": "Boolean",
      "desc": "Use QChip to show what is currently selected",
      "category": "selection"
    },
    "use-input": {
      "type": "Boolean",
      "desc": "Use an input tag where users can type",
      "category": "content"
    },
    "maxlength": {
      "type": [
        "String",
        "Number"
      ],
      "desc": "Specify a max length for the inner input tag (if 'use-input' is enabled)",
      "category": "content"
    },
    "fill-input": {
      "type": "Boolean",
      "desc": "Fills the input with current value; Useful along with 'hide-selected'; Does NOT works along with 'multiple' selection",
      "category": "behavior"
    },
    "new-value-mode": {
      "type": "String",
      "desc": "Enables creation of new values and defines behavior when a new value is added: 'add' means it adds the value (even if possible duplicate), 'add-unique' adds only unique values, and 'toggle' adds or removes the value (based on if it exists or not already); When using this prop then listening for @new-value becomes optional (only to override the behavior defined by 'new-value-mode')",
      "values": [
        "'add'",
        "'add-unique'",
        "'toggle'"
      ],
      "category": "behavior"
    },
    "map-options": {
      "type": "Boolean",
      "desc": "Try to map labels of model from 'options' Array; has a small performance penalty; If you are using emit-value you will probably need to use map-options to display the label text in the select field rather than the value;  Refer to the 'Affecting model' section above",
      "category": "options"
    },
    "disable-tab-selection": {
      "type": "Boolean",
      "desc": "Prevents the tab key from confirming the currently hovered option",
      "category": "options",
      "addedIn": "v2.17"
    },
    "emit-value": {
      "type": "Boolean",
      "desc": "Update model with the value of the selected option instead of the whole option",
      "category": "model"
    },
    "input-debounce": {
      "type": [
        "Number",
        "String"
      ],
      "desc": "Debounce the input model update with an amount of milliseconds (also affects the 'filter' event, if used)",
      "default": "500",
      "category": "content"
    },
    "input-class": {
      "type": [
        "String",
        "Array",
        "Object"
      ],
      "tsType": "VueClassProp",
      "desc": "Class definitions to be attributed to the underlying input tag",
      "examples": [
        "'my-special-class'",
        "{ 'my-special-class': true }"
      ],
      "category": "style"
    },
    "input-style": {
      "type": [
        "String",
        "Array",
        "Object"
      ],
      "tsType": "VueStyleProp",
      "desc": "Style definitions to be attributed to the underlying input tag",
      "examples": [
        "'background-color: #ff0000'",
        "{ backgroundColor: '#ff0000' }"
      ],
      "category": "style"
    },
    "tabindex": {
      "extends": "tabindex",
      "default": "0"
    },
    "autocomplete": {
      "type": "String",
      "desc": "Autocomplete attribute for field",
      "examples": [
        "'country'"
      ],
      "category": "behavior"
    },
    "transition-show": {
      "extends": "transition",
      "desc": "Transition when showing the menu/dialog; One of Quasar's embedded transitions",
      "default": "'fade'",
      "passthrough": "child",
      "category": "behavior"
    },
    "transition-hide": {
      "extends": "transition",
      "desc": "Transition when hiding the menu/dialog; One of Quasar's embedded transitions",
      "default": "'fade'",
      "passthrough": "child",
      "category": "behavior"
    },
    "transition-duration": {
      "type": [
        "String",
        "Number"
      ],
      "desc": "Transition duration when hiding the menu/dialog (in milliseconds, without unit)",
      "default": "300",
      "passthrough": "child",
      "category": "behavior"
    },
    "behavior": {
      "type": "String",
      "desc": "Overrides the default dynamic mode of showing as menu on desktop and dialog on mobiles",
      "values": [
        "'default'",
        "'menu'",
        "'dialog'"
      ],
      "default": "'default'",
      "category": "behavior"
    }
  },
  "slots": {
    "default": {
      "desc": "Field main content"
    },
    "prepend": {
      "desc": "Prepend inner field; Suggestions: QIcon, QBtn"
    },
    "append": {
      "desc": "Append to inner field; Suggestions: QIcon, QBtn"
    },
    "before": {
      "desc": "Prepend outer field; Suggestions: QIcon, QBtn"
    },
    "after": {
      "desc": "Append outer field; Suggestions: QIcon, QBtn"
    },
    "label": {
      "desc": "Slot for label; Used only if 'label-slot' prop is set or the 'label' prop is set; When it is used the text in the 'label' prop is ignored"
    },
    "error": {
      "desc": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion: <div>"
    },
    "hint": {
      "desc": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion: <div>"
    },
    "counter": {
      "desc": "Slot for counter text; Enabled only if 'bottom-slots' prop is used; Suggestion: <div>"
    },
    "loading": {
      "desc": "Override default spinner when component is in loading mode; Suggestion: spinners"
    },
    "selected": {
      "desc": "Override default selection slot; Suggestion: QChip"
    },
    "before-options": {
      "desc": "Template slot for the elements that should be rendered before the list of options"
    },
    "after-options": {
      "desc": "Template slot for the elements that should be rendered after the list of options"
    },
    "no-option": {
      "desc": "What should the menu display after filtering options and none are left to be displayed; Suggestion: <div>",
      "scope": {
        "inputValue": {
          "type": "String",
          "desc": "Input textfield value, if any (not QSelect model)",
          "examples": [
            "'typed something'"
          ]
        }
      }
    },
    "selected-item": {
      "desc": "Override default selection slot; Suggestion: QChip",
      "scope": {
        "index": {
          "type": "Number",
          "desc": "Selection index"
        },
        "opt": {
          "type": "Any",
          "desc": "Selected option -- its value is taken from model"
        },
        "selected": {
          "type": "Boolean",
          "desc": "Always true -- passed down as prop to QItem (when using QItem)"
        },
        "removeAtIndex": {
          "type": "Function",
          "desc": "Remove selected option located at specific index",
          "params": {
            "index": {
              "type": "Number",
              "required": true,
              "desc": "Index at which to remove selection"
            }
          },
          "returns": null
        },
        "toggleOption": {
          "type": "Function",
          "desc": "Add/remove option from model",
          "params": {
            "opt": {
              "type": "Any",
              "required": true,
              "desc": "Option to add to model"
            }
          },
          "returns": null
        },
        "tabindex": {
          "type": "Number",
          "desc": "Tabindex HTML attribute value associated with respective option",
          "values": [
            "0",
            "-1"
          ]
        }
      }
    },
    "option": {
      "desc": "Customize how options are rendered; Suggestion: QItem",
      "scope": {
        "index": {
          "type": "Number",
          "desc": "Option index"
        },
        "opt": {
          "type": "Any",
          "desc": "Option -- its value is taken from 'options' prop"
        },
        "selected": {
          "type": "Boolean",
          "desc": "Is option selected?"
        },
        "focused": {
          "type": "Boolean",
          "desc": "Is option focused?"
        },
        "toggleOption": {
          "type": "Function",
          "desc": "Add/remove option from model",
          "params": {
            "opt": {
              "type": "Any",
              "required": true,
              "desc": "Option to add to model"
            }
          },
          "returns": null
        },
        "setOptionIndex": {
          "type": "Function",
          "desc": "Sets option from menu as 'focused'",
          "params": {
            "index": {
              "type": "Number",
              "required": true,
              "desc": "Index of option from menu"
            }
          },
          "returns": null
        },
        "itemProps": {
          "type": "Object",
          "desc": "Computed properties passed down to QItem"
        }
      }
    }
  },
  "events": {
    "virtual-scroll": {
      "desc": "Emitted when the virtual scroll occurs",
      "params": {
        "details": {
          "type": "Object",
          "desc": "Object of properties on the new scroll position",
          "definition": {
            "index": {
              "type": "Number",
              "required": true,
              "desc": "Index of the list item that was scrolled into view (0 based)"
            },
            "from": {
              "type": "Number",
              "required": true,
              "desc": "The index of the first list item that is rendered (0 based)"
            },
            "to": {
              "type": "Number",
              "required": true,
              "desc": "The index of the last list item that is rendered (0 based)"
            },
            "direction": {
              "type": "String",
              "required": true,
              "desc": "Direction of change",
              "values": [
                "'increase'",
                "'decrease'"
              ]
            },
            "ref": {
              "type": "Component",
              "required": true,
              "desc": "Vue reference to the QSelect",
              "tsType": "QSelect"
            }
          }
        }
      }
    },
    "update:model-value": {
      "extends": "update:model-value"
    },
    "focus": {
      "desc": "Emitted when component gets focused",
      "params": {
        "evt": {
          "extends": "evt"
        }
      }
    },
    "blur": {
      "desc": "Emitted when component loses focus",
      "params": {
        "evt": {
          "extends": "evt"
        }
      }
    },
    "clear": {
      "desc": "When using the 'clearable' property, this event is emitted when the clear icon is clicked",
      "params": {
        "value": {
          "type": "Any",
          "desc": "The previous value before clearing it"
        }
      }
    },
    "input-value": {
      "desc": "Emitted when the value in the text input changes",
      "params": {
        "value": {
          "type": "String",
          "desc": "New text value"
        }
      }
    },
    "remove": {
      "desc": "Emitted when an option is removed from selection",
      "params": {
        "details": {
          "type": "Object",
          "desc": "Removal details",
          "definition": {
            "index": {
              "type": "Number",
              "required": true,
              "desc": "Model index at which removal took place"
            },
            "value": {
              "type": "Any",
              "required": true,
              "desc": "The actual value that was removed"
            }
          }
        }
      }
    },
    "add": {
      "desc": "Emitted when an option is added to the selection",
      "params": {
        "details": {
          "type": "Object",
          "desc": "Addition details",
          "definition": {
            "index": {
              "type": "Number",
              "required": true,
              "desc": "Model index at which addition took place"
            },
            "value": {
              "type": "Any",
              "required": true,
              "desc": "The actual value that was added"
            }
          }
        }
      }
    },
    "new-value": {
      "desc": "Enables creation of new values; Emitted when a new value has been created; You can override 'new-value-mode' property with it",
      "params": {
        "inputValue": {
          "type": "String",
          "desc": "What the user typed",
          "examples": [
            "'phone'"
          ]
        },
        "doneFn": {
          "type": "Function",
          "desc": "Adds (optional) value to the model; Do not forget to call it after you validate the newly created value; Call it with no parameters if nothing should be added",
          "params": {
            "item": {
              "type": "Any",
              "required": false,
              "desc": "Item to add"
            },
            "mode": {
              "type": "String",
              "required": false,
              "desc": "Override 'new-value-mode' (prop) behavior should you wish to",
              "values": [
                "'add'",
                "'add-unique'",
                "'toggle'"
              ],
              "default": "'add'"
            }
          },
          "returns": null
        }
      }
    },
    "filter": {
      "desc": "Emitted when user wants to filter a value",
      "params": {
        "inputValue": {
          "type": "String",
          "desc": "What the user typed",
          "examples": [
            "'phone'"
          ]
        },
        "doneFn": {
          "type": "Function",
          "desc": "Supply a function which makes the necessary updates",
          "params": {
            "callbackFn": {
              "type": "Function",
              "required": true,
              "desc": "Callback to call to make the actual updates",
              "params": null,
              "returns": null
            },
            "afterFn": {
              "type": "Function",
              "required": false,
              "desc": "Callback to call at the end after the update has been fully processed by QSelect",
              "params": {
                "ref": {
                  "type": "Component",
                  "tsType": "QSelect",
                  "required": true,
                  "desc": "Vue reference to the QSelect which triggered the filtering"
                }
              },
              "returns": null
            }
          },
          "returns": null
        },
        "abortFn": {
          "type": "Function",
          "desc": "Call this function if something went wrong",
          "params": null,
          "returns": null
        }
      }
    },
    "filter-abort": {
      "desc": "Emitted when a filtering was aborted; Probably a new one was requested?"
    },
    "popup-show": {
      "desc": "Emitted when the select options menu or dialog is shown.",
      "params": {
        "evt": {
          "extends": "evt"
        }
      }
    },
    "popup-hide": {
      "desc": "Emitted when the select options menu or dialog is hidden.",
      "params": {
        "evt": {
          "extends": "evt"
        }
      }
    },
    "keyup": {
      "internal": true
    },
    "keydown": {
      "internal": true
    },
    "keypress": {
      "internal": true
    }
  },
  "methods": {
    "scrollTo": {
      "desc": "Scroll the virtual scroll list to the item with the specified index (0 based)",
      "params": {
        "index": {
          "type": [
            "Number",
            "String"
          ],
          "desc": "The index of the list item (0 based)",
          "required": true
        },
        "edge": {
          "type": "String",
          "desc": "The edge to align to if the item is not visible already (by default it aligns to end if scrolling towards the end and to start otherwise); If the '-force' version is used then it always aligns",
          "values": [
            "'start'",
            "'center'",
            "'end'",
            "'start-force'",
            "'center-force'",
            "'end-force'"
          ]
        }
      },
      "returns": null
    },
    "reset": {
      "desc": "Resets the virtual scroll computations; Needed for custom edge-cases",
      "params": null,
      "returns": null
    },
    "refresh": {
      "desc": "Refreshes the virtual scroll list; Use it after appending items",
      "params": {
        "index": {
          "type": [
            "String",
            "Number"
          ],
          "desc": "The index of the list item to scroll to after refresh (0 based); If it's not specified the scroll position is not changed; Use a negative value to keep scroll position",
          "examples": [
            "5"
          ]
        }
      },
      "returns": null
    },
    "focus": {
      "desc": "Focus component",
      "params": null,
      "returns": null
    },
    "blur": {
      "desc": "Blur component (lose focus)",
      "params": null,
      "returns": null
    },
    "showPopup": {
      "desc": "Focus and open popup",
      "params": null,
      "returns": null
    },
    "hidePopup": {
      "desc": "Hide popup",
      "params": null,
      "returns": null
    },
    "removeAtIndex": {
      "desc": "Remove selected option located at specific index",
      "params": {
        "index": {
          "type": "Number",
          "required": true,
          "desc": "Index at which to remove selection"
        }
      },
      "returns": null
    },
    "add": {
      "desc": "Adds option to model",
      "params": {
        "opt": {
          "type": "Any",
          "required": true,
          "desc": "Option to add to model"
        },
        "unique": {
          "type": "Boolean",
          "desc": "Option must be unique"
        }
      },
      "returns": null
    },
    "toggleOption": {
      "desc": "Add/remove option from model",
      "params": {
        "opt": {
          "type": "Any",
          "required": true,
          "desc": "Option to add to model"
        },
        "keepOpen": {
          "type": "Boolean",
          "desc": "Don't close the menu and do not clear the filter"
        }
      },
      "returns": null
    },
    "getOptionIndex": {
      "desc": "Gets current focused option index from menu; It's -1 if no option is focused",
      "params": null,
      "returns": {
        "type": "Number",
        "desc": "Index of option from menu; It's -1 if no option is focused"
      },
      "addedIn": "v2.5.4"
    },
    "setOptionIndex": {
      "desc": "Sets option from menu as 'focused'; -1 to focus none",
      "params": {
        "index": {
          "type": "Number",
          "required": true,
          "desc": "Index of option from menu; -1 to focus none"
        }
      },
      "returns": null
    },
    "moveOptionSelection": {
      "desc": "Move selected option from menu by index offset",
      "params": {
        "offset": {
          "type": "Number",
          "desc": "Number of options to move up or down",
          "default": "1"
        },
        "skipInputValue": {
          "type": "Boolean",
          "desc": "Don't set input-value on navigation"
        }
      },
      "returns": null
    },
    "filter": {
      "desc": "Filter options",
      "params": {
        "value": {
          "type": "String",
          "required": true,
          "desc": "String to filter with",
          "examples": [
            "'car'"
          ]
        }
      },
      "returns": null
    },
    "updateMenuPosition": {
      "desc": "Recomputes menu position",
      "params": null,
      "returns": null
    },
    "updateInputValue": {
      "desc": "If 'use-input' is specified, this updates the value that it holds",
      "params": {
        "value": {
          "type": "String",
          "required": true,
          "desc": "String to set the input value to",
          "examples": [
            "'hotel'"
          ]
        },
        "noFilter": {
          "type": "Boolean",
          "desc": "Set to true if you don't want the filter (if any) to be also triggered"
        }
      },
      "returns": null
    },
    "isOptionSelected": {
      "desc": "Tells if an option is selected",
      "params": {
        "opt": {
          "type": "Any",
          "required": true,
          "desc": "Option entry"
        }
      },
      "returns": {
        "type": "Boolean",
        "desc": "Option is selected or not"
      }
    },
    "getEmittingOptionValue": {
      "desc": "Get the model value that would be emitted by QSelect when selecting a said option; Also takes into consideration if 'emit-value' is set",
      "params": {
        "opt": {
          "type": "Any",
          "required": true,
          "desc": "Option entry"
        }
      },
      "returns": {
        "type": "Any",
        "desc": "Emitting model value of said option"
      }
    },
    "getOptionValue": {
      "desc": "Get the model value of an option; Takes into consideration 'option-value' (if used), but does not looks for 'emit-value', like getEmittingOptionValue() does",
      "params": {
        "opt": {
          "type": "Any",
          "required": true,
          "desc": "Option entry"
        }
      },
      "returns": {
        "type": "Any",
        "desc": "Model value of said option"
      }
    },
    "getOptionLabel": {
      "desc": "Get the label of an option; Takes into consideration the 'option-label' prop (if used)",
      "params": {
        "opt": {
          "type": "Any",
          "required": true,
          "desc": "Option entry"
        }
      },
      "returns": {
        "type": "Any",
        "desc": "Label of said option"
      }
    },
    "isOptionDisabled": {
      "desc": "Tells if an option is disabled; Takes into consideration 'option-disable' prop (if used)",
      "params": {
        "opt": {
          "type": "Any",
          "required": true,
          "desc": "Option entry"
        }
      },
      "returns": {
        "type": "Boolean",
        "desc": "Option is disabled or not"
      }
    }
  }
}