gamutable/js/vue-next-select.js

876 lines
31 KiB
JavaScript

this.VueNextSelect = (function (vue) {
'use strict';
var script$2 = {
inheritAttrs: false,
name: 'vue-input',
props: {
modelValue: {
required: true,
type: String,
},
placeholder: {
required: true,
type: String,
},
disabled: {
required: true,
type: Boolean,
},
tabindex: {
required: true,
type: Number,
},
autofocus: {
required: true,
type: Boolean,
},
},
emits: ['update:modelValue', 'input', 'change', 'focus', 'blur', 'escape'],
setup(props, context) {
const handleInput = event => {
context.emit('input', event);
context.emit('update:modelValue', event.target.value);
};
const handleChange = event => {
context.emit('change', event);
context.emit('update:modelValue', event.target.value);
};
const handleFocus = event => {
context.emit('focus', event);
};
const handleBlur = event => {
context.emit('blur', event);
};
const input = vue.ref(null);
const handleEscape = event => {
input.value.blur();
context.emit('escape', event);
};
vue.onMounted(() => {
if (props.autofocus) input.value.focus();
});
vue.onUpdated(() => {
if (props.autofocus) input.value.focus();
});
return {
handleInput,
handleChange,
handleFocus,
handleBlur,
input,
handleEscape,
}
},
};
const _hoisted_1$1 = { class: "vue-input" };
function render$3(_ctx, _cache, $props, $setup, $data, $options) {
return (vue.openBlock(), vue.createBlock("div", _hoisted_1$1, [
vue.renderSlot(_ctx.$slots, "prepend"),
vue.createVNode("input", {
ref: "input",
modelValue: $props.modelValue,
placeholder: $props.placeholder,
disabled: $props.disabled,
onInput: _cache[1] || (_cache[1] = (...args) => ($setup.handleInput && $setup.handleInput(...args))),
onChange: _cache[2] || (_cache[2] = (...args) => ($setup.handleChange && $setup.handleChange(...args))),
onFocus: _cache[3] || (_cache[3] = (...args) => ($setup.handleFocus && $setup.handleFocus(...args))),
onBlur: _cache[4] || (_cache[4] = (...args) => ($setup.handleBlur && $setup.handleBlur(...args))),
onKeyup: _cache[5] || (_cache[5] = vue.withKeys(vue.withModifiers((...args) => ($setup.handleEscape && $setup.handleEscape(...args)), ["exact"]), ["esc"])),
tabindex: $props.tabindex,
autofocus: $props.autofocus
}, null, 40 /* PROPS, HYDRATE_EVENTS */, ["modelValue", "placeholder", "disabled", "tabindex", "autofocus"]),
vue.renderSlot(_ctx.$slots, "append")
]))
}
script$2.render = render$3;
script$2.__file = "src/components/input.vue";
var script$1 = {
inheritAttrs: false,
name: 'vue-tags',
props: {
modelValue: {
required: true,
type: Array,
validator(modelValue) {
return modelValue.every(option => {
return typeof option.key !== undefined && option.label !== undefined && typeof option.selected === 'boolean'
})
},
},
collapseTags: {
type: Boolean,
},
},
emits: ['click'],
setup(props, context) {
const dataAttrs = vue.inject('dataAttrs');
const handleClick = event => {
context.emit('click', event);
};
return {
dataAttrs,
handleClick,
}
},
};
function render$2(_ctx, _cache, $props, $setup, $data, $options) {
return (vue.openBlock(), vue.createBlock("ul", vue.mergeProps({
class: ["vue-tags", { collapsed: $props.collapseTags }],
onMousedown: _cache[1] || (_cache[1] = vue.withModifiers(() => {}, ["prevent"])),
tabindex: "-1",
onClick: _cache[2] || (_cache[2] = (...args) => ($setup.handleClick && $setup.handleClick(...args)))
}, $setup.dataAttrs), [
(vue.openBlock(true), vue.createBlock(vue.Fragment, null, vue.renderList($props.modelValue, (option) => {
return (vue.openBlock(), vue.createBlock("li", {
key: option.key,
class: ["vue-tag", { selected: option.selected }]
}, [
vue.renderSlot(_ctx.$slots, "default", { option: option }, () => [
vue.createVNode("span", null, vue.toDisplayString(option.label), 1 /* TEXT */)
])
], 2 /* CLASS */))
}), 128 /* KEYED_FRAGMENT */))
], 16 /* FULL_PROPS */))
}
script$1.render = render$2;
script$1.__file = "src/components/tags.vue";
var script = {
inheritAttrs: false,
name: 'vue-dropdown',
props: {
modelValue: {
required: true,
type: Array,
validator(modelValue) {
return modelValue.every(option => {
return typeof option.key !== undefined && option.label !== undefined && typeof option.selected === 'boolean'
})
},
},
headerHeight: {
required: true,
type: String,
},
},
emits: ['click', 'mousemove'],
setup(props, context) {
const dataAttrs = vue.inject('dataAttrs');
const handleClick = (event, option) => {
if (option.disabled) return
context.emit('click', event, option);
};
const handleMousemove = (event, option, index) => {
context.emit('mousemove', event, option, index);
};
return {
dataAttrs,
handleClick,
handleMousemove,
}
},
};
function render$1(_ctx, _cache, $props, $setup, $data, $options) {
return (vue.openBlock(), vue.createBlock("ul", vue.mergeProps({
class: "vue-dropdown",
onMousedown: _cache[1] || (_cache[1] = vue.withModifiers(() => {}, ["prevent"])),
style: { top: $props.headerHeight }
}, $setup.dataAttrs), [
(vue.openBlock(true), vue.createBlock(vue.Fragment, null, vue.renderList($props.modelValue, (option, index) => {
return (vue.openBlock(), vue.createBlock(vue.Fragment, {
key: option.key
}, [
(option.visible && option.hidden === false)
? (vue.openBlock(), vue.createBlock("li", {
key: 0,
onClick: $event => ($setup.handleClick($event, option)),
class: ["vue-dropdown-item", { selected: option.selected, disabled: option.disabled, highlighted: option.highlighted }],
onMousemove: vue.withModifiers($event => ($setup.handleMousemove($event, option, index)), ["self"])
}, [
vue.renderSlot(_ctx.$slots, "default", { option: option }, () => [
vue.createVNode("span", null, vue.toDisplayString(option.label), 1 /* TEXT */)
])
], 42 /* CLASS, PROPS, HYDRATE_EVENTS */, ["onClick", "onMousemove"]))
: vue.createCommentVNode("v-if", true)
], 64 /* STABLE_FRAGMENT */))
}), 128 /* KEYED_FRAGMENT */))
], 16 /* FULL_PROPS */))
}
script.render = render$1;
script.__file = "src/components/dropdown.vue";
const isSameOption = (option1, option2, { valueBy }) => {
return valueBy(option1) === valueBy(option2)
};
const hasOption = (options, option, { valueBy }) => {
return options.some(_option => isSameOption(_option, option, { valueBy }))
};
const getOptionByValue = (options, value, { valueBy }) => {
return options.find(option => valueBy(option) === value)
};
const addOption = (selectedOptions, option, { max, valueBy }) => {
if (hasOption(selectedOptions, option, { valueBy })) return selectedOptions
if (selectedOptions.length >= max) return selectedOptions
return selectedOptions.concat(option)
};
const removeOption = (selectedOptions, option, { min, valueBy }) => {
if (hasOption(selectedOptions, option, { valueBy }) === false) return selectedOptions
if (selectedOptions.length <= min) return selectedOptions
return selectedOptions.filter(_option => isSameOption(_option, option, { valueBy }) === false)
};
const createComputedForGetterFunction = maybePathFunc =>
vue.computed(() => {
return typeof maybePathFunc.value === 'function'
? maybePathFunc.value
: typeof maybePathFunc.value === 'string'
? option => maybePathFunc.value.split('.').reduce((value, key) => value[key], option)
: option => option
});
var normalize = props => {
const trackBy = createComputedForGetterFunction(vue.toRef(props, 'trackBy'));
const labelBy = createComputedForGetterFunction(vue.toRef(props, 'labelBy'));
const valueBy = createComputedForGetterFunction(vue.toRef(props, 'valueBy'));
const disabledBy = createComputedForGetterFunction(vue.toRef(props, 'disabledBy'));
const min = vue.computed(() => (props.multiple ? props.min : Math.min(1, props.min)));
const max = vue.computed(() => (props.multiple ? props.max : 1));
const options = vue.isRef(props.options) || vue.isReactive(props.options) ? vue.toRef(props, 'options') : vue.ref(props.options);
return {
trackBy,
labelBy,
valueBy,
disabledBy,
min,
max,
options,
}
};
var useHeight = function (element, watchSource) {
var height = vue.ref('0');
var calcHeaderHeight = function () {
vue.nextTick(function () {
if (!element.value)
return;
height.value = window.getComputedStyle(element.value).height;
});
};
vue.watch(watchSource, calcHeaderHeight);
vue.onMounted(calcHeaderHeight);
return height;
};
var usePointer = function (endIndex) {
var highlightedIndex = vue.ref();
var pointerForward = function () { return ++highlightedIndex.value; };
var pointerBackward = function () { return --highlightedIndex.value; };
var pointerSet = function (index) { return (highlightedIndex.value = index); };
vue.watchEffect(function () {
if (endIndex.value <= 0) {
highlightedIndex.value = undefined;
}
else if (highlightedIndex.value === undefined) {
highlightedIndex.value = 0;
}
else if (highlightedIndex.value < 0) {
highlightedIndex.value = endIndex.value - 1;
}
else if (endIndex.value <= highlightedIndex.value) {
highlightedIndex.value = 0;
}
});
return {
highlightedIndex: highlightedIndex,
pointerForward: pointerForward,
pointerBackward: pointerBackward,
pointerSet: pointerSet,
};
};
var version = "1.3.0";
const VueSelect = {
name: 'vue-select',
inheritAttrs: false,
props: {
modelValue: {
required: true,
},
emptyModelValue: {
default: null,
},
options: {
required: true,
type: Array,
},
visibleOptions: {
type: [Array, null],
default: null,
},
multiple: {
default: false,
type: Boolean,
},
min: {
default: 0,
type: Number,
},
max: {
default: Infinity,
type: Number,
},
closeOnSelect: {
default: false,
type: Boolean,
},
clearOnSelect: {
default: false,
type: Boolean,
},
trackBy: {
type: [String, Function],
},
hideSelected: {
default: false,
type: Boolean,
},
labelBy: {
type: [String, Function],
},
valueBy: {
type: [String, Function],
},
disabledBy: {
default: 'disabled',
type: [String, Function],
},
disabled: {
default: false,
type: Boolean,
},
loading: {
default: false,
type: Boolean,
},
placeholder: {
default: 'Select option',
type: String,
},
searchPlaceholder: {
default: 'Type to search',
type: String,
},
searchable: {
default: false,
type: Boolean,
},
clearOnClose: {
default: false,
type: Boolean,
},
taggable: {
default: false,
type: Boolean,
},
collapseTags: {
default: false,
type: Boolean,
},
tabindex: {
default: 0,
type: Number,
},
autofocus: {
default: false,
type: Boolean,
},
},
emits: [
'update:modelValue',
'selected',
'removed',
'opened',
'closed',
'search:input',
'search:change',
'search:focus',
'search:blur',
],
setup(props, context) {
const { trackBy, labelBy, valueBy, disabledBy, min, max, options } = normalize(props);
const instance = vue.getCurrentInstance();
const wrapper = vue.ref();
const input = vue.ref();
const isFocusing = vue.ref(false);
vue.watch(
() => isFocusing.value,
() => {
if (isFocusing.value) {
context.emit('opened');
if (props.searchable) {
if (input.value && input.value._.refs.input !== document.activeElement) {
input.value._.refs.input.focus();
}
context.emit('search:focus');
} else {
wrapper.value.focus();
}
} else {
if (props.searchable) {
if (input.value && input.value._.refs.input === document.activeElement) {
input.value._.refs.input.blur();
}
if (props.clearOnClose) clearInput();
context.emit('search:blur');
} else {
wrapper.value.blur();
}
context.emit('closed');
}
},
);
const focus = () => {
if (props.disabled) return
isFocusing.value = true;
};
const blur = () => {
isFocusing.value = false;
};
const toggle = () => {
if (isFocusing.value) blur();
else focus();
};
vue.watch(
() => props.disabled,
() => blur(),
);
const header = vue.ref();
const headerHeight = useHeight(header, () => props.modelValue);
const inputHeight = vue.computed(() => (props.searchable && props.multiple && props.taggable ? '22px' : '0px'));
const headerAndInputHeight = vue.computed(() => parseFloat(headerHeight.value) + parseFloat(inputHeight.value) + 'px');
// input
const searchingInputValue = vue.ref('');
const handleInputForInput = event => {
context.emit('search:input', event);
};
const handleChangeForInput = event => {
context.emit('search:change', event);
};
const handleFocusForInput = event => {
focus();
};
const handleBlurForInput = event => {
blur();
};
const searchedOptions = vue.computed(() => {
const hasSearchListeners = instance.vnode.props['onSearch:input'] || instance.vnode.props['onSearch:change'];
return searchingInputValue.value && !hasSearchListeners
? options.value.filter(option => (labelBy.value(option) + '').indexOf(searchingInputValue.value) > -1)
: undefined
});
// sync model value
const normalizedModelValue = vue.ref([]);
const isSynchronoused = () => {
if (props.multiple) {
if (Array.isArray(props.modelValue) === false) return false
if (normalizedModelValue.value.length !== props.modelValue.length) return false
if (
Object.keys(normalizedModelValue.value).some(
index =>
normalizedModelValue.value[index] !==
getOptionByValue(options.value, props.modelValue[index], { valueBy: valueBy.value }),
)
)
return false
} else {
if (normalizedModelValue.value.length === 0 && props.modelValue !== props.emptyModelValue) return false
if (normalizedModelValue.value.length === 1 && props.modelValue === props.emptyModelValue) return false
if (
normalizedModelValue.value[0] !==
getOptionByValue(options.value, props.modelValue, { valueBy: valueBy.value })
)
return false
}
return true
};
const syncFromModelValue = () => {
if (isSynchronoused()) return
normalizedModelValue.value = [];
const modelValue = props.multiple
? props.modelValue
: props.modelValue === props.emptyModelValue
? []
: [props.modelValue];
for (const value of modelValue) {
const option = getOptionByValue(options.value, value, { valueBy: valueBy.value });
// guarantee options has modelValue
if (hasOption(options.value, option, { valueBy: valueBy.value }) === false) continue
normalizedModelValue.value = addOption(normalizedModelValue.value, option, {
max: Infinity,
valueBy: valueBy.value,
});
}
};
syncFromModelValue();
vue.watch(
() => props.modelValue,
() => syncFromModelValue(),
{ deep: true },
);
const syncToModelValue = () => {
if (isSynchronoused()) return
const selectedValues = normalizedModelValue.value.map(option => valueBy.value(option));
if (props.multiple) {
context.emit('update:modelValue', selectedValues);
} else {
if (selectedValues.length) context.emit('update:modelValue', selectedValues[0]);
else context.emit('update:modelValue', props.emptyModelValue);
}
};
vue.watch(
() => normalizedModelValue,
() => syncToModelValue(),
{ deep: true },
);
// guarantee options has modelValue
vue.watch(
() => options.value,
() => {
const selectedValueSet = new Set(normalizedModelValue.value.map(option => valueBy.value(option)));
normalizedModelValue.value = options.value.filter(option => selectedValueSet.has(valueBy.value(option)));
},
{ deep: true },
);
const addOrRemoveOption = (event, option) => {
if (props.disabled) return
option = option.originalOption;
if (hasOption(normalizedModelValue.value, option, { valueBy: valueBy.value })) {
normalizedModelValue.value = removeOption(normalizedModelValue.value, option, {
min: min.value,
valueBy: valueBy.value,
});
context.emit('removed', option);
} else {
if (!props.multiple) {
const removingOption = normalizedModelValue.value[0];
normalizedModelValue.value = removeOption(normalizedModelValue.value, normalizedModelValue.value[0], {
min: 0,
valueBy: valueBy.value,
});
context.emit('removed', removingOption);
}
normalizedModelValue.value = addOption(normalizedModelValue.value, option, {
max: max.value,
valueBy: valueBy.value,
});
context.emit('selected', option);
}
if (props.closeOnSelect === true) isFocusing.value = false;
if (props.clearOnSelect === true && searchingInputValue.value) clearInput();
};
const clearInput = () => {
// simulate clear input value
input.value._.refs.input.value = '';
input.value._.refs.input.dispatchEvent(new Event('input'));
input.value._.refs.input.dispatchEvent(new Event('change'));
};
const renderedOptions = vue.computed(() => props.visibleOptions ?? searchedOptions.value ?? options.value);
const optionsWithInfo = vue.computed(() => {
const selectedValueSet = new Set(normalizedModelValue.value.map(option => valueBy.value(option)));
const visibleValueSet = new Set(renderedOptions.value.map(option => valueBy.value(option)));
return options.value.map((option, index) => ({
key: trackBy.value(option),
label: labelBy.value(option),
selected: selectedValueSet.has(valueBy.value(option)),
disabled: disabledBy.value(option),
visible: visibleValueSet.has(valueBy.value(option)),
hidden: props.hideSelected ? selectedValueSet.has(valueBy.value(option)) : false,
highlighted: index === highlightedIndex.value,
originalOption: option,
}))
});
const { highlightedIndex, pointerForward, pointerBackward, pointerSet } = usePointer(
vue.computed(() => renderedOptions.value.length),
);
const dataAttrs = vue.computed(() => ({
'data-is-focusing': isFocusing.value,
'data-visible-length': optionsWithInfo.value.filter(option => option.visible && option.hidden === false).length,
'data-not-selected-length': options.value.length - optionsWithInfo.value.filter(option => option.selected).length,
'data-selected-length': optionsWithInfo.value.filter(option => option.selected).length,
'data-addable': optionsWithInfo.value.filter(option => option.selected).length < max.value,
'data-removable': optionsWithInfo.value.filter(option => option.selected).length > min.value,
'data-total-length': options.value.length,
'data-multiple': props.multiple,
}));
vue.provide('dataAttrs', dataAttrs);
const innerPlaceholder = vue.computed(() => {
const selectedOptions = optionsWithInfo.value.filter(option => option.selected);
if (props.multiple) {
if (selectedOptions.length === 0) {
return props.placeholder
} else if (selectedOptions.length === 1) {
return '1 option selected'
} else {
return selectedOptions.length + ' options selected'
}
} else {
if (selectedOptions.length === 0) {
return props.placeholder
} else {
return selectedOptions[0].label + ''
}
}
});
return {
isFocusing,
wrapper,
input,
focus,
blur,
toggle,
header,
headerAndInputHeight,
searchingInputValue,
handleInputForInput,
handleChangeForInput,
handleFocusForInput,
handleBlurForInput,
optionsWithInfo,
addOrRemoveOption,
dataAttrs,
innerPlaceholder,
highlightedIndex,
pointerForward,
pointerBackward,
pointerSet,
}
},
components: {
VInput: script$2,
VTags: script$1,
VDropdown: script,
},
};
VueSelect.__VERSION__ = version;
var _imports_0 = 'data:image/svg+xml;base64,PHN2ZyBpZD0iZGVsZXRlIiBkYXRhLW5hbWU9ImRlbGV0ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmRlbGV0ZTwvdGl0bGU+PHBhdGggZD0iTTI1NiwyNEMzODMuOSwyNCw0ODgsMTI4LjEsNDg4LDI1NlMzODMuOSw0ODgsMjU2LDQ4OCwyNC4wNiwzODMuOSwyNC4wNiwyNTYsMTI4LjEsMjQsMjU2LDI0Wk0wLDI1NkMwLDM5Ny4xNiwxMTQuODQsNTEyLDI1Niw1MTJTNTEyLDM5Ny4xNiw1MTIsMjU2LDM5Ny4xNiwwLDI1NiwwLDAsMTE0Ljg0LDAsMjU2WiIgZmlsbD0iIzViNWI1ZiIvPjxwb2x5Z29uIHBvaW50cz0iMzgyIDE3Mi43MiAzMzkuMjkgMTMwLjAxIDI1NiAyMTMuMjkgMTcyLjcyIDEzMC4wMSAxMzAuMDEgMTcyLjcyIDIxMy4yOSAyNTYgMTMwLjAxIDMzOS4yOCAxNzIuNzIgMzgyIDI1NiAyOTguNzEgMzM5LjI5IDM4MS45OSAzODIgMzM5LjI4IDI5OC43MSAyNTYgMzgyIDE3Mi43MiIgZmlsbD0iIzViNWI1ZiIvPjwvc3ZnPg==';
const _hoisted_1 = {
ref: "header",
class: "vue-select-header"
};
const _hoisted_2 = {
key: 0,
class: "vue-input"
};
const _hoisted_3 = { class: "icon loading" };
const _hoisted_4 = /*#__PURE__*/vue.createVNode("div", null, null, -1 /* HOISTED */);
const _hoisted_5 = /*#__PURE__*/vue.createVNode("div", null, null, -1 /* HOISTED */);
const _hoisted_6 = /*#__PURE__*/vue.createVNode("div", null, null, -1 /* HOISTED */);
const _hoisted_7 = { class: "icon loading" };
const _hoisted_8 = /*#__PURE__*/vue.createVNode("div", null, null, -1 /* HOISTED */);
const _hoisted_9 = /*#__PURE__*/vue.createVNode("div", null, null, -1 /* HOISTED */);
const _hoisted_10 = /*#__PURE__*/vue.createVNode("div", null, null, -1 /* HOISTED */);
function render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_v_tags = vue.resolveComponent("v-tags");
const _component_v_input = vue.resolveComponent("v-input");
const _component_v_dropdown = vue.resolveComponent("v-dropdown");
return (vue.openBlock(), vue.createBlock("div", vue.mergeProps({
ref: "wrapper",
class: ["vue-select", { disabled: _ctx.disabled }],
tabindex: _ctx.isFocusing ? -1 : _ctx.tabindex,
onFocus: _cache[10] || (_cache[10] = (...args) => (_ctx.focus && _ctx.focus(...args))),
onBlur: _cache[11] || (_cache[11] = () => (_ctx.searchable ? false : _ctx.blur()))
}, _ctx.dataAttrs, {
onKeypress: _cache[12] || (_cache[12] = vue.withKeys(
() => _ctx.highlightedIndex !== undefined && _ctx.addOrRemoveOption(_ctx.$event, _ctx.optionsWithInfo[_ctx.highlightedIndex])
, ["enter"])),
onKeydown: [
_cache[13] || (_cache[13] = vue.withKeys(vue.withModifiers((...args) => (_ctx.pointerForward && _ctx.pointerForward(...args)), ["prevent"]), ["down"])),
_cache[14] || (_cache[14] = vue.withKeys(vue.withModifiers((...args) => (_ctx.pointerBackward && _ctx.pointerBackward(...args)), ["prevent"]), ["up"]))
]
}), [
vue.createVNode("div", _hoisted_1, [
((_ctx.multiple && _ctx.taggable && _ctx.modelValue.length === 0) || (_ctx.searchable === false && _ctx.taggable === false))
? (vue.openBlock(), vue.createBlock("div", _hoisted_2, [
vue.createVNode("input", {
placeholder: _ctx.innerPlaceholder,
readonly: "",
onClick: _cache[1] || (_cache[1] = (...args) => (_ctx.focus && _ctx.focus(...args)))
}, null, 8 /* PROPS */, ["placeholder"])
]))
: vue.createCommentVNode("v-if", true),
(_ctx.multiple && _ctx.taggable)
? (vue.openBlock(), vue.createBlock(vue.Fragment, { key: 1 }, [
vue.createVNode(_component_v_tags, {
modelValue: _ctx.optionsWithInfo,
"collapse-tags": _ctx.collapseTags,
tabindex: "-1",
onClick: _ctx.focus
}, {
default: vue.withCtx(({ option }) => [
vue.renderSlot(_ctx.$slots, "tag", {
option: option.originalOption
}, () => [
vue.createVNode("span", null, vue.toDisplayString(option.label), 1 /* TEXT */),
vue.createVNode("img", {
src: _imports_0,
alt: "delete tag",
class: "icon delete",
onClick: vue.withModifiers(() => _ctx.addOrRemoveOption(_ctx.$event, option), ["prevent","stop"])
}, null, 8 /* PROPS */, ["onClick"])
])
]),
_: 1 /* STABLE */
}, 8 /* PROPS */, ["modelValue", "collapse-tags", "onClick"]),
vue.createVNode("span", {
class: ["icon arrow-downward", { active: _ctx.isFocusing }],
onClick: _cache[2] || (_cache[2] = (...args) => (_ctx.toggle && _ctx.toggle(...args))),
onMousedown: _cache[3] || (_cache[3] = vue.withModifiers(() => {}, ["prevent","stop"]))
}, null, 34 /* CLASS, HYDRATE_EVENTS */)
], 64 /* STABLE_FRAGMENT */))
: (vue.openBlock(), vue.createBlock(vue.Fragment, { key: 2 }, [
(_ctx.searchable)
? (vue.openBlock(), vue.createBlock(_component_v_input, {
key: 0,
ref: "input",
modelValue: _ctx.searchingInputValue,
"onUpdate:modelValue": _cache[4] || (_cache[4] = $event => (_ctx.searchingInputValue = $event)),
disabled: _ctx.disabled,
placeholder: _ctx.isFocusing ? _ctx.searchPlaceholder : _ctx.innerPlaceholder,
onInput: _ctx.handleInputForInput,
onChange: _ctx.handleChangeForInput,
onFocus: _ctx.handleFocusForInput,
onBlur: _ctx.handleBlurForInput,
onEscape: _ctx.blur,
autofocus: _ctx.autofocus || (_ctx.taggable && _ctx.searchable),
tabindex: _ctx.tabindex
}, null, 8 /* PROPS */, ["modelValue", "disabled", "placeholder", "onInput", "onChange", "onFocus", "onBlur", "onEscape", "autofocus", "tabindex"]))
: vue.createCommentVNode("v-if", true),
vue.withDirectives(vue.createVNode("span", _hoisted_3, [
_hoisted_4,
_hoisted_5,
_hoisted_6
], 512 /* NEED_PATCH */), [
[vue.vShow, _ctx.loading]
]),
vue.withDirectives(vue.createVNode("span", {
class: ["icon arrow-downward", { active: _ctx.isFocusing }],
onClick: _cache[5] || (_cache[5] = (...args) => (_ctx.toggle && _ctx.toggle(...args))),
onMousedown: _cache[6] || (_cache[6] = vue.withModifiers(() => {}, ["prevent","stop"]))
}, null, 34 /* CLASS, HYDRATE_EVENTS */), [
[vue.vShow, _ctx.loading === false]
])
], 64 /* STABLE_FRAGMENT */))
], 512 /* NEED_PATCH */),
(_ctx.multiple && _ctx.taggable && _ctx.searchable)
? vue.withDirectives((vue.openBlock(), vue.createBlock(_component_v_input, {
key: 0,
ref: "input",
modelValue: _ctx.searchingInputValue,
"onUpdate:modelValue": _cache[7] || (_cache[7] = $event => (_ctx.searchingInputValue = $event)),
disabled: _ctx.disabled,
placeholder: _ctx.searchPlaceholder,
onInput: _ctx.handleInputForInput,
onChange: _ctx.handleChangeForInput,
onFocus: _ctx.handleFocusForInput,
onBlur: _ctx.handleBlurForInput,
onEscape: _ctx.blur,
tabindex: _ctx.tabindex,
autofocus: _ctx.autofocus || (_ctx.taggable && _ctx.searchable)
}, {
append: vue.withCtx(() => [
vue.withDirectives(vue.createVNode("span", _hoisted_7, [
_hoisted_8,
_hoisted_9,
_hoisted_10
], 512 /* NEED_PATCH */), [
[vue.vShow, _ctx.loading]
])
]),
_: 1 /* STABLE */
}, 8 /* PROPS */, ["modelValue", "disabled", "placeholder", "onInput", "onChange", "onFocus", "onBlur", "onEscape", "tabindex", "autofocus"])), [
[vue.vShow, _ctx.isFocusing]
])
: vue.createCommentVNode("v-if", true),
vue.withDirectives(vue.createVNode(_component_v_dropdown, {
modelValue: _ctx.optionsWithInfo,
"onUpdate:modelValue": _cache[8] || (_cache[8] = $event => (_ctx.optionsWithInfo = $event)),
onClick: _ctx.addOrRemoveOption,
onMousemove: _cache[9] || (_cache[9] = (ev, option, index) => _ctx.pointerSet(index)),
"header-height": _ctx.headerAndInputHeight
}, {
default: vue.withCtx(({ option }) => [
vue.renderSlot(_ctx.$slots, "dropdown-item", {
option: option.originalOption
}, () => [
vue.createVNode("span", null, vue.toDisplayString(option.label), 1 /* TEXT */)
])
]),
_: 1 /* STABLE */
}, 8 /* PROPS */, ["modelValue", "onClick", "header-height"]), [
[vue.vShow, _ctx.isFocusing]
])
], 16 /* FULL_PROPS */, ["tabindex"]))
}
VueSelect.render = render;
VueSelect.__file = "src/index.vue";
return VueSelect;
}(Vue));