vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
3 lines (2 loc) • 1.59 kB
JavaScript
"use strict";const n=require("vue");require("../menu-item/index.cjs");const d=require("@vexip-ui/config"),b=require("@vexip-ui/utils"),i=require("./symbol.cjs"),E=require("./menu-item.cjs"),f=n.defineComponent({name:"MenuGroup",props:{label:String,children:Array},setup(N,{slots:r}){const a=d.useProps("menuGroup",N,{label:{default:"",static:!0},children:{default:()=>[],static:!0}}),c=n.inject(i.MENU_STATE,null),l=n.inject(i.MENU_ITEM_STATE,null),t=d.useNameHelper("menu-group"),m=d.useNameHelper("menu"),o=n.ref(1);l&&(o.value=l.indent+1);const v=n.computed(()=>({paddingLeft:l!=null&&l.isUsePopper?void 0:`calc(${m.gcv("indent-width")} * ${o.value})`})),h=n.computed(()=>(c==null?void 0:c.horizontal)&&!l);n.provide(i.MENU_GROUP_STATE,n.reactive({indent:o}));function g(){return n.renderSlot(r,"default",{},()=>{var s;if(!((s=a.children)!=null&&s.length))return[];const u=e=>n.createVNode(E,{label:e.label,icon:e.icon,"icon-props":e.iconProps,disabled:e.disabled,children:e.children,route:e.route,meta:e.meta},{default:()=>[e.name?b.callIfFunc(e.name):e.label]});return a.children.map(e=>e.group?n.createVNode(f,{key:e.label,label:e.name?b.callIfFunc(e.name):e.label},{default:()=>{var p;return[(p=e.children)==null?void 0:p.map(u)]}}):u(e))})}return()=>{var u;return h.value?(u=r.default)==null?void 0:u.call(r):n.createVNode("li",{class:t.b()},[n.createVNode("div",{class:t.be("label")},[n.createVNode("span",{class:t.be("title"),style:v.value},[r.label?r.label():a.label])]),n.createVNode("ul",{class:t.be("list")},[g()])])}}});module.exports=f;
//# sourceMappingURL=menu-group.cjs.map