UNPKG

song-ui-u

Version:

vue3 + js的PC前端组件库

67 lines (64 loc) 1.79 kB
import { defineComponent, ref, watch, provide, createVNode } from 'vue'; import { useNamespace } from '../../../hook/use-namespace/index.mjs'; import 'song-ui-pro-icon'; import '../../../hook/use-zindex/index.mjs'; import { COLLAPSE_KEY } from '../constants.mjs'; var collapse = /* @__PURE__ */ defineComponent({ name: "x-collapse", props: { modelValue: { type: Array, default: () => [] }, accordion: { type: Boolean, default: false } }, emits: ["update:modelValue", "change"], setup(props, { slots, emit }) { const ns = useNamespace("collapse"); const activeNames = ref(props.modelValue || []); const collapseItems = ref([]); watch(() => props.modelValue, (val) => { if (val !== activeNames.value) { activeNames.value = val; } }); const setCollapseItems = (collapseItem) => { collapseItems.value.push(collapseItem); }; const handleItemClick = (name) => { if (props.accordion) { activeNames.value = activeNames.value[0] === name ? [] : [name]; } else { const index = activeNames.value.indexOf(name); if (index > -1) { activeNames.value.splice(index, 1); } else { activeNames.value.push(name); } } emit("update:modelValue", activeNames.value); emit("change", activeNames.value); }; const isItemActive = (name) => { return activeNames.value.includes(name); }; provide(COLLAPSE_KEY, { setCollapseItems, handleItemClick, isItemActive, props, collapseItems }); return () => createVNode("div", { "class": ns.b() }, [slots.default?.()]); } }); export { collapse as default }; //# sourceMappingURL=collapse.mjs.map