64 lines
2.4 KiB
JavaScript
64 lines
2.4 KiB
JavaScript
import { defineComponent, inject, computed, ref, onMounted, openBlock, createElementBlock, normalizeClass, normalizeStyle, renderSlot, createCommentVNode } from 'vue';
|
|
import { useResizeObserver } from '@vueuse/core';
|
|
import { selectKey } from './token.mjs';
|
|
import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
|
|
import { BORDER_HORIZONTAL_WIDTH } from '../../../constants/form.mjs';
|
|
import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
|
|
|
|
const _sfc_main = defineComponent({
|
|
name: "ElSelectDropdown",
|
|
componentName: "ElSelectDropdown",
|
|
setup() {
|
|
const select = inject(selectKey);
|
|
const ns = useNamespace("select");
|
|
const popperClass = computed(() => select.props.popperClass);
|
|
const isMultiple = computed(() => select.props.multiple);
|
|
const isFitInputWidth = computed(() => select.props.fitInputWidth);
|
|
const minWidth = ref("");
|
|
function updateMinWidth() {
|
|
var _a;
|
|
const offsetWidth = (_a = select.selectRef) == null ? void 0 : _a.offsetWidth;
|
|
if (offsetWidth) {
|
|
minWidth.value = `${offsetWidth - BORDER_HORIZONTAL_WIDTH}px`;
|
|
} else {
|
|
minWidth.value = "";
|
|
}
|
|
}
|
|
onMounted(() => {
|
|
updateMinWidth();
|
|
useResizeObserver(select.selectRef, updateMinWidth);
|
|
});
|
|
return {
|
|
ns,
|
|
minWidth,
|
|
popperClass,
|
|
isMultiple,
|
|
isFitInputWidth
|
|
};
|
|
}
|
|
});
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
return openBlock(), createElementBlock("div", {
|
|
class: normalizeClass([_ctx.ns.b("dropdown"), _ctx.ns.is("multiple", _ctx.isMultiple), _ctx.popperClass]),
|
|
style: normalizeStyle({ [_ctx.isFitInputWidth ? "width" : "minWidth"]: _ctx.minWidth })
|
|
}, [
|
|
_ctx.$slots.header ? (openBlock(), createElementBlock("div", {
|
|
key: 0,
|
|
class: normalizeClass(_ctx.ns.be("dropdown", "header"))
|
|
}, [
|
|
renderSlot(_ctx.$slots, "header")
|
|
], 2)) : createCommentVNode("v-if", true),
|
|
renderSlot(_ctx.$slots, "default"),
|
|
_ctx.$slots.footer ? (openBlock(), createElementBlock("div", {
|
|
key: 1,
|
|
class: normalizeClass(_ctx.ns.be("dropdown", "footer"))
|
|
}, [
|
|
renderSlot(_ctx.$slots, "footer")
|
|
], 2)) : createCommentVNode("v-if", true)
|
|
], 6);
|
|
}
|
|
var ElSelectMenu = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "select-dropdown.vue"]]);
|
|
|
|
export { ElSelectMenu as default };
|
|
//# sourceMappingURL=select-dropdown.mjs.map
|