element-plus
Version:
A Component Library for Vue3.0
85 lines (75 loc) • 2.4 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var mitt = require('mitt');
var constants = require('../utils/constants');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var mitt__default = /*#__PURE__*/_interopDefaultLegacy(mitt);
var script = vue.defineComponent({
name: "ElCollapse",
props: {
accordion: Boolean,
modelValue: {
type: [Array, String, Number],
default: () => []
}
},
emits: [constants.UPDATE_MODEL_EVENT, constants.CHANGE_EVENT],
setup(props, { emit }) {
const activeNames = vue.ref([].concat(props.modelValue));
const collapseMitt = mitt__default['default']();
const setActiveNames = (_activeNames) => {
activeNames.value = [].concat(_activeNames);
const value = props.accordion ? activeNames.value[0] : activeNames.value;
emit(constants.UPDATE_MODEL_EVENT, value);
emit(constants.CHANGE_EVENT, value);
};
const handleItemClick = (name) => {
if (props.accordion) {
setActiveNames((activeNames.value[0] || activeNames.value[0] === 0) && activeNames.value[0] === name ? "" : name);
} else {
const _activeNames = activeNames.value.slice(0);
const index = _activeNames.indexOf(name);
if (index > -1) {
_activeNames.splice(index, 1);
} else {
_activeNames.push(name);
}
setActiveNames(_activeNames);
}
};
vue.watch(() => props.modelValue, () => {
activeNames.value = [].concat(props.modelValue);
});
collapseMitt.on("item-click", handleItemClick);
vue.onUnmounted(() => {
collapseMitt.all.clear();
});
vue.provide("collapse", {
activeNames,
collapseMitt
});
return {
activeNames,
setActiveNames,
handleItemClick
};
}
});
const _hoisted_1 = {
class: "el-collapse",
role: "tablist",
"aria-multiselectable": "true"
};
function render(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createBlock("div", _hoisted_1, [
vue.renderSlot(_ctx.$slots, "default")
]);
}
script.render = render;
script.__file = "packages/collapse/src/collapse.vue";
script.install = (app) => {
app.component(script.name, script);
};
const _Collapse = script;
exports.default = _Collapse;
;