{"version":3,"sources":["webpack:///./src/components/fuzzysearch/FuzzySearch.vue?b6de","webpack:///./src/components/fuzzysearch/FuzzySearch.vue","webpack:///./src/components/fuzzysearch/FuzzySearch.vue?15d6","webpack:///../../../src/components/VAutocomplete/VAutocomplete.ts","webpack:///./src/components/fuzzysearch/FuzzySearch.vue?8fd0","webpack:///./src/components/fuzzysearch/FuzzySearch.vue?41ea"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","items","isLoading","search","propLabel","propHeight","on","$event","clear","emitSelect","model","value","callback","$$v","expression","staticRenderFns","set","entries","emitItems","emitEntries","type","String","Array","Boolean","components","defaultMenuProps","offsetY","offsetOverflow","transition","VSelect","name","props","allowOverflow","default","autoSelectFirst","filter","itemText","queryText","hideNoData","menuProps","noFilter","searchInput","data","lazySearch","computed","classes","selectedIndex","computedItems","selectedValues","selectedItems","map","item","hasDisplayedItems","hideSelected","filteredItems","some","length","currentRange","selectedItem","getText","internalSearch","allItems","text","get","isAnyValueAllowed","isDirty","searchIsDirty","isSearching","multiple","menuCanShow","$_menuProps","find","i","listData","watch","internalValue","isFocused","document","$refs","input","isMenuActive","val","oldVal","activateMenu","created","destroyed","methods","onFilteredItemsChanged","onInternalSearchChanged","updateMenuDimensions","menu","changeSelectedIndex","keyCode","deleteCurrentItem","curIndex","curItem","getDisabled","lastIndex","nextIndex","nextItem","clearableCallback","genInput","VTextField","mergeData","autocomplete","domProps","genInputSlot","slot","genSelections","hasSlot","onClick","isAppendInner","e","onInput","target","onKeyDown","onSpaceDown","onTabDown","onUpDown","selectItem","setSelectedItems","setSearch","updateSelf","valueComparator","getValue","hasItem","indexOf","onCopy","currentItem","currentItemText","event","component","VAutocomplete"],"mappings":"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","file":"js/chunk-51dc6da6.4af2eddf.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-autocomplete',{attrs:{\"items\":_vm.items,\"loading\":_vm.isLoading,\"search-input\":_vm.search,\"label\":_vm.propLabel,\"height\":_vm.propHeight,\"outlined\":\"\",\"dense\":\"\",\"clearable\":\"\"},on:{\"update:searchInput\":function($event){_vm.search=$event},\"update:search-input\":function($event){_vm.search=$event},\"click:clear\":function($event){return _vm.clear()},\"input\":function($event){return _vm.emitSelect(_vm.search)}},model:{value:(_vm.model),callback:function ($$v) {_vm.model=$$v},expression:\"model\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {\n Vue,\n Component,\n Watch,\n VModel,\n Prop,\n PropSync,\n Emit,\n} from \"vue-property-decorator\";\n\n@Component({\n components: {},\n})\nexport default class FuzzySearch extends Vue {\n @VModel({ type: String }) model!: string;\n @Prop(String) propLabel!: string;\n @Prop(String) propHeight!: string;\n @PropSync(\"propEntries\", { type: Array }) entries!: Array;\n @PropSync(\"propItems\", { type: Array }) items!: Array;\n @PropSync(\"propIsLoading\", { type: Boolean }) isLoading!: boolean;\n @PropSync(\"propSearch\", { type: String }) search!: string;\n\n mounted() {\n this.clear();\n this.set();\n }\n\n private clear(): void {\n this.entries = [];\n this.items = [];\n this.isLoading = false;\n this.search = \"\";\n }\n\n private set(): void {\n if (this.model) {\n this.search = this.model;\n }\n }\n\n @Emit(\"updateItems\")\n emitItems() {\n return;\n }\n\n @Emit(\"updateEntries\")\n emitEntries(value: string) {\n return;\n }\n\n @Emit(\"updateSelect\")\n emitSelect(search: string) {\n return;\n }\n\n @Watch(\"model\")\n watchModel() {\n this.set();\n }\n\n @Watch(\"entries\")\n watchEntries() {\n this.emitItems();\n }\n\n @Watch(\"search\")\n watchSearch() {\n this.emitEntries(this.search);\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FuzzySearch.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FuzzySearch.vue?vue&type=script&lang=ts&\"","// Styles\nimport './VAutocomplete.sass'\n\n// Extensions\nimport VSelect, { defaultMenuProps as VSelectMenuProps } from '../VSelect/VSelect'\nimport VTextField from '../VTextField/VTextField'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport {\n getObjectValueByPath,\n getPropertyFromItem,\n keyCodes,\n} from '../../util/helpers'\n\n// Types\nimport { PropType, VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nconst defaultMenuProps = {\n ...VSelectMenuProps,\n offsetY: true,\n offsetOverflow: true,\n transition: false,\n}\n\n/* @vue/component */\nexport default VSelect.extend({\n name: 'v-autocomplete',\n\n props: {\n allowOverflow: {\n type: Boolean,\n default: true,\n },\n autoSelectFirst: {\n type: Boolean,\n default: false,\n },\n filter: {\n type: Function,\n default: (item: any, queryText: string, itemText: string) => {\n return itemText.toLocaleLowerCase().indexOf(queryText.toLocaleLowerCase()) > -1\n },\n } as PropValidator<(item: any, queryText: string, itemText: string) => boolean>,\n hideNoData: Boolean,\n menuProps: {\n type: VSelect.options.props.menuProps.type,\n default: () => defaultMenuProps,\n },\n noFilter: Boolean,\n searchInput: {\n type: String as PropType,\n },\n },\n\n data () {\n return {\n lazySearch: this.searchInput,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VSelect.options.computed.classes.call(this),\n 'v-autocomplete': true,\n 'v-autocomplete--is-selecting-index': this.selectedIndex > -1,\n }\n },\n computedItems (): object[] {\n return this.filteredItems\n },\n selectedValues (): object[] {\n return this.selectedItems.map(item => this.getValue(item))\n },\n hasDisplayedItems (): boolean {\n return this.hideSelected\n ? this.filteredItems.some(item => !this.hasItem(item))\n : this.filteredItems.length > 0\n },\n currentRange (): number {\n if (this.selectedItem == null) return 0\n\n return String(this.getText(this.selectedItem)).length\n },\n filteredItems (): object[] {\n if (!this.isSearching || this.noFilter || this.internalSearch == null) return this.allItems\n\n return this.allItems.filter(item => {\n const value = getPropertyFromItem(item, this.itemText)\n const text = value != null ? String(value) : ''\n\n return this.filter(item, String(this.internalSearch), text)\n })\n },\n internalSearch: {\n get (): string | null {\n return this.lazySearch\n },\n set (val: any) { // TODO: this should be `string | null` but it breaks lots of other types\n // emit update event only when the new\n // search value is different from previous\n if (this.lazySearch !== val) {\n this.lazySearch = val\n this.$emit('update:search-input', val)\n }\n },\n },\n isAnyValueAllowed (): boolean {\n return false\n },\n isDirty (): boolean {\n return this.searchIsDirty || this.selectedItems.length > 0\n },\n isSearching (): boolean {\n return (\n this.multiple &&\n this.searchIsDirty\n ) || (\n this.searchIsDirty &&\n this.internalSearch !== this.getText(this.selectedItem)\n )\n },\n menuCanShow (): boolean {\n if (!this.isFocused) return false\n\n return this.hasDisplayedItems || !this.hideNoData\n },\n $_menuProps (): object {\n const props = VSelect.options.computed.$_menuProps.call(this);\n (props as any).contentClass = `v-autocomplete__content ${(props as any).contentClass || ''}`.trim()\n return {\n ...defaultMenuProps,\n ...props,\n }\n },\n searchIsDirty (): boolean {\n return this.internalSearch != null &&\n this.internalSearch !== ''\n },\n selectedItem (): any {\n if (this.multiple) return null\n\n return this.selectedItems.find(i => {\n return this.valueComparator(this.getValue(i), this.getValue(this.internalValue))\n })\n },\n listData () {\n const data = VSelect.options.computed.listData.call(this) as any\n\n data.props = {\n ...data.props,\n items: this.virtualizedItems,\n noFilter: (\n this.noFilter ||\n !this.isSearching ||\n !this.filteredItems.length\n ),\n searchInput: this.internalSearch,\n }\n\n return data\n },\n },\n\n watch: {\n filteredItems: 'onFilteredItemsChanged',\n internalValue: 'setSearch',\n isFocused (val) {\n if (val) {\n document.addEventListener('copy', this.onCopy)\n this.$refs.input && this.$refs.input.select()\n } else {\n document.removeEventListener('copy', this.onCopy)\n this.$refs.input && this.$refs.input.blur()\n this.updateSelf()\n }\n },\n isMenuActive (val) {\n if (val || !this.hasSlot) return\n\n this.lazySearch = null\n },\n items (val, oldVal) {\n // If we are focused, the menu\n // is not active, hide no data is enabled,\n // and items change\n // User is probably async loading\n // items, try to activate the menu\n if (\n !(oldVal && oldVal.length) &&\n this.hideNoData &&\n this.isFocused &&\n !this.isMenuActive &&\n val.length\n ) this.activateMenu()\n },\n searchInput (val: string) {\n this.lazySearch = val\n },\n internalSearch: 'onInternalSearchChanged',\n itemText: 'updateSelf',\n },\n\n created () {\n this.setSearch()\n },\n\n destroyed () {\n document.removeEventListener('copy', this.onCopy)\n },\n\n methods: {\n onFilteredItemsChanged (val: never[], oldVal: never[]) {\n // TODO: How is the watcher triggered\n // for duplicate items? no idea\n if (val === oldVal) return\n\n this.setMenuIndex(-1)\n\n this.$nextTick(() => {\n if (\n !this.internalSearch ||\n (val.length !== 1 &&\n !this.autoSelectFirst)\n ) return\n\n this.$refs.menu.getTiles()\n this.setMenuIndex(0)\n })\n },\n onInternalSearchChanged () {\n this.updateMenuDimensions()\n },\n updateMenuDimensions () {\n // Type from menuable is not making it through\n this.isMenuActive && this.$refs.menu && this.$refs.menu.updateDimensions()\n },\n changeSelectedIndex (keyCode: number) {\n // Do not allow changing of selectedIndex\n // when search is dirty\n if (this.searchIsDirty) return\n\n if (this.multiple && keyCode === keyCodes.left) {\n if (this.selectedIndex === -1) {\n this.selectedIndex = this.selectedItems.length - 1\n } else {\n this.selectedIndex--\n }\n } else if (this.multiple && keyCode === keyCodes.right) {\n if (this.selectedIndex >= this.selectedItems.length - 1) {\n this.selectedIndex = -1\n } else {\n this.selectedIndex++\n }\n } else if (keyCode === keyCodes.backspace || keyCode === keyCodes.delete) {\n this.deleteCurrentItem()\n }\n },\n deleteCurrentItem () {\n const curIndex = this.selectedIndex\n const curItem = this.selectedItems[curIndex]\n\n // Do nothing if input or item is disabled\n if (\n !this.isInteractive ||\n this.getDisabled(curItem)\n ) return\n\n const lastIndex = this.selectedItems.length - 1\n\n // Select the last item if\n // there is no selection\n if (\n this.selectedIndex === -1 &&\n lastIndex !== 0\n ) {\n this.selectedIndex = lastIndex\n\n return\n }\n\n const length = this.selectedItems.length\n const nextIndex = curIndex !== length - 1\n ? curIndex\n : curIndex - 1\n const nextItem = this.selectedItems[nextIndex]\n\n if (!nextItem) {\n this.setValue(this.multiple ? [] : null)\n } else {\n this.selectItem(curItem)\n }\n\n this.selectedIndex = nextIndex\n },\n clearableCallback () {\n this.internalSearch = null\n\n VSelect.options.methods.clearableCallback.call(this)\n },\n genInput () {\n const input = VTextField.options.methods.genInput.call(this)\n\n input.data = mergeData(input.data!, {\n attrs: {\n 'aria-activedescendant': getObjectValueByPath(this.$refs.menu, 'activeTile.id'),\n autocomplete: getObjectValueByPath(input.data!, 'attrs.autocomplete', 'off'),\n },\n domProps: { value: this.internalSearch },\n })\n\n return input\n },\n genInputSlot () {\n const slot = VSelect.options.methods.genInputSlot.call(this)\n\n slot.data!.attrs!.role = 'combobox'\n\n return slot\n },\n genSelections (): VNode | never[] {\n return this.hasSlot || this.multiple\n ? VSelect.options.methods.genSelections.call(this)\n : []\n },\n onClick (e: MouseEvent) {\n if (!this.isInteractive) return\n\n this.selectedIndex > -1\n ? (this.selectedIndex = -1)\n : this.onFocus()\n\n if (!this.isAppendInner(e.target)) this.activateMenu()\n },\n onInput (e: Event) {\n if (\n this.selectedIndex > -1 ||\n !e.target\n ) return\n\n const target = e.target as HTMLInputElement\n const value = target.value\n\n // If typing and menu is not currently active\n if (target.value) this.activateMenu()\n\n this.internalSearch = value\n this.badInput = target.validity && target.validity.badInput\n },\n onKeyDown (e: KeyboardEvent) {\n const keyCode = e.keyCode\n\n if (\n e.ctrlKey ||\n ![keyCodes.home, keyCodes.end].includes(keyCode)\n ) {\n VSelect.options.methods.onKeyDown.call(this, e)\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 onSpaceDown (e: KeyboardEvent) { /* noop */ },\n onTabDown (e: KeyboardEvent) {\n VSelect.options.methods.onTabDown.call(this, e)\n this.updateSelf()\n },\n onUpDown (e: Event) {\n // Prevent screen from scrolling\n e.preventDefault()\n\n // For autocomplete / combobox, cycling\n // interfers with native up/down behavior\n // instead activate the menu\n this.activateMenu()\n },\n selectItem (item: object) {\n VSelect.options.methods.selectItem.call(this, item)\n this.setSearch()\n },\n setSelectedItems () {\n VSelect.options.methods.setSelectedItems.call(this)\n\n // #4273 Don't replace if searching\n // #4403 Don't replace if focused\n if (!this.isFocused) this.setSearch()\n },\n setSearch () {\n // Wait for nextTick so selectedItem\n // has had time to update\n this.$nextTick(() => {\n if (\n !this.multiple ||\n !this.internalSearch ||\n !this.isMenuActive\n ) {\n this.internalSearch = (\n !this.selectedItems.length ||\n this.multiple ||\n this.hasSlot\n )\n ? null\n : this.getText(this.selectedItem)\n }\n })\n },\n updateSelf () {\n if (!this.searchIsDirty &&\n !this.internalValue\n ) return\n\n if (!this.valueComparator(\n this.internalSearch,\n this.getValue(this.internalValue)\n )) {\n this.setSearch()\n }\n },\n hasItem (item: any): boolean {\n return this.selectedValues.indexOf(this.getValue(item)) > -1\n },\n onCopy (event: ClipboardEvent) {\n if (this.selectedIndex === -1) return\n\n const currentItem = this.selectedItems[this.selectedIndex]\n const currentItemText = this.getText(currentItem)\n event.clipboardData?.setData('text/plain', currentItemText)\n event.clipboardData?.setData('text/vnd.vuetify.autocomplete.item+plain', currentItemText)\n event.preventDefault()\n },\n },\n})\n","import { render, staticRenderFns } from \"./FuzzySearch.vue?vue&type=template&id=d1d8db3a&scoped=true&\"\nimport script from \"./FuzzySearch.vue?vue&type=script&lang=ts&\"\nexport * from \"./FuzzySearch.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FuzzySearch.vue?vue&type=style&index=0&id=d1d8db3a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d1d8db3a\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAutocomplete } from 'vuetify/lib/components/VAutocomplete';\ninstallComponents(component, {VAutocomplete})\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FuzzySearch.vue?vue&type=style&index=0&id=d1d8db3a&scoped=true&lang=css&\""],"sourceRoot":""}