@vuesax-alpha/nightly
Version:
A Component Library for Vue 3
147 lines (142 loc) • 4.79 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var lodashUnified = require('lodash-unified');
require('../../../hooks/index.js');
require('../../../utils/index.js');
var tokens = require('./tokens.js');
var option = require('./option.js');
var pluginVue_exportHelper = require('../../../_virtual/plugin-vue_export-helper.js');
var index = require('../../../hooks/use-namespace/index.js');
var error = require('../../../utils/error.js');
var strings = require('../../../utils/strings.js');
const __default__ = vue.defineComponent({
name: "VsOption"
});
const _sfc_main = vue.defineComponent({
...__default__,
props: option.optionProps,
setup(__props) {
const props = __props;
const ns = index.useNamespace("select");
const value = vue.toRef(props, "value");
const select = vue.inject(tokens.selectContextKey);
const selectRegister = vue.inject(tokens.selectRegisterKey);
const optionGroupRegister = vue.inject(tokens.optionGroupRegisterKey, void 0);
if (!select || !selectRegister) {
error.throwError(
"Select Option",
"`Option` component must be called inside `select` or `option-group` component"
);
}
const selectGroup = vue.inject(tokens.optionGroupContextKey, { disabled: false });
const el = vue.ref();
const isObject = vue.computed(() => lodashUnified.isObject(props.value));
const limitReached = vue.computed(() => {
if (select.multiple && select.multipleLimit) {
const modelValue = select.selectedArray;
return !isSelected.value && modelValue.length >= select.multipleLimit && select.multipleLimit > 0;
}
return false;
});
const currentLabel = vue.computed(() => {
return props.label || (isObject.value ? "" : `${props.value}`);
});
const isDisabled = vue.computed(() => {
return props.disabled || states.groupDisabled || limitReached.value;
});
const isSelected = vue.computed(() => {
return select.selectedArray.some((e) => e.value == states.value);
});
const states = vue.reactive({
index: -1,
el,
value,
currentLabel,
isDisabled,
groupDisabled: false,
visible: true,
hit: false,
hover: false,
created: props.created
});
const { unregister, updateOption } = selectRegister(states);
const { unregister: optionGroupUnregister } = (optionGroupRegister == null ? void 0 : optionGroupRegister(states)) || {};
vue.onBeforeUnmount(() => {
unregister();
optionGroupUnregister == null ? void 0 : optionGroupUnregister();
});
const hoverItem = () => {
if (!props.disabled && !selectGroup.disabled) {
select.hoverIndex = select.optionsArray.indexOf(states);
}
};
vue.watch(currentLabel, () => {
if (!props.created)
select.setSelected();
});
vue.watch(
() => props.value,
(val, oldVal) => {
if (!Object.is(val, oldVal)) {
updateOption(states);
}
if (!props.created)
select.setSelected();
}
);
vue.watch(
() => selectGroup.disabled,
(val) => {
states.groupDisabled = val;
},
{ immediate: true }
);
vue.watch(
() => select.queryChange,
(query) => {
const regexp = new RegExp(strings.escapeStringRegexp(`${query}`), "i");
states.visible = regexp.test(`${currentLabel.value}`) || props.created;
if (!states.visible) {
select.states.filteredOptionsCount--;
}
}
);
const optionKls = vue.computed(() => [
ns.e("option"),
ns.is("hover", states.hover),
ns.is("active", isSelected.value),
ns.is("disabled", isDisabled.value),
ns.is("hidden", !states.visible)
]);
const selectOptionClick = () => {
if (props.disabled !== true && states.groupDisabled !== true) {
select.handleOptionSelect(states, true);
}
};
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock(
"button",
{
ref_key: "el",
ref: el,
class: vue.normalizeClass(optionKls.value),
onMouseenter: hoverItem,
onClick: selectOptionClick
},
[
vue.renderSlot(_ctx.$slots, "default", {}, () => [
vue.createTextVNode(
vue.toDisplayString(currentLabel.value),
1
)
])
],
34
);
};
}
});
var Option = /* @__PURE__ */ pluginVue_exportHelper["default"](_sfc_main, [["__file", "/home/runner/work/vuesax-alpha/vuesax-alpha/packages/components/select/src/option.vue"]]);
exports["default"] = Option;
//# sourceMappingURL=option2.js.map