vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 5.57 kB
Source Map (JSON)
{"version":3,"file":"menu-group.cjs","sources":["../../../components/menu/menu-group.tsx"],"sourcesContent":["import { MenuItem } from '@/components/menu-item'\n\nimport { computed, defineComponent, inject, provide, reactive, ref, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc } from '@vexip-ui/utils'\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { MenuOptions } from './symbol'\n\nconst MenuGroup = defineComponent({\n name: 'MenuGroup',\n props: {\n label: String,\n children: Array as PropType<MenuOptions[]>,\n },\n setup(_props, { slots }) {\n const props = useProps('menuGroup', _props, {\n label: {\n default: '',\n static: true,\n },\n children: {\n default: () => [],\n static: true,\n },\n })\n\n const menuState = inject(MENU_STATE, null)\n const parentItemState = inject(MENU_ITEM_STATE, null)\n\n const nh = useNameHelper('menu-group')\n const menuNh = useNameHelper('menu')\n const indent = ref(1)\n\n if (parentItemState) {\n indent.value = parentItemState.indent + 1\n }\n\n const titleStyle = computed(() => {\n return {\n paddingLeft: parentItemState?.isUsePopper\n ? undefined\n : `calc(${menuNh.gcv('indent-width')} * ${indent.value})`,\n }\n })\n const onlyShowSlot = computed(() => {\n return menuState?.horizontal && !parentItemState\n })\n\n provide(MENU_GROUP_STATE, reactive({ indent }))\n\n function renderChildren() {\n return renderSlot(slots, 'default', {}, () => {\n if (!props.children?.length) {\n return []\n }\n\n const renderItem = (item: MenuOptions) => (\n <MenuItem\n label={item.label}\n icon={item.icon}\n icon-props={item.iconProps}\n disabled={item.disabled}\n children={item.children}\n route={item.route}\n meta={item.meta}\n >\n {item.name ? callIfFunc(item.name) : item.label}\n </MenuItem>\n )\n\n return props.children.map(child => {\n if (child.group) {\n return (\n <MenuGroup\n key={child.label}\n label={child.name ? callIfFunc(child.name) : child.label}\n >\n {child.children?.map(renderItem)}\n </MenuGroup>\n )\n }\n\n return renderItem(child)\n })\n })\n }\n\n return () => {\n if (onlyShowSlot.value) {\n return slots.default?.()\n }\n\n return (\n <li class={nh.b()}>\n <div class={nh.be('label')}>\n <span class={nh.be('title')} style={titleStyle.value}>\n {slots.label ? slots.label() : props.label}\n </span>\n </div>\n <ul class={nh.be('list')}>{renderChildren()}</ul>\n </li>\n )\n }\n },\n})\n\n// eslint-disable-next-line vue/require-direct-export\nexport default MenuGroup\n"],"names":["MenuGroup","defineComponent","name","props","label","String","children","Array","setup","_props","slots","useProps","default","static","menuState","inject","MENU_STATE","parentItemState","MENU_ITEM_STATE","nh","useNameHelper","menuNh","indent","ref","value","titleStyle","computed","paddingLeft","isUsePopper","undefined","gcv","onlyShowSlot","horizontal","provide","MENU_GROUP_STATE","reactive","renderChildren","renderSlot","length","renderItem","item","_createVNode","MenuItem","icon","iconProps","disabled","route","meta","callIfFunc","map","child","group","b","be"],"mappings":"8LAWMA,EAAYC,EAAAA,gBAAgB,CAChCC,KAAM,YACNC,MAAO,CACLC,MAAOC,OACPC,SAAUC,KACX,EACDC,MAAMC,EAAQ,CAAEC,MAAAA,CAAM,EAAG,CACvB,MAAMP,EAAQQ,EAAAA,SAAS,YAAaF,EAAQ,CAC1CL,MAAO,CACLQ,QAAS,GACTC,OAAQ,EACT,EACDP,SAAU,CACRM,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACV,CACF,CAAC,EAEKC,EAAYC,EAAAA,OAAOC,EAAU,WAAE,IAAI,EACnCC,EAAkBF,EAAAA,OAAOG,EAAe,gBAAE,IAAI,EAE9CC,EAAKC,EAAa,cAAC,YAAY,EAC/BC,EAASD,EAAa,cAAC,MAAM,EAC7BE,EAASC,EAAG,IAAC,CAAC,EAEhBN,IACFK,EAAOE,MAAQP,EAAgBK,OAAS,GAG1C,MAAMG,EAAaC,EAAAA,SAAS,KACnB,CACLC,YAAaV,GAAAA,MAAAA,EAAiBW,YAC1BC,OACA,QAAQR,EAAOS,IAAI,cAAc,CAAC,MAAMR,EAAOE,KAAK,GACzD,EACF,EACKO,EAAeL,EAAAA,SAAS,KACrBZ,GAAAA,YAAAA,EAAWkB,aAAc,CAACf,CAClC,EAEDgB,EAAO,QAACC,EAAgB,iBAAEC,WAAS,CAAEb,OAAAA,CAAO,CAAC,CAAC,EAE9C,SAASc,GAAiB,CACxB,OAAOC,aAAW3B,EAAO,UAAW,CAAE,EAAE,IAAM,OAC5C,GAAI,GAACP,EAAAA,EAAMG,WAANH,MAAAA,EAAgBmC,QACnB,MAAO,CAAE,EAGX,MAAMC,EAAcC,GAAiBC,EAAA,YAAAC,EAAA,CAAA,MAE1BF,EAAKpC,MAAK,KACXoC,EAAKG,KAAI,aACHH,EAAKI,UAAS,SAChBJ,EAAKK,SAAQ,SACbL,EAAKlC,SAAQ,MAChBkC,EAAKM,MAAK,KACXN,EAAKO,IAAI,EAAA,CAAAnC,QAAAA,IAAA,CAEd4B,EAAKtC,KAAO8C,EAAU,WAACR,EAAKtC,IAAI,EAAIsC,EAAKpC,KAAK,EAElD,EAED,OAAOD,EAAMG,SAAS2C,IAAIC,GACpBA,EAAMC,MACRV,EAAAA,YAAAzC,EAAA,CAAA,IAESkD,EAAM9C,MAAK,MACT8C,EAAMhD,KAAO8C,EAAAA,WAAWE,EAAMhD,IAAI,EAAIgD,EAAM9C,KAAK,EAAA,CAAAQ,QAAAA,IAAAA,OAAA,QAEvDsC,EAAAA,EAAM5C,WAAN4C,YAAAA,EAAgBD,IAAIV,EAAW,EAAA,CAAA,EAK/BA,EAAWW,CAAK,CACxB,CACH,CAAC,CACH,CAEA,MAAO,IAAM,OACX,OAAInB,EAAaP,OACRd,EAAAA,EAAME,UAANF,YAAAA,EAAAA,KAAAA,GAGT+B,EAAAA,YAAA,KAAA,CAAA,MACatB,EAAGiC,EAAC,CAAE,EAAA,CAAAX,EAAA,YAAA,MAAA,CAAA,MACHtB,EAAGkC,GAAG,OAAO,CAAC,EAAA,CAAAZ,EAAA,YAAA,OAAA,CAAA,MACXtB,EAAGkC,GAAG,OAAO,EAAC,MAAS5B,EAAWD,KAAK,EAAA,CACjDd,EAAMN,MAAQM,EAAMN,MAAO,EAAGD,EAAMC,KAAK,KAAAqC,EAAAA,YAAA,KAAA,CAAA,MAGnCtB,EAAGkC,GAAG,MAAM,GAAIjB,CAAAA,GAAgB,CAAA,CAAA,CAAA,CAGhD,CACH,CACF,CAAC"}