{"version":3,"sources":["../../../src/components/VCombobox/VCombobox.js"],"names":[],"mappings":"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","sourcesContent":["// Styles\nimport '../../stylus/components/_autocompletes.styl'\n\n// Extensions\nimport VSelect from '../VSelect/VSelect'\nimport VAutocomplete from '../VAutocomplete/VAutocomplete'\n\n// Utils\nimport { keyCodes } from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-combobox',\n\n  extends: VAutocomplete,\n\n  props: {\n    delimiters: {\n      type: Array,\n      default: () => ([])\n    },\n    returnObject: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  data: () => ({\n    editingIndex: -1\n  }),\n\n  computed: {\n    counterValue () {\n      return this.multiple\n        ? this.selectedItems.length\n        : (this.internalSearch || '').toString().length\n    },\n    hasSlot () {\n      return VSelect.options.computed.hasSlot.call(this) || this.multiple\n    },\n    isAnyValueAllowed () {\n      return true\n    },\n    menuCanShow () {\n      if (!this.isFocused) return false\n\n      return this.hasDisplayedItems ||\n        (!!this.$slots['no-data'] && !this.hideNoData)\n    }\n  },\n\n  methods: {\n    onFilteredItemsChanged () {\n      // nop\n    },\n    onInternalSearchChanged (val) {\n      if (\n        val &&\n        this.multiple &&\n        this.delimiters.length\n      ) {\n        const delimiter = this.delimiters.find(d => val.endsWith(d))\n        if (delimiter != null) {\n          this.internalSearch = val.slice(0, val.length - delimiter.length)\n          this.updateTags()\n        }\n      }\n\n      this.updateMenuDimensions()\n    },\n    genChipSelection (item, index) {\n      const chip = VSelect.options.methods.genChipSelection.call(this, item, index)\n\n      // Allow user to update an existing value\n      if (this.multiple) {\n        chip.componentOptions.listeners.dblclick = () => {\n          this.editingIndex = index\n          this.internalSearch = this.getText(item)\n          this.selectedIndex = -1\n        }\n      }\n\n      return chip\n    },\n    onChipInput (item) {\n      VSelect.options.methods.onChipInput.call(this, item)\n\n      this.editingIndex = -1\n    },\n    // Requires a manual definition\n    // to overwrite removal in v-autocomplete\n    onEnterDown (e) {\n      e.preventDefault()\n\n      VSelect.options.methods.onEnterDown.call(this)\n\n      // If has menu index, let v-select-list handle\n      if (this.getMenuIndex() > -1) return\n\n      this.updateSelf()\n    },\n    onKeyDown (e) {\n      const keyCode = e.keyCode\n\n      VSelect.options.methods.onKeyDown.call(this, e)\n\n      // If user is at selection index of 0\n      // create a new tag\n      if (this.multiple &&\n        keyCode === keyCodes.left &&\n        this.$refs.input.selectionStart === 0\n      ) {\n        this.updateSelf()\n      }\n\n      // The ordering is important here\n      // allows new value to be updated\n      // and then moves the index to the\n      // proper location\n      this.changeSelectedIndex(keyCode)\n    },\n    onTabDown (e) {\n      // When adding tags, if searching and\n      // there is not a filtered options,\n      // add the value to the tags list\n      if (this.multiple &&\n        this.internalSearch &&\n        this.getMenuIndex() === -1\n      ) {\n        e.preventDefault()\n        e.stopPropagation()\n\n        return this.updateTags()\n      }\n\n      VAutocomplete.options.methods.onTabDown.call(this, e)\n    },\n    selectItem (item) {\n      // Currently only supports items:<string[]>\n      if (this.editingIndex > -1) {\n        this.updateEditing()\n      } else {\n        VSelect.options.methods.selectItem.call(this, item)\n      }\n    },\n    setSelectedItems () {\n      if (this.internalValue == null ||\n        this.internalValue === ''\n      ) {\n        this.selectedItems = []\n      } else {\n        this.selectedItems = this.multiple ? this.internalValue : [this.internalValue]\n      }\n    },\n    setValue (value = this.internalSearch) {\n      VSelect.options.methods.setValue.call(this, value)\n    },\n    updateEditing () {\n      const value = this.internalValue.slice()\n      value[this.editingIndex] = this.internalSearch\n\n      this.setValue(value)\n\n      this.editingIndex = -1\n    },\n    updateCombobox () {\n      const isUsingSlot = Boolean(this.$scopedSlots.selection) || this.hasChips\n\n      // If search is not dirty and is\n      // using slot, do nothing\n      if (isUsingSlot && !this.searchIsDirty) return\n\n      // The internal search is not matching\n      // the internal value, update the input\n      if (this.internalSearch !== this.getText(this.internalValue)) this.setValue()\n\n      // Reset search if using slot\n      // to avoid a double input\n      if (isUsingSlot) this.internalSearch = undefined\n    },\n    updateSelf () {\n      this.multiple ? this.updateTags() : this.updateCombobox()\n    },\n    updateTags () {\n      const menuIndex = this.getMenuIndex()\n\n      // If the user is not searching\n      // and no menu item is selected\n      // do nothing\n      if (menuIndex < 0 &&\n        !this.searchIsDirty\n      ) return\n\n      if (this.editingIndex > -1) {\n        return this.updateEditing()\n      }\n\n      const index = this.selectedItems.indexOf(this.internalSearch)\n      // If it already exists, do nothing\n      // this might need to change to bring\n      // the duplicated item to the last entered\n      if (index > -1) {\n        const internalValue = this.internalValue.slice()\n        internalValue.splice(index, 1)\n\n        this.setValue(internalValue)\n      }\n\n      // If menu index is greater than 1\n      // the selection is handled elsewhere\n      // TODO: find out where\n      if (menuIndex > -1) return (this.internalSearch = null)\n\n      this.selectItem(this.internalSearch)\n      this.internalSearch = null\n    }\n  }\n}\n"],"sourceRoot":""}